doublecmd-0.9.8/0000755000175000001440000000000013615241423012527 5ustar alexxusersdoublecmd-0.9.8/units-doc-win.txt0000644000175000001440000000042212014201074015754 0ustar alexxuserssrc\ufilelist.pas src\udcutils.pas src\platform\uOSUtils.pas src\platform\uosforms.pas src\uvfs.pas src\uexts.pas src\ufileprocs.pas src\udescr.pas src\platform\win\umywindows.pas src\platform\unix\umyunix.pas src\platform\unix\inotify.pp src\uvfsutil.pas src\uwcxmodule.pasdoublecmd-0.9.8/units-doc-unix.txt0000644000175000001440000000042212014201074016142 0ustar alexxuserssrc/ufilelist.pas src/udcutils.pas src/platform/uOSUtils.pas src/platform/uosforms.pas src/uvfs.pas src/uexts.pas src/ufileprocs.pas src/udescr.pas src/platform/win/umywindows.pas src/platform/unix/umyunix.pas src/platform/unix/inotify.pp src/uvfsutil.pas src/uwcxmodule.pasdoublecmd-0.9.8/units/0000755000175000001440000000000013615241423013671 5ustar alexxusersdoublecmd-0.9.8/units/x86_64-win64-win32/0000755000175000001440000000000013615241423016534 5ustar alexxusersdoublecmd-0.9.8/units/x86_64-linux-qt/0000755000175000001440000000000013615241423016406 5ustar alexxusersdoublecmd-0.9.8/units/x86_64-linux-gtk2/0000755000175000001440000000000013615241423016631 5ustar alexxusersdoublecmd-0.9.8/units/x86_64-darwin-qt/0000755000175000001440000000000013615241423016533 5ustar alexxusersdoublecmd-0.9.8/units/revision.inc0000644000175000001440000000007012651172634016225 0ustar alexxusers// Created by Svn2RevisionInc const RevisionStr = ''; doublecmd-0.9.8/units/i386-win32-win32/0000755000175000001440000000000013615241423016262 5ustar alexxusersdoublecmd-0.9.8/units/i386-linux-qt/0000755000175000001440000000000013615241423016141 5ustar alexxusersdoublecmd-0.9.8/units/i386-linux-gtk2/0000755000175000001440000000000013615241423016364 5ustar alexxusersdoublecmd-0.9.8/units/i386-darwin-carbon/0000755000175000001440000000000013615241423017106 5ustar alexxusersdoublecmd-0.9.8/units/dcrevision.inc0000644000175000001440000000007113615241423016527 0ustar alexxusers// Created by Svn2RevisionInc const dcRevision = '9296'; doublecmd-0.9.8/tools/0000755000175000001440000000000013615241423013667 5ustar alexxusersdoublecmd-0.9.8/tools/fsgenerator/0000755000175000001440000000000013615241423016206 5ustar alexxusersdoublecmd-0.9.8/tools/fsgenerator/fsgenerator.lpr0000644000175000001440000000637612046303231021251 0ustar alexxusers{ 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)) + ' '); 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-0.9.8/tools/fsgenerator/fsgenerator.lpi0000644000175000001440000000363012046303231021226 0ustar alexxusers doublecmd-0.9.8/tools/extractdwrflnfo.lpr0000755000175000001440000000440112045752321017624 0ustar alexxusers{ 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)) + ' '); 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-0.9.8/tools/extractdwrflnfo.lpi0000644000175000001440000000357212561625464017632 0ustar alexxusers doublecmd-0.9.8/src/0000755000175000001440000000000013615241423013316 5ustar alexxusersdoublecmd-0.9.8/src/uwlxprototypes.pas0000644000175000001440000000350513351704064017200 0ustar alexxusersunit 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-0.9.8/src/uwlxmodule.pas0000644000175000001440000005411313424360271016235 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- WLX-API implementation (TC WLX-API v2.0). Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uWlxModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, dynlibs, uDetectStr, uWlxPrototypes, WlxPlugin, DCClassesUtf8, uDCUtils, LCLProc, LCLType, DCXmlConfig {$IFDEF LCLWIN32} , 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} ; 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 GetCanPreview: Boolean; function GetCanPrint: Boolean; function GIsLoaded: Boolean; public Name: String; FileName: String; DetectStr: String; pShowFlags: Integer; 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 ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; property CanPreview: Boolean read GetCanPreview; property PluginWindow: HWND read FPluginWindow; 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 := DefWindowProc(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} procedure WlxPrepareContainer(var {%H-}ParentWin: HWND); begin {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} ParentWin := HWND(GetFixedWidget(Pointer(ParentWin))); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5)} ParentWin := HWND(TQtWidget(ParentWin).GetContainerWidget); {$ENDIF} end; { TWlxModule } function TWlxModule.GIsLoaded: Boolean; begin Result := FModuleHandle <> 0; end; function TWlxModule.GetCanPrint: Boolean; begin Result := Assigned(ListPrint) or Assigned(ListPrintW); end; function TWlxModule.GetCanPreview: Boolean; begin Result:= Assigned(ListGetPreviewBitmap) or Assigned(ListGetPreviewBitmapW); 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'); 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(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 Assigned(ListLoadW) then FPluginWindow := ListLoadW(ParentWin, PWideChar(UTF8Decode(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(SetWindowLongPtr(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} Result := FPluginWindow; end; function TWlxModule.CallListLoadNext(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): Integer; begin WlxPrepareContainer(ParentWin); if Assigned(ListLoadNextW) then Result := ListLoadNextW(ParentWin, FPluginWindow, PWideChar(UTF8Decode(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))); SetWindowLongPtr(GetParent(FPluginWindow), GWL_WNDPROC, LONG_PTR(RemovePropW(GetParent(FPluginWindow), WindowProcAtom))); {$ENDIF} if Assigned(ListCloseWindow) then ListCloseWindow(FPluginWindow) {$IF DEFINED(LCLWIN32)} else DestroyWindow(FPluginWindow) {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} else gtk_widget_destroy(PGtkWidget(FPluginWindow)); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5)} else QWidget_Destroy(QWidgetH(FPluginWindow)); {$ENDIF} finally FPluginWindow := 0; 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 := PAnsiChar(Result); end; end; function TWlxModule.CallListSearchText(SearchString: String; SearchParameter: Integer): Integer; begin if Assigned(ListSearchTextW) then Result := ListSearchTextW(FPluginWindow, PWideChar(UTF8Decode(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; FParser.DetectStr := Self.DetectStr; DCDebug('DetectStr = ' + FParser.DetectStr); DCDebug('AFileName = ' + AFileName); Result := FParser.TestFileResult(AFileName); end; procedure TWlxModule.SetFocus; begin {$IF DEFINED(LCLWIN32)} Windows.SetFocus(FPluginWindow); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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(LCLWIN32)} MoveWindow(FPluginWindow, Left, Top, Right - Left, Bottom - Top, True); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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); {$ENDIF} end; end; function TWlxModule.CallListPrint(FileToPrint, DefPrinter: String; PrintFlags: Integer; var Margins: trect): Integer; begin if Assigned(ListPrintW) then Result := ListPrintW(FPluginWindow, PWideChar(UTF8Decode(FileToPrint)), PWideChar(UTF8Decode(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(UTF8Decode(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-0.9.8/src/uwfxprototypes.pas0000644000175000001440000001237711740433676017211 0ustar alexxusersunit 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 :pchar;var FindData:tWIN32FINDDATA):thandle; {R} TFsFindNext=function(Hdl:thandle;var FindData:tWIN32FINDDATA):boolean; {R} TFsFindClose=function(Hdl:thandle):integer; { Optional } {R} TFsSetCryptCallback = procedure(pCryptProc:TCryptProc;CryptoNr,Flags:integer); {R} TFsMkDir = function(RemoteDir:pchar):boolean; {R} TFsGetFile = function(RemoteName,LocalName:pchar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {R} TFsPutFile=function(LocalName,RemoteName:pchar;CopyFlags:integer):integer; {R} TFsDeleteFile=function(RemoteName:pchar):boolean; {R} TFsRemoveDir=function(RemoteName:pchar):boolean; {R} TFsStatusInfo = procedure(RemoteDir:pchar;InfoStartEnd,InfoOperation:integer); {R} TFsSetDefaultParams = procedure (dps:pFsDefaultParamStruct); {R} TFsExecuteFile=Function(MainWin:HWND;RemoteName,Verb:pchar):integer; {R} TFsGetDefRootName=procedure (DefRootName:pchar;maxlen:integer); //------------------------------------------------------ {R} TFsSetAttr=function (RemoteName:pchar;NewAttr:integer):boolean; {R} TFsSetTime=Function(RemoteName:pchar;CreationTime,LastAccessTime,LastWriteTime:PWfxFileTime):boolean; {U} TFsExtractCustomIcon=function(RemoteName:pchar;ExtractFlags:integer;var TheIcon:hicon):integer; {R} TFsRenMovFile= function(OldName,NewName:pchar; Move, OverWrite:boolean; ri:pRemoteInfo):Integer; {U} TFsDisconnect = function (DisconnectRoot:pchar):boolean; {U} TFsGetPreviewBitmap = function ( RemoteName:pchar; width,height:integer; ReturnedBitmap:HBITMAP):integer; {R} TFsLinksToLocalFiles = function:boolean; {R} TFsGetLocalName = function (RemoteName:pchar;maxlen:integer):boolean; //------------------------------------------------------ TFsGetBackgroundFlags = function: integer; //------------------------------------------------------ {R} TFsContentPluginUnloading = procedure; {U} TFsContentGetDetectString = procedure (DetectString:pchar;maxlen:integer); {U} TFsContentGetSupportedField = function (FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {U} TFsContentGetValue = function (FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {U} TFsContentSetDefaultParams = procedure (dps:pContentDefaultParamStruct); {U} TFsContentStopGetValue = procedure (FileName:pchar); {U} TFsContentGetDefaultSortOrder = function (FieldIndex:integer):integer; {U} TFsContentGetSupportedFieldFlags = function (FieldIndex:integer):integer; {U} TFsContentSetValue = function (FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {U} TFsContentGetDefaultView = function (ViewContents,ViewHeaders,ViewWidths, ViewOptions:pchar;maxlen:integer):boolean; { 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-0.9.8/src/uwfxmodule.pas0000644000175000001440000007074213573160507016242 0ustar alexxusers{ 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 . } unit uWFXmodule; {$mode objfpc}{$H+} interface uses SysUtils, Classes, WfxPlugin, uWFXprototypes, LazUTF8Classes, dynlibs, DCClassesUtf8, Extension, DCBasicTypes, DCXmlConfig, uWdxPrototypes, uWdxModule; 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 FModuleFileName: String; 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; 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: TStringListUTF8; 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; 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; { 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(UTF8Decode(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(UTF8Decode(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; if Assigned(FsExecuteFileW) then begin pwcRemoteName:= GetMem(MAX_PATH * SizeOf(WideChar)); StrPCopyW(pwcRemoteName, UTF8Decode(RemoteName)); Result:= FsExecuteFileW(MainWin, pwcRemoteName, PWideChar(UTF8Decode(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(UTF8Decode(OldName)), PWideChar(UTF8Decode(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(UTF8Decode(RemoteName)), PWideChar(UTF8Decode(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(UTF8Decode(LocalName)), PWideChar(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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, UTF8Decode(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(UTF8Decode(DisconnectRoot))) else if Assigned(FsDisconnect) then Result:= FsDisconnect(PAnsiChar(CeUtf8ToSys(DisconnectRoot))) else Result:= False; 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); AHandle := mbLoadLibrary(mbExpandFileName(sName)); Result := AHandle <> NilHandle; if not Result then Exit; FModuleFileName:= sName; { 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 FillByte(StartupInfo, SizeOf(TExtensionStartupInfo), 0); with StartupInfo do begin StructSize:= SizeOf(TExtensionStartupInfo); PluginDir:= ExtractFilePath(mbExpandFileName(FModuleFileName)); PluginConfDir:= gpCfgDir; InputBox:= @fDialogBox.InputBox; MessageBox:= @fDialogBox.MessageBox; DialogBoxLFM:= @fDialogBox.DialogBoxLFM; DialogBoxLRS:= @fDialogBox.DialogBoxLRS; DialogBoxLFMFile:= @fDialogBox.DialogBoxLFMFile; SendDlgMsg:= @fDialogBox.SendDlgMsg; end; 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 := 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:= TStringListUTF8.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(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-0.9.8/src/uwdxprototypes.pas0000644000175000001440000000400711740433676017176 0ustar alexxusersunit 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-0.9.8/src/uwdxmodule.pas0000644000175000001440000011776313517262030016235 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- WDX-API implementation. (TC WDX-API v1.5) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2019 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 . } unit uWDXModule; {$mode delphi}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, dynlibs, //DC uLng, uWdxPrototypes, WdxPlugin, uDetectStr, lua, uFile, DCXmlConfig; const WDX_MAX_LEN = 2048; type { TWdxField } TWdxField = class FName: String; FUnits: String; FType: Integer; function GetUnitIndex(UnitName: String): Integer; end; { TWDXModule } TWDXModule = class private FFieldsList: TStringList; FParser: TParserControl; protected FMutex: TRTLCriticalSection; protected function GetAName: String; virtual; abstract; function GetAFileName: String; virtual; abstract; function GetADetectStr: String; virtual; abstract; procedure SetAName(AValue: String); virtual; abstract; procedure SetAFileName(AValue: String); virtual; abstract; procedure SetADetectStr(const 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 FModuleHandle: TLibHandle; // Handle to .DLL or .so FForce: Boolean; FName: String; FFileName: String; FDetectStr: String; protected function GetAName: String; override; function GetAFileName: String; override; function GetADetectStr: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; procedure SetADetectStr(const 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; FFileName: String; FDetectStr: String; protected function GetAName: String; override; function GetAFileName: String; override; function GetADetectStr: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; procedure SetADetectStr(const 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; function GetADetectStr: String; override; procedure SetAName({%H-}AValue: String); override; procedure SetAFileName({%H-}AValue: String); override; procedure SetADetectStr(const {%H-}AValue: String); override; protected procedure AddField(const AName: String; AType: Integer); public //--------------------- constructor Create; override; //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; 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. StrUtils, LazUTF8, FileUtil, //DC uComponentsSignature, uGlobs, uGlobsPaths, uDebug, uDCUtils, uOSUtils, DCBasicTypes, DCOSUtils, DCDateTimeUtils, DCConvertEncoding, uLuaPas; const WdxIniFileName = 'wdx.ini'; type TWdxModuleClass = class of TWdxModule; 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.GetADetectStr: String; begin Result := FDetectStr; end; function TPluginWDX.GetAName: String; begin Result := FName; end; function TPluginWDX.GetAFileName: String; begin Result := FFileName; end; procedure TPluginWDX.SetADetectStr(const AValue: String); begin FDetectStr := AValue; 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(UTF8Decode(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; I, 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); I := FFieldsList.AddObject(sFieldName, TWdxField.Create); with TWdxField(FFieldsList.Objects[I]) do begin FName := sFieldName; FUnits := xUnits; FType := Rez; end; end; Inc(Index); until (Rez <= ft_nomorefields); 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 := PAnsiChar(Result); end; end; function TPluginWDX.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; 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(UTF8Decode(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: Result := EncodeDate(fdate.wYear, fdate.wMonth, fdate.wDay); ft_time: Result := EncodeTime(ftime.wHour, ftime.wMinute, ftime.wSecond, 0); 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(UTF8Decode(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(UTF8Decode(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; function TLuaWdx.GetADetectStr: String; begin Result := FDetectStr; end; procedure TLuaWdx.SetAName(AValue: String); begin FName := AValue; end; procedure TLuaWdx.SetAFileName(AValue: String); begin FFileName := AValue; end; procedure TLuaWdx.SetADetectStr(const AValue: String); begin FDetectStr := 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(gLuaLib); //Todo вынести загрузку либы в VmClass end; function TLuaWdx.LoadModule: Boolean; var sAbsolutePathFilename: string; begin Result := False; if not IsLuaLibLoaded then exit; L := lua_open; if not Assigned(L) then exit; luaL_openlibs(L); RegisterPackages(L); sAbsolutePathFilename := mbExpandFileName(FFilename); DCDebug('FFilename=' + sAbsolutePathFilename); 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; 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(Self.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, tmp: 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 tmp := FFieldsList.AddObject(xFieldName, TWdxField.Create); TWdxField(FFieldsList.Objects[tmp]).FName := xFieldName; TWdxField(FFieldsList.Objects[tmp]).FUnits := xUnits; TWdxField(FFieldsList.Objects[tmp]).FType := Rez; end; Inc(Index); until Rez = ft_nomorefields; 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); 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); 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; function TEmbeddedWDX.GetADetectStr: String; begin Result:= EmptyStr; end; procedure TEmbeddedWDX.SetAName(AValue: String); begin end; procedure TEmbeddedWDX.SetAFileName(AValue: String); begin end; procedure TEmbeddedWDX.SetADetectStr(const AValue: String); begin end; procedure TEmbeddedWDX.AddField(const AName: String; AType: Integer); var I: Integer; begin I := FFieldsList.AddObject(AName, TWdxField.Create); with TWdxField(FFieldsList.Objects[I]) do begin FName := AName; 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; { TWDXModule } 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 FParser.DetectStr := Self.DetectStr; 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 sUnits: String; begin Result := -1; sUnits := FUnits; while sUnits <> EmptyStr do begin Inc(Result); if SameText(UnitName, Copy2SymbDel(sUnits, '|')) then Exit; end; Result := 0; end; end. doublecmd-0.9.8/src/uwcxprototypes.pas0000644000175000001440000000516211740433676017200 0ustar alexxusersunit 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-0.9.8/src/uwcxmodule.pas0000644000175000001440000007024513573160507016235 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Archive File support - class for manage WCX plugins (Version 2.20) 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 uWCXmodule; {$mode objfpc}{$H+} {$include calling.inc} interface uses LCLType, Classes, Dialogs, LazUTF8Classes, dynlibs, SysUtils, uWCXprototypes, WcxPlugin, Extension, DCClassesUtf8, DCBasicTypes, DCXmlConfig; 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 private function PCharLToUTF8(CharString: PChar; MaxSize: Integer): String; public ArcName: String; FileName: String; Flags, HostOS, FileCRC, FileTime, UnpVer, Method: Longint; FileAttr: TFileAttrs; PackSize, UnpSize: Int64; Cmt: String; CmtState: Longint; 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 end; { TWcxModule } TWcxModule = class private FModuleHandle: TLibHandle; // Handle to .DLL or .so 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 BackgroundFlags: Integer read FBackgroundFlags write FBackgroundFlags; end; { TWCXModuleList } TWCXModuleList = class(TStringList) private FModuleList: TStringListUTF8; 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, 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, UTF8Decode(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; 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 := UTF8Decode(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(UTF8Decode(DestName))) else Result:= ProcessFileW(hArcData, Operation, PWideChar(UTF8Decode(DestPath)), PWideChar(UTF8Decode(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(UTF8Decode(PackedFile)), nil, PWideChar(UTF8Decode(SrcPath)), PWideChar(UTF8Decode(AddList)), Flags) else Result:= PackFilesW(PWideChar(UTF8Decode(PackedFile)), PWideChar(UTF8Decode(SubPath)), PWideChar(UTF8Decode(SrcPath)), PWideChar(UTF8Decode(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(UTF8Decode(PackedFile)), PWideChar(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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 PackDefaultParamStruct : TPackDefaultParamStruct; StartupInfo: TExtensionStartupInfo; begin FModuleHandle := mbLoadLibrary(mbExpandFileName(sName)); 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 FillByte(StartupInfo, SizeOf(TExtensionStartupInfo), 0); with StartupInfo do begin StructSize:= SizeOf(TExtensionStartupInfo); PluginDir:= ExtractFilePath(mbExpandFileName(sName)); PluginConfDir:= gpCfgDir; InputBox:= @fDialogBox.InputBox; MessageBox:= @fDialogBox.MessageBox; DialogBoxLFM:= @fDialogBox.DialogBoxLFM; DialogBoxLRS:= @fDialogBox.DialogBoxLRS; DialogBoxLFMFile:= @fDialogBox.DialogBoxLFMFile; SendDlgMsg:= @fDialogBox.SendDlgMsg; end; 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(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:= TStringListUTF8.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; end; constructor TWCXHeader.Create; begin 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; end. doublecmd-0.9.8/src/uvfsmodule.pas0000644000175000001440000000501012616350071016210 0ustar alexxusersunit 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-0.9.8/src/uvariablemenusupport.pas0000644000175000001440000002673713127051402020330 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Support for popup menu to help to enter variable parameters. Copyright (C) 2015-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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uVariableMenuSupport; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, Menus, StdCtrls, //DC dmHelpManager; type TSupportForVariableHelperMenu = class(TObject) public constructor Create; destructor Destroy; override; procedure PopulateMenuWithVariableHelper(pmToPopulate: TComponent; ParamAssociatedComponent: TComponent); end; TVariableMenuItem = class(TMenuItem) private FAssociatedTComponent: TComponent; FSubstitutionText: string; public constructor MyCreate(TheOwner: TComponent; ParamTComponent: TComponent; ParamCaption, ParamSubstitutionText: string); procedure VariableHelperClick(Sender: TObject); procedure HelpOnVariablesClick(Sender: TObject); end; procedure LoadVariableMenuSupport; implementation uses //Lazarus, Free-Pascal, etc. SysUtils, Dialogs, //DC uGlobs, uLng; procedure LoadVariableMenuSupport; begin gSupportForVariableHelperMenu := TSupportForVariableHelperMenu.Create; end; { TVariableMenuItem.MyCreate } constructor TVariableMenuItem.MyCreate(TheOwner: TComponent; ParamTComponent: TComponent; ParamCaption, ParamSubstitutionText: string); begin inherited Create(TheOwner); Caption := ParamCaption; if ParamCaption <> rsVarHelpWith then begin if ParamSubstitutionText <> '' then begin FAssociatedTComponent := ParamTComponent; 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 procedure TVariableMenuItem.VariableHelperClick(Sender: TObject); begin TCustomEdit(FAssociatedTComponent).SelText := FSubstitutionText; end; { TVariableMenuItem.HelpOnVariablesClick } procedure TVariableMenuItem.HelpOnVariablesClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/variables.html'); end; { TSupportForVariableHelperMenu.Create } constructor TSupportForVariableHelperMenu.Create; begin inherited Create; end; { TSupportForVariableHelperMenu.Destroy } destructor TSupportForVariableHelperMenu.Destroy; begin inherited Destroy; end; { TSupportForVariableHelperMenu.PopulateMenuWithVariableHelper } procedure TSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmToPopulate: TComponent; ParamAssociatedComponent: TComponent); 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 = 10; FunctionHelper: array[1..NbOfFunctions] of tFunctionHelper = ( (sLetter: 'f'; sDescription: rsVarOnlyFilename; HelperMenuDispatcher: []), (sLetter: 'd'; sDescription: rsVarPath; 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: [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(pmToPopulate, nil, '-', ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); end; procedure InsertSeparatorInSubMenu; begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, nil, '-', ''); miMainTree.Add(miSubTree); end; procedure InsertSeparatorInSubListMenu; begin miSubTree := TVariableMenuItem.MyCreate(miSubListTree, nil, '-', ''); miSubListTree.Add(miSubTree); end; begin //Add the automatic helper for iFunction := 1 to NbOfFunctions do begin miMainTree := TVariableMenuItem.MyCreate(pmToPopulate, nil, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, '%' + FunctionHelper[iFunction].sLetter); miMainTree.Add(miSubTree); InsertSeparatorInSubMenu; for iSubLevel := 1 to NbOfSubLevel do begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, '%' + 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(miMainTree, ParamAssociatedComponent, '%' +FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter + ' - ' + '...' + SubListLevelHelper[iSubListLevel].sDescription + '...', ''); miMainTree.Add(miSubListTree); miSubTree := TVariableMenuItem.MyCreate(miSubListTree, ParamAssociatedComponent, '%' +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(miSubListTree, ParamAssociatedComponent, '%' +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(pmToPopulate, nil, rsVarOtherExamples, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); for iSubLevel := 1 to NbOfSubLevelExamples do begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, 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(pmToPopulate, nil, rsVarHelpWith, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); end; end. doublecmd-0.9.8/src/utypes.pas0000644000175000001440000000344313377666635015405 0ustar alexxusers{ 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 . } 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-0.9.8/src/utranslator.pas0000644000175000001440000000456613300617307016413 0ustar alexxusers{ 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; 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-0.9.8/src/uthumbnails.pas0000644000175000001440000002662013517017054016366 0ustar alexxusersunit 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; { 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 procedure RegisterProvider(Provider: TCreatePreviewHandler); class function GetPreviewScaleSize(aWidth, aHeight: Integer): TSize; end; implementation uses FileUtil, LazFileUtils, Forms, uDebug, DCOSUtils, uFileProcs, DCStrUtils, uReSample, uGlobsPaths, uGlobs, uPixmapManager, URIParser, md5, uFileSystemFileSource, uGraphics; 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 Y: Int32; sStr: String; tFile: THandle; LastLine: Boolean; begin FBitmap:= TBitmap.Create; with FBitmap do begin SetSize(gThumbSize.cx, gThumbSize.cy); Canvas.Brush.Color:= clWhite; Canvas.FillRect(Canvas.ClipRect); Canvas.Font.Color:= clBlack; Canvas.Font.Size := gThumbSize.cy div 16; tFile:= mbFileOpen(FFileName, fmOpenRead or fmShareDenyNone); if (tFile <> feInvalidHandle) then begin Y:= 0; repeat LastLine := not FileReadLn(tFile, sStr); Canvas.TextOut(0, Y, sStr); Y += Canvas.TextHeight(sStr) + 2; until (Y >= gThumbSize.cy) or LastLine; FileClose(tFile); 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 procedure TThumbnailManager.RegisterProvider(Provider: TCreatePreviewHandler); begin SetLength(FProviderList, Length(FProviderList) + 1); FProviderList[High(FProviderList)]:= Provider; 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; end. doublecmd-0.9.8/src/usyndiffcontrols.pas0000644000175000001440000004206113257651044017447 0ustar alexxusersunit uSynDiffControls; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, SynEdit, SynEditMiscClasses, SynGutterBase, SynTextDrawer, SynEditTextBuffer, LazSynEditText, uDiffOND; const { Default differ colors } clPaleGreen: TColor = $AAFFAA; clPaleRed : TColor = $AAAAFF; clPaleBlue : TColor = $FFAAAA; type TPaintStyle = (psForeground, psBackground); 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; { TSynDiffGutterLineNumber } TSynDiffGutterLineNumber = class(TSynGutterPartBase) private FTextDrawer: TheTextDrawer; 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); 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) private FColors: TDiffColors; protected function PreferedWidth: Integer; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); override; published property Colors: TDiffColors read FColors write FColors; end; { TSynDiffEdit } TSynDiffEdit = class(TCustomSynEdit) 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 procedure SpecialLineMarkupEvent(Sender: TObject; Line: Integer; var Special: boolean; AMarkup: TSynSelectedColor); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; public 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 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; 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; { 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; 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); if not(csLoading in AOwner.ComponentState) then begin Gutter.Parts.Clear; with TSynDiffGutterLineNumber.Create(Gutter.Parts) do Name:= 'SynDiffGutterLineNumber'; with TSynDiffGutterChanges.Create(Gutter.Parts) do Name:= 'SynDiffGutterChanges'; end; FPaintStyle:= psBackground; FColors:= TDiffColors.Create; OnSpecialLineMarkup:= @SpecialLineMarkupEvent; end; destructor TSynDiffEdit.Destroy; begin if Assigned(FColors) then FreeAndNil(FColors); inherited Destroy; end; { TSynDiffGutterChanges } function TSynDiffGutterChanges.PreferedWidth: Integer; begin Result := 4; end; constructor TSynDiffGutterChanges.Create(AOwner: TComponent); begin inherited Create(AOwner); FColors:= TDiffColors.Create; MarkupInfo.Background := clNone; end; destructor TSynDiffGutterChanges.Destroy; begin if Assigned(FColors) then FreeAndNil(FColors); inherited Destroy; end; procedure TSynDiffGutterChanges.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); var rcLine: TRect; LineHeight: Integer; I, LineNumber: Integer; SynDiffEdit: TSynDiffEdit; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight := SynDiffEdit.LineHeight; if MarkupInfo.Background <> clNone then begin Canvas.Brush.Color := MarkupInfo.Background; Canvas.FillRect(AClip); end; Canvas.Pen.Width := Width; Canvas.Pen.EndCap:= pecFlat; rcLine := AClip; rcLine.Left := rcLine.Left + Width div 2; rcLine.Bottom := FirstLine * LineHeight; for I := FirstLine to LastLine do begin LineNumber := FoldView.TextIndex[I]; // next line rect rcLine.Top := rcLine.Bottom; Inc(rcLine.Bottom, LineHeight); if (LineNumber >= 0) and (LineNumber < SynDiffEdit.Lines.Count) then begin case SynDiffEdit.Lines.Kind[LineNumber] of ckNone: Continue; ckAdd: Canvas.Pen.Color := FColors.Added; ckDelete: Canvas.Pen.Color := FColors.Deleted; ckModify: Canvas.Pen.Color := FColors.Modified; end; Canvas.Line(rcLine.Left, rcLine.Top + 1, rcLine.Left, rcLine.Bottom - 1); end; end; 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 TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged); LineCountChanged(nil, 0, 0); end; procedure TSynDiffGutterLineNumber.FontChanged(Sender: TObject); begin DoAutoSize; end; procedure TSynDiffGutterLineNumber.Init; begin inherited Init; FTextDrawer := Gutter.TextDrawer; TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged); FTextDrawer.RegisterOnFontChangeHandler(@FontChanged); 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 TSynEditStringList(TextBuffer).RemoveHanlders(Self); FTextDrawer.UnRegisterOnFontChangeHandler(@FontChanged); 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 DC: HDC; S: String; rcLine: TRect; LineNumber: PtrInt; LineKind: TChangeKind; I, LineHeight: Integer; SynDiffEdit: TSynDiffEdit; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight := SynDiffEdit.LineHeight; // 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 MarkupInfo.Background <> clNone then Canvas.Brush.Color := MarkupInfo.Background else Canvas.Brush.Color := Gutter.Color; DC := Canvas.Handle; {$PUSH}{$R-} LCLIntf.SetBkColor(DC, Canvas.Brush.Color); {$POP} FTextDrawer.BeginDrawing(DC); try if MarkupInfo.Background <> clNone then FTextDrawer.SetBackColor(MarkupInfo.Background) else FTextDrawer.SetBackColor(Gutter.Color); if MarkupInfo.Foreground <> clNone then fTextDrawer.SetForeColor(MarkupInfo.Foreground) else fTextDrawer.SetForeColor(SynDiffEdit.Font.Color); fTextDrawer.SetFrameColor(MarkupInfo.FrameColor); fTextDrawer.Style := MarkupInfo.Style; // prepare the rect initially rcLine := AClip; rcLine.Bottom := FirstLine * LineHeight; for I := FirstLine to LastLine do begin LineNumber := FoldView.DisplayNumber[I]; 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); // 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 fTextDrawer.EndDrawing; 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.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-0.9.8/src/uspecialdir.pas0000644000175000001440000006541213123535412016335 0ustar alexxusers{ 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, {$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).DispatcherWeight2 then begin if Weight1'-') 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 IndexVariableSubWorkingPath 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; {$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_MYVIDEO,'%$MYVIDEO%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYPICTURES,'%$MYPICTURES%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_PROGRAMS,'%$PROGRAMS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTMENU,'%$STARTMENU%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTUP,'%$STARTUP%',sd_WINDOWSTC); //These ones are new ones non-compatible on 2014-05-21 with Total Commander IndexOfNewVariableNotInTC:=count; GetAndStoreSpecialDirInfos(CSIDL_INTERNET,'%$INTERNET%',sd_WINDOWSNONTC); //{ Internet Explorer (icon on desktop) } GetAndStoreSpecialDirInfos(CSIDL_CONTROLS,'%$CONTROLS%',sd_WINDOWSNONTC); //{ My Computer\Control Panel } GetAndStoreSpecialDirInfos(CSIDL_PRINTERS,'%$PRINTERS%',sd_WINDOWSNONTC); //{ My Computer\Printers } GetAndStoreSpecialDirInfos(CSIDL_PERSONAL,'%$PERSONALXP%',sd_WINDOWSNONTC); //{ My Documents. This is equivalent to CSIDL_MYDOCUMENTS in XP and above } GetAndStoreSpecialDirInfos(CSIDL_FAVORITES,'%$FAVORITES%',sd_WINDOWSNONTC); //{ \Favorites } GetAndStoreSpecialDirInfos(CSIDL_RECENT,'%$RECENT%',sd_WINDOWSNONTC); //{ \Recent } GetAndStoreSpecialDirInfos(CSIDL_SENDTO,'%$SENDTO%',sd_WINDOWSNONTC); //{ \SendTo } GetAndStoreSpecialDirInfos(CSIDL_BITBUCKET,'%$BITBUCKET%',sd_WINDOWSNONTC); //{ \Recycle Bin } GetAndStoreSpecialDirInfos(CSIDL_DESKTOPDIRECTORY,'%$DESKTOPDIRECTORY%',sd_WINDOWSNONTC); //{ \Desktop } GetAndStoreSpecialDirInfos(CSIDL_DRIVES,'%$DRIVES%',sd_WINDOWSNONTC); //{ My Computer } GetAndStoreSpecialDirInfos(CSIDL_NETWORK,'%$NETWORK%',sd_WINDOWSNONTC); //{ Network Neighborhood (My Network Places) } GetAndStoreSpecialDirInfos(CSIDL_NETHOOD,'%$NETHOOD%',sd_WINDOWSNONTC); //{ \nethood } GetAndStoreSpecialDirInfos(CSIDL_TEMPLATES,'%$TEMPLATES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_PRINTHOOD,'%$PRINTHOOD%',sd_WINDOWSNONTC); //{ \PrintHood } GetAndStoreSpecialDirInfos(CSIDL_ALTSTARTUP,'%$ALTSTARTUP%',sd_WINDOWSNONTC); //{ non localized startup } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ALTSTARTUP,'%$COMMON_ALTSTARTUP%',sd_WINDOWSNONTC); // { non localized common startup } GetAndStoreSpecialDirInfos(CSIDL_COMMON_FAVORITES,'%$COMMON_FAVORITES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_INTERNET_CACHE,'%$INTERNET_CACHE%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_COOKIES,'%$COOKIES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_HISTORY,'%$HISTORY%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_WINDOWS,'%$WINDOWS%',sd_WINDOWSNONTC); // { GetWindowsDirectory() } GetAndStoreSpecialDirInfos(CSIDL_SYSTEM,'%$SYSTEM%',sd_WINDOWSNONTC); // { GetSystemDirectory() } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES,'%$PROGRAM_FILES%',sd_WINDOWSNONTC); // { C:\Program Files } GetAndStoreSpecialDirInfos(CSIDL_PROFILE,'%$PROFILE%',sd_WINDOWSNONTC); // { USERPROFILE } GetAndStoreSpecialDirInfos(CSIDL_SYSTEMX86,'%$SYSTEMX86%',sd_WINDOWSNONTC); //{ x86 system directory on RISC } 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_COMMON_TEMPLATES,'%$COMMON_TEMPLATES%',sd_WINDOWSNONTC); // { All Users\Templates } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ADMINTOOLS,'%$COMMON_ADMINTOOLS%',sd_WINDOWSNONTC); // { All Users\Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_ADMINTOOLS,'%$ADMINTOOLS%',sd_WINDOWSNONTC); // { \Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_CONNECTIONS,'%$CONNECTIONS%',sd_WINDOWSNONTC); // { Network and Dial-up Connections } GetAndStoreSpecialDirInfos(CSIDL_COMMON_MUSIC,'%$COMMON_MUSIC%',sd_WINDOWSNONTC); // { All Users\My Music } GetAndStoreSpecialDirInfos(CSIDL_COMMON_VIDEO,'%$COMMON_VIDEO%',sd_WINDOWSNONTC); // { All Users\My Video } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES,'%$RESOURCES%',sd_WINDOWSNONTC); // { Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES_LOCALIZED,'%$RESOURCES_LOCALIZED%',sd_WINDOWSNONTC); // { Localized Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_COMMON_OEM_LINKS,'%$COMMON_OEM_LINKS%',sd_WINDOWSNONTC); // { Links to All Users OEM specific apps } GetAndStoreSpecialDirInfos(CSIDL_CDBURN_AREA,'%$CDBURN_AREA%',sd_WINDOWSNONTC); // { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning } GetAndStoreSpecialDirInfos(CSIDL_COMPUTERSNEARME,'%$COMPUTERSNEARME%',sd_WINDOWSNONTC); // { Computers Near Me (computered from Workgroup membership) } //GetAndStoreSpecialDirInfos(CSIDL_PROFILES,'%PROFILES%'); //Does not work everywhere, let's remove it. {$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-0.9.8/src/ushowform.pas0000644000175000001440000007024113517264563016073 0ustar alexxusers{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz showing editor or viewer by configuration dialog contributors: Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) } 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; 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, uShellExecute, uGlobs, uOSUtils, fEditor, fViewer, uDCUtils, uTempFileSystemFileSource, uLng, fDiffer, uDebug, DCOSUtils, uShowMsg, DCStrUtils, uFileSourceProperty, uWfxPluginCopyOutOperation, uFileSourceOperationOptions, uOperationsManager, uFileSourceOperationTypes, uMultiArchiveFileSource, fFileExecuteYourSelf, uFileProcs; 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 paramter. if pos('%p',sParams)=0 then sParams := ConcatenateStrWithSpace(sParams,QuoteFilenameIfNecessary(sFileName)); 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 sParams := sParams + ' ' + Parameters; 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 DCDebug('ShowViewerByGlobList - Use ExtView'); 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 Msg: string; I: Integer; Operation: TFileSourceCopyOperation; DoNotFreeYet: Boolean = False; begin try for I := Files.Count - 1 downto 0 do if (mbFileAge(Files[I].FullPath) = FileTimes[I]) or not msgYesNo(Format(rsMsgCopyBackward, [GetRelativeFileName(Files[I].FullPath)]) + LineEnding + LineEnding + GetFromPath) then Files.Delete(I); // 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; { 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); 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-0.9.8/src/ushellexecute.pas0000644000175000001440000011421713372346203016712 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains some functions for open files in associated applications. Copyright (C) 2006-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 uShellExecute; {$mode objfpc}{$H+} interface uses Classes, uFile, uFileView, fMain; type TPrepareParameterOption = (ppoNormalizePathDelims, ppoReplaceTilde); TPrepareParameterOptions = set of TPrepareParameterOption; 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, //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 %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 %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[] - where X is function is 1..n, where n is number of selected files. Also can be 0, file under cursor is used in this case. If there are no selected files, currently active file is nr 1. If 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[{}][{}] 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 -f ) %f{"}{"} - enclose each name in quotes (ex.: "" "") %f1{-first }%f2{ -second } - if only 1 file selected : -first - if 2 (or more) files selected: -first -second *) function ReplaceVarParams(sSourceStr: string; paramFile: TFile; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean; pbAbortOperation: PBoolean = nil): string; type TFunctType = (ftNone, ftName, ftDir, ftPath, ftSingleDir, 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, ftPath, ftNameNoExt, ftExtension, ftRelativePath, ftSingleDir, ftSource, ftSourcePath: begin case state.funct of ftName: Result := aFile.Name; ftDir: Result := 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; 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, ftSingleDir: 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 := UTF8ToSys(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) + '.tmp'; //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, ftNameNoExt, ftSourcePath, ftExtension, ftRelativePath] then sOutput := sOutput + BuildAllNames else if state.funct in [ftSingleDir, 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: state.pos := spComplete; // Numbers not allowed for %D 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; '%', '#': begin state.funct := ftProcessPercentSignIndicator; state.sSubParam := sSourceStr[index]; state.pos := spComplete; Inc(Index); end; 'f', 'd', 'p', 'o', 'e', 'v', 'D', 'A', 'a', 'n', 'h', '/', '"', 't': begin case sSourceStr[index] of 'f': state.funct := ftName; 'd': state.funct := ftDir; 'p': state.funct := ftPath; 'o': state.funct := ftNameNoExt; 'e': state.funct := ftExtension; 'v': state.funct := ftRelativePath; 'D': state.funct := ftSingleDir; '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; { 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 sTmpFile, sShellCmdLine: string; iStart, iCount: integer; iLastConsoleCommandPos: integer = 0; Process: TProcessUTF8; 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]); // 2. If working directory has been specified, let's switch to it. if not bAbortOperationFlag then begin 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 ''. // The whole expression is replaced with a path to the temporary file // containing output of the command. // For example: // {!VIEWER} // Show in Viewer information about RPM package repeat iStart := Posex('', sParams, iStart) - iStart; if (iStart <> 0) and (iCount >= 0) then begin sTmpFile := GetTempName(GetTempFolderDeletableAtTheEnd) + '.tmp'; sShellCmdLine := Copy(sParams, iStart, iCount) + ' > ' + QuoteStr(sTmpFile); Process := TProcessUTF8.Create(nil); try Process.CommandLine := FormatShell(sShellCmdLine); 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)); //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-0.9.8/src/usearchtemplate.pas0000644000175000001440000003213113301614265017211 0ustar alexxusers{ 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 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', ''); HexValue:= AConfig.GetValue(ANode, 'HexValue', False); CaseSensitive:= AConfig.GetValue(ANode, 'CaseSensitive', False); NotContainingText:= AConfig.GetValue(ANode, 'NotContainingText', False); TextRegExp:= AConfig.GetValue(ANode, 'TextRegExp', False); TextEncoding:= AConfig.GetValue(ANode, 'TextEncoding', ''); if TextEncoding = 'UTF-8BOM' then TextEncoding:= 'UTF-8'; // 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); 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); // 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-0.9.8/src/usearchcontent.pas0000644000175000001440000002274413423047531017062 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Content plugin search control 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, see . } unit uSearchContent; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, ExtCtrls, uFindFiles; type { TPluginPanel } TPluginPanel = class(TPanel) private FPlugin, FField, FOperator, FValue, FUnit: 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); 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, StrUtils, WdxPlugin, uGlobs, uWDXModule, Graphics, uShowMsg; { TPluginPanel } function TPluginPanel.GetCompare: TPluginOperator; begin Result:= TPluginOperator(PtrInt(FOperator.Items.Objects[FOperator.ItemIndex])); end; function TPluginPanel.GetField: String; begin Result:= FField.Text; end; function TPluginPanel.GetFieldType: Integer; begin Result:= PtrInt(FField.Items.Objects[FField.ItemIndex]); end; function TPluginPanel.GetPlugin: String; begin Result:= FPlugin.Text; end; function TPluginPanel.GetUnitName: String; begin Result:= FUnit.Text; end; function TPluginPanel.GetValue: Variant; begin Result:= StrToVar(FValue.Text, PtrInt(FField.Items.Objects[FField.ItemIndex])); end; procedure TPluginPanel.PluginChange(Sender: TObject); var I: Integer; Module: TWDXModule; begin if FPlugin.ItemIndex < 0 then Exit; FField.Clear; Module:= gWdxPlugins.GetWdxModule(FPlugin.Text); if Assigned(Module) then for I:= 0 to Module.FieldList.Count - 1 do begin FField.Items.AddObject(Module.FieldList[I], TObject(PtrInt(TWdxField(Module.FieldList.Objects[I]).FType))); end; if FField.Items.Count > 0 then begin FField.ItemIndex:= 0; FieldChange(FField); end; end; procedure TPluginPanel.FieldChange(Sender: TObject); var I, J: Integer; sUnits: String; Module: TWDXModule; begin FUnit.Items.Clear; FValue.Items.Clear; FOperator.Items.Clear; Module:= gWdxPlugins.GetWdxModule(FPlugin.Text); J:= Module.GetFieldIndex(FField.Text); if J < 0 then Exit; I:= TWdxField(Module.FieldList.Objects[J]).FType; if (I <> FT_MULTIPLECHOICE) then begin sUnits:= TWdxField(Module.FieldList.Objects[J]).FUnits; while sUnits <> EmptyStr do FUnit.Items.Add(Copy2SymbDel(sUnits, '|')); end; FUnit.Enabled := (I <> FT_MULTIPLECHOICE) AND (FUnit.Items.Count > 0); if FUnit.Enabled then FUnit.ItemIndex:= 0; case I of FT_NUMERIC_32, FT_NUMERIC_64, FT_NUMERIC_FLOATING, FT_DATE, FT_TIME, FT_DATETIME: begin FValue.Style:= csDropDown; FOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); FOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqualCaseSensitive))); FOperator.Items.AddObject('>', TObject(PtrInt(poMore))); FOperator.Items.AddObject('<', TObject(PtrInt(poLess))); FOperator.Items.AddObject('>=', TObject(PtrInt(poMoreEqual))); FOperator.Items.AddObject('<=', TObject(PtrInt(poLessEqual))); end; FT_BOOLEAN: begin FValue.Items.Add(rsSimpleWordTrue); FValue.Items.Add(rsSimpleWordFalse); FValue.ItemIndex:= 0; FValue.Style:= csDropDownList; FOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); end; FT_MULTIPLECHOICE: begin begin FValue.Style:= csDropDownList; FOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); FOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqualCaseSensitive))); sUnits:= TWdxField(Module.FieldList.Objects[J]).FUnits; while sUnits <> EmptyStr do begin FValue.Items.Add(Copy2SymbDel(sUnits, '|')); end; if FValue.Items.Count > 0 then FValue.ItemIndex:= 0; end; end; FT_STRING, FT_STRINGW: begin FValue.Style:= csDropDown; FOperator.Items.AddObject(rsPluginSearchEqualNotCase, TObject(PtrInt(poEqualCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchNotEqualNotCase, TObject(PtrInt(poNotEqualCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchEqualCaseSensitive, TObject(PtrInt(poEqualCaseSensitive))); FOperator.Items.AddObject(rsPluginSearchNotEquaCaseSensitive, TObject(PtrInt(poNotEqualCaseSensitive))); FOperator.Items.AddObject(rsPluginSearchContainsNotCase, TObject(PtrInt(poContainsCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchNotContainsNotCase, TObject(PtrInt(poNotContainsCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchContainsCaseSenstive, TObject(PtrInt(poContainsCaseSensitive))); FOperator.Items.AddObject(rsPluginSearchNotContainsCaseSenstive, TObject(PtrInt(poNotContainsCaseSensitive))); FOperator.Items.AddObject(rsPluginSearchRegExpr, TObject(PtrInt(poRegExpr))); FOperator.Items.AddObject(rsPluginSearchNotRegExpr, TObject(PtrInt(poNotRegExpr))); end; FT_FULLTEXT, FT_FULLTEXTW: begin FValue.Style:= csDropDown; FOperator.Items.AddObject(rsPluginSearchContainsNotCase, TObject(PtrInt(poContainsCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchNotContainsNotCase, TObject(PtrInt(poNotContainsCaseInsensitive))); FOperator.Items.AddObject(rsPluginSearchContainsCaseSenstive, TObject(PtrInt(poContainsCaseSensitive))); FOperator.Items.AddObject(rsPluginSearchNotContainsCaseSenstive, TObject(PtrInt(poNotContainsCaseSensitive))); end; end; if FOperator.Items.Count > 0 then FOperator.ItemIndex:= 0; end; procedure TPluginPanel.SetCompare(AValue: TPluginOperator); var Index: Integer; begin Index:= FOperator.Items.IndexOfObject(TObject(PtrInt(AValue))); if Index >= 0 then FOperator.ItemIndex:= Index; end; procedure TPluginPanel.SetField(AValue: String); begin SetComboBox(FField, AValue, Format(rsPluginSearchFieldNotFound, [AValue])); end; procedure TPluginPanel.SetPlugin(AValue: String); begin SetComboBox(FPlugin, AValue, Format(rsPluginSearchPluginNotFound, [AValue])); end; procedure TPluginPanel.SetUnitName(AValue: String); begin if FUnit.Enabled then SetComboBox(FUnit, AValue, Format(rsPluginSearchUnitNotFoundForField, [AValue, Self.Field])); end; procedure TPluginPanel.SetValue(AValue: Variant); begin if not VarIsBool(AValue) then FValue.Text := AValue else if AValue then FValue.Text := rsSimpleWordTrue else FValue.Text := rsSimpleWordFalse; 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; 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; FPlugin:= TComboBox.Create(Self); FPlugin.Parent:= Self; FPlugin.Style:= csDropDownList; FPlugin.OnChange:= @PluginChange; FField:= TComboBox.Create(Self); FField.Parent:= Self; FField.Style:= csDropDownList; FField.OnChange:= @FieldChange; FOperator:= TComboBox.Create(Self); FOperator.Parent:= Self; FOperator.Style:= csDropDownList; FValue:= TComboBox.Create(Self); FValue.Parent:= Self; FUnit:= TComboBox.Create(Self); FUnit.Style:= csDropDownList; FUnit.Parent:= Self; for I:= 0 to gWDXPlugins.Count - 1do begin if gWdxPlugins.GetWdxModule(I).IsLoaded or gWdxPlugins.GetWdxModule(I).LoadModule then begin FPlugin.Items.Add(gWdxPlugins.GetWdxModule(I).Name); end; end; if FPlugin.Items.Count > 0 then begin FPlugin.ItemIndex:= 0; PluginChange(FPlugin); end; end; destructor TPluginPanel.Destroy; begin FPlugin.Free; FField.Free; FOperator.Free; FValue.Free; FUnit.Free; inherited Destroy; end; end. doublecmd-0.9.8/src/uresample.pas0000644000175000001440000004776513467737150016057 0ustar alexxusers// ----------------------------------------------------------------------------- // 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 // ----------------------------------------------------------------------------- // 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-0.9.8/src/uregexprw.pas0000644000175000001440000000017713333633360016062 0ustar alexxusers{$define unicode} {$macro on} {$define uRegExprA := uRegExprW} {$define TRegExpr := TRegExprW} {$include uregexpra.pas} doublecmd-0.9.8/src/uregexpra.pas0000644000175000001440000045063613336101751016042 0ustar alexxusersunit 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 http://RegExpStudio.com mailto:anso@mail.ru 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. mailto:anso@mail.ru http://RegExpStudio.com http://anso.da.ru/ Option 2> The same modified LGPL with static linking exception as the Free Pascal RTL } interface {off $DEFINE DebugSynRegExpr} {$DEFINE UnicodeWordDetection} {$MODE DELPHI} // Delphi-compatible mode in FreePascal {$INLINE ON} // ======== Define base compiler options {$BOOLEVAL OFF} {$EXTENDEDSYNTAX ON} {$LONGSTRINGS ON} // ======== Define options for TRegExpr engine {.$DEFINE UniCode} // Unicode support //{$ifdef FPC_OS_UNICODE} // {$define UNICODE} //{$endif} {$DEFINE RegExpPCodeDump} // p-code dumping (see Dump method) {$DEFINE ComplexBraces} // support braces in complex cases {$IFNDEF UniCode} // the option applicable only for non-UniCode mode {$IFNDEF FPC_REQUIRES_PROPER_ALIGNMENT} //sets have to be aligned {$DEFINE UseSetOfChar} // Significant optimization by using set of char {$ENDIF} {$ENDIF} {$IFDEF UseSetOfChar} {$DEFINE UseFirstCharSet} // Fast skip between matches for r.e. that starts with determined set of chars {$ENDIF} {$DEFINE UseOsLineEndOnReplace} // On Replace if replace-with has "\n", use System.LineEnding (#10 #13 or #13#10); else use #10 {$IFNDEF UNICODE} {$UNDEF UnicodeWordDetection} {$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 FPC} {$DEFINE UseAsserts} {$ENDIF} // Define 'OverMeth' options, to use method overloading (do not edit this definitions). {$IFDEF FPC} {$DEFINE OverMeth} {$ENDIF} uses Classes, // TStrings in Split method SysUtils; // Exception {$IFNDEF UniCode} type TRecodeTable = array[Byte] of Byte; {$ENDIF} type {$IFDEF UniCode} PRegExprChar = PUnicodeChar; RegExprString = UnicodeString; REChar = UnicodeChar; {$ELSE} PRegExprChar = PAnsiChar; RegExprString = AnsiString; //###0.952 was string REChar = AnsiChar; {$ENDIF} TREOp = REChar; // internal p-code type //###0.933 PREOp = ^TREOp; 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; const REOpSz = SizeOf (TREOp) div SizeOf (REChar); // size of p-code in RegExprString units {$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' -"- REBracesArgSz = SizeOf (TREBracesArg) div SizeOf (REChar); // size of BRACES arguments -"- {$ENDIF} type TRegExprInvertCaseFunction = function (const Ch : REChar) : REChar of object; const EscChar = '\'; // 'Escape'-char ('\' in common r.e.) used for escaping metachars (\w, \d etc). 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 RegExprSpaceChars : RegExprString = // default value for SpaceChars ' '#$9#$A#$D#$C; RegExprWordChars : RegExprString = // default value for WordChars '0123456789' //###0.940 + 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'; RegExprLineSeparators : RegExprString =// default value for LineSeparators #$d#$a{$IFDEF UniCode}+#$b#$c#$2028#$2029#$85{$ENDIF}; //###0.947 RegExprLinePairedSeparator : RegExprString =// default value for LinePairedSeparator #$d#$a; { if You need Unix-styled line separators (only \n), then use: RegExprLineSeparators = #$a; RegExprLinePairedSeparator = ''; } const NSUBEXP = 90; // max number of subexpression //###0.929 // Cannot be more than NSUBEXPMAX // Be carefull - don't use values which overflow CLOSE opcode // (in this case you'll get compiler error). // Big NSUBEXP will cause more slow work and more stack required NSUBEXPMAX = 255; // Max possible value for NSUBEXP. //###0.945 // Don't change it! It's defined by internal TRegExpr design. MaxBracesArg = $7FFFFFFF - 1; // max value for {n,m} arguments //###0.933 {$IFDEF ComplexBraces} LoopStackMax = 10; // max depth of loops stack //###0.925 {$ENDIF} TinySetLen = 3; // if range includes more then TinySetLen chars, //###0.934 // then use full (32 bytes) ANYOFFULL instead of ANYOF[BUT]TINYSET // !!! Attension ! If you change TinySetLen, you must // change code marked as "//!!!TinySet" type {$IFDEF UseSetOfChar} PSetOfREChar = ^TSetOfREChar; TSetOfREChar = set of REChar; {$ENDIF} TRegExpr = class; TRegExprReplaceFunction = function (ARegExpr : TRegExpr): RegExprString of object; { TRegExpr } TRegExpr = class private startp : array [0 .. NSUBEXP - 1] of PRegExprChar; // founded expr starting points endp : array [0 .. NSUBEXP - 1] of PRegExprChar; // founded expr end points {$IFDEF ComplexBraces} LoopStack : array [1 .. LoopStackMax] of integer; // 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. regstart : REChar; // char that must begin a match; '\0' if none obvious reganch : REChar; // is the match anchored (at beginning-of-line only)? regmust : PRegExprChar; // string (pointer into program) that match must include, or nil regmlen : PtrInt; // length of regmust string // Regstart and reganch permit 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). Regmlen is // supplied because the test in regexec() needs it and regcomp() is computing // it anyway. {$IFDEF UseFirstCharSet} //###0.929 FirstCharSet : TSetOfREChar; {$ENDIF} // work variables for Exec's routins - save stack in recursion} reginput : PRegExprChar; // String-input pointer. fInputStart : PRegExprChar; // Pointer to first char of input string. fInputEnd : PRegExprChar; // Pointer to char AFTER last char of input string // work variables for compiler's routines regparse : PRegExprChar; // Input-scan pointer. regnpar : PtrInt; // count. regdummy : char; regcode : PRegExprChar; // Code-emit pointer; @regdummy = don't. regsize : PtrInt; // Code size. regexpbeg : PRegExprChar; // only for error handling. Contains // pointer to beginning of r.e. while compiling fExprIsCompiled : boolean; // true if r.e. successfully compiled // programm 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.) The opcodes are: programm : PRegExprChar; // Unwarranted chumminess with compiler. fExpression : PRegExprChar; // source of compiled r.e. fInputString : PRegExprChar; // input string fLastError : integer; // see Error, LastError fModifiers : integer; // modifiers fCompModifiers : integer; // compiler's copy of modifiers fProgModifiers : integer; // modifiers values from last programm compilation fSpaceChars : RegExprString; //###0.927 fWordChars : RegExprString; //###0.929 fInvertCase : TRegExprInvertCaseFunction; //###0.927 fLineSeparators : RegExprString; //###0.941 fLinePairedSeparatorAssigned : boolean; fLinePairedSeparatorHead, fLinePairedSeparatorTail : REChar; {$IFNDEF UniCode} fLineSeparatorsSet : set of REChar; {$ENDIF} {$IFDEF UnicodeWordDetection} FUseUnicodeWordDetection : Boolean; function IsUnicodeWordChar(AChar : REChar) : Boolean; {$ENDIF} function IsWordChar(AChar : REChar) : Boolean; inline; function IsSpaceChar(AChar : PRegExprChar) : Boolean; inline; function IsDigit(AChar : PRegExprChar) : Boolean; inline; // Mark programm as having to be [re]compiled procedure InvalidateProgramm; // Check if we can use precompiled r.e. or // [re]compile it if something changed function IsProgrammOk : boolean; //###0.941 function GetExpression : RegExprString; procedure SetExpression (const s : RegExprString); function GetModifierStr : RegExprString; // Parse AModifiers string and return true and set AModifiersInt // if it's in format 'ismxrg-ismxrg'. class function ParseModifiersStr (const AModifiers : RegExprString; var AModifiersInt : integer) : boolean; //###0.941 class function now procedure SetModifierStr (const AModifiers : RegExprString); function GetModifier (AIndex : integer) : boolean; procedure SetModifier (AIndex : integer; ASet : 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 (exp : 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 (b : REChar); // 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 (paren : integer; var flagp : integer) : PRegExprChar; // one alternative of an | operator function ParseBranch (var flagp : integer) : PRegExprChar; // something followed by possible [*+?] function ParsePiece (var flagp : integer) : PRegExprChar; // the lowest level function ParseAtom (var flagp : 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 regrepeat (p : PRegExprChar; AMax : PtrInt) : PtrInt; // dig the "next" pointer out of a node function regnext (p : PRegExprChar) : PRegExprChar; // recursively matching routine function MatchPrim (prog : PRegExprChar) : boolean; // Exec for stored InputString function ExecPrim (AOffset: PtrInt) : boolean; {$IFDEF RegExpPCodeDump} function DumpOp (op : REChar) : RegExprString; {$ENDIF} function GetSubExprMatchCount : integer; function GetMatchPos (Idx : integer) : PtrInt; function GetMatchLen (Idx : integer) : PtrInt; function GetMatch (Idx : integer) : RegExprString; function GetInputString : RegExprString; procedure SetInputString (const AInputString : RegExprString); {$IFNDEF UseSetOfChar} function StrScanCI (s : PRegExprChar; ch : REChar) : PRegExprChar; //###0.928 {$ENDIF} procedure SetLineSeparators (const AStr : RegExprString); procedure SetLinePairedSeparator (const AStr : RegExprString); function GetLinePairedSeparator : RegExprString; public constructor Create; overload; destructor Destroy; override; {$IFDEF UNICODE} public constructor Create(const AExpression : RegExprString); overload; {$ELSE} private FLowerCase, FUpperCase: TRecodeTable; private function TableInvertCaseFunction(const Ch: REChar): REChar; public constructor Create(const AEncoding: String); overload; {$ENDIF} class function VersionMajor : integer; //###0.944 class function VersionMinor : integer; //###0.944 // 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[Next], 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 GetExpression 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; // Modifier /i - caseinsensitive, initialized from RegExprModifierI property ModifierI : boolean index 1 read GetModifier write SetModifier; // Modifier /r - use r.e.syntax extended for russian, // (was property ExtSyntaxEnabled in previous versions) // If true, then а-я additional include russian letter 'ё', // А-Я additional include 'Ё', and а-Я include all russian symbols. // You have to turn it off if it can interfere with you national alphabet. // , initialized from RegExprModifierR property ModifierR : boolean index 2 read GetModifier write SetModifier; // Modifier /s - '.' works as any char (else as [^\n]), // , initialized from RegExprModifierS property ModifierS : boolean index 3 read GetModifier write SetModifier; // Switching off modifier /g switchs all operators in // non-greedy style, so if ModifierG = False, then // all '*' works as '*?', all '+' as '+?' and so on. // , initialized from RegExprModifierG property ModifierG : boolean index 4 read GetModifier write SetModifier; // Treat string as multiple lines. That is, change `^' and `$' from // matching at only the very start or end of the string to the start // or end of any line anywhere within the string. // , initialized from RegExprModifierM property ModifierM : boolean index 5 read GetModifier write SetModifier; // Modifier /x - eXtended syntax, allow r.e. text formatting, // see description in the help. Initialized from RegExprModifierX property ModifierX : boolean index 6 read GetModifier write SetModifier; // 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 PtrInt parameter and is same as ExecPos function Exec (const AInputString : RegExprString) : boolean; overload; function Exec : boolean; overload; //###0.949 function Exec (AOffset: PtrInt) : boolean; overload; //###0.949 // 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 : boolean; // find match for InputString starting from AOffset position // (AOffset=1 - first char of InputString) function ExecPos (AOffset: PtrInt {$IFDEF DefParam}= 1{$ENDIF}) : boolean; // 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 GetInputString write SetInputString; // Returns ATemplate with '$&' or '$0' replaced by whole r.e. // occurence and '$n' replaced by occurence of subexpression #n. // Since v.0.929 '$' used instead of '\' (for future extensions // and for more Perl-compatibility) and accept more then one digit. // If you want place into template raw '$' or '\', use prefix '\' // Example: '1\$ is $2\\rub\\' -> '1$ is \rub\' // If you want to place raw digit after '$n' you must delimit // n with curly braces '{}'. // Example: 'a$12bc' -> 'abc' // 'a${1}2bc' -> 'a2bc'. function Substitute (const ATemplate : RegExprString) : RegExprString; // Split AInputStr into APieces by r.e. occurencies // Internally calls Exec[Next] procedure Split (Const AInputStr : RegExprString; APieces : TStrings); function Replace (Const AInputStr : RegExprString; const AReplaceStr : RegExprString; AUseSubstitution : boolean{$IFDEF DefParam}= False{$ENDIF}) //###0.946 : RegExprString; overload; function Replace (Const AInputStr : RegExprString; AReplaceFunc : TRegExprReplaceFunction) : RegExprString; overload; // 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[Next] // Overloaded version and ReplaceEx operate with call-back function, // so you can implement really complex functionality. function ReplaceEx (Const AInputStr : RegExprString; AReplaceFunc : TRegExprReplaceFunction): RegExprString; // 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 GetSubExprMatchCount; // 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; // 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; // Returns position in r.e. where compiler stopped. // Useful for error diagnostics property CompilerErrorPos : PtrInt read GetCompilerErrorPos; // Contains chars, treated as /s (initially filled with RegExprSpaceChars // global constant) property SpaceChars : RegExprString read fSpaceChars write fSpaceChars; //###0.927 // Contains chars, treated as /w (initially filled with RegExprWordChars // global constant) property WordChars : RegExprString read fWordChars write fWordChars; //###0.929 {$IFDEF UnicodeWordDetection} // If set to true, in addition to using WordChars, a heuristic to detect unicode word letters is used for \w Property UseUnicodeWordDetection : Boolean Read FUseUnicodeWordDetection Write FUseUnicodeWordDetection; {$ENDIF} // line separators (like \n in Unix) property LineSeparators : RegExprString read fLineSeparators write SetLineSeparators; //###0.941 // paired line separator (like \r\n in DOS and Windows). // must contain exactly two chars or no chars at all property LinePairedSeparator : RegExprString read GetLinePairedSeparator write SetLinePairedSeparator; //###0.941 // Converts Ch into upper case if it in lower case or in lower // if it in upper (uses current system local setings) class function InvertCaseFunction (const Ch : REChar) : REChar; // Set this property if you want to override case-insensitive functionality. // Create set it to RegExprInvertCaseFunction (InvertCaseFunction by default) property InvertCase : TRegExprInvertCaseFunction read fInvertCase write fInvertCase; //##0.935 // [Re]compile r.e. Useful for example for GUI r.e. editors (to check // all properties validity). procedure Compile; //###0.941 {$IFDEF RegExpPCodeDump} // dump a compiled regexp in vaguely comprehensible form function Dump : RegExprString; {$ENDIF} public function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): Boolean; function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; AUseSubstitution: Boolean = False): RegExprString; end; ERegExpr = class (Exception) public ErrorCode : integer; CompilerErrorPos : PtrInt; end; const // default for InvertCase property: RegExprInvertCaseFunction : TRegExprInvertCaseFunction = nil ; // 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; //###0.947 // 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 : RegExprString; ASubExprs : TStrings; AExtendedSyntax : boolean{$IFDEF DefParam}= False{$ENDIF}) : PtrInt; implementation {$IFDEF UnicodeWordDetection} uses UnicodeData; {$ENDIF} {$IFNDEF UNICODE} uses LazUTF8, LConvEncoding, uConvEncoding; {$ENDIF} const // TRegExpr.VersionMajor/Minor return values of these constants: TRegExprVersionMajor : integer = 0; TRegExprVersionMinor : integer = 952; MaskModI = 1; // modifier /i bit in fModifiers MaskModR = 2; // -"- /r MaskModS = 4; // -"- /s MaskModG = 8; // -"- /g MaskModM = 16; // -"- /m MaskModX = 32; // -"- /x {$IFDEF UniCode} XIgnoredChars = ' '#9#$d#$a; {$ELSE} XIgnoredChars = [' ', #9, #$d, #$a]; {$ENDIF} function AlignToPtr(const p: Pointer): Pointer; inline; begin {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} Result := Align(p, SizeOf(Pointer)); {$ELSE} Result := p; {$ENDIF} end; function AlignToInt(const p: Pointer): Pointer; inline; begin {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} Result := Align(p, SizeOf(integer)); {$ELSE} Result := p; {$ENDIF} end; {=============================================================} {===================== Global functions ======================} {=============================================================} function ExecRegExpr (const ARegExpr, AInputStr : RegExprString) : boolean; begin With TRegExpr.Create do try Expression := ARegExpr; Result := Exec (AInputStr); finally Free; end; end; { of function ExecRegExpr --------------------------------------------------------------} procedure SplitRegExpr (const ARegExpr, AInputStr : RegExprString; APieces : TStrings); begin APieces.Clear; With TRegExpr.Create do try Expression := ARegExpr; Split (AInputStr, APieces); finally 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 --------------------------------------------------------------} function QuoteRegExprMetaChars (const AStr : RegExprString) : RegExprString; const RegExprMetaSet : RegExprString = '^$.[()|?+*'+EscChar+'{' + ']}'; // - this last are additional to META. // Very similar to META array, but slighly changed. // !Any changes in META array must be synchronized with this set. var i, i0, Len : PtrInt; begin Result := ''; Len := length (AStr); i := 1; i0 := i; while i <= Len do begin if Pos (AStr [i], RegExprMetaSet) > 0 then begin Result := Result + System.Copy (AStr, i0, i - i0) + EscChar + AStr [i]; i0 := i + 1; end; inc (i); end; Result := Result + System.Copy (AStr, i0, MaxInt); // Tail end; { of function QuoteRegExprMetaChars --------------------------------------------------------------} function RegExprSubExpressions (const ARegExpr : RegExprString; ASubExprs : TStrings; AExtendedSyntax : boolean{$IFDEF DefParam}= False{$ENDIF}) : PtrInt; type TStackItemRec = record //###0.945 SubExprIdx : integer; StartPos : PtrInt; end; TStackArray = packed array [0 .. NSUBEXPMAX - 1] of TStackItemRec; var Len, SubExprLen : PtrInt; i, i0 : PtrInt; Modif : integer; Stack : ^TStackArray; //###0.945 StackIdx, StackSz : PtrInt; begin Result := 0; // no unbalanced brackets found at this very moment 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 TRegExpr.ParseModifiersStr (System.Copy (ARegExpr, i, i - i0), Modif) then AExtendedSyntax := (Modif and MaskModX) <> 0; 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] = ']' // cannot be 'emty' ranges - this interpretes then inc (i); // as ']' by itself 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 MAGIC = TREOp (216);// programm signature // name opcode opnd? meaning EEND = TREOp (0); // - End of program BOL = TREOp (1); // - Match "" at beginning of line EOL = TREOp (2); // - Match "" at end of line ANY = TREOp (3); // - Match any one character ANYOF = TREOp (4); // Str Match any character in string Str ANYBUT = TREOp (5); // Str Match any char. not in string Str BRANCH = TREOp (6); // Node Match this alternative, or the next BACK = TREOp (7); // - Jump backward (Next < 0) EXACTLY = TREOp (8); // Str Match string Str NOTHING = TREOp (9); // - Match empty string STAR = TREOp (10); // Node Match this (simple) thing 0 or more times PLUS = TREOp (11); // Node Match this (simple) thing 1 or more times ANYDIGIT = TREOp (12); // - Match any digit (equiv [0-9]) NOTDIGIT = TREOp (13); // - Match not digit (equiv [0-9]) ANYLETTER = TREOp (14); // - Match any letter from property WordChars NOTLETTER = TREOp (15); // - Match not letter from property WordChars ANYSPACE = TREOp (16); // - Match any space char (see property SpaceChars) NOTSPACE = TREOp (17); // - Match not space char (see property SpaceChars) BRACES = TREOp (18); // Node,Min,Max Match this (simple) thing from Min to Max times. // Min and Max are TREBracesArg COMMENT = TREOp (19); // - Comment ;) EXACTLYCI = TREOp (20); // Str Match string Str case insensitive ANYOFCI = TREOp (21); // Str Match any character in string Str, case insensitive ANYBUTCI = TREOp (22); // Str Match any char. not in string Str, case insensitive LOOPENTRY = TREOp (23); // Node Start of loop (Node - LOOP for this loop) 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 ANYOFTINYSET= TREOp (25); // Chrs Match any one char from Chrs (exactly TinySetLen chars) ANYBUTTINYSET=TREOp (26); // Chrs Match any one char not in Chrs (exactly TinySetLen chars) ANYOFFULLSET= TREOp (27); // Set Match any one char from set of char // - very fast (one CPU instruction !) but takes 32 bytes of p-code BSUBEXP = TREOp (28); // Idx Match previously matched subexpression #Idx (stored as REChar) //###0.936 BSUBEXPCI = TREOp (29); // Idx -"- in case-insensitive mode // Non-Greedy Style Ops //###0.940 STARNG = TREOp (30); // Same as START but in non-greedy mode PLUSNG = TREOp (31); // Same as PLUS but in non-greedy mode BRACESNG = TREOp (32); // Same as BRACES but in non-greedy mode LOOPNG = TREOp (33); // Same as LOOP but in non-greedy mode // Multiline mode \m BOLML = TREOp (34); // - Match "" at beginning of line EOLML = TREOp (35); // - Match "" at end of line ANYML = TREOp (36); // - Match any one character // Word boundary BOUND = TREOp (37); // Match "" between words //###0.943 NOTBOUND = TREOp (38); // Match "" not between words //###0.943 // !!! Change OPEN value if you add new opcodes !!! OPEN = TREOp (39); // - Mark this point in input as start of \n // OPEN + 1 is \1, etc. CLOSE = TREOp (ord (OPEN) + NSUBEXP); // - Analogous to OPEN. // !!! Don't add new OpCodes after CLOSE !!! // 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; reeCompRegexpTooBig = 101; reeCompParseRegTooManyBrackets = 102; reeCompParseRegUnmatchedBrackets = 103; reeCompParseRegUnmatchedBrackets2 = 104; reeCompParseRegJunkOnEnd = 105; reePlusStarOperandCouldBeEmpty = 106; reeNestedSQP = 107; reeBadHexDigit = 108; reeInvalidRange = 109; reeParseAtomTrailingBackSlash = 110; reeNoHexCodeAfterBSlashX = 111; reeHexCodeAfterBSlashXTooBig = 112; reeUnmatchedSqBrackets = 113; reeInternalUrp = 114; reeQPSBFollowsNothing = 115; reeTrailingBackSlash = 116; reeRarseAtomInternalDisaster = 119; reeBRACESArgTooBig = 122; reeBracesMinParamGreaterMax = 124; reeUnclosedComment = 125; reeComplexBracesNotImplemented = 126; reeUrecognizedModifier = 127; reeBadLinePairedSeparator = 128; reeRegRepeatCalledInappropriately = 1000; reeMatchPrimMemoryCorruption = 1001; reeMatchPrimCorruptedPointers = 1002; reeNoExpression = 1003; reeCorruptedProgram = 1004; reeNoInputStringSpecified = 1005; reeOffsetMustBeGreaterThen0 = 1006; reeExecNextWithoutExec = 1007; reeGetInputStringWithoutInputString = 1008; reeDumpCorruptedOpcode = 1011; reeModifierUnsupported = 1013; reeLoopStackExceeded = 1014; reeLoopWithoutEntry = 1015; reeBadPCodeImported = 2000; function TRegExpr.ErrorMsg (AErrorID : integer) : RegExprString; begin case AErrorID of reeOk: Result := 'No errors'; reeCompNullArgument: Result := 'TRegExpr(comp): Null Argument'; reeCompRegexpTooBig: Result := 'TRegExpr(comp): Regexp Too Big'; reeCompParseRegTooManyBrackets: Result := 'TRegExpr(comp): ParseReg Too Many ()'; reeCompParseRegUnmatchedBrackets: Result := 'TRegExpr(comp): ParseReg Unmatched ()'; reeCompParseRegUnmatchedBrackets2: Result := 'TRegExpr(comp): ParseReg Unmatched ()'; reeCompParseRegJunkOnEnd: Result := 'TRegExpr(comp): ParseReg Junk On End'; reePlusStarOperandCouldBeEmpty: Result := 'TRegExpr(comp): *+ Operand Could Be Empty'; reeNestedSQP: Result := 'TRegExpr(comp): Nested *?+'; reeBadHexDigit: Result := 'TRegExpr(comp): Bad Hex Digit'; reeInvalidRange: Result := 'TRegExpr(comp): Invalid [] Range'; reeParseAtomTrailingBackSlash: Result := 'TRegExpr(comp): Parse Atom Trailing \'; reeNoHexCodeAfterBSlashX: Result := 'TRegExpr(comp): No Hex Code After \x'; reeHexCodeAfterBSlashXTooBig: Result := 'TRegExpr(comp): Hex Code After \x Is Too Big'; reeUnmatchedSqBrackets: Result := 'TRegExpr(comp): Unmatched []'; reeInternalUrp: Result := 'TRegExpr(comp): Internal Urp'; reeQPSBFollowsNothing: Result := 'TRegExpr(comp): ?+*{ Follows Nothing'; reeTrailingBackSlash: Result := 'TRegExpr(comp): Trailing \'; reeRarseAtomInternalDisaster: Result := 'TRegExpr(comp): RarseAtom Internal Disaster'; reeBRACESArgTooBig: Result := 'TRegExpr(comp): BRACES Argument Too Big'; reeBracesMinParamGreaterMax: Result := 'TRegExpr(comp): BRACE Min Param Greater then Max'; reeUnclosedComment: Result := 'TRegExpr(comp): Unclosed (?#Comment)'; reeComplexBracesNotImplemented: Result := 'TRegExpr(comp): If you want take part in beta-testing BRACES ''{min,max}'' and non-greedy ops ''*?'', ''+?'', ''??'' for complex cases - remove ''.'' from {.$DEFINE ComplexBraces}'; reeUrecognizedModifier: Result := 'TRegExpr(comp): Urecognized Modifier'; reeBadLinePairedSeparator: Result := 'TRegExpr(comp): LinePairedSeparator must countain two different chars or no chars at all'; 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): Not Assigned Expression Property'; reeCorruptedProgram: Result := 'TRegExpr(exec): Corrupted Program'; reeNoInputStringSpecified: Result := 'TRegExpr(exec): No Input String Specified'; reeOffsetMustBeGreaterThen0: Result := 'TRegExpr(exec): Offset Must Be Greater Then 0'; reeExecNextWithoutExec: Result := 'TRegExpr(exec): ExecNext Without Exec[Pos]'; reeGetInputStringWithoutInputString: Result := 'TRegExpr(exec): GetInputString Without InputString'; reeDumpCorruptedOpcode: Result := 'TRegExpr(dump): Corrupted Opcode'; reeLoopStackExceeded: Result := 'TRegExpr(exec): Loop Stack Exceeded'; reeLoopWithoutEntry: Result := 'TRegExpr(exec): Loop Without LoopEntry !'; reeBadPCodeImported: Result := 'TRegExpr(misc): Bad p-code imported'; 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; //###0.944 begin Result := TRegExprVersionMajor; end; { of class function TRegExpr.VersionMajor --------------------------------------------------------------} class function TRegExpr.VersionMinor : integer; //###0.944 begin Result := TRegExprVersionMinor; end; { of class function TRegExpr.VersionMinor --------------------------------------------------------------} constructor TRegExpr.Create; begin inherited; programm := nil; fExpression := nil; fInputString := nil; regexpbeg := nil; fExprIsCompiled := false; {$IFDEF UnicodeWordDetection} FUseUnicodeWordDetection:=False; {$ENDIF} ModifierI := RegExprModifierI; ModifierR := RegExprModifierR; ModifierS := RegExprModifierS; ModifierG := RegExprModifierG; ModifierM := RegExprModifierM; //###0.940 SpaceChars := RegExprSpaceChars; //###0.927 WordChars := RegExprWordChars; //###0.929 fInvertCase := RegExprInvertCaseFunction; //###0.927 fLineSeparators := RegExprLineSeparators; //###0.941 LinePairedSeparator := RegExprLinePairedSeparator; //###0.941 end; { of constructor TRegExpr.Create --------------------------------------------------------------} {$IFDEF UNICODE} constructor TRegExpr.Create(const AExpression : RegExprString); begin Create; Expression := AExpression; end; {$ELSE} function InitRecodeTable(Encoding: String; ALowerCase: Boolean): TRecodeTable; var I: Byte; C: String; begin if ALowerCase then begin for I:= 0 to 255 do begin C:= ConvertEncoding(Chr(I), Encoding, EncodingUTF8); C:= UTF8LowerCase(C); C:= ConvertEncoding(C, EncodingUTF8, Encoding); if Length(C) > 0 then Result[I]:= Ord(C[1]); end; end else begin for I:= 0 to 255 do 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 TRegExpr.TableInvertCaseFunction(const Ch : REChar) : REChar; begin Result:= Chr(FUpperCase[Ord(Ch)]); if Result = Ch then Result:= Chr(FLowerCase[Ord(Ch)]); end; constructor TRegExpr.Create(const AEncoding: String); begin Create; FInvertCase:= TableInvertCaseFunction; FLowerCase:= InitRecodeTable(AEncoding, True); FUpperCase:= InitRecodeTable(AEncoding, False); end; {$ENDIF} destructor TRegExpr.Destroy; begin if programm <> nil then begin FreeMem (programm); programm:=nil; end; if fExpression <> nil then begin FreeMem (fExpression); fExpression:=nil; end; if fInputString <> nil then begin FreeMem (fInputString); fInputString:=nil; end; end; { of destructor TRegExpr.Destroy --------------------------------------------------------------} class function TRegExpr.InvertCaseFunction (const Ch : REChar) : REChar; begin {$IFDEF UniCode} Result := UnicodeUpperCase(Ch)[1]; if Result = Ch then Result := UnicodeLowerCase(Ch)[1]; {$ELSE} Result := AnsiUpperCase(Ch)[1]; if Result = Ch then Result := AnsiLowerCase(Ch)[1]; {$ENDIF} end; { of function TRegExpr.InvertCaseFunction --------------------------------------------------------------} function TRegExpr.GetExpression : RegExprString; begin if fExpression <> nil then Result := fExpression else Result := ''; end; { of function TRegExpr.GetExpression --------------------------------------------------------------} procedure TRegExpr.SetExpression (const s : RegExprString); var Len : PtrInt; //###0.950 begin if (s <> fExpression) or not fExprIsCompiled then begin fExprIsCompiled := false; if fExpression <> nil then begin FreeMem (fExpression); fExpression := nil; end; if s <> '' then begin Len := length (s); //###0.950 GetMem (fExpression, (Len + 1) * SizeOf (REChar)); System.Move(s[1],fExpression^,(Len + 1) * SizeOf (REChar)); InvalidateProgramm; //###0.941 end; end; end; { of procedure TRegExpr.SetExpression --------------------------------------------------------------} function TRegExpr.GetSubExprMatchCount : integer; begin if Assigned (fInputString) then begin Result := NSUBEXP - 1; while (Result > 0) and ((startp [Result] = nil) or (endp [Result] = nil)) do dec (Result); end else Result := -1; end; { of function TRegExpr.GetSubExprMatchCount --------------------------------------------------------------} function TRegExpr.GetMatchPos (Idx : integer) : PtrInt; begin if (Idx >= 0) and (Idx < NSUBEXP) and Assigned (fInputString) and Assigned (startp [Idx]) and Assigned (endp [Idx]) then begin Result := (startp [Idx] - fInputString) + 1; end else Result := -1; end; { of function TRegExpr.GetMatchPos --------------------------------------------------------------} function TRegExpr.GetMatchLen (Idx : integer) : PtrInt; begin if (Idx >= 0) and (Idx < NSUBEXP) and Assigned (fInputString) and Assigned (startp [Idx]) and Assigned (endp [Idx]) then begin Result := endp [Idx] - startp [Idx]; end else Result := -1; end; { of function TRegExpr.GetMatchLen --------------------------------------------------------------} function TRegExpr.GetMatch (Idx : integer) : RegExprString; begin Result:=''; if (Idx >= 0) and (Idx < NSUBEXP) and Assigned (fInputString) and Assigned (startp [Idx]) and Assigned (endp [Idx]) and (endp [Idx] > startp[Idx]) //then Result := copy (fInputString, MatchPos [Idx], MatchLen [Idx]) //###0.929 then begin //SetString (Result, startp [idx], endp [idx] - startp [idx]) SetLength(Result,endp [idx] - startp [idx]); System.Move(startp [idx]^,Result[1],length(Result)*sizeof(REChar)); end else Result := ''; end; { of function TRegExpr.GetMatch --------------------------------------------------------------} 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 --------------------------------------------------------------} class function TRegExpr.ParseModifiersStr (const AModifiers : RegExprString; var AModifiersInt : integer) : boolean; // !!! Be carefull - this is class function and must not use object instance fields var i : integer; IsOn : boolean; Mask : integer; begin Result := true; IsOn := true; Mask := 0; // prevent compiler warning for i := 1 to length (AModifiers) do if AModifiers [i] = '-' then IsOn := false else begin if Pos (AModifiers [i], 'iI') > 0 then Mask := MaskModI else if Pos (AModifiers [i], 'rR') > 0 then Mask := MaskModR else if Pos (AModifiers [i], 'sS') > 0 then Mask := MaskModS else if Pos (AModifiers [i], 'gG') > 0 then Mask := MaskModG else if Pos (AModifiers [i], 'mM') > 0 then Mask := MaskModM else if Pos (AModifiers [i], 'xX') > 0 then Mask := MaskModX else begin Result := false; EXIT; end; if IsOn then AModifiersInt := AModifiersInt or Mask else AModifiersInt := AModifiersInt and not Mask; end; end; { of function TRegExpr.ParseModifiersStr --------------------------------------------------------------} procedure TRegExpr.SetModifierStr (const AModifiers : RegExprString); begin if not ParseModifiersStr (AModifiers, fModifiers) then Error (reeModifierUnsupported); end; { of procedure TRegExpr.SetModifierStr --------------------------------------------------------------} function TRegExpr.GetModifier (AIndex : integer) : boolean; var Mask : integer; begin Result := false; case AIndex of 1: Mask := MaskModI; 2: Mask := MaskModR; 3: Mask := MaskModS; 4: Mask := MaskModG; 5: Mask := MaskModM; 6: Mask := MaskModX; else begin Error (reeModifierUnsupported); EXIT; end; end; Result := (fModifiers and Mask) <> 0; end; { of function TRegExpr.GetModifier --------------------------------------------------------------} procedure TRegExpr.SetModifier (AIndex : integer; ASet : boolean); var Mask : integer; begin case AIndex of 1: Mask := MaskModI; 2: Mask := MaskModR; 3: Mask := MaskModS; 4: Mask := MaskModG; 5: Mask := MaskModM; 6: Mask := MaskModX; else begin Error (reeModifierUnsupported); EXIT; end; end; if ASet then fModifiers := fModifiers or Mask else fModifiers := fModifiers and not Mask; end; { of procedure TRegExpr.SetModifier --------------------------------------------------------------} {=============================================================} {==================== Compiler section =======================} {=============================================================} {$IFDEF UnicodeWordDetection} function TRegExpr.IsUnicodeWordChar(AChar: REChar): Boolean; var NType: byte; begin if Ord(AChar)<128 then exit(false) else if Ord(AChar)>=LOW_SURROGATE_BEGIN then exit(false) else begin NType:= GetProps(Ord(AChar))^.Category; Result:= (NType<=UGC_OtherNumber); end; end; {$ENDIF} function TRegExpr.IsWordChar(AChar: REChar): Boolean; inline; begin Result := Pos(AChar, fWordChars)>0; {$IFDEF UnicodeWordDetection} If Not Result and UseUnicodeWordDetection then Result:=IsUnicodeWordChar(aChar); {$ENDIF} end; function TRegExpr.IsSpaceChar(AChar: PRegExprChar): Boolean; begin Result:=Pos(AChar^,fSpaceChars)>0; end; function TRegExpr.IsDigit(AChar: PRegExprChar): Boolean; begin // Avoid Unicode char-> ansi char conversion in case of unicode regexp. Result:=Ord(AChar^) in [Ord('0')..Ord('9')] end; procedure TRegExpr.InvalidateProgramm; begin if programm <> nil then begin FreeMem (programm); programm := nil; end; end; { of procedure TRegExpr.InvalidateProgramm --------------------------------------------------------------} procedure TRegExpr.Compile; //###0.941 begin if fExpression = nil then begin // No Expression assigned Error (reeNoExpression); EXIT; end; CompileRegExpr (fExpression); end; { of procedure TRegExpr.Compile --------------------------------------------------------------} function TRegExpr.IsProgrammOk : boolean; {$IFNDEF UniCode} var i : integer; {$ENDIF} begin Result := false; // check modifiers if fModifiers <> fProgModifiers //###0.941 then InvalidateProgramm; // can we optimize line separators by using sets? {$IFNDEF UniCode} fLineSeparatorsSet := []; for i := 1 to length (fLineSeparators) do System.Include (fLineSeparatorsSet, fLineSeparators [i]); {$ENDIF} // [Re]compile if needed if programm = nil then Compile; //###0.941 // check [re]compiled programm if programm = nil then EXIT // error was set/raised by Compile (was reeExecAfterCompErr) else if programm [0] <> MAGIC // Program corrupted. 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; // i : int64; 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 != BRANCH" are synonymous in practice. if (p = nil) or (p = @regdummy) or (PREOp (p)^ <> 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); {$IFDEF DebugSynRegExpr} if regcode-programm>regsize then raise Exception.Create('TRegExpr.EmitNode buffer overrun'); {$ENDIF} end else inc (regsize, REOpSz + RENextOffSz); // compute code size without code generation end; { of function TRegExpr.EmitNode --------------------------------------------------------------} procedure TRegExpr.EmitC (b : REChar); // emit a byte to code begin if regcode <> @regdummy then begin regcode^ := b; inc (regcode); {$IFDEF DebugSynRegExpr} if regcode-programm>regsize then raise Exception.Create('TRegExpr.EmitC buffer overrun'); {$ENDIF} end else inc (regsize, REOpSz); // Type of p-code pointer always is ^REChar end; { of procedure TRegExpr.EmitC --------------------------------------------------------------} 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 (regsize, sz); EXIT; end; // move code behind insert position src := regcode; inc (regcode, sz); {$IFDEF DebugSynRegExpr} if regcode-programm>regsize then raise Exception.Create('TRegExpr.InsertOperator buffer overrun'); // if (opndregsize) 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 strcspn (s1 : PRegExprChar; s2 : PRegExprChar) : PtrInt; // find length of initial segment of s1 consisting // entirely of characters not from s2 var scan1, scan2 : PRegExprChar; begin Result := 0; scan1 := s1; while scan1^ <> #0 do begin scan2 := s2; while scan2^ <> #0 do if scan1^ = scan2^ then EXIT else inc (scan2); inc (Result); inc (scan1) end; end; { of function strcspn --------------------------------------------------------------} const // Flags to be passed up and down. HASWIDTH = 01; // Known never to match nil string. SIMPLE = 02; // Simple enough to be STAR/PLUS/BRACES operand. SPSTART = 04; // Starts with * or +. WORST = 0; // Worst case. META : array [0 .. 12] of REChar = ( '^', '$', '.', '[', '(', ')', '|', '?', '+', '*', EscChar, '{', #0); // Any modification must be synchronized with QuoteRegExprMetaChars !!! {$IFDEF UniCode} RusRangeLo : array [0 .. 33] of REChar = (#$430,#$431,#$432,#$433,#$434,#$435,#$451,#$436,#$437, #$438,#$439,#$43A,#$43B,#$43C,#$43D,#$43E,#$43F, #$440,#$441,#$442,#$443,#$444,#$445,#$446,#$447, #$448,#$449,#$44A,#$44B,#$44C,#$44D,#$44E,#$44F,#0); RusRangeHi : array [0 .. 33] of REChar = (#$410,#$411,#$412,#$413,#$414,#$415,#$401,#$416,#$417, #$418,#$419,#$41A,#$41B,#$41C,#$41D,#$41E,#$41F, #$420,#$421,#$422,#$423,#$424,#$425,#$426,#$427, #$428,#$429,#$42A,#$42B,#$42C,#$42D,#$42E,#$42F,#0); RusRangeLoLow = #$430{'а'}; RusRangeLoHigh = #$44F{'я'}; RusRangeHiLow = #$410{'А'}; RusRangeHiHigh = #$42F{'Я'}; {$ELSE} RusRangeLo = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; RusRangeHi = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; RusRangeLoLow = 'а'; RusRangeLoHigh = 'я'; RusRangeHiLow = 'А'; RusRangeHiHigh = 'Я'; {$ENDIF} function TRegExpr.CompileRegExpr (exp : 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 : PRegExprChar; len : PtrUInt; flags : integer; begin Result := false; // life too dark flags:=0; regparse := nil; // for correct error handling regexpbeg := exp; try if programm <> nil then begin FreeMem (programm); programm := nil; end; if exp = nil then begin Error (reeCompNullArgument); EXIT; end; fProgModifiers := fModifiers; // well, may it's paranoia. I'll check it later... !!!!!!!! // First pass: determine size, legality. fCompModifiers := fModifiers; regparse := exp; regnpar := 1; regsize := 0; regcode := @regdummy; EmitC (MAGIC); if ParseReg (0, flags) = nil then EXIT; // Allocate space. GetMem (programm, regsize * SizeOf (REChar)); // Second pass: emit code. fCompModifiers := fModifiers; regparse := exp; regnpar := 1; regcode := programm; EmitC (MAGIC); if ParseReg (0, flags) = nil then EXIT; // Dig out information for optimizations. {$IFDEF UseFirstCharSet} //###0.929 FirstCharSet := []; FillFirstCharSet (programm + REOpSz); {$ENDIF} regstart := #0; // Worst-case defaults. reganch := #0; regmust := nil; regmlen := 0; scan := programm + REOpSz; // First BRANCH. if PREOp (regnext (scan))^ = EEND then begin // Only one top-level choice. scan := scan + REOpSz + RENextOffSz; // Starting-point info. if PREOp (scan)^ = EXACTLY then regstart := (scan + REOpSz + RENextOffSz)^ else if PREOp (scan)^ = BOL then inc (reganch); // 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 (flags and SPSTART) <> 0 then begin longest := nil; len := 0; while scan <> nil do begin if (PREOp (scan)^ = EXACTLY) and (strlen (scan + REOpSz + RENextOffSz) >= PtrInt(len)) then begin longest := scan + REOpSz + RENextOffSz; len := strlen (longest); end; scan := regnext (scan); end; regmust := longest; regmlen := len; end; end; Result := true; finally begin if not Result then InvalidateProgramm; regexpbeg := nil; fExprIsCompiled := Result; //###0.944 end; end; end; { of function TRegExpr.CompileRegExpr --------------------------------------------------------------} function TRegExpr.ParseReg (paren : integer; var flagp : 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; parno : integer; flags : integer; SavedModifiers : integer; begin flags:=0; Result := nil; flagp := HASWIDTH; // Tentatively. parno := 0; // eliminate compiler stupid warning SavedModifiers := fCompModifiers; // Make an OPEN node, if parenthesized. if paren <> 0 then begin if regnpar >= NSUBEXP then begin Error (reeCompParseRegTooManyBrackets); EXIT; end; parno := regnpar; inc (regnpar); ret := EmitNode (TREOp (ord (OPEN) + parno)); end else ret := nil; // Pick up the branches, linking them together. br := ParseBranch (flags); if br = nil then begin Result := nil; EXIT; end; if ret <> nil then Tail (ret, br) // OPEN -> first. else ret := br; if (flags and HASWIDTH) = 0 then flagp := flagp and not HASWIDTH; flagp := flagp or flags and SPSTART; while (regparse^ = '|') do begin inc (regparse); br := ParseBranch (flags); if br = nil then begin Result := nil; EXIT; end; Tail (ret, br); // BRANCH -> BRANCH. if (flags and HASWIDTH) = 0 then flagp := flagp and not HASWIDTH; flagp := flagp or flags and SPSTART; end; // Make a closing node, and hook it on the end. if paren <> 0 then ender := EmitNode (TREOp (ord (CLOSE) + parno)) else ender := EmitNode (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 paren <> 0 then if regparse^ <> ')' then begin Error (reeCompParseRegUnmatchedBrackets); EXIT; end else inc (regparse); // skip trailing ')' if (paren = 0) and (regparse^ <> #0) 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 flagp : integer) : PRegExprChar; // one alternative of an | operator // Implements the concatenation operator. var ret, chain, latest : PRegExprChar; flags : integer; begin flags:=0; flagp := WORST; // Tentatively. ret := EmitNode (BRANCH); chain := nil; while (regparse^ <> #0) and (regparse^ <> '|') and (regparse^ <> ')') do begin latest := ParsePiece (flags); if latest = nil then begin Result := nil; EXIT; end; flagp := flagp or flags and HASWIDTH; if chain = nil // First piece. then flagp := flagp or flags and SPSTART else Tail (chain, latest); chain := latest; end; if chain = nil // Loop ran zero times. then EmitNode (NOTHING); Result := ret; end; { of function TRegExpr.ParseBranch --------------------------------------------------------------} function TRegExpr.ParsePiece (var flagp : 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 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 parsenum (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 op : REChar; NonGreedyOp, NonGreedyCh : boolean; //###0.940 TheOp : TREOp; //###0.940 NextNode : PRegExprChar; flags : integer; BracesMin, Bracesmax : TREBracesArg; p, savedparse : 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 := LOOPNG else TheOp := LOOP; InsertOperator (LOOPENTRY, Result, REOpSz + RENextOffSz); NextNode := EmitNode (TheOp); if regcode <> @regdummy then begin off := (Result + REOpSz + RENextOffSz) - (regcode - REOpSz - RENextOffSz); // back to Atom after 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 (regsize, REBracesArgSz * 2 + RENextOffSz); Tail (Result, NextNode); // LOOPENTRY -> LOOP if regcode <> @regdummy then Tail (Result + REOpSz + RENextOffSz, NextNode); // Atom -> LOOP {$ENDIF} end; procedure EmitSimpleBraces (ABracesMin, ABracesMax : TREBracesArg; ANonGreedyOp : boolean); //###0.940 begin if ANonGreedyOp //###0.940 then TheOp := BRACESNG else TheOp := 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; begin flags:=0; Result := ParseAtom (flags); if Result = nil then EXIT; op := regparse^; if not ((op = '*') or (op = '+') or (op = '?') or (op = '{')) then begin flagp := flags; EXIT; end; if ((flags and HASWIDTH) = 0) and (op <> '?') then begin Error (reePlusStarOperandCouldBeEmpty); EXIT; end; case op of '*': begin flagp := WORST or SPSTART; NonGreedyCh := (regparse + 1)^ = '?'; //###0.940 NonGreedyOp := NonGreedyCh or ((fCompModifiers and MaskModG) = 0); //###0.940 if (flags and SIMPLE) = 0 then begin if NonGreedyOp //###0.940 then EmitComplexBraces (0, MaxBracesArg, NonGreedyOp) else begin // Emit x* as (x&|), where & means "self". InsertOperator (BRANCH, Result, REOpSz + RENextOffSz); // Either x OpTail (Result, EmitNode (BACK)); // and loop OpTail (Result, Result); // back Tail (Result, EmitNode (BRANCH)); // or Tail (Result, EmitNode (NOTHING)); // nil. end end else begin // Simple if NonGreedyOp //###0.940 then TheOp := STARNG else TheOp := STAR; InsertOperator (TheOp, Result, REOpSz + RENextOffSz); end; if NonGreedyCh //###0.940 then inc (regparse); // Skip extra char ('?') end; { of case '*'} '+': begin flagp := WORST or SPSTART or HASWIDTH; NonGreedyCh := (regparse + 1)^ = '?'; //###0.940 NonGreedyOp := NonGreedyCh or ((fCompModifiers and MaskModG) = 0); //###0.940 if (flags and SIMPLE) = 0 then begin if NonGreedyOp //###0.940 then EmitComplexBraces (1, MaxBracesArg, NonGreedyOp) else begin // Emit x+ as x(&|), where & means "self". NextNode := EmitNode (BRANCH); // Either Tail (Result, NextNode); Tail (EmitNode (BACK), Result); // loop back Tail (NextNode, EmitNode (BRANCH)); // or Tail (Result, EmitNode (NOTHING)); // nil. end end else begin // Simple if NonGreedyOp //###0.940 then TheOp := PLUSNG else TheOp := PLUS; InsertOperator (TheOp, Result, REOpSz + RENextOffSz); end; if NonGreedyCh //###0.940 then inc (regparse); // Skip extra char ('?') end; { of case '+'} '?': begin flagp := WORST; NonGreedyCh := (regparse + 1)^ = '?'; //###0.940 NonGreedyOp := NonGreedyCh or ((fCompModifiers and MaskModG) = 0); //###0.940 if NonGreedyOp then begin //###0.940 // We emit x?? as x{0,1}? if (flags and SIMPLE) = 0 then EmitComplexBraces (0, 1, NonGreedyOp) else EmitSimpleBraces (0, 1, NonGreedyOp); end else begin // greedy '?' InsertOperator (BRANCH, Result, REOpSz + RENextOffSz); // Either x Tail (Result, EmitNode (BRANCH)); // or NextNode := EmitNode (NOTHING); // nil. Tail (Result, NextNode); OpTail (Result, NextNode); end; if NonGreedyCh //###0.940 then inc (regparse); // Skip extra char ('?') end; { of case '?'} '{': begin savedparse := regparse; // !!!!!!!!!!!! // Filip Jirsak's note - what will happen, when we are at the end of regparse? inc (regparse); p := regparse; while Pos (regparse^, '0123456789') > 0 // MUST appear do inc (regparse); if (regparse^ <> '}') and (regparse^ <> ',') or (p = regparse) then begin regparse := savedparse; flagp := flags; EXIT; end; BracesMin := parsenum (p, regparse - 1); if regparse^ = ',' then begin inc (regparse); p := regparse; while Pos (regparse^, '0123456789') > 0 do inc (regparse); if regparse^ <> '}' then begin regparse := savedparse; EXIT; end; if p = regparse then BracesMax := MaxBracesArg else BracesMax := parsenum (p, regparse - 1); end else BracesMax := BracesMin; // {n} == {n,n} if BracesMin > BracesMax then begin Error (reeBracesMinParamGreaterMax); EXIT; end; if BracesMin > 0 then flagp := WORST; if BracesMax > 0 then flagp := flagp or HASWIDTH or SPSTART; NonGreedyCh := (regparse + 1)^ = '?'; //###0.940 NonGreedyOp := NonGreedyCh or ((fCompModifiers and MaskModG) = 0); //###0.940 if (flags and SIMPLE) <> 0 then EmitSimpleBraces (BracesMin, BracesMax, NonGreedyOp) else EmitComplexBraces (BracesMin, BracesMax, NonGreedyOp); if NonGreedyCh //###0.940 then inc (regparse); // Skip extra char '?' end; // of case '{' // else // here we can't be end; { of case op} inc (regparse); if (regparse^ = '*') or (regparse^ = '+') or (regparse^ = '?') or (regparse^ = '{') then begin Error (reeNestedSQP); EXIT; end; end; { of function TRegExpr.ParsePiece --------------------------------------------------------------} function TRegExpr.ParseAtom (var flagp : 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; flags : integer; RangeBeg, RangeEnd : REChar; CanBeRange : boolean; len : PtrInt; ender : REChar; begmodfs : PRegExprChar; {$IFDEF UseSetOfChar} //###0.930 RangePCodeBeg : PRegExprChar; RangePCodeIdx : PtrInt; RangeIsCI : boolean; RangeSet : TSetOfREChar; RangeLen : PtrInt; RangeChMin, RangeChMax : REChar; {$ENDIF} procedure EmitExactly (ch : REChar); begin if (fCompModifiers and MaskModI) <> 0 then ret := EmitNode (EXACTLYCI) else ret := EmitNode (EXACTLY); EmitC (ch); EmitC (#0); flagp := flagp or HASWIDTH or SIMPLE; end; procedure EmitStr (const s : RegExprString); var i : PtrInt; begin for i := 1 to length (s) do EmitC (s [i]); end; function HexDig (ch : REChar) : PtrInt; begin Result := Ord(Ch); Case Result of Ord('A')..Ord('F') : Result:=10+Result-Ord('A'); Ord('a')..Ord('f') : Result:=10+Result-Ord('a'); Ord('0')..Ord('9') : Result:=Result-Ord('0'); else Error (reeBadHexDigit); end; end; function EmitRange (AOpCode : REChar) : PRegExprChar; begin {$IFDEF UseSetOfChar} case AOpCode of ANYBUTCI, ANYBUT: Result := EmitNode (ANYBUTTINYSET); else // ANYOFCI, ANYOF Result := EmitNode (ANYOFTINYSET); end; case AOpCode of ANYBUTCI, ANYOFCI: RangeIsCI := True; else // ANYBUT, ANYOF RangeIsCI := False; end; RangePCodeBeg := regcode; RangePCodeIdx := regsize; RangeLen := 0; RangeSet := []; RangeChMin := #255; RangeChMax := #0; {$ELSE} Result := EmitNode (AOpCode); // ToDo: // !!!!!!!!!!!!! Implement ANYOF[BUT]TINYSET generation for UniCode !!!!!!!!!! {$ENDIF} end; {$IFDEF UseSetOfChar} procedure EmitRangeCPrim (b : REChar); //###0.930 begin if b in RangeSet then EXIT; inc (RangeLen); if b < RangeChMin then RangeChMin := b; if b > RangeChMax then RangeChMax := b; Include (RangeSet, b); end; {$ENDIF} procedure EmitRangeC (b : REChar); {$IFDEF UseSetOfChar} var Ch : REChar; {$ENDIF} begin CanBeRange := false; {$IFDEF UseSetOfChar} if b <> #0 then begin EmitRangeCPrim (b); //###0.930 if RangeIsCI then EmitRangeCPrim (InvertCase (b)); //###0.930 end else begin {$IFDEF UseAsserts} Assert (RangeLen > 0, 'TRegExpr.ParseAtom(subroutine EmitRangeC): empty range'); // impossible, but who knows.. Assert (RangeChMin <= RangeChMax, 'TRegExpr.ParseAtom(subroutine EmitRangeC): RangeChMin > RangeChMax'); // impossible, but who knows.. {$ENDIF} if RangeLen <= TinySetLen then begin // emit "tiny set" if regcode = @regdummy then begin regsize := RangePCodeIdx + TinySetLen; // RangeChMin/Max !!! EXIT; end; regcode := RangePCodeBeg; for Ch := RangeChMin to RangeChMax do //###0.930 if Ch in RangeSet then begin regcode^ := Ch; inc (regcode); end; // fill rest: while regcode < RangePCodeBeg + TinySetLen do begin regcode^ := RangeChMax; inc (regcode); end; {$IFDEF DebugSynRegExpr} if regcode-programm>regsize then raise Exception.Create('TRegExpr.ParseAtom.EmitRangeC TinySetLen buffer overrun'); {$ENDIF} end else begin if regcode = @regdummy then begin regsize := RangePCodeIdx + SizeOf (TSetOfREChar); EXIT; end; if (RangePCodeBeg - REOpSz - RENextOffSz)^ = ANYBUTTINYSET then RangeSet := [#0 .. #255] - RangeSet; PREOp (RangePCodeBeg - REOpSz - RENextOffSz)^ := ANYOFFULLSET; regcode := RangePCodeBeg; Move (RangeSet, regcode^, SizeOf (TSetOfREChar)); inc (regcode, SizeOf (TSetOfREChar)); {$IFDEF DebugSynRegExpr} if regcode-programm>regsize then raise Exception.Create('TRegExpr.ParseAtom.EmitRangeC non TinySetLen buffer overrun'); {$ENDIF} end; end; {$ELSE} EmitC (b); {$ENDIF} end; procedure EmitSimpleRangeC (b : REChar); begin RangeBeg := b; EmitRangeC (b); CanBeRange := true; end; procedure EmitRangeStr (const s : RegExprString); var i : PtrInt; begin for i := 1 to length (s) do EmitRangeC (s [i]); end; function UnQuoteChar (var APtr : PRegExprChar) : REChar; //###0.934 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) 'x': begin // \x: hex char Result := #0; inc (APtr); if APtr^ = #0 then begin Error (reeNoHexCodeAfterBSlashX); EXIT; end; if APtr^ = '{' then begin // \x{nnnn} //###0.936 REPEAT inc (APtr); if APtr^ = #0 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^ = #0 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 Result := APtr^; end; end; begin Result := nil; flags:=0; flagp := WORST; // Tentatively. inc (regparse); case (regparse - 1)^ of '^': if ((fCompModifiers and MaskModM) = 0) or ((fLineSeparators = '') and not fLinePairedSeparatorAssigned) then ret := EmitNode (BOL) else ret := EmitNode (BOLML); '$': if ((fCompModifiers and MaskModM) = 0) or ((fLineSeparators = '') and not fLinePairedSeparatorAssigned) then ret := EmitNode (EOL) else ret := EmitNode (EOLML); '.': if (fCompModifiers and MaskModS) <> 0 then begin ret := EmitNode (ANY); flagp := flagp or HASWIDTH or SIMPLE; end else begin // not /s, so emit [^:LineSeparators:] ret := EmitNode (ANYML); flagp := flagp or HASWIDTH; // not so simple ;) // ret := EmitRange (ANYBUT); // EmitRangeStr (LineSeparators); //###0.941 // EmitRangeStr (LinePairedSeparator); // !!! isn't correct if have to accept only paired // EmitRangeC (#0); // flagp := flagp or HASWIDTH or SIMPLE; end; '[': begin if regparse^ = '^' then begin // Complement of range. if (fCompModifiers and MaskModI) <> 0 then ret := EmitRange (ANYBUTCI) else ret := EmitRange (ANYBUT); inc (regparse); end else if (fCompModifiers and MaskModI) <> 0 then ret := EmitRange (ANYOFCI) else ret := EmitRange (ANYOF); CanBeRange := false; if (regparse^ = ']') then begin EmitSimpleRangeC (regparse^); // []-a] -> ']' .. 'a' inc (regparse); end; while (regparse^ <> #0) and (regparse^ <> ']') do begin if (regparse^ = '-') and ((regparse + 1)^ <> #0) and ((regparse + 1)^ <> ']') and CanBeRange then begin inc (regparse); RangeEnd := regparse^; if RangeEnd = EscChar then begin {$IFDEF UniCode} //###0.935 if (ord ((regparse + 1)^) < 256) and (char ((regparse + 1)^) in ['d', 'D', 's', 'S', 'w', 'W']) then begin {$ELSE} if (regparse + 1)^ in ['d', 'D', 's', 'S', 'w', 'W'] then begin {$ENDIF} EmitRangeC ('-'); // or treat as error ?!! CONTINUE; end; inc (regparse); RangeEnd := UnQuoteChar (regparse); end; // r.e.ranges extension for russian if ((fCompModifiers and MaskModR) <> 0) and (RangeBeg = RusRangeLoLow) and (RangeEnd = RusRangeLoHigh) then begin EmitRangeStr (RusRangeLo); end else if ((fCompModifiers and MaskModR) <> 0) and (RangeBeg = RusRangeHiLow) and (RangeEnd = RusRangeHiHigh) then begin EmitRangeStr (RusRangeHi); end else if ((fCompModifiers and MaskModR) <> 0) and (RangeBeg = RusRangeLoLow) and (RangeEnd = RusRangeHiHigh) then begin EmitRangeStr (RusRangeLo); EmitRangeStr (RusRangeHi); end else begin // standard r.e. handling if RangeBeg > RangeEnd then begin Error (reeInvalidRange); EXIT; end; inc (RangeBeg); EmitRangeC (RangeEnd); // prevent infinite loop if RangeEnd=$ff while RangeBeg < RangeEnd do begin //###0.929 EmitRangeC (RangeBeg); inc (RangeBeg); end; end; inc (regparse); end else begin if regparse^ = EscChar then begin inc (regparse); if regparse^ = #0 then begin Error (reeParseAtomTrailingBackSlash); EXIT; end; case regparse^ of // r.e.extensions 'd': EmitRangeStr ('0123456789'); 'w': EmitRangeStr (WordChars); 's': EmitRangeStr (SpaceChars); else EmitSimpleRangeC (UnQuoteChar (regparse)); end; { of case} end else EmitSimpleRangeC (regparse^); inc (regparse); end; end; { of while} EmitRangeC (#0); if regparse^ <> ']' then begin Error (reeUnmatchedSqBrackets); EXIT; end; inc (regparse); flagp := flagp or HASWIDTH or SIMPLE; end; '(': begin if regparse^ = '?' then begin // check for extended Perl syntax : (?..) if (regparse + 1)^ = '#' then begin // (?#comment) inc (regparse, 2); // find closing ')' while (regparse^ <> #0) and (regparse^ <> ')') do inc (regparse); if regparse^ <> ')' then begin Error (reeUnclosedComment); EXIT; end; inc (regparse); // skip ')' ret := EmitNode (COMMENT); // comment end else begin // modifiers ? inc (regparse); // skip '?' begmodfs := regparse; while (regparse^ <> #0) and (regparse^ <> ')') do inc (regparse); if (regparse^ <> ')') or not ParseModifiersStr (copy (begmodfs, 1, (regparse - begmodfs)), fCompModifiers) then begin Error (reeUrecognizedModifier); EXIT; end; inc (regparse); // skip ')' ret := EmitNode (COMMENT); // comment // Error (reeQPSBFollowsNothing); // EXIT; end; end else begin ret := ParseReg (1, flags); if ret = nil then begin Result := nil; EXIT; end; flagp := flagp or flags and (HASWIDTH or SPSTART); end; end; #0, '|', ')': begin // Supposed to be caught earlier. Error (reeInternalUrp); EXIT; end; '?', '+', '*': begin Error (reeQPSBFollowsNothing); EXIT; end; EscChar: begin if regparse^ = #0 then begin Error (reeTrailingBackSlash); EXIT; end; case regparse^ of // r.e.extensions 'b': ret := EmitNode (BOUND); //###0.943 'B': ret := EmitNode (NOTBOUND); //###0.943 'A': ret := EmitNode (BOL); //###0.941 'Z': ret := EmitNode (EOL); //###0.941 'd': begin // r.e.extension - any digit ('0' .. '9') ret := EmitNode (ANYDIGIT); flagp := flagp or HASWIDTH or SIMPLE; end; 'D': begin // r.e.extension - not digit ('0' .. '9') ret := EmitNode (NOTDIGIT); flagp := flagp or HASWIDTH or SIMPLE; end; 's': begin // r.e.extension - any space char {$IFDEF UseSetOfChar} ret := EmitRange (ANYOF); EmitRangeStr (SpaceChars); EmitRangeC (#0); {$ELSE} ret := EmitNode (ANYSPACE); {$ENDIF} flagp := flagp or HASWIDTH or SIMPLE; end; 'S': begin // r.e.extension - not space char {$IFDEF UseSetOfChar} ret := EmitRange (ANYBUT); EmitRangeStr (SpaceChars); EmitRangeC (#0); {$ELSE} ret := EmitNode (NOTSPACE); {$ENDIF} flagp := flagp or HASWIDTH or SIMPLE; end; 'w': begin // r.e.extension - any english char / digit / '_' {$IFDEF UseSetOfChar} ret := EmitRange (ANYOF); EmitRangeStr (WordChars); EmitRangeC (#0); {$ELSE} ret := EmitNode (ANYLETTER); {$ENDIF} flagp := flagp or HASWIDTH or SIMPLE; end; 'W': begin // r.e.extension - not english char / digit / '_' {$IFDEF UseSetOfChar} ret := EmitRange (ANYBUT); EmitRangeStr (WordChars); EmitRangeC (#0); {$ELSE} ret := EmitNode (NOTLETTER); {$ENDIF} flagp := flagp or HASWIDTH or SIMPLE; end; '1' .. '9': begin //###0.936 if (fCompModifiers and MaskModI) <> 0 then ret := EmitNode (BSUBEXPCI) else ret := EmitNode (BSUBEXP); EmitC (REChar (ord (regparse^) - ord ('0'))); flagp := flagp or HASWIDTH or SIMPLE; end; else EmitExactly (UnQuoteChar (regparse)); end; { of case} inc (regparse); end; else begin dec (regparse); if ((fCompModifiers and MaskModX) <> 0) and // check for eXtended syntax ((regparse^ = '#') or ({$IFDEF UniCode}StrScan (XIgnoredChars, regparse^) <> nil //###0.947 {$ELSE}regparse^ in XIgnoredChars{$ENDIF})) then begin //###0.941 \x if regparse^ = '#' then begin // Skip eXtended comment // find comment terminator (group of \n and/or \r) while (regparse^ <> #0) 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 {$IFDEF UniCode}StrScan (XIgnoredChars, regparse^) <> nil //###0.947 {$ELSE}regparse^ in XIgnoredChars{$ENDIF} do inc (regparse); end; ret := EmitNode (COMMENT); // comment end else begin len := strcspn (regparse, META); if len <= 0 then if regparse^ <> '{' then begin Error (reeRarseAtomInternalDisaster); EXIT; end else len := strcspn (regparse + 1, META) + 1; // bad {n,m} - compile as EXATLY ender := (regparse + len)^; if (len > 1) and ((ender = '*') or (ender = '+') or (ender = '?') or (ender = '{')) then dec (len); // Back off clear of ?+*{ operand. flagp := flagp or HASWIDTH; if len = 1 then flagp := flagp or SIMPLE; if (fCompModifiers and MaskModI) <> 0 then ret := EmitNode (EXACTLYCI) else ret := EmitNode (EXACTLY); while (len > 0) and (((fCompModifiers and MaskModX) = 0) or (regparse^ <> '#')) do begin if ((fCompModifiers and MaskModX) = 0) or not ( //###0.941 {$IFDEF UniCode}StrScan (XIgnoredChars, regparse^) <> nil //###0.947 {$ELSE}regparse^ in XIgnoredChars{$ENDIF} ) then EmitC (regparse^); inc (regparse); dec (len); end; EmitC (#0); 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 (regexpbeg = nil) or (regparse = nil) then EXIT; // not in compiling mode ? Result := regparse - regexpbeg; end; { of function TRegExpr.GetCompilerErrorPos --------------------------------------------------------------} {=============================================================} {===================== Matching section ======================} {=============================================================} {$IFNDEF UseSetOfChar} function TRegExpr.StrScanCI (s : PRegExprChar; ch : REChar) : PRegExprChar; //###0.928 - now method of TRegExpr begin while (s^ <> #0) and (s^ <> ch) and (s^ <> InvertCase (ch)) do inc (s); if s^ <> #0 then Result := s else Result := nil; end; { of function TRegExpr.StrScanCI --------------------------------------------------------------} {$ENDIF} function TRegExpr.regrepeat (p : PRegExprChar; AMax : PtrInt) : PtrInt; // repeatedly match something simple, report how many var scan : PRegExprChar; opnd : PRegExprChar; TheMax : integer; {Ch,} InvCh : REChar; //###0.931 sestart, seend : PRegExprChar; //###0.936 begin Result := 0; scan := reginput; opnd := p + REOpSz + RENextOffSz; //OPERAND TheMax := fInputEnd - scan; if TheMax > AMax then TheMax := AMax; case PREOp (p)^ of ANY: begin // note - ANYML cannot be proceeded in regrepeat because can skip // more than one char at once Result := TheMax; inc (scan, Result); end; EXACTLY: begin // in opnd can be only ONE char !!! // Ch := opnd^; // store in register //###0.931 while (Result < TheMax) and (opnd^ = scan^) do begin inc (Result); inc (scan); end; end; EXACTLYCI: begin // in opnd can be only ONE char !!! // Ch := opnd^; // store in register //###0.931 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 InvCh := InvertCase (opnd^); // store in register while (Result < TheMax) and ((opnd^ = scan^) or (InvCh = scan^)) do begin inc (Result); inc (scan); end; end; end; BSUBEXP: begin //###0.936 sestart := startp [ord (opnd^)]; if sestart = nil then EXIT; seend := endp [ord (opnd^)]; if seend = nil then EXIT; REPEAT opnd := sestart; while opnd < seend do begin if (scan >= fInputEnd) or (scan^ <> opnd^) then EXIT; inc (scan); inc (opnd); end; inc (Result); reginput := scan; UNTIL Result >= AMax; end; BSUBEXPCI: begin //###0.936 sestart := startp [ord (opnd^)]; if sestart = nil then EXIT; seend := endp [ord (opnd^)]; if seend = nil then EXIT; REPEAT opnd := sestart; while opnd < seend 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; ANYDIGIT: while (Result < TheMax) and isDigit(Scan) do begin inc (Result); inc (scan); end; NOTDIGIT: while (Result < TheMax) and not IsDigit(Scan) do begin inc (Result); inc (scan); end; {$IFNDEF UseSetOfChar} //###0.929 ANYLETTER: while (Result < TheMax) and IsWordChar(scan^) do //###0.940 begin inc (Result); inc (scan); end; NOTLETTER: while (Result < TheMax) and not IsWordChar(scan^) do //###0.940 begin inc (Result); inc (scan); end; ANYSPACE: while (Result < TheMax) and IsSpaceChar(scan) do begin inc (Result); inc (scan); end; NOTSPACE: while (Result < TheMax) and Not IsSpaceChar(scan) do begin inc (Result); inc (scan); end; {$ENDIF} ANYOFTINYSET: begin while (Result < TheMax) and //!!!TinySet ((scan^ = opnd^) or (scan^ = (opnd + 1)^) or (scan^ = (opnd + 2)^)) do begin inc (Result); inc (scan); end; end; ANYBUTTINYSET: begin while (Result < TheMax) and //!!!TinySet (scan^ <> opnd^) and (scan^ <> (opnd + 1)^) and (scan^ <> (opnd + 2)^) do begin inc (Result); inc (scan); end; end; {$IFDEF UseSetOfChar} //###0.929 ANYOFFULLSET: begin while (Result < TheMax) and (scan^ in PSetOfREChar (opnd)^) do begin inc (Result); inc (scan); end; end; {$ELSE} ANYOF: while (Result < TheMax) and (StrScan (opnd, scan^) <> nil) do begin inc (Result); inc (scan); end; ANYBUT: while (Result < TheMax) and (StrScan (opnd, scan^) = nil) do begin inc (Result); inc (scan); end; ANYOFCI: while (Result < TheMax) and (StrScanCI (opnd, scan^) <> nil) do begin inc (Result); inc (scan); end; ANYBUTCI: while (Result < TheMax) and (StrScanCI (opnd, scan^) = nil) do begin inc (Result); inc (scan); end; {$ENDIF} else begin // Oh dear. Called inappropriately. Result := 0; // Best compromise. Error (reeRegRepeatCalledInappropriately); EXIT; end; end; { of case} reginput := scan; end; { of function TRegExpr.regrepeat --------------------------------------------------------------} 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. Type TLoopStack = array [1 .. LoopStackMax] of integer; var scan : PRegExprChar; // Current node. next : PRegExprChar; // Next node. len : PtrInt; opnd : PRegExprChar; no : PtrInt; save : PRegExprChar; nextch : REChar; BracesMin, BracesMax : PtrInt; // we use integer instead of TREBracesArg for better support */+ {$IFDEF ComplexBraces} SavedLoopStack : TloopStack; // :(( very bad for recursion SavedLoopStackIdx : integer; //###0.925 {$ENDIF} begin Result := false; scan := prog; SavedLoopStack:=Default(TLoopStack); 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 NOTBOUND, //###0.943 //!!! think about UseSetOfChar !!! BOUND: if (scan^ = BOUND) xor ( ((reginput = fInputStart) or not IsWordChar((reginput - 1)^)) and (reginput^ <> #0) and IsWordChar(reginput^) or (reginput <> fInputStart) and IsWordChar((reginput - 1)^) and ((reginput^ = #0) or not IsWordChar(reginput^))) then EXIT; BOL: if reginput <> fInputStart then EXIT; EOL: if reginput^ <> #0 then EXIT; BOLML: if reginput > fInputStart then begin nextch := (reginput - 1)^; if (nextch <> fLinePairedSeparatorTail) or ((reginput - 1) <= fInputStart) or ((reginput - 2)^ <> fLinePairedSeparatorHead) then begin if (nextch = fLinePairedSeparatorHead) and (reginput^ = fLinePairedSeparatorTail) then EXIT; // don't stop between paired separator if {$IFNDEF UniCode} not (nextch in fLineSeparatorsSet) {$ELSE} (pos (nextch, fLineSeparators) <= 0) {$ENDIF} then EXIT; end; end; EOLML: if reginput^ <> #0 then begin nextch := reginput^; if (nextch <> fLinePairedSeparatorHead) or ((reginput + 1)^ <> fLinePairedSeparatorTail) then begin if (nextch = fLinePairedSeparatorTail) and (reginput > fInputStart) and ((reginput - 1)^ = fLinePairedSeparatorHead) then EXIT; // don't stop between paired separator if {$IFNDEF UniCode} not (nextch in fLineSeparatorsSet) {$ELSE} (pos (nextch, fLineSeparators) <= 0) {$ENDIF} then EXIT; end; end; ANY: begin if reginput^ = #0 then EXIT; inc (reginput); end; ANYML: begin //###0.941 if (reginput^ = #0) or ((reginput^ = fLinePairedSeparatorHead) and ((reginput + 1)^ = fLinePairedSeparatorTail)) or {$IFNDEF UniCode} (reginput^ in fLineSeparatorsSet) {$ELSE} (pos (reginput^, fLineSeparators) > 0) {$ENDIF} then EXIT; inc (reginput); end; ANYDIGIT: begin if (reginput^ = #0) or Not IsDigit(reginput) then EXIT; inc (reginput); end; NOTDIGIT: begin if (reginput^ = #0) or IsDigit(reginput) then EXIT; inc (reginput); end; {$IFNDEF UseSetOfChar} //###0.929 ANYLETTER: begin if (reginput^ = #0) or not IsWordChar(reginput^) //###0.943 then EXIT; inc (reginput); end; NOTLETTER: begin if (reginput^ = #0) or IsWordChar(reginput^) //###0.943 then EXIT; inc (reginput); end; ANYSPACE: begin if (reginput^ = #0) or not IsSpaceChar(reginput) //###0.943 then EXIT; inc (reginput); end; NOTSPACE: begin if (reginput^ = #0) or IsSpaceChar(reginput) //###0.943 then EXIT; inc (reginput); end; {$ENDIF} EXACTLYCI: begin opnd := scan + REOpSz + RENextOffSz; // OPERAND // Inline the first character, for speed. if (opnd^ <> reginput^) and (InvertCase (opnd^) <> reginput^) then EXIT; len := strlen (opnd); //###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; EXACTLY: begin opnd := scan + REOpSz + RENextOffSz; // OPERAND // Inline the first character, for speed. if opnd^ <> reginput^ then EXIT; len := strlen (opnd); //###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; BSUBEXP: begin //###0.936 no := ord ((scan + REOpSz + RENextOffSz)^); if startp [no] = nil then EXIT; if endp [no] = nil then EXIT; save := reginput; opnd := startp [no]; while opnd < endp [no] do begin if (save >= fInputEnd) or (save^ <> opnd^) then EXIT; inc (save); inc (opnd); end; reginput := save; end; BSUBEXPCI: begin //###0.936 no := ord ((scan + REOpSz + RENextOffSz)^); if startp [no] = nil then EXIT; if endp [no] = nil then EXIT; save := reginput; opnd := startp [no]; while opnd < endp [no] do begin if (save >= fInputEnd) or ((save^ <> opnd^) and (save^ <> InvertCase (opnd^))) then EXIT; inc (save); inc (opnd); end; reginput := save; end; ANYOFTINYSET: begin if (reginput^ = #0) or //!!!TinySet ((reginput^ <> (scan + REOpSz + RENextOffSz)^) and (reginput^ <> (scan + REOpSz + RENextOffSz + 1)^) and (reginput^ <> (scan + REOpSz + RENextOffSz + 2)^)) then EXIT; inc (reginput); end; ANYBUTTINYSET: begin if (reginput^ = #0) or //!!!TinySet (reginput^ = (scan + REOpSz + RENextOffSz)^) or (reginput^ = (scan + REOpSz + RENextOffSz + 1)^) or (reginput^ = (scan + REOpSz + RENextOffSz + 2)^) then EXIT; inc (reginput); end; {$IFDEF UseSetOfChar} //###0.929 ANYOFFULLSET: begin if (reginput^ = #0) or not (reginput^ in PSetOfREChar (scan + REOpSz + RENextOffSz)^) then EXIT; inc (reginput); end; {$ELSE} ANYOF: begin if (reginput^ = #0) or (StrScan (scan + REOpSz + RENextOffSz, reginput^) = nil) then EXIT; inc (reginput); end; ANYBUT: begin if (reginput^ = #0) or (StrScan (scan + REOpSz + RENextOffSz, reginput^) <> nil) then EXIT; inc (reginput); end; ANYOFCI: begin if (reginput^ = #0) or (StrScanCI (scan + REOpSz + RENextOffSz, reginput^) = nil) then EXIT; inc (reginput); end; ANYBUTCI: begin if (reginput^ = #0) or (StrScanCI (scan + REOpSz + RENextOffSz, reginput^) <> nil) then EXIT; inc (reginput); end; {$ENDIF} NOTHING: ; COMMENT: ; BACK: ; Succ (OPEN) .. TREOp (Ord (OPEN) + NSUBEXP - 1) : begin //###0.929 no := ord (scan^) - ord (OPEN); // save := reginput; save := startp [no]; //###0.936 startp [no] := reginput; //###0.936 Result := MatchPrim (next); if not Result //###0.936 then startp [no] := save; // if Result and (startp [no] = nil) // then startp [no] := save; // Don't set startp if some later invocation of the same // parentheses already has. EXIT; end; Succ (CLOSE) .. TREOp (Ord (CLOSE) + NSUBEXP - 1): begin //###0.929 no := ord (scan^) - ord (CLOSE); // save := reginput; save := endp [no]; //###0.936 endp [no] := reginput; //###0.936 Result := MatchPrim (next); if not Result //###0.936 then endp [no] := save; // if Result and (endp [no] = nil) // then endp [no] := save; // Don't set endp if some later invocation of the same // parentheses already has. EXIT; end; BRANCH: begin if (next^ <> BRANCH) // No choice. then next := scan + REOpSz + RENextOffSz // Avoid recursion else begin REPEAT save := reginput; Result := MatchPrim (scan + REOpSz + RENextOffSz); if Result then EXIT; reginput := save; scan := regnext (scan); UNTIL (scan = nil) or (scan^ <> BRANCH); EXIT; end; end; {$IFDEF ComplexBraces} 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; LOOP, 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^ = 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} STAR, PLUS, BRACES, STARNG, PLUSNG, BRACESNG: begin // Lookahead to avoid useless match attempts when we know // what character comes next. nextch := #0; if next^ = EXACTLY then nextch := (next + REOpSz + RENextOffSz)^; BracesMax := MaxInt; // infinite loop for * and + //###0.92 if (scan^ = STAR) or (scan^ = STARNG) then BracesMin := 0 // STAR else if (scan^ = PLUS) or (scan^ = 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^ = BRACES) or (scan^ = BRACESNG) then inc (opnd, 2 * REBracesArgSz); if (scan^ = PLUSNG) or (scan^ = STARNG) or (scan^ = BRACESNG) then begin // non-greedy mode BracesMax := regrepeat (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 := regrepeat (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; EEND: begin Result := true; // Success! EXIT; 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 --------------------------------------------------------------} {$IFDEF UseFirstCharSet} //###0.929 procedure TRegExpr.FillFirstCharSet (prog : PRegExprChar); var scan : PRegExprChar; // Current node. next : PRegExprChar; // Next node. opnd : PRegExprChar; min_cnt : integer; begin scan := prog; while scan <> nil do begin next := regnext (scan); case PREOp (scan)^ of BSUBEXP, BSUBEXPCI: begin //###0.938 FirstCharSet := [#0 .. #255]; // :((( we cannot // optimize r.e. if it starts with back reference EXIT; end; BOL, BOLML: ; // EXIT; //###0.937 EOL, EOLML: begin //###0.948 was empty in 0.947, was EXIT in 0.937 Include (FirstCharSet, #0); if ModifierM then begin opnd := PRegExprChar (LineSeparators); while opnd^ <> #0 do begin Include (FirstCharSet, opnd^); inc (opnd); end; end; EXIT; end; BOUND, NOTBOUND: ; //###0.943 ?!! ANY, ANYML: begin // we can better define ANYML !!! FirstCharSet := [#0 .. #255]; //###0.930 EXIT; end; ANYDIGIT: begin FirstCharSet := FirstCharSet + ['0' .. '9']; EXIT; end; NOTDIGIT: begin FirstCharSet := FirstCharSet + ([#0 .. #255] - ['0' .. '9']); //###0.948 FirstCharSet was forgotten EXIT; end; EXACTLYCI: begin Include (FirstCharSet, (scan + REOpSz + RENextOffSz)^); Include (FirstCharSet, InvertCase ((scan + REOpSz + RENextOffSz)^)); EXIT; end; EXACTLY: begin Include (FirstCharSet, (scan + REOpSz + RENextOffSz)^); EXIT; end; ANYOFFULLSET: begin FirstCharSet := FirstCharSet + PSetOfREChar (scan + REOpSz + RENextOffSz)^; EXIT; end; ANYOFTINYSET: begin //!!!TinySet Include (FirstCharSet, (scan + REOpSz + RENextOffSz)^); Include (FirstCharSet, (scan + REOpSz + RENextOffSz + 1)^); Include (FirstCharSet, (scan + REOpSz + RENextOffSz + 2)^); // ... // up to TinySetLen EXIT; end; ANYBUTTINYSET: begin //!!!TinySet FirstCharSet := FirstCharSet + ([#0 .. #255] - [ //###0.948 FirstCharSet was forgotten (scan + REOpSz + RENextOffSz)^, (scan + REOpSz + RENextOffSz + 1)^, (scan + REOpSz + RENextOffSz + 2)^]); // ... // up to TinySetLen EXIT; end; NOTHING: ; COMMENT: ; BACK: ; Succ (OPEN) .. TREOp (Ord (OPEN) + NSUBEXP - 1) : begin //###0.929 FillFirstCharSet (next); EXIT; end; Succ (CLOSE) .. TREOp (Ord (CLOSE) + NSUBEXP - 1): begin //###0.929 FillFirstCharSet (next); EXIT; end; BRANCH: begin if (PREOp (next)^ <> 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)^ <> BRANCH); EXIT; end; end; {$IFDEF ComplexBraces} LOOPENTRY: begin //###0.925 // LoopStack [LoopStackIdx] := 0; //###0.940 line removed FillFirstCharSet (next); // execute LOOP EXIT; end; LOOP, 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} STAR, STARNG: //###0.940 FillFirstCharSet (scan + REOpSz + RENextOffSz); PLUS, PLUSNG: begin //###0.940 FillFirstCharSet (scan + REOpSz + RENextOffSz); EXIT; end; BRACES, BRACESNG: 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; EEND: begin FirstCharSet := [#0 .. #255]; //###0.948 EXIT; end; else begin Error (reeMatchPrimMemoryCorruption); EXIT; end; end; { of case scan^} scan := next; end; { of while scan <> nil} end; { of procedure FillFirstCharSet --------------------------------------------------------------} {$ENDIF} function TRegExpr.Exec (const AInputString : RegExprString) : boolean; begin InputString := AInputString; Result := ExecPrim (1); end; { of function TRegExpr.Exec --------------------------------------------------------------} function TRegExpr.Exec : boolean; begin Result := ExecPrim (1); end; { of function TRegExpr.Exec --------------------------------------------------------------} function TRegExpr.Exec (AOffset: PtrInt) : boolean; begin Result := ExecPrim (AOffset); end; { of function TRegExpr.Exec --------------------------------------------------------------} function TRegExpr.ExecPos (AOffset: PtrInt {$IFDEF DefParam}= 1{$ENDIF}) : boolean; begin Result := ExecPrim (AOffset); end; { of function TRegExpr.ExecPos --------------------------------------------------------------} function TRegExpr.ExecPrim (AOffset: PtrInt) : boolean; procedure ClearMatchs; // Clears matchs array var i : integer; begin for i := 0 to NSUBEXP - 1 do begin startp [i] := nil; endp [i] := nil; end; end; { of procedure ClearMatchs; ..............................................................} function RegMatch (str : PRegExprChar) : boolean; // try match at specific point begin //###0.949 removed clearing of start\endp reginput := str; Result := MatchPrim (programm + REOpSz); if Result then begin startp [0] := str; endp [0] := reginput; end; end; { of function RegMatch ..............................................................} var s : PRegExprChar; StartPtr: PRegExprChar; InputLen : PtrInt; begin Result := false; // Be paranoid... ClearMatchs; //###0.949 // ensure that Match cleared either if optimization tricks or some error // will lead to leaving ExecPrim without actual search. That is // importent for ExecNext logic and so on. if not IsProgrammOk //###0.929 then EXIT; // Check InputString presence if not Assigned (fInputString) then begin Error (reeNoInputStringSpecified); EXIT; end; InputLen := length (fInputString); //Check that the start position is not negative if AOffset < 1 then begin Error (reeOffsetMustBeGreaterThen0); EXIT; end; // Check that the start position is not longer than the line // If so then exit with nothing found if AOffset > (InputLen + 1) // for matching empty string after last char. then EXIT; StartPtr := fInputString + AOffset - 1; // If there is a "must appear" string, look for it. if regmust <> nil then begin s := StartPtr; REPEAT s := StrScan (s, regmust [0]); if s <> nil then begin if StrLComp (s, regmust, regmlen) = 0 then BREAK; // Found it. inc (s); end; UNTIL s = nil; if s = nil // Not present. then EXIT; end; // Mark beginning of line for ^ . fInputStart := fInputString; // Pointer to end of input stream - for // pascal-style string processing (may include #0) fInputEnd := fInputString + InputLen; {$IFDEF ComplexBraces} // no loops started LoopStackIdx := 0; //###0.925 {$ENDIF} // Simplest case: anchored match need be tried only once. if reganch <> #0 then begin Result := RegMatch (StartPtr); EXIT; end; // Messy cases: unanchored match. s := StartPtr; if regstart <> #0 then // We know what char it must start with. REPEAT s := StrScan (s, regstart); if s <> nil then begin Result := RegMatch (s); if Result then EXIT else ClearMatchs; //###0.949 inc (s); end; UNTIL s = nil else begin // We don't - general case. repeat //###0.948 {$IFDEF UseFirstCharSet} if s^ in FirstCharSet then Result := RegMatch (s); {$ELSE} Result := RegMatch (s); {$ENDIF} if Result or (s^ = #0) // Exit on a match or after testing the end-of-string. then EXIT else ClearMatchs; //###0.949 inc (s); until false; (* optimized and fixed by Martin Fuller - empty strings were not allowed to pass through in UseFirstCharSet mode {$IFDEF UseFirstCharSet} //###0.929 while s^ <> #0 do begin if s^ in FirstCharSet then Result := RegMatch (s); if Result then EXIT; inc (s); end; {$ELSE} REPEAT Result := RegMatch (s); if Result then EXIT; inc (s); UNTIL s^ = #0; {$ENDIF} *) end; // Failure end; { of function TRegExpr.ExecPrim --------------------------------------------------------------} function TRegExpr.ExecNext : boolean; var offset : PtrInt; begin Result := false; if not Assigned (startp[0]) or not Assigned (endp[0]) then begin Error (reeExecNextWithoutExec); EXIT; end; // Offset := MatchPos [0] + MatchLen [0]; // if MatchLen [0] = 0 Offset := endp [0] - fInputString + 1; //###0.929 if endp [0] = startp [0] //###0.929 then inc (Offset); // prevent infinite looping if empty string match r.e. Result := ExecPrim (Offset); end; { of function TRegExpr.ExecNext --------------------------------------------------------------} function TRegExpr.GetInputString : RegExprString; begin if not Assigned (fInputString) then begin Error (reeGetInputStringWithoutInputString); EXIT; end; Result := fInputString; end; { of function TRegExpr.GetInputString --------------------------------------------------------------} procedure TRegExpr.SetInputString (const AInputString : RegExprString); var Len : PtrInt; i : PtrInt; begin // clear Match* - before next Exec* call it's undefined for i := 0 to NSUBEXP - 1 do begin startp [i] := nil; endp [i] := nil; end; // need reallocation of input string buffer ? Len := length (AInputString); ReAllocMem(fInputString,(Len + 1) * SizeOf (REChar)); // copy input string into buffer if Len>0 then System.Move(AInputString[1],fInputString^,(Len+1)* SizeOf (REChar)) // with #0 else fInputString[0]:=#0; { fInputString : string; fInputStart, fInputEnd : PRegExprChar; SetInputString: fInputString := AInputString; UniqueString (fInputString); fInputStart := PChar (fInputString); Len := length (fInputString); fInputEnd := PRegExprChar (integer (fInputStart) + Len); ?? !! startp/endp все равно будет опасно использовать ? } end; { of procedure TRegExpr.SetInputString --------------------------------------------------------------} procedure TRegExpr.SetLineSeparators (const AStr : RegExprString); begin if AStr <> fLineSeparators then begin fLineSeparators := AStr; InvalidateProgramm; end; end; { of procedure TRegExpr.SetLineSeparators --------------------------------------------------------------} procedure TRegExpr.SetLinePairedSeparator (const AStr : RegExprString); begin if length (AStr) = 2 then begin if AStr [1] = AStr [2] then begin // it's impossible for our 'one-point' checking to support // two chars separator for identical chars Error (reeBadLinePairedSeparator); EXIT; end; if not fLinePairedSeparatorAssigned or (AStr [1] <> fLinePairedSeparatorHead) or (AStr [2] <> fLinePairedSeparatorTail) then begin fLinePairedSeparatorAssigned := true; fLinePairedSeparatorHead := AStr [1]; fLinePairedSeparatorTail := AStr [2]; InvalidateProgramm; end; end else if length (AStr) = 0 then begin if fLinePairedSeparatorAssigned then begin fLinePairedSeparatorAssigned := false; InvalidateProgramm; end; end else Error (reeBadLinePairedSeparator); end; { of procedure TRegExpr.SetLinePairedSeparator --------------------------------------------------------------} function TRegExpr.GetLinePairedSeparator : RegExprString; begin if fLinePairedSeparatorAssigned then begin {$IFDEF UniCode} // Here is some UniCode 'magic' // If You do know better decision to concatenate // two WideChars, please, let me know! Result := fLinePairedSeparatorHead; //###0.947 Result := Result + fLinePairedSeparatorTail; {$ELSE} Result := fLinePairedSeparatorHead + fLinePairedSeparatorTail; {$ENDIF} end else Result := ''; end; { of function TRegExpr.GetLinePairedSeparator --------------------------------------------------------------} function TRegExpr.Substitute (const ATemplate : RegExprString) : RegExprString; // perform substitutions after a regexp match // completely rewritten in 0.929 type TSubstMode = (smodeNormal, smodeOneUpper, smodeOneLower, smodeAllUpper, smodeAllLower); var TemplateLen : PtrInt; TemplateBeg, TemplateEnd : PRegExprChar; p, p0, p1, ResultPtr : PRegExprChar; ResultLen : PtrInt; n : PtrInt; Ch : REChar; Mode: TSubstMode; LineEnd: String = {$ifdef UseOsLineEndOnReplace} System.LineEnding {$else} Chr(10) {$endif}; function ParseVarName (var APtr : PRegExprChar) : PtrInt; // extract name of variable (digits, may be enclosed with // curly braces) from APtr^, uses TemplateEnd !!! const Digits = ['0' .. '9']; var p : PRegExprChar; Delimited : boolean; 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 while (p < TemplateEnd) and IsDigit(p) do begin Result := Result * 10 + (ord (p^) - ord ('0')); //###0.939 inc (p); 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; begin // Check programm and input string if not IsProgrammOk then EXIT; if not Assigned (fInputString) then begin Error (reeNoInputStringSpecified); EXIT; end; // Prepare for working TemplateLen := length (ATemplate); if TemplateLen = 0 then begin // prevent nil pointers Result := ''; EXIT; end; TemplateBeg := pointer (ATemplate); TemplateEnd := TemplateBeg + TemplateLen; // Count result length for speed optimization. ResultLen := 0; p := TemplateBeg; while p < TemplateEnd do begin Ch := p^; inc (p); if Ch = '$' then n := ParseVarName (p) else n := -1; if n >= 0 then begin if (n < NSUBEXP) and Assigned (startp [n]) and Assigned (endp [n]) then inc (ResultLen, endp [n] - startp [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(LineEnd)); 'u', 'l', 'U', 'L': {nothing}; 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; //SetString (Result, nil, ResultLen); SetLength(Result,ResultLen); // Fill Result ResultPtr := pointer (Result); p := TemplateBeg; Mode := smodeNormal; while p < TemplateEnd do begin Ch := p^; p0 := p; inc (p); p1 := p; if Ch = '$' then n := ParseVarName (p) else n := -1; if (n >= 0) then begin p0 := startp[n]; p1 := endp[n]; if (n >= NSUBEXP) or not Assigned (p0) or not Assigned (endp [n]) then p1 := p0; // empty 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 := @LineEnd[1]; p1 := p0 + Length(LineEnd); 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, smodeAllLower: begin Ch := p0^; {$IFDEF UNICODE} Ch := UnicodeLowerCase(Ch)[1]; {$ELSE} Ch := Chr(FLowerCase[Ord(Ch)]); {$ENDIF} ResultPtr^ := Ch; if Mode = smodeOneLower then Mode := smodeNormal; end; smodeOneUpper, smodeAllUpper: begin Ch := p0^; {$IFDEF UNICODE} Ch := UnicodeUpperCase(Ch)[1]; {$ELSE} Ch := Chr(FUpperCase[Ord(Ch)]); {$ENDIF} ResultPtr^ := Ch; if Mode = smodeOneUpper then Mode := smodeNormal; 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 {$IFDEF FPC}Result:={$ENDIF}ReplaceEx (AInputStr, AReplaceFunc); end; { of function TRegExpr.Replace --------------------------------------------------------------} {$ENDIF} {=============================================================} {====================== Debug section ========================} {=============================================================} {$IFDEF RegExpPCodeDump} function TRegExpr.DumpOp (op : TREOp) : RegExprString; // printable representation of opcode begin case op of BOL: Result := 'BOL'; EOL: Result := 'EOL'; BOLML: Result := 'BOLML'; EOLML: Result := 'EOLML'; BOUND: Result := 'BOUND'; //###0.943 NOTBOUND: Result := 'NOTBOUND'; //###0.943 ANY: Result := 'ANY'; ANYML: Result := 'ANYML'; //###0.941 ANYLETTER: Result := 'ANYLETTER'; NOTLETTER: Result := 'NOTLETTER'; ANYDIGIT: Result := 'ANYDIGIT'; NOTDIGIT: Result := 'NOTDIGIT'; ANYSPACE: Result := 'ANYSPACE'; NOTSPACE: Result := 'NOTSPACE'; ANYOF: Result := 'ANYOF'; ANYBUT: Result := 'ANYBUT'; ANYOFCI: Result := 'ANYOF/CI'; ANYBUTCI: Result := 'ANYBUT/CI'; BRANCH: Result := 'BRANCH'; EXACTLY: Result := 'EXACTLY'; EXACTLYCI: Result := 'EXACTLY/CI'; NOTHING: Result := 'NOTHING'; COMMENT: Result := 'COMMENT'; BACK: Result := 'BACK'; EEND: Result := 'END'; BSUBEXP: Result := 'BSUBEXP'; BSUBEXPCI: Result := 'BSUBEXP/CI'; Succ (OPEN) .. TREOp (Ord (OPEN) + NSUBEXP - 1): //###0.929 Result := Format ('OPEN[%d]', [ord (op) - ord (OPEN)]); Succ (CLOSE) .. TREOp (Ord (CLOSE) + NSUBEXP - 1): //###0.929 Result := Format ('CLOSE[%d]', [ord (op) - ord (CLOSE)]); STAR: Result := 'STAR'; PLUS: Result := 'PLUS'; BRACES: Result := 'BRACES'; {$IFDEF ComplexBraces} LOOPENTRY: Result := 'LOOPENTRY'; //###0.925 LOOP: Result := 'LOOP'; //###0.925 LOOPNG: Result := 'LOOPNG'; //###0.940 {$ENDIF} ANYOFTINYSET: Result:= 'ANYOFTINYSET'; ANYBUTTINYSET:Result:= 'ANYBUTTINYSET'; {$IFDEF UseSetOfChar} //###0.929 ANYOFFULLSET: Result:= 'ANYOFFULLSET'; {$ENDIF} STARNG: Result := 'STARNG'; //###0.940 PLUSNG: Result := 'PLUSNG'; //###0.940 BRACESNG: Result := 'BRACESNG'; //###0.940 else Error (reeDumpCorruptedOpcode); end; {of case op} Result := ':' + Result; end; { of function TRegExpr.DumpOp --------------------------------------------------------------} function TRegExpr.Dump : RegExprString; // dump a regexp in vaguely comprehensible form var s : PRegExprChar; op : TREOp; // Arbitrary non-END op. next : PRegExprChar; i : PtrInt; Diff : PtrInt; {$IFDEF UseSetOfChar} //###0.929 Ch : REChar; {$ENDIF} begin if not IsProgrammOk //###0.929 then EXIT; op := EXACTLY; Result := ''; s := programm + REOpSz; while 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 = ANYOF) or (op = ANYOFCI) or (op = ANYBUT) or (op = ANYBUTCI) or (op = EXACTLY) or (op = EXACTLYCI) then begin // Literal string, where present. while s^ <> #0 do begin Result := Result + s^; inc (s); end; inc (s); end; if (op = ANYOFTINYSET) or (op = ANYBUTTINYSET) then begin for i := 1 to TinySetLen do begin Result := Result + s^; inc (s); end; end; if (op = BSUBEXP) or (op = BSUBEXPCI) then begin Result := Result + ' \' + IntToStr (Ord (s^)); inc (s); end; {$IFDEF UseSetOfChar} //###0.929 if op = ANYOFFULLSET then begin for Ch := #0 to #255 do if Ch in PSetOfREChar (s)^ then if Ch < ' ' then Result := Result + '#' + IntToStr (Ord (Ch)) //###0.936 else Result := Result + Ch; inc (s, SizeOf (TSetOfREChar)); end; {$ENDIF} if (op = BRACES) or (op = BRACESNG) 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 = LOOP) or (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} Result := Result + #$d#$a; end; { of while} // Header fields of interest. if regstart <> #0 then Result := Result + 'start ' + regstart; if reganch <> #0 then Result := Result + 'anchored '; if regmust <> nil then Result := Result + 'must have ' + regmust; {$IFDEF UseFirstCharSet} //###0.929 Result := Result + #$d#$a'FirstCharSet:'; for Ch := #0 to #255 do if Ch in FirstCharSet then begin if Ch < ' ' then Result := Result + '#' + IntToStr(Ord(Ch)) //###0.948 else Result := Result + Ch; end; {$ENDIF} Result := Result + #$d#$a; end; { of function TRegExpr.Dump --------------------------------------------------------------} 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; {$ENDIF} procedure TRegExpr.Error (AErrorID : integer); var e : ERegExpr; begin fLastError := AErrorID; // dummy stub - useless because will raise exception if AErrorID < 1000 // compilation error ? then e := ERegExpr.Create (ErrorMsg (AErrorID) // yes - show error pos + ' (pos ' + IntToStr (CompilerErrorPos) + ')') else e := ERegExpr.Create (ErrorMsg (AErrorID)); e.ErrorCode := AErrorID; e.CompilerErrorPos := CompilerErrorPos; raise e end; { of procedure TRegExpr.Error --------------------------------------------------------------} (* PCode persistence: FirstCharSet programm, regsize regstart // -> programm reganch // -> programm regmust, regmlen // -> programm fExprIsCompiled *) initialization RegExprInvertCaseFunction := TRegExpr.InvertCaseFunction; end. doublecmd-0.9.8/src/uquickviewpanel.pas0000644000175000001440000001352713611060423017242 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Quick view panel 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 uQuickViewPanel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, fViewer, uFileViewNotebook, uFile, uFileSource, uFileView; type { TQuickViewPanel } TQuickViewPanel = class(TPanel) private FFirstFile: Boolean; FFileViewPage: TFileViewPage; FFileView: TFileView; FFileSource: IFileSource; FViewer: TfrmViewer; FFileName: String; private procedure LoadFile(const aFileName: String); procedure OnChangeFileView(Sender: TObject); procedure CreateViewer(aFileView: TFileView); procedure FileViewChangeActiveFile(Sender: TFileView; const aFile : TFile); 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, Controls, uTempFileSystemFileSource, uFileSourceProperty, uFileSourceOperation, uFileSourceOperationTypes; procedure QuickViewShow(aFileViewPage: TFileViewPage; aFileView: TFileView); var aFile: TFile = nil; begin QuickViewPanel:= TQuickViewPanel.Create(Application, aFileViewPage); QuickViewPanel.CreateViewer(aFileView); aFile := aFileView.CloneActiveFile; try QuickViewPanel.FileViewChangeActiveFile(aFileView, aFile); finally FreeAndNil(aFile); end; end; procedure QuickViewClose; begin FreeAndNil(QuickViewPanel); end; { TQuickViewPanel } 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.ExitPluginMode; FFileViewPage.FileView.Visible:= True; FreeThenNil(FViewer); FFileSource:= nil; FFileView.SetFocus; inherited Destroy; end; procedure TQuickViewPanel.CreateViewer(aFileView: TFileView); begin FViewer:= TfrmViewer.Create(Self, nil, True); FViewer.Parent:= Self; FViewer.BorderStyle:= bsNone; FViewer.Align:= alClient; FFirstFile:= True; FFileView:= aFileView; FFileSource:= aFileView.FileSource; FFileViewPage.FileView.Visible:= False; FFileView.OnChangeActiveFile:= @FileViewChangeActiveFile; TFileViewPage(FFileView.NotebookPage).OnChangeFileView:= @OnChangeFileView; end; procedure TQuickViewPanel.LoadFile(const aFileName: String); begin if FFirstFile then begin FFirstFile:= False; FViewer.LoadFile(aFileName); FViewer.Show; end else begin FViewer.LoadNextFile(aFileName); end; // Viewer can steal focus, so restore it 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 ActiveFile: TFile = nil; TempFiles: TFiles = nil; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; begin if not (Assigned(aFile) and (aFile.Name <> '..')) then Exit; try // If files are links to local files if (fspLinksToLocalFiles in Sender.FileSource.Properties) then begin if aFile.IsDirectory or aFile.IsLinkToDirectory then Exit; FFileSource := Sender.FileSource; ActiveFile:= aFile.Clone; if not FFileSource.GetLocalName(ActiveFile) then Exit; end // If files not directly accessible copy them to temp file source. else if not (fspDirectAccess in Sender.FileSource.Properties) then begin if aFile.IsDirectory or SameText(FFileName, aFile.Name) then Exit; if not (fsoCopyOut in Sender.FileSource.GetOperationsTypes) then Exit; ActiveFile:= aFile.Clone; TempFiles:= TFiles.Create(ActiveFile.Path); TempFiles.Add(aFile.Clone); 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; FFileName:= ActiveFile.Name; FFileSource := TempFileSource; ActiveFile.Path:= TempFileSource.FileSystemRoot; end else begin // We can use the file source directly. FFileSource := Sender.FileSource; ActiveFile:= aFile.Clone; end; LoadFile(ActiveFile.FullPath); finally FreeAndNil(TempFiles); FreeAndNil(ActiveFile); end; end; end. doublecmd-0.9.8/src/upathlabel.pas0000644000175000001440000001406413124503131016141 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Label displaying a path, highlighting directories with mouse. Copyright (C) 2010-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 uPathLabel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls; type { TPathLabel } TPathLabel = class(TLabel) private FAllowHighlight: Boolean; FHighlightStartPos: Integer; FHighlightText: String; FMousePos: Integer; {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; 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; end; implementation uses Controls, Graphics, math; { TPathLabel } constructor TPathLabel.Create(AOwner: TComponent; bAllowHighlight: Boolean); begin FLeftSpacing := 3; // set before painting 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 := clBtnFace; Font.Color := clBtnText; end; True: begin Color := clHighlight; Font.Color := clHighlightText; end; end; end; procedure TPathLabel.Highlight; var PartText: String; StartPos, CurPos: Integer; PartWidth: Integer; CurrentHighlightPos, NewHighlightPos: Integer; TextLen: Integer; PathDelimWidth: Integer; begin CurrentHighlightPos := LeftSpacing; // start at the beginning of the path NewHighlightPos := -1; Canvas.Font := Self.Font; PathDelimWidth := Canvas.TextWidth(PathDelim); 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); // Move the canvas position after the skipped text (if any). CurrentHighlightPos := CurrentHighlightPos + (StartPos - 1) * PathDelimWidth; 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); // If mouse is over this part of the path - highlight it. if InRange(FMousePos, CurrentHighlightPos, CurrentHighlightPos + PartWidth) then begin NewHighlightPos := CurrentHighlightPos; Break; end; CurrentHighlightPos := CurrentHighlightPos + PartWidth + PathDelimWidth; 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; procedure TPathLabel.TextChanged; begin inherited TextChanged; if FAllowHighlight and MouseEntered then Highlight; end; procedure TPathLabel.MouseEnter; begin inherited MouseEnter; if FAllowHighlight then begin Cursor := crDefault; 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-0.9.8/src/uparitercontrols.pas0000644000175000001440000002465512756114647017472 0ustar alexxusers{ 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-0.9.8/src/uoperationspanel.pas0000644000175000001440000003476413110105172017417 0ustar alexxusers{ 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-0.9.8/src/uoperationsmanager.pas0000644000175000001440000007050013434541344017734 0ustar alexxusers{ 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 . } 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-0.9.8/src/uopendocthumb.pas0000755000175000001440000000542713160675743016725 0ustar alexxusers{ 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 . } 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-0.9.8/src/un_xtrctdwrflnfo.pp0000644000175000001440000010461512047417134017300 0ustar alexxusers{ 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-0.9.8/src/un_process.pas0000644000175000001440000001141413457075156016220 0ustar alexxusersunit 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 const BufferSize = 3000; 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; { 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 (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:= FProcess.Terminate(-1); end; procedure TExProcess.SetCmdLine(CommandLine: String); begin FProcess.CommandLine:= CommandLine; end; destructor TExProcess.Destroy; begin FreeAndNil(FProcess); end; end. doublecmd-0.9.8/src/un_lineinfo.pp0000644000175000001440000007066712454027263016210 0ustar alexxusers{ 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 /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-0.9.8/src/umultiarc.pas0000644000175000001440000004624713367370745016063 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implementation of multi archiver support Copyright (C) 2010-2018 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; 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 FileName, FileExt, FileLink: String; PackSize, UnpSize: Int64; Year, Month, Day, Hour, Minute, Second: Word; Attributes: TFileAttrs; end; { TMultiArcItem } TMultiArcItem = class private FSeekAfterSignPos: Boolean; FSignature, FSignaturePosition: AnsiString; FSignatureSeekRange: LongInt; FSignatureList: TSignatureList; FSignaturePositionList: TSignaturePositionList; function GetSignatureSeekRange: AnsiString; procedure SetSignature(const AValue: AnsiString); procedure SetSignaturePosition(const AValue: AnsiString); procedure SetSignatureSeekRange(const AValue: AnsiString); public FArchiver, FDescription, FExtension, 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 CanYouHandleThisFile(const FileName: String): Boolean; function Clone: TMultiArcItem; 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; { 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; FreeThenNil(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 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 AutoConfigure; finally FreeThenNil(IniFile); FreeThenNil(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.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 = '' 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 FreeThenNil(FSignatureList); FreeThenNil(FSignaturePositionList); FreeThenNil(FFormat); inherited Destroy; 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.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-0.9.8/src/umasks.pas0000644000175000001440000002646012731164574015347 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Modified version of standard Masks unit Copyright (C) 2010-2016 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); 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; FCaseSensitive: Boolean; fIgnoreAccents: Boolean; fWindowsInterpretation: boolean; procedure SetCaseSence(ACaseSence:boolean); procedure SetTemplate(AValue: String); procedure Update; public constructor Create(const AValue: string; bCaseSensitive: boolean = False; bIgnoreAccents: boolean = False; bWindowsInterpretation: boolean = False); 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 = ';'; bCaseSensitive: boolean = False; bIgnoreAccents: boolean = False; bWindowsInterpretation: boolean = False); 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; CaseSensitive: Boolean = False): Boolean; function MatchesMaskList(const FileName, Mask: string; ASeparatorCharset: string = ';'; ACaseSensitive: boolean = False; AIgnoreAccents: boolean = False; AWindowsInterpretation: boolean = False): boolean; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, //DC uAccentsUtils, uGlobs; { MatchesMask } function MatchesMask(const FileName, Mask: String; CaseSensitive: Boolean = False): Boolean; var AMask: TMask; begin if Mask <> '' then begin AMask := TMask.Create(Mask, CaseSensitive); try Result := AMask.Matches(FileName); finally AMask.Free; end; end else Result := False; end; { MatchesMaskList } function MatchesMaskList(const FileName, Mask: string; ASeparatorCharset: string; ACaseSensitive: boolean = False; AIgnoreAccents: boolean = False; AWindowsInterpretation: boolean = False): boolean; var AMaskList: TMaskList; begin if Mask <> '' then begin AMaskList := TMaskList.Create(Mask, ASeparatorCharset, ACaseSensitive, AIgnoreAccents, AWindowsInterpretation); try Result := AMaskList.Matches(FileName); finally AMaskList.Free; end; end else Result := False; end; { TMask } { TMask.Create } constructor TMask.Create(const AValue: string; bCaseSensitive: boolean = False; bIgnoreAccents: boolean = False; bWindowsInterpretation: boolean = False); begin FTemplate:=AValue; FCaseSensitive := bCaseSensitive; fIgnoreAccents := bIgnoreAccents; fWindowsInterpretation := bWindowsInterpretation; if bIgnoreAccents 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 bCaseSensitive 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 := UTF8Decode(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 S[CharIndex] <> FMask.Chars[I].CharValue then Exit; 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 := UTF8Decode(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 := UTF8Decode(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; bCaseSensitive: boolean = False; bIgnoreAccents: boolean = False; bWindowsInterpretation: boolean = False); 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], bCaseSensitive, bIgnoreAccents, bWindowsInterpretation)); 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-0.9.8/src/umaincommands.pas0000644000175000001440000052375613573164006016704 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains DC actions of the main form 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 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; // 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); procedure DoNewTab(Notebook: TFileViewNotebook); procedure DoRenameTab(Page: TFileViewPage); 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_Exchange(const {%H-}Params: array of string); procedure cm_FlatView(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_GoToFirstFile(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_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_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_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); // Internal commands procedure cm_ExecuteToolbarItem(const Params: array of string); end; implementation uses uFindFiles, Forms, Controls, Dialogs, Clipbrd, strutils, LCLProc, HelpIntfs, StringHashList, 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, uShowForm, uShellExecute, uClipboard, uHash, uDisplayFile, uLuaPas, uFilePanelSelect, uFileSystemFileSource, uQuickViewPanel, Math, 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 {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; 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 msgOK(Format(rsSpaceMsg, [Files, Directories, cnvFormatFileSize(Size), Numb2USA(IntToStr(Size))])); 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); var I: Integer; sl: TStringList = nil; SelectedFiles: TFiles = nil; PathToAdd, FileNameToAdd: 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; 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.DoOpenVirtualFileSystemList(Panel: TFileView); var FileSource: IFileSource; begin FileSource:= TVfsFileSource.Create(gWFXPlugins); if Assigned(FileSource) then Panel.AddFileSource(FileSource, FileSource.GetRootDir); 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 aFile: TFile = nil; aFiles: TFiles = nil; sPath, sName: String; begin with frmMain do begin if not (fspDirectAccess in Panel.FileSource.Properties) then begin if not Background then pmContextMenu.PopUp(X, Y); 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 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 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 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 TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, SourcePage.FileView.CurrentPath); 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_CopyFullNamesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathAndFileNames); 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); 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; end; end; procedure TMainCommands.cm_ExecuteToolbarItem(const Params: array of string); var ToolItemID: String; begin if GetParamValue(Params, 'ToolItemID', ToolItemID) then frmMain.MainToolBar.ClickItem(ToolItemID); end; procedure TMainCommands.cm_FlatView(const Params: array of string); var AFile: TFile; begin with frmMain do if not (fspListFlatView in ActiveFrame.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported); end else begin ActiveFrame.FlatView:= not ActiveFrame.FlatView; if not ActiveFrame.FlatView then begin AFile:= ActiveFrame.CloneActiveFile; if Assigned(AFile) and AFile.IsNameValid then begin if not mbCompareFileNames(ActiveFrame.CurrentPath, AFile.Path) then begin ActiveFrame.CurrentPath:= AFile.Path; ActiveFrame.SetActiveFile(AFile.Name); end; end; AFile.Free; end; ActiveFrame.Reload; end; end; procedure TMainCommands.cm_LeftFlatView(const Params: array of string); begin if not (fspListFlatView in frmMain.FrameLeft.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported); end else begin frmMain.FrameLeft.FlatView:= not frmMain.FrameLeft.FlatView; frmMain.FrameLeft.Reload; end; end; procedure TMainCommands.cm_RightFlatView(const Params: array of string); begin if not (fspListFlatView in frmMain.FrameRight.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported); end else begin frmMain.FrameRight.FlatView:= not frmMain.FrameRight.FlatView; frmMain.FrameRight.Reload; end; 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 NewPage := OpenTab(aFile.Path); 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 SelectedFiles: TFiles; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try TestArchive(ActiveFrame, SelectedFiles); finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); 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 begin ShellExecute(aFile.FullPath); end; 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; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin Param := GetDefaultParam(Params); if Param = 'PackHere' then TargetPath:= ActiveFrame.CurrentPath else begin TargetPath:= NotActiveFrame.CurrentPath; end; 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; // 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_GoToFirstFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToFirstFile', []); 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_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; sl: TStringList = nil; ActiveFile: TFile = nil; AllFiles: TFiles = nil; SelectedFiles: TFiles = nil; aFileSource: IFileSource; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; LinksResolveNeeded: Boolean; begin with frmMain do try SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; ActiveFile := ActiveFrame.CloneActiveFile; // Enter directories using View command. if Assigned(ActiveFile) and (ActiveFile.IsDirectory or ActiveFile.IsLinkToDirectory) then begin ActiveFrame.ExecuteCommand('cm_Open', []); Exit; end; if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; // Default to using the file source directly. aFileSource := ActiveFrame.FileSource; if PrepareData(ActiveFrame.FileSource, SelectedFiles, @OnCopyOutStateChanged) <> pdrSynchronous then Exit; try aFile := SelectedFiles[0]; // 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 aFile := SelectedFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin sl.Add(aFile.FullPath) end; 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 (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; SelectedFiles: TFiles = nil; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin with frmMain do try SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; 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 if Assigned(SelectedFiles) then 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 // 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 // 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 frmMkDir.ShowMkDir(sPath) then Exit; // show makedir dialog if (sPath = EmptyStr) then Exit; if bMakeViaCopy then begin Directory := GetTempName(GetTempFolderDeletableAtTheEnd); 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; 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, 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.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; 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 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 := ((frmMain.ActiveFrame.ClientToScreen(Classes.Point(0, 0)).y + frmMain.ActiveFrame.Height) - p.y) 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) then msgError(rsMsgErrNotSupported) 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 sExistingFile, sLinkToCreate: String; SelectedFiles: TFiles; begin with frmMain do begin // Symlinks work only for file system. if not (ActiveFrame.FileSource.IsClass(TFileSystemFileSource)) then begin msgWarning(rsMsgErrNotSupported); Exit; // Or create a symlink in temp filesystem and CopyIn to target file source. end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 1 then msgWarning(rsMsgTooManyFilesSelected) else if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin sExistingFile := SelectedFiles[0].Path + SelectedFiles[0].Name; 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 + SelectedFiles[0].Name; if ShowSymLinkForm(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 sExistingFile, sLinkToCreate: String; SelectedFiles: TFiles; begin with frmMain do begin // Hard links work only for file system. if not (ActiveFrame.FileSource.IsClass(TFileSystemFileSource)) 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 sExistingFile := SelectedFiles[0].Path + SelectedFiles[0].Name; 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 + SelectedFiles[0].Name; if ShowHardLinkForm(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); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_LeftSortByName(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_RightSortByName(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.FrameRight, FileFunctions); 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; 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 ShowMultiRenameForm(ActiveFrame.FileSource, aFiles) 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 = ''; 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; Attrs := mbFileGetAttr(sNewFile); if Attrs = faInvalidAttributes then begin hFile := mbFileCreate(sNewFile); if hFile = feInvalidHandle then begin MessageDlg(rsMsgErrECreate, mbSysErrorMessage(GetLastOSError), mtWarning, [mbOK], 0); Exit; end; FileClose(hFile); ActiveFrame.FileSource.Reload(ExtractFilePath(sNewFile)); end else if FPS_ISDIR(Attrs) then begin MessageDlg(rsMsgErrECreate, Format(rsMsgErrCreateFileDirectoryExists, [ExtractFileName(sNewFile)]), mtWarning, [mbOK], 0); Exit; 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; 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 := ((frmMain.ActiveFrame.ClientToScreen(Classes.Point(0, 0)).y + frmMain.ActiveFrame.Height) - p.y) 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 with frmMain do begin ToggleFullscreenConsole; if IsCommandLineVisible then begin edtCommand.SetFocus; end; end; 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.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0; ModificationTime: DCBasicTypes.TFileTime = 0; 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:= FileTimeToDateTime(ModificationTime); if fpCreationTime in ActiveFile.SupportedProperties then ActiveFile.CreationTime:= FileTimeToDateTime(CreationTime); if fpLastAccessTime in ActiveFile.SupportedProperties then ActiveFile.LastAccessTime:= FileTimeToDateTime(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 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 FreeThenNil(Operation); FreeThenNil(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(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) 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_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_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; NtfsShift: Boolean; SourceFile: TDisplayFile; TargetFile: TDisplayFile; SourceList: TStringHashList; SourceFiles: TDisplayFiles = nil; TargetFiles: TDisplayFiles = nil; begin SourceList:= TStringHashList.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 Continue; 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 Continue; 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); end; { TMainCommands.cm_CopyPathNoSepOfFilesToClip } procedure TMainCommands.cm_CopyPathNoSepOfFilesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathWithoutSeparator); 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 nil then sMaybeMenuItem.Click; end else begin frmMain.pmFavoriteTabs.Popup(p.X, p.Y); 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: 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 Exit; // 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 ExecuteScript(FileName, Args); 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 (iSelectedWindow0 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; end. doublecmd-0.9.8/src/uluastd.pas0000644000175000001440000005565113416613407015524 0ustar alexxusers{ 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 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); 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-0.9.8/src/uluapas.pas0000644000175000001440000003251213532420347015502 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Push some useful functions to Lua Copyright (C) 2016-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 uLuaPas; {$mode objfpc}{$H+} interface uses 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): Boolean; implementation uses Forms, Dialogs, Clipbrd, LazUTF8, LCLVersion, DCOSUtils, DCConvertEncoding, fMain, uFormCommands, uOSUtils, uGlobs, uLog, uClipboard, uShowMsg, uLuaStd, uFindEx, uConvEncoding, uFileProcs, uFilePanelSelect; 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, PAnsiChar(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 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 luaExtractFileDir(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFileDir(lua_tostring(L, 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_isinteger(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, PAnsiChar(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, PAnsiChar(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, PAnsiChar(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 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, PAnsiChar(Clipboard.AsText)); end; function luaClipbrdSetText(L : Plua_State) : Integer; cdecl; begin Result:= 0; ClipboardSetText(luaL_checkstring(L, 1)); end; {$if lcl_fullversion >= 1070000} function luaClipbrdSetHtml(L : Plua_State) : Integer; cdecl; begin Result:= 0; Clipboard.SetAsHtml(luaL_checkstring(L, 1)); end; {$endif} 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, PAnsiChar(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 lua_pushstring(L, PAnsiChar(AValue)) 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; 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, 'ExtractFileExt', @luaExtractFileExt); luaP_register(L, 'ExtractFileDir', @luaExtractFileDir); luaP_register(L, 'ExtractFilePath', @luaExtractFilePath); luaP_register(L, 'ExtractFileName', @luaExtractFileName); luaP_register(L, 'ExtractFileDrive', @luaExtractFileDrive); luaC_register(L, 'PathDelim', PathDelim); lua_setglobal(L, 'SysUtils'); lua_newtable(L); luaP_register(L, 'Pos', @luaPos); 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); lua_setglobal(L, 'LazUtf8'); lua_newtable(L); luaP_register(L, 'Clear', @luaClipbrdClear); luaP_register(L, 'GetAsText', @luaClipbrdGetText); luaP_register(L, 'SetAsText', @luaClipbrdSetText); {$if lcl_fullversion >= 1070000} luaP_register(L, 'SetAsHtml', @luaClipbrdSetHtml); {$endif} 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); 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, PAnsiChar(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, PAnsiChar(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): Boolean; var L: Plua_State; Index: Integer; Count: Integer; Script: String; Status: Integer; begin Result:= False; // Load Lua library if not IsLuaLibLoaded then begin if not LoadLuaLib(gLuaLib) then Exit; 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, PAnsiChar(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-0.9.8/src/ulog.pas0000644000175000001440000001132513427105240014770 0ustar alexxusers{ 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 . } 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, fMain, uDebug, uGlobs, uFileProcs, DCOSUtils, uDCUtils; type PLogMessage = ^TLogMessage; TLogMessage = record Force: Boolean; Message: String; case Boolean of True: (ObjectType: TObject); False: (MessageType: TLogMsgType); end; type { TLogWriter } TLogWriter = class private FMutex: TRTLCriticalSection; private 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; { TLogWriter } procedure TLogWriter.WriteInMainThread(Data: PtrInt); var Msg: PLogMessage absolute Data; begin if not Application.Terminated then begin with fMain.frmMain do try if Msg^.Force and (not seLogWindow.Visible) then ShowLogWindow(PtrInt(True)); 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 Message: String; hLogFile: THandle; LogMessage: PLogMessage; ActualLogFileName: String; begin if Assigned(fMain.frmMain) and (bForce or gLogWindow) then begin New(LogMessage); LogMessage^.Force:= bForce; 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 hLogFile:= mbFileCreate(ActualLogFileName); 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-0.9.8/src/ulng.pas0000644000175000001440000015327413427105240015001 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Localization core unit Copyright (C) 2007-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 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"'; rsMsgErrDirExists = 'Directory %s exists!'; rsMsgErrRename = 'Cannot rename file %s to %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?'; 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"?'; 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?'; 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'; // 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'; // 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"'; 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 = ''; rsMsgUserDidNotSetName = ''; 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.'; //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...'; rsMnuMount = 'Mount'; rsMnuUmount = 'Unmount'; rsMnuNoMedia = 'No media available'; rsMnuEject = 'Eject'; rsMnuSortBy = 'Sort by'; rsMnuNew = 'New'; rsMnuPackHere = 'Pack here...'; rsMnuExtractHere = 'Extract here...'; // for main menu rsMnuCreateShortcut = 'Create Shortcut...'; rsMnuMapNetworkDrive = 'Map Network Drive...'; rsMnuDisconnectNetworkDrive = 'Disconnect Network Drive...'; rsMnuCopyNetNamesToClip = 'Copy names with UNC path'; // for content plugins menu rsMnuContentDefault = ''; 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'; // 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'; 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'; // 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'; 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: '; rsDiffFilesIdentical = 'The two files are identical!'; // 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 = ''; 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 = ''; rsAbbrevDisplayLink = ''; 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'; // MultiRename dialog 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;'; // 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 = ''; rsDriveNoLabel = ''; // 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'; rsOptionsEditorTools = 'Tools'; rsOptionsEditorTooltips = 'Tooltips'; rsOptionsEditorFileAssoc = 'File associations'; rsOptionsEditorFileAssicExtra = 'File associations extra'; rsOptionsEditorDirectoryHotlist = 'Directory Hotlist'; rsOptionsEditorFavoriteTabs = 'Favorite Tabs'; rsOptionsEditorOptionsChanged = 'Options have changed in "%s"'+#$0A+#$0A+'Do you want to save modifications?'; rsOptionsEditorFileSearch = 'File search'; //------------------------------- 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'; //------------------------------- //------------------------------- 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 = ''; 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'; 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!'; // 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'; 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;Natural sorting: alphabetical and numbers'; 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'; rsVarFullPath = 'Complete filename (path+filename)'; rsVarFilenameNoExt = 'Just filename, no extension'; rsVarOnlyExtension = 'Only file extension'; rsVarRelativePathAndFilename = 'Filename with relative path'; rsVarCurrentPath = 'Path of panel'; 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 rsStrAccents = 'á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ'; rsStrAccentsStripped = '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'; 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"'; // 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, uFileProcs, DCOSUtils, DCStrUtils; function GetLanguageName(const poFileName : String) : String; var sLine : String; poFile : THandle; iPos1, iPos2 : Integer; begin poFile:= mbFileOpen(poFileName, fmOpenRead); if poFile <> feInvalidHandle then begin // find first msgid line FileReadLn(poFile, sLine); while Pos('msgid', sLine) = 0 do FileReadLn(poFile, sLine); // read msgstr line FileReadLn(poFile, sLine); repeat FileReadLn(poFile, sLine); // find language name line if Pos('X-Native-Language:', sLine) <> 0 then begin iPos1 := Pos(':', sLine) + 2; iPos2 := Pos('\n', sLine) - 1; Result := Copy(sLine, iPos1, (iPos2 - iPos1) + 1); FileClose(poFile); Exit; end; until Pos('msgid', sLine) = 1; FileClose(poFile); 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); var Lang: String = ''; FallbackLang: String = ''; begin { Localization } if sFileName = 'doublecmd.po' then Exit; // default english interface 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 mbFileExists(gpLngDir + gPOFileName) then begin DCDebug('Loading lng file: ' + gpLngDir + gPOFileName); LRSTranslator := TTranslator.Create(gpLngDir + gPOFileName); Translations.TranslateResourceStrings(gpLngDir + gPOFileName); TranslateLCL(gPOFileName); end; end; procedure DoLoadLng; begin lngLoadLng(gPOFileName); end; finalization if Assigned(LRSTranslator) then FreeAndNil(LRSTranslator); end. doublecmd-0.9.8/src/ukastoolitemsextended.pas0000644000175000001440000002402512205740427020454 0ustar alexxusers{ 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 FCommands: IFormCommands; strict protected procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); override; public Command: String; Params: TDynamicStringArray; constructor Create(AFormCommands: IFormCommands); reintroduce; 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; { 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.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.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-0.9.8/src/uimcode.pas0000644000175000001440000021154613227167302015463 0ustar alexxusersunit uIMCode; interface function MakeSpellCode(const stText: String): String; { iMode 二进制功能位说明 X X X X X X X X X X X X X X X X 3 2 1 1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取 2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符) 3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括 (控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符) } implementation uses SysUtils, LazUTF8; const strChineseCharList: array [1..270] of String = ( 'A阿啊锕嗄厑哎哀唉埃挨溾锿鎄啀捱皑凒溰嘊敳皚癌毐昹嗳矮蔼躷噯藹譪霭靄艾伌爱砹硋隘嗌塧嫒愛碍暧瑷僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵谙萻腤鹌蓭誝鞌鞍盦馣鮟盫韽啽雸垵', 'A俺唵埯铵隌揞罯銨犴岸按荌案胺豻堓婩暗貋儑錌黯肮岇昂昻枊盎醠凹坳垇柪軪爊敖厫隞嗷嗸嶅廒滶獒獓遨熬璈蔜翱聱螯翶謷翺鳌鏖鰲鷔鼇芺袄媪镺襖岙扷岰傲奡奥嫯慠骜奧嶴澳懊擙謸鏊', 'B八仈巴叭扒朳玐吧夿岜芭疤哵捌笆粑紦羓蚆釟豝鲃魞叐犮抜坺妭拔茇炦癹胈釛菝詙跋軷魃把靶坝弝爸垻罢鲅鮁覇矲霸壩灞欛挀掰白百佰柏栢捭竡粨摆擺襬呗拝败拜唄敗稗粺鞁薭贁兡瓸扳', 'B攽班般颁斑搬斒瘢螁癍辬阪坂岅昄板版瓪钣粄舨鈑蝂魬办半伴扮姅怑拌绊秚絆鉡靽辦瓣邦峀垹帮捠梆浜邫幇幚縍幫鞤绑綁榜膀玤蚌傍棒谤塝稖蒡蜯磅镑艕謗勹包佨孢苞胞笣煲龅蕔褒闁齙', 'B窇嫑雹宝怉饱保鸨珤堡堢媬葆寚飹飽褓駂鳵緥鴇賲藵寳寶靌勽报抱豹趵菢鲍靤骲暴髱虣儤曓爆忁鑤萡陂卑杯盃桮悲揹碑鹎藣鵯喺北鉳贝狈貝邶备昁牬苝背钡俻倍悖狽被偝偹梖珼鄁備僃惫', 'B焙軰辈愂碚禙蓓蛽犕褙誖骳輩鋇憊糒鞴鐾奔泍贲倴渀逩犇锛錛本苯奙畚楍坌捹桳笨撪輽伻崩绷閍嵭嘣綳繃甭埲菶琫鞛泵迸塴甏镚蹦鏰屄毴逼豍鲾鵖鰏柲荸鼻嬶匕比夶朼佊吡妣沘疕彼柀秕', 'B俾笔粊舭筆鄙聛貏匂币必毕闭佖坒庇诐邲妼怭畀畁哔毖珌疪荜陛毙狴畢袐铋婢庳敝梐萆萞閇閉堛弻弼愊愎湢皕禆筚詖貱赑嗶彃楅滗滭煏痹腷蓖蓽蜌裨跸閟飶幣弊熚獙碧箅綼蔽鄪馝幤潷獘', 'B罼襅駜髲壁嬖廦篦篳縪薜觱避鮅斃濞臂蹕髀奰璧鄨饆繴襞襣鏎鞸韠躃躄魓贔鐴驆鷝鷩鼊边砭笾编煸甂箯編蝙獱邉鍽鳊邊鞭鯾鯿籩炞贬扁窆匾惼碥稨褊糄鴘藊卞弁忭抃汳汴苄釆峅便变変昪', 'B覍揙缏遍辡艑辧辨辩辫辮變彪标飑髟猋脿墂幖滮骠標熛膘瘭镖飙飚儦颷瀌爂臕贆鏢镳飆飇飈飊鑣表婊裱諘褾錶檦俵鳔鰾憋鳖鱉鼈虌龞別别咇莂蛂徶襒蟞蹩瘪癟彆邠宾彬傧斌椕滨缤槟瑸賓', 'B賔镔儐濒濱濵虨豳瀕霦繽蠙鑌顮氞摈殡膑髩擯鬂殯臏髌鬓髕鬢仌氷冰兵栟掤梹鋲檳丙邴陃怲抦秉苪昺柄炳饼窉蛃棅禀鈵鞆餅餠燷并並併幷垪庰倂栤病竝偋傡寎摒誁鮩靐癶拨波玻剥盋袯钵', 'B饽啵紴缽脖菠鉢僠嶓播餑蹳驋鱍仢伯孛驳帛泊狛瓝侼勃胉郣亳挬浡秡钹铂舶博渤葧鹁愽搏鈸鉑馎鲌僰煿牔箔膊艊馛駁踣鋍镈薄駮鮊懪礡簙鎛餺鵓犦欂襮礴鑮跛箥簸孹擘檗糪譒蘗蔔峬庯逋', 'B钸晡鈽誧餔轐醭卜卟补哺捕補鳪鸔不布佈步咘怖歨歩钚勏埗悑部埠瓿廍蔀踄篰餢簿玢佛夯宀疒瀑', 'C嚓擦礤礸遪猜才材财財戝裁采倸埰婇寀彩採睬跴綵踩菜棌蔡縩乲参飡骖湌嬠餐驂残蚕惭殘慚蝅慙蠶蠺惨慘噆憯黪黲灿粲儏澯薒燦璨爘仓仺伧沧苍倉舱傖凔嵢滄獊蒼濸艙螥罉藏欌鑶賶撡操', 'C糙曺曹嘈嶆漕蓸槽褿艚螬鏪艹艸草愺騲肏襙册侧厕恻测荝敇萗惻測策萴筞蓛墄箣憡嵾膥岑梣涔噌层層竲驓蹭硛硳岾猠乽叉芆杈肞臿訍偛嗏插馇銟锸艖疀鍤餷垞查査茬茶嵖搽猹靫槎察碴檫', 'C衩镲鑔奼汊岔侘诧姹差紁拆钗釵犲侪柴祡豺喍儕虿袃瘥蠆囆辿觇梴掺搀鋓幨婵谗孱棎湹禅馋嬋煘缠獑蝉誗鋋廛潹潺緾磛毚鄽镡瀍儳劖蟾酁嚵壥巉瀺纏纒躔镵艬讒鑱饞产刬旵丳浐剗谄產産', 'C铲阐蒇剷嵼滻幝蕆諂閳簅冁繟醦鏟闡囅灛讇忏硟摲懴颤懺羼韂伥昌娼淐猖菖阊晿椙琩裮锠錩鲳鯧鼚兏肠苌尝偿常徜瓺萇甞腸嘗嫦瑺膓鋿償嚐蟐鲿鏛鱨厂场昶惝敞僘厰廠氅鋹怅玚畅倡鬯唱', 'C悵暢畼誯韔抄弨怊欩钞焯超鈔繛牊晁巢巣朝鄛漅嘲潮窲罺轈吵炒眧煼麨巐仦耖觘车車砗唓莗硨蛼扯偖撦屮彻坼迠烢聅掣硩頙徹撤澈勶瞮爡抻郴棽琛嗔諃賝尘臣忱沉辰陈茞宸烥莐敐晨訦谌', 'C揨煁蔯塵樄瘎霃螴諶薼麎曟鷐趻硶碜墋夦磣踸贂闯衬疢称龀趁榇稱齓齔嚫谶襯讖阷泟柽爯棦浾偁蛏铛牚琤赪憆摚靗撐撑緽橕瞠赬頳檉竀穪蟶鏳鏿饓丞成呈承枨诚郕城宬峸洆荿乘埕挰珹掁', 'C窚脭铖堘惩棖椉程筬絾裎塍塖溗碀誠畻酲鋮澂澄橙檙鯎瀓懲騬悜逞骋庱睈騁秤吃妛杘侙哧彨蚩鸱瓻眵笞訵嗤媸摛痴瞝螭鴟鵄癡魑齝攡麶彲黐弛池驰迟岻茌持竾荎淔筂貾遅馳墀踟篪謘尺叺', 'C呎肔侈卶齿垑胣恥耻蚇豉欼歯裭鉹褫齒彳叱斥灻赤饬抶勅恜炽翄翅敕烾痓啻湁傺痸腟鉓雴憏翤遫慗瘛翨熾懘趩饎鶒鷘充冲忡沖茺浺珫翀舂嘃摏憃憧衝罿艟蹖虫崇崈隀宠铳銃抽瘳篘犨犫仇', 'C俦帱栦惆绸菗畴絒愁皗稠筹酧酬踌雔嬦懤燽雠疇躊讎讐丑丒吜杽侴瞅醜矁魗臭遚殠出岀初摴樗貙齣刍除厨滁蒢豠锄榋耡蒭蜍趎雏犓廚篨橱懨幮櫉蟵躇櫥蹰鶵躕杵础椘储楮禇楚褚濋儲檚璴', 'C礎齭齼亍処处竌怵拀绌豖竐珿絀傗琡鄐搐触踀閦儊憷橻斶歜臅黜觸矗搋膗揣啜嘬踹巛川氚穿剶瑏传舡船圌遄椽歂暷輲舛荈喘僢汌串玔钏釧賗刅囱疮窓窗牎摐牕瘡窻床牀噇傸磢闖创怆刱剏', 'C剙愴吹炊龡垂桘陲捶菙棰槌锤錘顀旾杶春萅堾媋暙椿槆瑃箺蝽橁櫄鰆鶞纯陙唇浱莼淳脣犉滣蒓鹑漘醇醕鯙偆萶惷睶賰踳蠢踔戳辵娖惙涰绰逴辍酫綽輟龊擉磭歠嚽齪鑡呲玼疵趀偨词珁垐柌', 'C祠茈茨瓷詞辝慈甆辞磁雌鹚糍辤飺餈嬨濨鴜礠辭鶿鷀此佌皉朿次佽刺刾庛茦栨莿絘蛓赐螆賜嗭从匆囪苁忩枞茐怱悤焧葱漗聡蔥骢暰樬瑽璁聦聪瞛篵聰蟌繱鏦騘驄丛従婃孮徖悰淙琮慒誴賨', 'C賩樷藂叢灇欉爜謥凑湊楱腠辏輳粗觕麁麄麤徂殂促猝媨瘄蔟誎趗憱醋瘯簇縬蹙鼀蹴蹵顣汆撺镩蹿攛躥鑹攅櫕巑窜熶篡殩簒竄爨崔催凗墔慛摧榱獕磪鏙乼漼璀皠忰疩翆脃脆啐啛悴淬萃毳焠', 'C瘁粹翠膵膬竁襊臎邨村皴澊竴存刌忖寸籿搓瑳遳磋撮蹉醝髊虘嵯嵳痤矬蒫鹾鹺齹脞剉剒厝夎挫莝莡措逪棤锉蓌错銼刂刹畜曾膪澶骣粢', 'D詫襜燀譂奲虰坘蚳赿跮揰裯儔幬篅搥錞踧吋咑哒耷畣搭嗒褡噠墶达妲怛垯炟羍荙匒笪答詚跶瘩靼薘鞑燵繨蟽躂鐽龖龘打大亣眔橽呆獃懛歹傣代汏轪侢垈岱帒甙绐迨带待怠柋殆玳贷帯軑埭', 'D帶紿袋逮軩瑇叇曃緿鮘鴏戴艜黛簤瀻霴襶靆丹妉单担眈砃耼耽郸聃躭媅殚瘅匰箪褝鄲頕儋勯殫襌簞聸刐狚玬瓭胆衴疸紞掸馾澸黕膽旦但帎沊泹诞柦疍啖啗弹惮淡萏蛋啿氮腅蜑觛窞誕噉髧', 'D憚憺澹禫駳鴠甔癚嚪贉霮饏当珰裆筜當儅噹澢璫襠簹艡蟷挡党谠擋譡灙讜氹凼圵宕砀垱荡档菪瓽雼碭瞊趤壋檔璗盪礑刀叨屶忉氘舠釖鱽魛捯导岛陦倒島捣祷禂搗隝嶋嶌槝導隯壔嶹擣蹈禱', 'D到悼盗菿椡盜道稲噵稻衜檤衟翿軇瓙纛恴得淂悳惪锝嘚徳德鍀的揼扥扽灯登豋噔嬁燈璒竳簦艠覴蹬等戥邓凳鄧隥墱嶝瞪磴镫櫈鐙仾低彽袛啲埞羝隄堤趆嘀滴镝磾鞮鏑廸狄肑籴苖迪唙敌涤', 'D荻梑笛觌靮滌嫡蔋蔐頔魡敵嚁藡豴糴鸐氐厎诋邸阺呧坻底弤抵柢砥掋菧軧聜骶鯳地弟旳杕玓怟枤俤帝埊娣递逓偙梊焍眱祶第菂谛釱棣睇缔蒂僀禘腣鉪馰墑墬碲蔕慸甋締嶳螮嗲敁掂傎厧嵮', 'D滇槙瘨颠蹎巅癫巓巔攧癲齻典奌点婰敟椣碘蒧蕇踮电佃甸阽坫店垫扂玷钿婝惦淀奠琔殿蜔電墊壂橂澱靛磹癜簟驔刁叼汈刟虭凋奝弴彫蛁琱貂碉殦瞗雕鮉鲷簓鼦鯛鵰屌弔伄吊钓窎訋掉釣铞', 'D鈟竨銱雿瘹窵鋽鑃爹跌褺苵迭垤峌恎绖胅瓞眣耊戜谍堞幉揲畳絰耋詄叠殜牃牒镻嵽碟蜨褋艓蝶疂蹀鲽曡疉疊氎嚸丁仃叮帄玎甼疔盯钉耵酊靪顶頂鼎嵿薡鐤订饤矴定訂飣啶萣椗腚碇锭碠聢', 'D錠磸顁丟丢铥颩銩东冬咚岽東苳昸氡倲鸫埬娻崬涷笗菄氭蝀鮗鼕鯟鶇鶫董嬞懂箽蕫諌动冻侗垌姛峒恫挏栋洞胨迵凍戙胴動崠硐棟腖働駧霘剅唗都兜兠蔸橷篼艔斗乧阧抖陡蚪鈄豆郖浢荳逗', 'D饾鬥梪脰酘痘閗窦鬦餖斣闘竇鬪鬬鬭嘟督醏毒涜读渎椟牍犊裻読蝳獨錖凟匵嬻瀆櫝殰牘犢瓄皾騳黩讀豄贕韣髑鑟韇韥黷讟厾独笃堵帾琽赌睹覩賭篤芏妒杜肚妬度荰秺渡靯镀螙殬鍍蠧蠹偳', 'D媏端鍴短段断塅缎葮椴煅瑖腶碫锻緞毈簖鍛斷躖籪叾垖堆塠嵟痽頧鴭鐜队对兑対祋怼陮碓綐對憝濧薱镦懟瀩譈鐓譵吨惇敦墩墪壿撴獤噸撉犜礅蹲蹾驐盹趸躉伅沌炖盾砘逇钝顿遁鈍頓碷遯', 'D潡踲多咄哆剟崜毲裰嚉夺铎剫掇敓敚敪痥鈬奪凙踱鮵鐸朵朶哚垛挅挆埵缍椯趓躱躲綞亸鬌嚲刴剁沲陊饳垜尮桗堕舵惰跢跥跺飿嶞憜墯鵽卩亻赕铫町铤夂丶', 'E娾砵妸妿娿屙讹囮迗俄娥峨峩涐莪珴訛皒睋鈋锇鹅蛾磀誐頟额額鵝鵞譌枙砈婀騀鵈厄歺戹阨呃扼苊阸呝砐轭咢垩峉匎恶砨蚅饿偔卾悪硆谔軛鄂阏堮崿愕湂萼豟軶遌遏廅搹琧腭僫蝁锷鹗蕚', 'E遻頞颚餓噩擜覨諤餩鍔鳄歞顎櫮鰐鶚讍鑩齶鱷奀恩蒽峎摁鞥仒乻旕儿而侕陑峏洏荋栭胹袻鸸粫輀鲕隭髵鮞鴯轜尔耳迩洱饵栮毦珥铒餌駬薾邇趰二弍弐佴刵咡贰貮衈貳誀嗯唔诶', 'F颰墢鼥韛朌頒報賁獖祊埄偪胇貶昞眪袚撥柭襏舩发沷発發彂髪橃醗乏伐姂垡疺罚阀栰傠筏瞂罰閥罸藅佱法砝鍅灋珐琺髮帆忛番勫噃墦嬏幡憣旙旛翻藩轓颿飜鱕凡凢凣匥杋柉矾籵钒舤烦舧', 'F笲釩棥煩緐樊蕃橎燔璠薠繁襎繙羳蹯瀿礬蘩鐇蠜鷭反仮払辺返氾犯奿汎泛饭范贩畈訉軓梵盕笵販軬飯飰滼嬎範嬔瀪方邡坊芳枋牥钫淓蚄堏鈁錺鴋防妨房肪埅鲂魴仿访纺昉昘瓬眆倣旊紡舫', 'F訪髣鶭放飞妃非飛啡婓婔渄绯菲扉猆靟裶緋蜚霏鲱餥馡騑騛鯡飝肥淝暃腓蜰蟦匪诽奜悱斐棐榧翡蕜誹篚吠废杮沸狒肺昲费俷剕厞疿屝萉廃費痱镄廢蕟曊癈鼣濷櫠鐨靅分吩帉纷芬昐氛竕紛', 'F翂棻訜躮酚鈖雰朆餴饙坟妢岎汾枌炃肦梤羒蚠蚡棼焚蒶馚隫墳幩蕡魵鳻橨燌燓豮鼢羵鼖豶轒鐼馩黂粉瞓黺份坋弅奋忿秎偾愤粪僨憤奮膹糞鲼瀵鱝丰风仹凨凬妦沣沨凮枫封疯盽砜風峯峰偑', 'F桻烽琒崶渢溄猦葑锋楓犎蜂瘋碸僼篈鄷鋒檒豐鎽鏠酆寷灃靊飌麷冯捀逢堸綘缝艂縫讽覂唪諷凤奉甮俸湗焨煈赗鳯鳳鴌賵蘕瓰覅仏坲梻紑缶否缹缻雬鴀夫伕邞呋姇枎玞肤怤柎砆荂衭娐荴旉', 'F紨趺酜麸稃跗鈇筟綒孵敷麩糐麬麱懯乀弗伏凫甶冹刜孚扶芙芣芾咈岪帗彿怫拂服泭绂绋苻茀俘垘枹柫氟洑炥玸畉畐祓罘茯郛韨鳬哹栿浮畗砩莩蚨匐桴涪烰琈符笰紱紼翇艴菔虙袱幅絥罦葍', 'F福粰綍艀蜉辐鉘鉜颫鳧榑稪箙複韍幞澓蝠髴鴔諨踾輻鮄癁鮲黻鵩鶝抚甫府弣拊斧俌郙俯釜釡捬辅椨焤盙腑滏腐輔簠黼父讣付妇负附咐坿竎阜驸复祔訃負赴蚥袝偩冨副婏婦蚹傅媍富復萯蛗', 'F覄詂赋椱缚腹鲋禣褔赙緮蕧蝜蝮賦駙縛輹鮒賻鍑鍢鳆覆馥鰒猤攵犭', 'G玵閞鳺旮伽嘠钆尜嘎噶錷尕玍尬魀该陔垓姟峐荄晐赅畡祴該豥賅賌忋改絠鎅丐乢匃匄杚钙盖溉葢鈣戤概蓋槩槪漑瓂干甘芉迀杆玕肝坩泔苷柑竿疳酐粓亁凲尲尴筸漧尶尷魐皯秆衦赶敢笴稈', 'G感澉趕橄擀簳鳡鱤旰盰矸绀倝凎淦紺詌骭幹檊赣灨冈罓冮刚岗纲肛岡牨疘缸钢剛罡堈掆釭棡犅堽綱罁鋼鎠崗港杠焵筻槓戆皋羔高皐髙槔睾膏槹橰篙糕餻櫜韟鷎鼛鷱夰杲菒稁搞缟槁獔稿镐', 'G縞藁檺吿告勂诰郜峼祮祰锆筶禞誥鋯戈圪纥戓疙牱哥胳袼鸽割搁彁歌滒戨閤鴐鴚擱謌鴿鎶呄佮匌阁革敋格鬲愅臵葛隔嗝塥滆觡搿槅膈閣镉韐骼諽鮯櫊韚轕鞷騔鰪哿舸个各虼個硌铬箇獦给', 'G根跟哏亘艮茛揯搄更刯庚畊浭耕掶菮椩焿絚赓鹒緪縆賡羹鶊郠哽埂峺挭绠耿莄梗綆鲠骾鯁亙堩啹喼嗰工弓公功攻杛供糼肱宫宮恭蚣躬龚匑塨幊觥躳匔碽髸觵龔巩汞拱拲栱珙輁鞏共贡貢慐', 'G熕兝兣勾佝沟钩袧缑鈎緱褠篝簼鞲韝岣狗苟枸玽耇耉笱耈豿坸构诟购垢姤茩冓够夠訽媾彀搆遘雊煹觏撀覯購估咕姑孤沽泒柧轱唂唃罛鸪笟菇菰蛄蓇觚軱軲辜酤毂箍箛嫴篐橭鮕鴣轂鹘古汩', 'G诂谷股峠牯骨罟羖逧钴傦啒脵蛊蛌尳愲硲詁馉榾鼓鼔嘏榖皷穀糓薣濲臌餶瀔盬瞽固故凅顾堌崓崮梏牿棝祻雇痼稒锢頋僱錮鲴鯝顧瓜刮苽胍鸹歄焻煱颪劀緺銽鴰騧冎叧呱剐剮啩寡卦坬诖挂', 'G掛罣罫褂詿乖拐枴柺箉怪恠关观官冠覌倌棺蒄窤瘝癏観鳏觀鱞馆痯筦管輨舘錧館躀鳤毌贯泴悺惯掼涫悹祼慣摜遦樌盥罆鏆灌爟瓘礶鹳罐鑵鱹光灮侊炗炚炛咣垙姯茪桄烡珖胱僙輄銧黆欟广', 'G広犷俇逛撗归圭妫龟规邽皈茥闺帰珪亀硅袿媯椝瑰郌摫閨鲑嬀槻槼璝瞡鬶瓌櫷宄轨庋佹匦诡陒垝癸軌鬼庪祪匭晷湀蛫觤詭厬簋蟡刽刿攰柜炅攱贵桂椢筀貴蓕跪瞆劊劌撌槶禬簂櫃鳜鱥衮惃', 'G绲袞辊滚蓘滾蔉磙輥鲧鮌鯀棍棞睴璭謴呙埚郭啯崞聒鈛锅墎瘑嘓彉蝈鍋彍囯囶囻国圀國帼掴幗慖摑漍聝蔮虢馘果惈淉猓菓馃椁褁槨綶蜾裹餜鐹过桧咯莞呷', 'H餲淲豩豰俿腄墮吪魤犿浲侅郂絯忓攼仠桿汵榦臯鎬暠犵挌蛤厷愩唝羾詬鶻淈鹄鈷縎鵠怘趏潅雚洸襘鞼緄腘膕粿輠過铪丷哈嗨孩骸海胲烸塰酼醢亥骇害氦嗐餀駭駴嚡饚乤兯佄顸哻蚶酣頇谽', 'H憨馠魽鼾邗含邯函凾虷唅圅娢浛崡晗梒涵焓寒嵅韩甝筨爳蜬澏鋡韓厈罕浫喊蔊豃鬫汉屽扞汗闬旱垾悍捍晘涆猂莟晥焊琀菡釬閈皔睅傼蛿颔撖蜭暵銲鋎憾撼翰螒頷顄駻雗瀚鶾魧苀斻杭垳绗', 'H笐航蚢颃貥筕絎頏沆蒿嚆薅竓蚝毫椃嗥獆噑豪嘷獋儫曍嚎壕濠籇蠔譹好郝号昊昦哠恏浩耗晧淏傐皓聕號暤暭澔皜皞皡薃皥颢灏顥鰝灝兞诃呵喝訶嗬蠚禾合何劾咊和姀河峆曷柇盇籺阂哬敆', 'H核盉盍荷啝涸渮盒秴菏萂龁惒粭訸颌楁詥鉌阖鲄熆閡鹖麧澕篕翮魺闔齕覈鶡皬鑉龢佫垎贺寉焃湼賀煂碋褐赫鹤翯壑癋爀鶴齃靍靎鸖靏黒黑嘿潶嬒拫痕鞎佷很狠詪恨亨哼悙涥脝姮恆恒桁烆', 'H珩胻鸻横橫衡鴴鵆蘅鑅堼囍乊乥叿灴轰哄訇烘軣焢硡薨輷嚝鍧轟仜弘妅红吰宏汯玒纮闳宖泓玜苰垬娂洪竑荭虹浤紘翃耾硔紭谹鸿渱竤粠葒葓鈜閎綋翝谼潂鉷鞃魟篊鋐彋蕻霐黉霟鴻黌晎嗊', 'H讧訌撔澋澒銾侯矦喉帿猴葔瘊睺篌糇翭骺鍭餱鯸吼犼后郈厚垕後洉逅候鄇堠豞鲎鲘鮜鱟乎匢虍呼垀忽昒曶泘苸烀轷匫唿惚淴虖軤雽嘑寣滹雐歑囫抇弧狐瓳胡壶壷斛焀喖壺媩湖猢絗葫楜煳', 'H瑚嘝蔛鹕槲箶糊蝴衚魱縠螜醐頶觳鍸餬瀫鬍鰗鶘鶦鶮乕汻虎浒唬萀琥虝箎錿鯱互弖戶户戸冱冴帍护沍沪岵怙戽昈枑祜笏粐婟扈瓠綔鄠嫭嫮摢滬蔰槴熩鳸簄鍙鹱護鳠韄頀鱯鸌花芲埖婲椛硴', 'H糀誮錵蘤华哗姡骅铧滑猾嘩撶璍螖鏵驊鷨化划杹画话崋桦婳畫嬅畵話劃摦槬樺嫿澅諙諣黊繣蘳怀徊淮槐褢踝懐褱懷櫰耲蘹坏壊壞蘾欢歓鴅嚾懽獾歡貛讙驩还环峘洹荁桓萈萑堚寏絙雈羦貆', 'H锾阛寰缳環豲鍰鹮糫繯轘闤鬟睆缓緩攌幻奂肒奐宦唤换浣涣烉患梙焕逭喚嵈愌換渙痪煥瑍豢漶瘓槵鲩擐澣瞣藧鯇鯶鰀巟肓荒衁塃慌皇偟凰隍黃黄喤堭媓崲徨惶湟葟遑楻煌瑝墴潢獚锽熿璜', 'H篁艎蝗癀磺穔諻簧蟥鍠餭鳇趪鐄騜鰉鱑鷬怳恍炾宺晃晄奛谎幌愰詤縨謊櫎皩兤滉榥曂皝鎤灰灳诙咴恢拻挥洃虺晖烣珲豗婎媈揮翚辉隓暉楎琿禈詼幑睳噅噕翬輝麾徽隳瀈鰴囘回囬佪廻廽恛', 'H洄茴迴烠逥痐蛔蛕蜖鮰悔螝毇檓燬譭卉屷汇会讳泋哕浍绘芔荟诲恚恵烩贿彗晦秽喙惠絵缋翙阓匯彙彚毀毁滙詯賄僡嘒蔧誨圚寭慧憓暳槥潓蕙徻橞獩璤薈薉諱頮檅檜燴篲藱餯嚖懳瞺穢繢蟪', 'H櫘繪翽譓闠鐬靧譿顪昏昬荤婚涽阍惽棔睧睯閽忶浑馄渾魂繉鼲诨俒倱圂掍混焝溷慁觨諢吙耠锪劐鍃豁攉騞佸活秮火伙邩钬鈥夥沎或货咟俰捇眓获剨祸貨惑旤湱禍嗀奯濩獲霍檴謋穫镬嚯瀖', 'H耯藿蠖嚿曤臛癨矐鑊夻行砉圜', 'J皀髉畟筴簎笒覘樔伡俥鋤雛處諔堲蠀覿茤岋紇裓構颳夬叏獷臩臦昋鱖妎悎饸紅鵍丌讥击刉叽饥乩刏圾机玑肌芨矶鸡枅咭迹剞唧姬屐积笄飢基绩喞嵆嵇犄筓缉赍勣嗘畸跻鳮僟箕銈嘰撃槣樭', 'J畿稽賫躸齑墼憿機激璣積錤隮磯簊績羁賷櫅耭雞譏韲鶏譤癪躋鞿鷄齎羇虀鑇覉鑙齏羈鸄覊亼及伋吉岌彶忣汲级即极亟佶郆卽叝姞急狤皍笈級揤疾觙偮卙庴脨谻戢棘極殛湒集塉嫉愱楫蒺蝍', 'J趌辑槉耤膌銡嶯潗瘠箿蕀蕺鞊鹡橶檝螏輯襋蹐鍓艥籍轚鏶霵鶺鷑雦雧几己丮妀犱泲虮挤脊掎鱾幾戟嵴麂魢撠擠穖彑旡计记伎纪坖妓忌技芰芶际剂季哜垍峜既洎济紀茍計剤紒继觊記偈寂寄', 'J徛悸旣梞祭惎臮葪兾痵継蓟裚跡際墍暨漃漈禝稩穊誋跽霁鲚暩稷諅鲫冀劑曁穄薊襀髻檕繋罽覬鮆檵蹟鵋齌廭懻癠糭蘎骥鯚瀱繼蘮鱀蘻霽鰶鰿鱭驥加夹抸佳泇迦枷毠浃珈家痂梜笳耞袈猳葭', 'J跏犌腵鉫嘉镓糘豭貑鎵麚圿扴岬郏荚郟恝莢戛铗戞蛱颊蛺跲餄鋏頬頰鴶鵊甲玾胛斚贾钾婽斝椵賈鉀榎槚瘕檟价驾架假嫁幏榢稼駕嗧戋奸尖幵坚歼间冿戔肩艰姦姧兼监堅惤猏笺菅菺湔牋犍', 'J缄葌葏間搛椷煎瑊睷缣蒹箋樫熞緘蕑蕳鲣鹣熸篯縑鋻艱鞬馢麉瀐鞯殱礛覸鵳瀸殲籛韀鰹囏虃韉囝拣枧俭柬茧倹挸捡笕减剪检湕趼揀検減睑硷裥詃锏弿瑐简絸谫彅戩戬碱儉翦檢藆襇襉謇蹇', 'J瞼簡繭謭鬋鰎鹸瀽蠒鐗鐧鹻譾襺鹼见件侟建饯剑洊牮荐贱俴健剣涧珔舰剱徤渐谏釼寋旔楗毽溅腱臶践賎鉴键僭榗劍劎墹澗箭糋諓賤趝踐踺劒劔橺薦鍵餞瞷磵礀螹鍳擶繝覵艦轞鑑鑒鑬鑳江', 'J姜将茳浆畕豇葁翞僵漿螀壃缰薑橿殭螿鳉疅礓疆繮韁鱂讲奖桨傋蒋奨奬蔣槳獎耩膙講顜匞匠夅弜杢降洚绛弶袶絳畺酱摾滰嵹犟糡醤糨醬櫤謽艽芁交郊姣娇峧浇茭骄胶椒焦蛟跤僬嘄虠鲛嬌', 'J嶕嶣憍膠蕉膲礁穚鮫鹪簥蟭鐎鷦鷮櫵臫角佼挢狡绞饺晈笅皎矫脚铰搅筊剿勦敫煍腳賋摷暞踋鉸餃儌劋撹徼敽敿缴曒璬矯皦鵤孂纐攪灚鱎叫呌挍訆珓轿较敎教窖滘嘂嘦斠漖酵噍嬓獥藠趭轎', 'J醮譥皭釂阶疖皆接掲痎秸階喈嗟堦媘揭脻街煯稭鞂蝔擑癤鶛孑尐节讦刦刧劫岊昅刼劼杰衱诘拮洁结迼桀桝莭訐婕崨捷袺傑結颉嵥楶滐睫節蜐詰鉣魝截榤碣竭蓵鲒潔羯誱踕幯嶻擮礍鍻巀櫭', 'J蠞蠘蠽姐毑媎解飷檞丯介岕庎忦戒芥屆届斺玠界畍疥砎衸诫借蚧徣堺楐琾蛶骱犗誡褯魪藉巾今斤钅兓金釒津矜砛衿觔珒紟惍琎堻琻筋璡鹶黅襟仅卺巹紧堇菫僅谨锦嫤廑漌盡緊蓳馑槿瑾錦', 'J謹饉劤尽劲妗近进侭枃勁浕荩晉晋浸烬赆祲進煡缙寖搢溍禁靳瑨僸凚殣觐儘噤縉賮嚍壗嬧濜藎燼璶覲贐齽坕京泾经茎亰秔荆荊婛惊旌旍猄経菁晶稉腈睛粳經兢精聙橸鲸鵛鯨鶁麖鼱驚麠井', 'J丼阱刭宑汫汬肼剄穽颈景儆幜憬璄憼暻燝璟璥頸蟼警妌净弪径迳浄胫凈弳徑痉竞逕婙婧桱梷淨竟竫敬痙傹靖境獍誩静頚曔镜靜瀞鏡競竸冋坰扃埛絅駉駫蘏冏囧迥侰炯逈浻烱煚窘颎綗僒煛', 'J熲澃燛褧蘔丩勼纠朻究糺鸠糾赳阄萛啾揪揫鬏鬮九久乆乣奺汣杦灸玖舏韭紤酒镹韮匛旧臼咎疚柩柾倃桕厩救就廄匓舅僦廏廐慦殧舊鹫鯦麔匶齨鷲欍凥抅匊居拘泃狙苴驹倶挶疽痀罝陱娵婅', 'J婮崌掬梮涺椐琚腒锔裾雎艍蜛諊踘鋦駒鴡鞠鞫鶋局泦侷狊桔毩淗焗菊郹椈毱湨犑輂粷躹閰橘檋駶鵙蹫鵴巈蘜鶪驧咀沮举矩莒挙椇筥榉榘蒟龃聥舉踽擧櫸欅襷句巨讵姖岠怇拒洰苣邭具拠昛', 'J歫炬秬钜俱倨冣剧粔耟蚷袓埧埾惧据詎距焣犋鉅飓虡豦锯愳窭聚駏劇勮屦踞鮔壉懅據澽遽鋸屨颶簴躆醵懼爠姢娟捐涓裐鹃勬鋑镌鎸鵑鐫蠲卷呟帣埍菤锩臇錈奆劵倦勌桊狷绢隽淃瓹眷鄄睊', 'J絭罥睠慻蔨餋羂噘撅撧屩屫亅孒孓决刔氒诀抉芵玦玨挗珏砄绝虳觉倔欮崛掘斍桷殌覐觖訣赽趹厥絕絶覚趉鈌劂瑴谲嶡嶥憰熦爴獗瘚蕝蕨鴂鴃憠橛橜镼爵臄镢蟨蟩爑譎蹶蹷嚼矍覺鐝灍爝觼', 'J彏戄攫玃鷢欔矡龣貜钁军君均汮袀軍钧莙蚐桾皲菌鈞碅筠皸皹覠銁銞鲪麇鍕鮶呁俊郡陖埈峻捃晙浚馂骏珺畯竣箟蜠儁寯懏餕燇駿鵔鵕鵘纟挟廴', 'K錒嵦濭骯奟喫噄鉺朏胐阬槀稾藳溝絓鰥卝丱硄廣胿膭歸楇鉿妔薧蚵毼袔齁恗搰華磆蕐會澮璯餛秳漷監譼槛檻捁撟悈脛踁駃咔咖喀卡佧垰胩裃鉲开奒揩衉锎鐦凯剀垲恺闿铠凱剴慨蒈塏愷楷', 'K輆暟锴鍇鎧闓颽忾炌欬烗勓嘅鎎乫刊栞勘龛堪戡龕冚坎侃砍莰偘惂塪輡竷轗看衎崁墈阚瞰磡矙忼砊粇康嫝嵻慷漮槺穅糠躿鏮鱇扛摃亢伉匟邟囥抗犺闶炕钪鈧閌尻髛攷考拷洘栲烤铐犒銬鲓', 'K靠鮳鯌匼坷苛柯牁珂科胢轲疴趷钶嵙棵痾萪軻颏搕犐稞窠鈳榼薖颗樖瞌磕蝌頦醘顆髁礚壳咳翗嶱可岢炣渇嵑敤渴克刻剋勀勊客峇恪娔尅课堁氪骒缂嗑愙溘锞碦緙課錁礊騍肎肯肻垦恳啃豤', 'K墾錹懇掯裉褃劥吭坑硁牼铿硻誙銵鍞鏗巪乬唟厼怾空倥埪崆悾硿箜躻錓鵼孔恐控鞚廤抠芤眍剾彄瞘口劶叩扣怐敂冦宼寇釦窛筘滱蔲蔻瞉簆鷇刳郀枯哭桍堀崫圐跍窟骷鮬狜苦楛库俈绔庫秙', 'K焅袴喾絝裤瘔酷褲嚳夸姱舿侉咵垮銙挎胯跨骻蒯擓巜凷圦块快侩郐哙狯脍塊筷鲙儈鄶廥獪膾旝糩鱠宽寛寬髋鑧髖梡款窽窾匡劻诓邼匩哐恇洭筐筺誆軭狂狅诳軖軠誑鵟夼儣懭邝圹纩况旷岲', 'K況矿昿贶框眖砿眶絋絖貺軦鉱鋛鄺壙黋懬曠爌矌礦穬纊鑛亏刲岿悝盔窥聧窺虧闚顝蘬奎晆逵鄈頄馗喹揆葵骙戣暌楏楑魁睽蝰頯櫆藈鍨鍷騤夔蘷虁躨卼傀煃跬頍蹞尯匮欳喟媿愦愧溃蒉馈匱', 'K嘳嬇憒篑聩聭蕢樻殨餽簣聵籄鐀鑎坤昆晜堃堒婫崐崑猑菎裈焜琨髠裩锟髡鹍尡潉蜫褌髨熴瑻醌錕鲲臗騉鯤鵾鶤悃捆阃壸梱祵硱稇裍壼稛綑閫閸困涃睏扩拡括挄栝桰筈萿葀蛞阔廓頢濶闊鞟', 'K韕懖霩鞹鬠穒', 'L冫勑粚誺銐寵娕坔釘詻鄜膚鬴茖蛒鎘鉻羮篢睔腂蘫谾瘣暕撿諫倞靓靚牞摎樛畂寠窶垃拉柆啦翋菈邋旯砬揦磖喇藞嚹剌溂腊揧楋瘌蜡蝋辢辣蝲臈攋爉臘鬎櫴瓎镴鯻蠟鑞鞡来來俫倈崃徕涞莱', 'L郲婡崍庲徠梾淶猍萊逨棶琜筙铼箂錸騋鯠鶆麳唻赉睐睞赖賚濑賴頼顂癞鵣瀨瀬籁藾癩襰籟兰岚拦栏婪嵐葻阑蓝谰澜褴儖斓篮燣藍襕镧闌璼襤譋幱攔瀾灆籃繿蘭斕欄礷襴囒灡籣欗讕躝襽鑭', 'L钄韊览浨揽缆榄漤罱醂壈懒覧擥嬾懶孄覽孏攬欖爦纜烂滥燗嚂濫爁爛爤瓓灠糷啷勆郎郞欴狼莨嫏廊桹琅蓈榔瑯硠稂锒筤艆蜋郒螂躴鋃鎯駺悢朗阆朖烺塱蓢樃誏閬朤埌浪蒗唥捞粩撈劳労牢', 'L狫窂哰唠崂浶勞痨铹僗嶗憥朥癆磱簩蟧醪鐒顟髝老佬咾姥恅荖栳珯硓铑蛯銠潦橑鮱轑涝烙嗠耢酪嫪憦澇橯耮軂仂阞乐叻忇扐氻艻玏泐竻砳勒楽韷簕鳓鰳饹餎雷嫘缧蔂樏畾檑縲镭櫑瓃羸礧', 'L纍罍蘲鐳轠壨鑘靁虆鱩欙纝鼺厽耒诔垒塁絫傫誄磊蕌磥蕾儡壘癗藟櫐矋礨灅蠝蘽讄儽鑸鸓肋泪洡类涙淚累酹銇頛頪擂錑攂礌颣類纇蘱禷嘞脷塄棱楞碐稜踜薐冷倰堎愣睖唎刕厘剓梨狸离荲', 'L莉骊悡梸犁菞喱棃犂鹂剺漓睝筣缡艃蓠蜊嫠孷樆璃盠竰糎蔾褵鋫鲡黎篱縭罹錅蟍謧醨嚟藜邌離鯏鏫鯬鵹黧囄灕蘺蠡蠫孋廲劙鑗穲籬驪鱺鸝礼李里俚峛哩娌峲浬逦理裡锂粴裏豊鋰鲤澧禮鯉', 'L蟸醴鳢邐鱧欚力历厉屴立吏朸丽利励呖坜沥苈例岦戾枥疠苙隶俐俪栃栎疬砅茘荔赲轹郦娳悧栗栛栵涖猁珕砺砾秝莅唳婯悷琍笠粒粝蚸蛎傈凓厤棙痢蛠詈跞雳塛慄搮溧蒚蒞鉝鳨厯厲暦歴瑮', 'L綟蜧勵曆歷篥隷鴗巁檪濿癘磿隸鬁儮曞櫔爄犡禲蠇嚦壢攊瀝瓅礪藶櫪爏瓑皪盭礫糲蠣儷癧礰鷅麜囇轢欐讈轣攭瓥靂鱱靋瓈俩倆嫾奁连帘怜涟莲連梿联裢亷嗹廉慩漣蓮匲奩覝劆匳噒憐磏聨', 'L聫褳鲢濂濓縺翴聮薕螊櫣聯臁蹥謰鎌镰簾蠊鬑鐮鰱籢籨敛琏脸裣摙槤璉蔹嬚斂歛臉鄻襝羷练娈炼恋浰殓堜媡湅萰链僆楝煉瑓潋練澰錬殮鍊鏈瀲鰊戀纞簗良俍凉梁涼椋辌粮粱墚綡踉樑輬糧', 'L両两兩唡啢掚脼裲緉蜽魉魎亮哴谅辆喨晾湸量煷輌諒輛鍄蹽辽疗聊僚寥嵺廖憀膋嘹嫽寮嶚嶛憭撩敹獠缭遼暸燎璙窷膫竂镣鹩屪廫簝蟟豂賿蹘爎鐐髎飉鷯钌釕鄝蓼爒镽了尥炓料尞撂瞭咧毟', 'L挘埓列劣冽劽姴峢挒洌茢迾埒浖烈烮捩猎猟蛚裂煭睙聗趔巤颲儠鮤鴷擸獵犣躐鬛鬣鱲邻林临啉崊惏淋晽琳粦痳碄箖粼鄰隣嶙潾獜遴斴暽燐璘辚霖瞵磷臨繗翷麐轔壣瀶鏻鳞驎麟鱗菻亃稟僯', 'L凛凜撛廩廪懍懔澟檁檩癛癝顲吝恡悋赁焛賃蔺橉甐膦閵疄藺蹸躏躙躪轥拎伶刢灵囹坽夌姈岭岺彾泠狑苓昤朎柃玲瓴凌皊砱秢竛铃陵鸰婈崚掕棂淩琌笭紷绫羚翎聆舲菱蛉衑祾詅跉軨蓤裬鈴', 'L閝零龄綾蔆輘霊駖澪蕶錂霗魿鲮鴒鹷燯霛霝齢瀮酃鯪孁蘦齡櫺醽靈欞爧麢龗阾袊领領嶺令另呤炩溜熘刘沠畄浏流留旈琉畱硫裗媹嵧旒蒥蓅遛馏骝榴瑠飗劉瑬瘤磂镏駠鹠橊璢疁镠癅蟉駵嚠', 'L懰瀏藰鎏鎦餾麍鏐飀鐂騮飅鰡鶹驑柳栁桞珋桺绺锍綹熮罶鋶橮羀嬼六翏塯廇澑磟鹨蹓霤雡飂鬸鷚瓼甅囖龙屸咙泷茏昽栊珑胧眬砻笼聋隆湰嶐槞漋癃窿篭嚨巃巄蘢鏧霳曨朧櫳爖瓏矓礱礲襱', 'L籠聾蠪蠬龓豅躘鑨靇鸗陇垄垅拢儱隴壟壠攏竉哢梇硦徿贚娄偻婁喽溇蒌僂楼嘍廔慺蔞遱樓熡耧蝼瞜耬艛螻謱軁髅鞻髏嵝搂塿嶁摟漊甊篓簍陋屚漏瘘镂瘺瘻鏤露噜撸嚕擼卢庐芦垆枦泸炉栌', 'L胪轳舮鸬玈舻颅鈩鲈魲盧嚧壚廬攎瀘獹璷蘆櫨爐瓐臚矑籚纑罏艫蠦轤鑪顱髗鱸鸕黸卤虏挔捛掳鹵硵鲁虜塷滷蓾樐澛魯擄橹磠镥瀂櫓氌艣鏀艪鐪鑥圥甪陆侓坴彔录峍勎赂辂陸娽淕淥渌硉菉', 'L逯鹿椂琭祿禄僇剹勠滤盝睩碌稑賂路塶廘摝漉箓粶蔍戮樚熝膔膟觮趢踛辘醁潞穋蕗錄録錴璐簏螰鴼濾簶蹗轆騄鹭簬簵鏕鯥鵦鵱麓鏴騼籙觻虂鷺氇驴闾榈閭馿膢櫚藘曥鷜驢吕呂侣郘侶旅梠', 'L焒祣稆铝屡絽缕屢膂膐褛鋁履褸儢穞縷穭寽垏律哷虑率绿嵂氯葎綠緑慮箻勴繂櫖爈鑢孪峦挛栾鸾脔滦銮鵉圝奱孌孿巒攣曫欒灓羉臠圞灤虊鑾癴癵鸞卵乱釠亂掠略畧锊圙鋝鋢抡掄仑伦囵沦', 'L纶侖轮倫陯圇婨崘崙惀淪菕棆腀碖綸蜦踚輪磮錀鯩稐耣论埨溣論捋頱囉罗啰猡脶萝逻椤腡锣箩骡镙螺羅覶鏍儸覼騾玀蘿邏欏鸁籮鑼饠驘剆倮砢蓏裸躶瘰蠃臝攞曪癳泺峈洛络荦骆珞笿絡落', 'L摞漯犖雒駱鮥鵅纙鱳', 'M絔硥苾牑訬仯哋尒尓爾坆呒撫羙秏狢貈貉湏惛殙貇氂犛厸龍龒嘸呣妈媽嬤嬷麻痲嫲蔴犘蟆蟇马犸玛码蚂馬溤獁遤瑪碼螞鎷鷌鰢亇杩祃閁骂唛傌睰嘜榪禡罵駡礣鬕吗嗎嘛埋霾买荬買嘪蕒鷶', 'M劢迈佅売麦卖脉脈麥衇勱賣邁霡霢颟顢姏悗蛮慲摱馒樠瞒瞞鞔饅鳗鬗鬘鰻蠻屘満睌满滿螨襔蟎鏋矕曼僈谩墁幔慢漫獌缦蔄蔓熳澷镘縵蟃謾鏝蘰牤邙吂忙汒芒杗杧盲厖恾笀茫哤娏浝牻硭釯', 'M铓痝蛖鋩駹蘉莽莾茻壾漭蟒蠎匁猫貓毛矛枆牦茅旄渵軞酕蛑锚緢髦蝥錨蟊鶜冇卯戼峁泖茆昴铆笷蓩鉚冃皃芼冐茂冒眊贸耄袤覒媢帽貿鄚愗暓楙毷瑁瞀貌鄮蝐懋唜庅嚒濹嚰么癦沒没枚玫苺', 'M栂眉脄莓梅珻脢郿堳媒嵋湄湈猸睂葿楣楳煤瑂禖腜塺槑酶镅鹛鋂霉徾鎇矀攗蘪鶥攟黴毎每凂美挴浼媄嵄渼媺镁嬍燘躾鎂黣妹抺沬昧祙袂眛媚寐痗跊鬽煝睸魅篃蝞嚜椚门扪玣钔門閅捫菛璊', 'M穈鍆虋闷焖悶暪燜懑懣们們掹擝氓甿虻冡庬罞萌萠夢溕盟甍儚橗瞢蕄蝱鄳鄸幪懞濛獴曚朦檬氋矇礞鯍艨鹲矒靀饛顭鸏勐猛瓾蒙锰艋蜢錳懵蠓鯭鼆孟梦夣懜霥踎咪瞇冞弥祢迷猕谜蒾詸謎醚', 'M擟糜縻麊麋靡獼麛爢戂攠蘼醾醿鸍釄米羋芈侎弭洣敉粎脒眯渳葞蝆蔝銤孊灖糸汨宓泌觅峚祕宻秘密淧覓覔幂谧塓幎覛嘧榓滵漞熐蔤蜜鼏冪樒幦濗藌謐櫁簚羃芇眠婂绵媔棉綿緜臱蝒嬵檰櫋', 'M矈矊矏丏汅免沔黾俛勉眄娩偭冕勔喕愐湎缅葂腼緬鮸靣面糆麪麫麺麵喵苗媌描瞄鹋嫹鶓鱙杪眇秒淼渺缈篎緲藐邈妙庙竗庿廟吀咩哶孭灭搣滅蔑薎鴓幭懱瀎篾櫗蠛衊鑖鱴瓱民垊姄岷怋旻旼', 'M玟苠珉盿冧罠崏捪琘琝缗暋瑉痻碈鈱緍緡錉鍲皿冺刡闵抿泯勄敃闽悯敏笢笽湣閔愍敯黽閩僶慜憫潣簢鳘蠠鰵名明鸣洺眀茗冥朙眳铭鄍嫇溟猽蓂暝榠銘鳴瞑螟覭佲姳凕慏酩命掵詺谬缪繆謬', 'M摸嚤尛谟嫫馍摹模膜麼麽摩魹橅磨糢謨謩擵饃嚩蘑髍魔劘饝抹懡麿末劰圽妺怽歿殁沫茉陌帞昩枺皌眜眿砞秣莈莫眽粖絈袹蛨貃嗼塻寞漠蓦貊銆墨嫼暯瘼瞐瞙镆魩黙縸默貘藦蟔鏌爅驀礳纆', 'M耱乮哞牟侔劺恈洠眸谋鉾謀鍪鴾麰某母毪獏氁亩牡姆拇峔牳畆畒胟畝畞砪畮鉧踇木仫目凩沐狇坶炑牧苜毣莯蚞钼募萺雮墓幕幙慔楘睦鉬慕暮艒霂穆鞪旀丆椧渑', 'N懝抝拗秅莀袲唸毭咹児兒耏聏峊廾嫨跈聻茮澆涳巙崀尦竜袮彌镾濔瀰乜樢拏拿誽镎鎿乸哪雫内那吶妠纳肭娜衲钠納袦捺笝豽軜貀嗱蒳靹魶腉熋孻乃奶艿氖疓妳廼迺倷釢嬭奈柰耐萘渿鼐褦', 'N螚錼囡男抩枏枬侽南娚畘莮难喃遖暔楠煵諵難赧揇湳萳腩蝻戁婻囔乪嚢囊鬞馕欜饢擃曩攮灢儾齉孬檂呶怓挠峱硇铙猱蛲詉碙嶩夒鐃巎獿垴恼悩脑匘脳堖惱嫐瑙腦碯闹婥淖閙鬧讷呐眲訥呢', 'N馁腇餒鮾鯘氝焾嫩能莻鈪銰啱妮尼坭怩泥籾倪屔秜郳铌埿婗淣猊蚭棿跜鈮蜺觬貎霓鲵鯢麑齯臡伱伲你拟抳狔苨柅旎晲馜儞隬擬薿檷鑈氼迡昵胒逆匿痆眤堄惄嫟愵溺睨腻暱縌膩嬺拈年秊哖', 'N秥鲇鮎鲶鵇黏鯰捻辇撚撵碾輦簐攆躎卄廿念姩埝娘嬢酿醸釀鸟茑袅嫋裊蔦嬝褭嬲尿脲捏揑帇圼苶枿陧涅聂臬啮惗隉敜嗫嵲踂摰踗踙镊镍嶭篞臲錜颞蹑鎳闑孼孽櫱籋蘖齧巕糱糵蠥囓讘躡鑷', 'N顳脌囜您拰宁咛拧狞柠聍寍寕寜寧儜凝嚀嬣擰獰薴檸聹鑏鬡鸋橣矃佞侫泞甯寗澝濘妞牛牜忸扭沑狃纽杻炄钮紐鈕靵农侬哝浓脓秾農儂辳噥憹濃蕽禯膿穠襛醲欁繷弄挊挵癑齈羺譨啂槈耨鎒', 'N鐞譳奴孥驽笯駑伮努弩砮胬怒傉搙女钕籹釹衂恧朒衄疟虐瘧奻渜暖煗餪硸黁燶郍挪梛傩搻儺橠诺喏掿逽搦锘榒稬諾糑懦懧糥穤糯恁蔫', 'O吽摳噢哦筽夞乯鞰讴欧殴瓯鸥塸歐熰甌膒鴎櫙藲鏂鷗吘呕偶腢耦蕅藕怄沤慪漚', 'P钯鈀跁罷猈螌褩闆湴牓棓徬鎊剝襃铇袌鉋鮑琲絣痭琣逬跰螕鎞粃枈痺辟稫箆鞞猵萹拚徧緶辯骉蔈颮麃藨謤穮驃驫摽汃砏璸鉼碆磻犻苩瓟桲淿湐猼馞嚗髆蚾獛鵏吥荹鈈郶茷籓膰趽彷衯夆馮', 'P摓垺妚尃豧巿襆襥脯蜅秿鈲窌攈脟濼尨眫冖覕屰妑皅趴舥啪葩杷爬耙琶筢潖帊帕怕袙拍俳徘排猅棑牌箄輫簰犤哌派湃蒎鎃磗眅畨潘攀爿柈盘跘媻幋蒰搫槃磐縏蹒瀊蟠蹣鎜鞶坢冸判沜泮炍', 'P叛牉盼畔袢詊溿頖鋬鵥襻鑻乓汸沗肨胮雱滂膖霶厐庞逄旁舽嫎篣螃鳑龎龐鰟蠭嗙耪覫髈炐胖抛拋脬刨咆垉庖狍炮炰爮袍匏蚫軳鞄褜麅跑奅泡疱皰砲萢麭礟礮呸怌肧柸胚衃醅阫陪陫培毰赔', 'P锫裴裵賠錇俖伂沛佩帔姵斾旆浿珮配笩蓜辔馷嶏霈轡喷噴濆歕瓫盆湓葐呠翉翸喯匉怦抨泙恲胓砰梈烹硑軯閛漰嘭駍磞芃朋挷竼倗莑堋弸彭棚椖傰塜塳搒漨硼稝蓬鹏槰樥熢憉澎輣篷膨錋韸', 'P髼蟚蟛鬅纄韼鵬騯鬔鑝捧淎皏剻掽椪碰踫浌巼闏乶喸丕伓伾批纰邳坯怶披抷炋狉狓砒悂秛秠紕铍旇翍耚豾鈚鈹鉟銔劈磇駓髬噼錃錍魾憵礔礕闢霹皮阰芘岯枇毞肶毗毘疲笓蚍郫陴啤埤崥蚽', 'P豼椑焷琵脾腗榌鲏罴膍蜱隦魮壀鮍篺螷貔簲羆鵧朇鼙蠯匹庀仳圮苉脴痞銢諀鴄擗噽癖嚭屁淠渒揊媲嫓睤睥潎僻澼甓疈譬鷿鸊片囨偏媥犏篇翩鶣骈胼腁楄楩賆諚骿蹁駢騈覑谝貵諞骗魸騗騙', 'P剽彯漂缥飘磦旚縹翲螵犥飃飄魒瓢薸闝殍瞟篻醥皫顠票僄勡嘌嫖徱慓氕撇撆暼瞥丿苤鐅嫳姘拼礗穦馪驞玭贫貧琕嫔频頻嬪薲嚬矉颦顰品榀朩牝汖娉聘乒甹俜涄砯艵竮頩平评凭呯坪岼苹郱', 'P屏帡枰洴玶荓娦瓶屛帲淜萍蚲塀幈焩甁缾聠蓱蛢評軿鲆凴慿箳輧憑鮃檘簈蘋钋坡岥泼娝釙颇溌酦潑醱鏺婆嘙蔢鄱皤謈櫇叵尀钷笸鉕駊廹岶迫敀昢洦珀哱烞破砶粕蒪頗魄剖颒抔抙捊掊裒箁', 'P咅哣婄犃兺哛仆攴扑抪炇巬巭柨陠痡铺駇噗撲鋪擈鯆圤匍莆菩菐葡蒱蒲僕酺墣璞濮瞨穙镤贌纀鏷朴圃埔浦烳普圑溥暜谱潽樸氆諩檏镨譜蹼鐠舖舗曝', 'Q摮磝朁鸧鶬鼜詧軙儭櫬趍袳創敠匚釓隑矼肐鉤扢琯矔鸛龜氿肣馯抲頜礉隺渹舙酄攲敧稘毄緝觭禨鄿鐖饑焏踖躤蟣済萕濟袷唊脥價靬鳒鰜鶼鑯揃葥漸摪彊勥焳燋湫湬蟜譑峤嶠潐噭椄疌倢偼', 'Q媫蛣楬鮚荕埐嶜厪墐慬歏濅涇鶄捄趄跔鮈跼趜弆瞿鐻捲弮蚗傕鶌躩麏麕焌箘開欿歁殻揢挳硜矻誇厱熑燫艌鳥毆七迉沏妻柒倛凄栖桤缼郪娸悽戚捿桼淒萋朞期欺紪褄僛嘁慽榿槭漆緀慼磎諆', 'Q霋蹊魌鏚鶈亓祁齐圻岐岓芪其奇斉歧祈肵疧竒剘斊旂耆脐蚑蚚颀埼崎帺掑淇渏猉畦萁跂軝釮骐骑棊棋琦琪祺蛴愭碁碕褀頎鬾鬿旗粸綥綦綨緕蜝蜞璂禥蕲踑螧鲯懠濝藄檱櫀簱臍騎騏鳍蘄鯕', 'Q鵸鶀麒籏纃艩蠐鬐騹魕鰭玂麡乞邔企屺岂芑启呇杞玘盀唘豈起啓啔啟婍绮晵棨綮諬簯闙气讫気汔迄弃汽矵芞呮泣炁盵咠契砌荠栔訖唭欫夡愒棄湆湇葺碛摖暣甈碶噐憇器憩磜磧薺礘罊蟿掐', 'Q葜拤跒酠鞐圶冾帢恰洽殎硈愘髂千仟阡奷扦汘芊迁佥岍杄汧茾竏钎拪牵粁悭蚈谸铅婜牽釺谦雃僉愆签骞鹐搴摼撁箞諐遷褰顅檶攐攑櫏簽鏲鵮攓騫鐱鬜鬝籤韆仱岒忴扲拑乹前钤歬虔钱钳乾', 'Q偂掮揵軡媊鈐鉗墘榩箝銭潜橬錢黔鎆黚騝濳騚灊籖鰬浅肷淺嵰慊遣蜸潛谴缱繾譴鑓欠刋芡茜倩悓堑傔嵌棈椠皘蒨塹歉蔳儙槧篏輤篟壍嬱縴呛羌戕戗斨枪玱猐琷跄嗴椌獇腔嗆溬蜣锖嶈戧槍', 'Q牄瑲羫锵篬錆蹌镪蹡鎗鏘鏹強强墙嫱蔷樯漒蔃墻嬙檣牆謒艢蘠抢羟搶羥墏摤繈襁繦炝唴熗羻兛瓩悄硗郻鄗嵪跷鄡鄥劁敲踍锹墝碻頝墽幧橇缲磽鍫鍬繑趬蹺蹻乔侨荍荞桥硚喬僑槗谯嘺嫶憔', 'Q蕎鞒樵橋犞癄瞧礄藮譙趫鐈鞽顦巧釥愀髜俏诮陗峭帩窍殼翘誚髚僺撬鞘竅翹躈切苆癿茄聺且厒妾怯匧窃倿悏挈洯惬淁笡愜蛪朅箧緁锲魥篋踥穕藒鍥鯜鐑竊籡亲侵钦衾骎菳媇嵚誛嶔親顉駸', 'Q鮼寴庈芩芹埁珡矝秦耹菦蚙捦琴琹禽鈙雂勤嗪溱靲噙擒斳鳹懄檎澿瘽螓懃蠄坅昑笉梫赾寑锓寝寢鋟螼吢吣抋沁唚菣揿搇撳瀙藽靑青氢轻倾卿郬圊氫淸清傾廎蜻輕鲭鑋夝甠剠勍情殑硘晴棾', 'Q氰葝暒擏樈擎檠黥苘顷请庼頃漀請檾謦庆凊掅碃箐靘慶磬儬濪罄櫦宆跫銎卭邛穷穹茕桏笻筇赹惸焪焭琼舼蛩蛬煢熍睘瞏窮儝憌橩璚藑竆藭丘丠邱坵恘秋秌寈蚯媝萩楸鹙篍緧蝵穐趥鳅蟗鞦', 'Q鞧蘒鰌鰍鶖龝叴囚扏犰玌朹肍求虬泅虯俅觓訄訅酋唒浗紌莍逎逑釚梂殏毬球赇釻崷巯湭皳盚遒煪絿蛷裘巰觩賕璆蝤銶醔鮂鼽鯄鵭蠤鰽搝糗区曲佉匤岖诎阹驱坥屈岴抾浀祛胠袪區蛆躯筁粬', 'Q蛐詘趋嶇駆憈敺誳駈麹髷趨麯軀麴黢驅鰸鱋佢劬斪朐菃衐鸲淭渠絇葋軥蕖璖磲螶鴝璩翵蟝鼩蘧匷忂灈戵欋氍籧臞癯蠷衢躣蠼鑺鸜取竘娶紶詓竬龋齲厺去刞呿迲郥耝阒觑趣閴麮闃覰覷鼁覻', 'Q峑悛圈圏棬駩騡鐉全权佺诠姾泉洤荃拳牷辁啳埢婘惓痊硂铨湶犈筌絟腃葲搼楾瑔觠詮輇蜷銓権踡縓醛闎鳈鬈孉巏鰁權齤蠸颧顴犬汱畎烇绻綣虇劝券巻牶椦勧韏勸炔缺蒛瘸却埆崅悫雀硞确', 'Q阕塙搉皵阙鹊愨榷墧慤毃確趞燩闋礐闕鵲礭夋囷峮逡宭帬裙羣群裠郄', 'R吺兊兌熯卪坈繚髳挐鈉柟蟯臑抐內涊蹨孃菍莥獳檽蹃亽罖囕呥肰衻袇蚦袡蚺然髥嘫髯燃繎冄冉姌苒染珃媣蒅穣瀼獽禳瓤穰躟鬤壌嚷壤攘爙让懹譲讓荛饶桡橈襓饒犪扰娆隢擾绕遶繞惹热熱', 'R人仁壬忈朲忎秂芢鈓魜銋鵀忍荏栠栣荵秹稔綛躵刃刄认仞仭讱任屻扨纫妊杒牣纴肕轫韧饪姙紉衽紝訒軔梕袵絍腍靭靱韌飪認餁扔仍辸礽芿陾日驲囸釰鈤馹戎肜栄狨绒茙茸荣容峵毧烿媶嵘', 'R絨羢嫆搈搑摉榵溶蓉榕榮熔瑢穁蝾褣镕氄縙融螎駥髶嬫嶸爃鎔瀜曧蠑冗宂傇軵穃厹禸柔粈媃揉渘葇瑈腬糅蝚蹂輮鍒鞣瓇騥鰇鶔楺煣韖肉宍嶿邚如侞帤茹桇袽铷渪筎蒘銣蕠儒鴑嚅嬬孺濡薷', 'R鴽曘燸襦蠕颥醹顬鱬汝肗乳辱鄏入扖込杁洳嗕媷溽缛蓐鳰褥縟擩堧撋壖阮朊软耎偄軟媆愞瑌腝嫰碝緛蝡輭瓀礝桵甤緌蕤蕊蕋橤繠蘂蘃芮枘蚋锐瑞睿叡壡闰润閏閠潤橍叒若偌弱鄀婼渃焫楉', 'R嵶蒻箬篛爇鰙鰯鶸', 'S鉍灬杓攃偲纔參叄叅喰傪穇懆鄵拺笧粣鎈褨剎摻攙摌顫塲場綝乗娍匙飭埫醻敊猭漺輴縒棇楤漎憁缞縗鎝単單擔伔僤宲鍉遞遰挕阇闍陏蘴棴丨鞨咶鏸韢閄靃濈櫼帴菨嫅潏麗攦療蕯瀧氀稤蠰', 'S娞淰掱忯圱圲凵廧薔鐰韒鞩嫀殸棯葚挼仨桬撒洒訯靸潵卅飒脎萨摋隡馺颯薩櫒栍毢愢揌塞毸腮嘥噻鳃顋嗮赛僿賽簺虄三弎叁毵毶厁毿犙鬖壭伞傘散糁糂馓橵糝糣糤繖鏒饊俕閐桒桑槡嗓搡', 'S磉褬颡鎟顙丧喪掻慅搔溞骚缫臊鳋颾騒鰠鱢扫掃嫂埽瘙氉矂髞色栜涩啬渋铯歮琗嗇瑟歰銫澁懎擌濇濏瘷穑澀璱瀒穡繬穯轖鏼譅飋裇聓森槮襂僧鬙閪縇杀沙纱乷砂唦挱猀粆紗莎铩痧硰蔱裟', 'S樧魦鲨閷鎩鯊鯋繺傻儍繌倽唼啥帹萐喢歃煞翜翣閯霎筛篩簁簛晒曬山彡邖圸删刪杉杣芟姗衫钐埏狦珊舢痁脠軕笘閊跚剼搧嘇幓煽蔪潸澘曑檆膻鯅羴羶闪陕炶陝閃晱煔睒熌覢讪汕疝苫扇訕', 'S赸傓善椫銏骟僐鄯墠墡缮嬗擅敾樿膳磰謆赡繕蟮譱贍鐥饍騸鳝灗鱔伤殇商觞傷墒慯滳蔏殤熵螪觴謪鬺裳垧扄晌赏賞鑜丄上仩尙尚恦绱緔弰捎梢烧焼稍旓筲艄蛸輎蕱燒髾鮹勺芍柖玿韶少劭', 'S卲邵绍哨娋袑紹綤潲奢猞赊畲輋賒賖檨舌佘蛇蛥舍捨厍设社舎厙射涉涻渉設赦弽慑摄滠慴摵蔎蠂韘騇懾灄麝欇申屾扟伸身侁呻妽籶绅罙诜柛氠珅穼籸娠峷甡眒砷堔深紳兟椮葠裑訷罧蓡詵', 'S甧蔘燊薓駪鲹鯓鵢鯵鰺神榊鉮鰰邥弞抌沈审矤哂矧宷谂谉婶渖訠審諗頣魫曋瞫嬸瀋覾讅肾侺昚甚胂涁眘渗祳脤腎愼慎椹瘆蜃滲鋠瘮升生阩呏声斘昇枡泩苼殅牲珄竔胜陞曻陹笙湦焺甥鉎聲', 'S鍟鼪鵿绳憴澠譝省眚偗渻圣晟晠剰盛剩勝貹嵊聖墭榺蕂橳賸尸失师呞虱诗邿鸤屍施浉狮師絁湤湿葹溮溼獅蒒蓍詩瑡酾鳲蝨鳾褷鲺鍦鯴鰤鶳襹籭釃十饣什石辻佦时竍识实実旹飠峕拾炻祏蚀', 'S食埘時莳寔湜遈塒嵵溡蒔榯蝕鉽篒鲥鮖鼫鼭鰣史矢乨豕使始驶兘屎笶榁鉂駛士氏礻世丗仕市示卋式叓事侍势呩柹视试饰冟室恀恃拭是枾柿眂贳适栻烒眎眡舐轼逝铈視釈崼弑揓谥貰释勢嗜', 'S弒煶睗筮觢試軾鈰飾舓誓奭噬嬕澨諟諡遾餝螫簭籂襫鰘兙瓧収收手守垨首艏寿受狩兽售授绶痩膄壽瘦綬夀獣獸鏉书殳抒纾叔杸枢陎姝柕倏倐書殊紓掓梳淑焂菽軗鄃疎疏舒摅毹毺綀输跾踈', 'S樞蔬輸橾鮛攄瀭鵨尗秫婌孰赎塾熟璹贖暏暑黍署鼠鼡蜀潻薯曙癙襡糬襩籔蠴鱪鱰朮术戍束沭述侸怷树竖荗恕庶庻絉蒁術裋数竪腧墅漱潄數澍豎樹濖錰鏣鶐虪刷唰耍誜衰摔甩帅帥蟀卛闩拴', 'S閂栓涮腨双滝霜雙孀骦孇騻欆礵鷞鹴艭驦鸘爽塽慡樉縔鏯灀谁脽誰氵水氺閖帨涗涚祱税裞睡吮楯顺舜順蕣橓瞚瞤瞬鬊说妁烁朔铄欶硕矟嗍搠蒴嗽槊碩鎙厶丝司糹私咝泀俬思恖鸶媤斯絲缌', 'S蛳楒禗鉰飔凘厮榹禠罳銯锶嘶噝廝撕澌緦蕬螄鍶蟖蟴颸騦鐁鷥鼶死巳亖四罒寺汜伺似佀兕姒泤祀価孠泗饲驷俟娰柶牭梩洍涘肂飤笥耜釲竢覗嗣肆貄鈻飼禩駟蕼儩騃瀃螦乺忪松枀枩娀柗倯', 'S凇梥崧庺淞菘嵩硹蜙憽檧濍鬆怂悚捒耸竦傱愯嵷慫聳駷讼宋诵送颂訟頌誦餸鎹凁捜鄋嗖廀廋搜溲獀蒐蓃馊飕摗锼艘螋醙鎪餿颼騪叟傁嗾瞍擞薮擻藪櫢瘶苏甦酥稣窣穌鯂蘇蘓櫯囌俗玊夙诉', 'S泝肃洬涑珟素速殐粛骕傃粟訴谡嗉塐塑嫊愫溯溸肅遡鹔僳愬榡膆蔌觫趚遬憟樎樕潥鋉餗縤璛簌藗謖蹜驌鱐鷫狻痠酸匴祘笇筭蒜算夊芕虽倠哸浽荽荾眭葰滖睢熣濉鞖雖绥隋随遀綏隨瓍膸瀡', 'S髄髓亗岁砕祟粋谇埣嵗脺遂歲歳煫碎隧嬘澻穂誶賥檖燧璲禭穗穟繀襚邃旞繐繸鐆譢鐩孙狲荪飧搎猻蓀飱槂蕵薞畃损笋隼損榫箰鎨巺潠唆娑莏傞挲桫梭睃嗦羧蓑摍缩趖簑簔縮髿鮻所唢索琐', 'S琑惢锁嗩暛溑瑣鎍鎖鎻鏁逤溹蜶厦忄莘疋栅属', 'T諳啚裧儃禪蟬繵閶瞋鐺珵侱漦爞綢籌俶埱蓴鶉鈶撘迏迖沓荅逹溚達鎉韃呔蚮軚貸癉撣嘾彈餤黨攩欓逿蕩簜蘯闣朷焘燾僜奃髢詆弚苐媂諦顚顛鈿调蓧啑惵趃奵忊墥峝湩詷钭鋀褍蜳橔囤庉憞', 'T燉軃鋨鞈騩咍漢宊她冂燑轁墤謉饋噋擴斄伖鍩奤嵜鉆汭蟺鱓愓漡苕萔姼忕徥褆扌涭瑹儵稅磃鋖枱他它牠祂咜趿铊塌榙溻褟蹹侤塔墖獭鮙鳎獺鰨挞狧闼崉涾搨遝遢阘榻毾禢撻澾誻踏嚃錔嚺', 'T濌蹋鞜闒鞳闥譶躢襨囼孡骀胎台邰坮抬苔炱炲跆鲐箈臺颱儓鮐嬯擡薹檯籉太冭夳忲汰态肽钛泰粏舦酞鈦溙態燤坍贪怹啴痑舑貪摊滩嘽潬瘫擹攤灘癱坛昙倓谈郯婒惔弾覃榃痰锬谭墰墵憛潭', 'T談醈壇曇檀顃罈藫壜譚貚醰譠罎鷤忐坦袒钽菼毯鉭嗿憳憻暺醓璮叹炭埮探傝湠僋嘆碳舕歎賧汤铴嘡劏羰蝪薚镗蹚鏜鐋鞺鼞饧坣唐堂傏啺棠鄌塘嵣搪溏蓎隚榶漟煻瑭禟膅樘磄糃膛橖篖糖螗', 'T踼糛螳赯醣鎕餹闛饄鶶帑倘偒淌傥耥躺镋鎲儻戃曭爣矘钂烫摥趟燙仐夲弢涛绦掏絛詜嫍幍慆搯滔槄瑫韬飸縚縧濤謟鞱韜饕迯咷洮逃桃陶啕梼淘绹萄祹裪綯蜪鞀醄鞉鋾錭駣檮騊鼗讨套討畓', 'T忑忒特貣脦铽慝鋱蟘膯鼟疼痋幐腾誊漛滕邆縢螣駦謄儯藤騰籐鰧籘虅驣霯唞朰剔梯锑踢銻鷈鷉厗绨偍珶啼崹惿提渧稊缇罤遆鹈嗁瑅綈碮徲漽緹蕛蝭题趧蹄醍謕蹏鍗鳀題鮷鵜騠鯷鶗鶙体挮', 'T躰骵軆體戻屉剃洟倜悌涕逖悐惕掦逷惖揥替楴裼褅殢髰嚏鬀瓋鬄籊天兲婖添酟靔黇靝田屇沺恬畋畑胋畠甛甜菾湉填搷阗碵緂磌窴鴫璳闐鷆鷏忝殄倎唺悿捵淟晪琠腆觍痶睓舔餂覥賟錪靦掭', 'T瑱睼舚旫佻庣挑祧聎芀条岧岹迢祒條笤蓚龆樤蜩鋚鞗髫鲦螩鯈鎥齠鰷宨晀朓脁窕誂窱嬥眺粜絩覜趒跳頫糶贴萜貼铁蛈僣鴩鐡鐵驖呫帖飻餮厅庁汀艼听耓厛烃烴綎鞓聴聼廰聽廳邒廷亭庭莛', 'T停婷嵉渟筳葶蜓楟榳閮霆聤蝏諪鼮圢侹娗挺涏梃烶珽脡艇颋誔鋌頲濎乭囲炵通痌嗵蓪樋熥仝同佟彤峂庝哃狪茼晍桐浵烔砼蚒眮秱铜童粡絧衕酮鉖僮勭銅餇鲖潼曈朣橦氃犝膧瞳鮦统捅桶筒', 'T統綂恸痛慟憅偷偸鍮头投骰頭妵紏敨斢黈蘣透凸禿秃怢突唋涋捸堗湥痜葖嶀鋵鵚鼵図图凃峹庩徒捈涂荼途屠梌揬稌塗嵞瘏筡腯蒤鈯圖圗廜跿酴馟鍎駼鵌鶟鷋鷵土圡吐汢钍釷兎迌兔莵堍菟', 'T鵵湍猯煓貒团団抟團慱槫檲鏄糰鷒鷻圕疃彖湪褖推蓷藬颓隤頹頺頽魋穨蘈蹪俀脮腿僓蹆骽退娧煺蜕褪駾吞呑朜焞暾黗屯芚饨豘豚軘鲀魨霕臀臋氽畽坉乇讬托汑饦侂咃拕拖沰侻莌袥託涶脫', 'T脱飥魠驮佗陀坨岮沱驼柁砣砤袉鸵紽堶跎酡碢馱槖駄踻駝駞橐鮀鴕鼧騨鼍驒鼉妥毤庹媠椭楕嫷橢鵎拓柝唾跅毻箨籜', 'U辪癷袰蝊曢聣烪燞躼蒊蓞耂稥洜毜毝茒桛毮朑焽虲鶑鎼鐢艈霻闧焑屗歚徚鍂藔贘皼斏聁祍', 'W趡惡噁唲陚龏萖関闗關貫窐姽恑瞶咼堝濄幠膴鋘譁瀤綄朚撝蒦嚄擭雘艧扝噲抂巋磈薶槾鄤澫堥夘呅韎雺霿沕忞鴖譕帓歾靺瞴蟱墲娒孯掔瓗渞蜹捼琞亠撱鰖屲劸哇娃徍挖洼娲畖窊媧嗗蛙搲', 'W溛漥窪鼃攨瓦佤邷咓瓲砙袜嗢腽膃襪韈韤歪喎竵崴外弯剜婠帵塆湾睕蜿潫豌彎壪灣丸刓汍纨芄完岏忨抏玩笂紈捖顽烷琓貦頑邜宛倇唍挽晚盌埦婉惋晩梚绾脘菀晼椀琬皖畹碗綩綰輓踠鋔鍐', 'W万卍卐杤捥腕萬翫鋄薍錽贃鎫贎尩尪尫汪亡亾兦王仼彺莣蚟网忹往徃枉罔惘菵暀棢焹蛧辋網蝄誷輞瀇魍妄忘迋旺盳望朢危威烓偎逶隇隈喴媁媙愄揋揻渨煀葨葳微椳楲溦煨詴縅蝛覣嶶薇鳂', 'W癐巍鰃鰄囗为韦围帏沩违闱峗峞洈為韋桅涠唯帷惟维喡圍嵬幃湋溈爲違潍蓶鄬潙潿濰鍏闈鮠癓覹犩霺伟伪尾纬芛苇委炜玮洧娓捤浘荱诿偉偽崣梶硊萎隗骩嵔廆徫愇猥葦蒍骪骫暐椲煒瑋痿', 'W腲艉韪僞碨蜲蜼鲔寪緯蔿諉踓韑頠儰濻鍡鮪壝韙颹瀢亹斖卫未位味苿畏胃軎尉硙菋谓喂媦渭猬煟墛蔚慰熭犚磑緭蝟衛懀濊璏罻衞謂餧鮇螱褽餵魏藯轊鏏霨鳚蘶饖讆躗讏躛昷塭温殟溫瑥榲', 'W瘟豱鳁鎾饂鰛鰮文彣纹芠炆砇闻紋蚉蚊珳阌鈫雯瘒聞馼魰鳼鴍螡閺閿蟁闅鼤闦刎吻呚忟抆呡肳紊桽脗稳穏穩问妏汶莬問渂脕揾搵絻顐璺翁嗡鹟螉鎓鶲奣塕嵡滃蓊暡瞈聬瓮蕹甕罋齆挝倭涡', 'W莴唩涹渦猧萵喔窝窩蜗蝸踒我婐婑捰仴沃肟卧臥偓媉幄握渥焥硪楃腛斡瞃濣瓁龌齷乌圬弙污邬呜杇巫屋洿诬钨趶剭窏釫鄔嗚誈誣箼螐鴮鎢鰞无毋吴吾呉芜梧洖浯茣莁珸祦鹀無禑蜈蕪璑鵐', 'W鯃鼯鷡乄五午仵伍坞妩庑忤怃迕旿武玝侮俉倵捂啎娬牾珷塢摀熓碔鹉瑦舞嫵廡憮潕錻儛橆甒鵡躌兀勿务戊阢伆屼扤岉杌芴忢物矹敄误務悞悟悮粅逜晤焐婺嵍痦隖靰骛奦嵨溩雾寤熃誤鹜鋈', 'W窹霚鼿霧齀蘁騖鶩', 'X欸庍壆扱烲愖糦臰欪滀嘼錯廗諜摡給蚼規嶲鮭巂鬹咁譀迒茠滈欱郃螛嗃熇燺揈閧闀闂鬨銗謼滸芐觟懁郇狟澴還镮鐶儶譮孈葷轋掝擊彐蔇縘繫夾埉浹傢裌叚徦鰔梘筧礆見閒瞯鵁轇驕絞較湝', 'X頡觧吤繲坙巠坓顈眗鼰鼳鋗絹獧決泬勪噱姰濬愾埳堿闞晇欵歀潰搚懢壏嘮釐溓蘝蘞稴漻衖莔禰瓕賯撓譊鉨鉩煖謳嘔盤嚊恓棲諿氣欦臤慳荨羬蕁槏伣俔嗛骹燆睄綅瓊蓲鱃魼胊卻舃碏儴勷蘘', 'X纕繻灑钑鈒鰓騷雭殺榝姍釤縿莦颵姺濕宩昰笹齛咰鉥獡箾蜤燍叜宿碿潚橚孫鶽橝撢餳饀屜歒盷蓨赨緰圩韡捾夕兮忚汐西覀吸希卥昔析矽穸肸肹俙徆怸郗饻唏奚娭屖息悕晞氥浠牺狶莃唽悉', 'X惜桸欷淅渓烯焁焈琋硒菥赥釸傒惁晰晳焟犀睎稀粞翕翖舾鄎厀嵠徯溪煕皙蒠锡僖榽熄熙緆蜥豨餏嘻噏嬆嬉瘜膝餙凞樨橀歙熹熺熻窸羲螅螇錫燨犠瞦礂蟋谿豀豯貕繥雟鯑鵗觹譆醯鏭隵巇曦', 'X爔犧酅觽鼷蠵鸂觿鑴习郋席習袭觋媳椺蒵蓆嶍漝覡趘槢蝷薂隰檄謵鎴霫鳛飁騱騽襲鰼驨枲洗玺徙铣喜葈葸鈢屣漇蓰銑憘憙暿橲禧諰壐縰謑蟢蹝璽鱚矖纚躧匸卌戏屃系饩呬忥怬细係恄盻郤', 'X欯绤細釳阋塈椞舄趇隙慀滊禊綌赩隟熂犔稧戯潟澙蕮覤戱黖戲磶虩餼鬩嚱闟霼衋虾谺傄閕敮煆颬瞎蝦鰕匣侠狎俠峡柙炠狭陜峽烚狹珨祫硖笚翈舺陿溊硤遐搳暇瑕筪碬舝辖縀蕸縖赮魻轄鍜', 'X霞鎋黠騢鶷閜丅下吓圷疜夏梺廈睱諕嚇懗罅夓鏬仙仚屳先奾纤佡忺氙杴祆秈苮籼珗莶掀铦跹酰锨僊僲嘕銛鲜暹韯憸鍁繊褼韱鮮馦蹮孅廯攕譣纎鶱襳躚纖鱻伭咞闲妶弦贤咸挦涎胘娴娹婱絃', 'X舷蚿衔啣痫蛝閑鹇嫌甉銜嫺嫻憪撏澖誸賢諴輱醎癇癎藖鹹礥贒鑦鷳鷴鷼冼狝显险毨烍猃蚬険赻筅尟尠搟禒蜆跣箲獫獮藓鍌燹顕幰攇櫶蘚玁韅顯灦县岘苋现线臽限姭宪県陥哯垷娊娨峴晛涀', 'X莧陷現馅睍絤缐羡献粯腺僩僴綫誢撊線鋧憲橌縣錎餡豏瀗臔獻糮鏾霰鼸乡芗相香郷厢啌鄉鄊廂湘缃葙鄕楿薌箱緗膷襄忀骧麘欀瓖镶鱜鑲驤瓨佭详庠栙祥絴翔跭享亯响蚃饷晑飨想銄餉鲞嚮', 'X蠁鯗響饗饟鱶向姠巷项珦象缿萫項像勨嶑曏橡襐蟓鐌鱌灱灲呺枭侾削哓枵骁宯宵庨恷消绡虓逍鸮啋婋梟焇猇萧痚痟硝硣窙翛萷销揱綃嘐歊潇箫踃嘵憢撨獢銷霄彇膮蕭魈鴞穘簘藃蟂蟏謞鴵', 'X嚣瀟簫蟰髇嚻囂櫹髐鷍蠨驍毊虈洨郩崤淆訤誵小晓暁筱筿皛曉篠謏皢孝肖効咲恔俲哮效校涍笑啸傚敩滧詨嘋嘨誟嘯歗熽斅斆些楔歇蝎蠍劦协旪邪協胁垥奊恊拹挾脅脇脋衺偕斜谐猲絜翓嗋', 'X愶携瑎綊熁膎勰撷擕緳缬蝢鞋諧燲擷鞵襭攜纈讗龤写冩寫藛伳灺泄泻祄绁缷卸炧炨卨娎屑屓偰徢械焎禼亵媟屟揳渫絬谢僁塮榍榭褉噧屧暬韰嶰廨懈澥獬糏薢薤邂燮褻謝夑瀉瀣爕蟹蠏齘齥', 'X齂躠屭躞心邤妡忻芯辛昕杺欣盺俽惞鈊锌新歆廞噷噺嬜薪馨鑫馫枔鬵鐔伈潃阠伩囟孞炘信軐脪衅訫焮馸舋顖釁兴狌星垶骍惺猩煋瑆腥蛵觪箵篂興謃曐觲騂皨刑邢形陉侀郉哘型洐钘陘娙硎', 'X裄铏鈃鉶銒鋞睲醒擤杏姓幸性荇倖莕婞悻涬塂緈嬹臖凶兄兇匈芎讻忷汹哅恟洶胷胸訩詾雄熊诇詗夐敻休俢修咻庥烋烌羞脙鸺臹貅馐樇銝髤髹鎀鮴鵂饈鏅飍苬朽綇滫糔秀岫珛绣袖琇锈溴綉', 'X璓裦螑繍繡鏥鏽齅戌旴疞盱欨胥须訏顼虗虚谞媭幁揟欻虛須楈窢頊嘘稰需魆噓墟嬃歔縃蕦蝑歘諝譃魖驉鑐鬚俆徐蒣许呴姁诩冔栩珝偦許湑暊詡鄦糈醑盨旭伵序汿侐卹沀叙恤昫洫垿欰殈烅', 'X珬勖勗敍敘烼绪续酗喣壻婿朂溆絮訹嗅慉煦続蓄賉槒漵潊盢瞁緒聟銊稸緖瞲藚續蓿吅轩昍咺宣晅軒梋谖喧塇媗愃愋揎萱萲暄煊瑄蓒睻儇禤箮翧蝖嬛蕿諠諼鍹駽矎翾藼蘐蠉譞鰚讂玄玹痃悬', 'X旋琁蜁嫙漩暶璇檈璿懸选烜暅選癣癬怰泫昡炫绚眩袨铉琄眴衒渲絢楦鉉碹蔙镟鞙颴縼繏鏇贙疶蒆靴薛鞾穴斈乴坹学岤峃茓泶袕鸴踅學嶨澩燢觷雤鷽雪樰膤艝轌鳕鱈血吷怴泧狘疦桖烕谑趐', 'X謔瀥坃勋埙焄勛塤熏窨蔒勲勳薫駨嚑壎獯薰曛燻臐矄蘍壦爋纁醺寻巡旬驯杊询峋恂洵浔紃荀栒桪毥珣偱尋循揗詢馴鄩鲟噚攳樳燂燅燖璕襑蟳鱏鱘灥卂训讯伨汛迅侚徇狥迿逊殉訊訓訙奞巽', 'X殾遜愻賐噀蕈顨鑂吁', 'Y叆賹礙譺靉菴媕葊痷闇鵪鶕晻洝媼澚墺驁頨瑒耛拸呾訑婸潒扚昳屵姶堊搤閼煾妋鳱輵夃焸蠱溎裷緷蟈淊嚛欥瓛輐喛揘韹熀袆煇褘蚘噦矆拁玪豜豣將侥烄僥伒莖俓泂揂圧僪貗飬妜焆鐍炏顑', 'Y丂髺樂貍櫟躒輅擽嫚玅桙獶輗掜孴儗肀喦噛槷嚙钀汼齵堷踦锜錡裿綺鉛膁羗撽赺欽汓翑蝺輑橪蕘嬈嵤銳鋭挻烻剡虵縄繩鱦釶鉇箷戺謚釋哾說説爍鑠梀筍鉈珆旲錟湯匋鴺趯恌銕桯筩婾媮殕', 'Y悇蛻涒扡挩捝狏迱詑彵啘乛涴妧尣燰琟維厃痏薳叞榅辒輼轀勜臒汙汚烏歍吳郚娪焬熈誒歖潝疨磍嬐薟唌湺衘崄險嶮硍羨麲詳峫鐷洩紲絏緤訢脩褎褏銹獝藇鱮楥辥廵潯丫压呀庘押鸦桠鸭孲', 'Y铔椏鴉錏鴨壓鵶鐚牙伢岈芽厓枒琊笌蚜堐崕崖涯猚瑘睚衙漄齖厊庌哑唖啞痖雅瘂蕥劜圠亚穵襾讶亜犽迓亞玡垭娅挜砑俹氩埡婭掗訝揠氬猰聐圔稏窫齾咽恹剦烟珚胭偣崦淹焉菸阉湮腌傿煙', 'Y鄢嫣漹嶖樮醃閹嬮篶懕臙黫讠円延闫严妍芫言訁岩昖沿炎郔姸娫狿研莚娮盐琂硏訮閆阎嵒嵓筵綖蜒塩揅楌詽碞蔅颜虤閻厳檐顏顔嚴壛巌簷櫩麙壧孍巖巗巚欕礹鹽麣夵抁沇乵兖奄俨兗匽弇', 'Y衍偃厣掩眼萒郾酓嵃愝扊揜棪渰渷琰遃隒椼硽罨裺演褗戭蝘魇噞躽縯檿黡厴甗鰋鶠黤齞龑儼黬黭顩鼴巘曮魘鼹齴黶厌妟觃牪姲彥彦砚唁宴晏艳覎验偐掞焔谚隁喭堰敥焰焱猒硯葕雁椻滟鳫', 'Y厭墕暥熖酽嬊谳餍鴈燄燕諺赝鬳曕鴳酀騐験嚥嬿艶贋軅爓醶騴鷃灔贗觾讌醼饜驗鷰艷灎釅驠灧讞豓豔灩央咉姎抰泱殃胦眏秧鸯鉠雵鞅鍈鴦扬羊阦阳旸杨炀佯劷氜疡钖飏垟徉昜洋羏烊珜眻', 'Y陽崵崸揚蛘敭暘楊煬禓瘍諹輰鍚鴹颺鐊鰑霷鸉卬仰佒坱奍岟养炴氧痒紻傟楧軮慃氱羪養駚懩攁瀁癢礢怏柍恙样羕詇様漾樣幺夭吆妖枖祅訞喓葽楆腰鴁邀爻尧尭肴垚姚峣轺倄烑珧窑傜堯揺', 'Y殽谣軺嗂媱徭愮搖摇猺遙遥摿暚榣瑤瑶銚飖餆嶢嶤徺磘窯窰餚繇謠謡鳐颻蘨顤鰩仸宎岆抭杳殀狕苭咬柼眑窅窈舀偠婹崾溔榚鴢闄騕齩鷕穾药要袎窔筄葯詏熎覞靿獟鹞薬鼼曜燿艞藥矅曣耀', 'Y纅鷂讑鑰倻椰暍噎潱蠮爷耶捓揶铘爺釾鋣鎁擨也吔亪冶埜野嘢漜壄业叶曳页邺夜抴亱枼洂頁晔枽烨掖液谒堨殗腋葉鄓墷楪業馌僷曄曅歋燁擛皣瞱鄴靥嶪嶫澲謁餣嚈擫曗瞸鍱擪爗礏鎑饁鵺', 'Y靨驜鸈膶岃一弌辷衤伊衣医吚壱依祎咿洢猗畩郼铱壹揖欹蛜禕嫛漪稦銥嬄噫夁瑿鹥繄檹毉醫黟譩鷖黳乁仪匜圯夷冝宐沂诒侇宜怡沶狋衪迤饴咦姨峓弬恞柂瓵荑贻迻宧巸扅栘桋眙胰袘酏痍', 'Y移萓媐椬羠蛦詒貽遗暆椸誃跠頉颐飴疑儀熪遺嶬彛彜螔頤頥寲嶷簃顊鮧彝彞謻鏔籎觺讉鸃乙已以迆钇佁攺矣苡苢庡舣蚁釔倚扆笖逘偯崺旑椅鈘鉯鳦旖輢敼螘檥礒艤蟻顗轙齮乂义亿弋刈忆', 'Y艺仡匇肊议阣亦伇屹异忔芅伿佚劮呓坄役抑曵杙耴苅译邑佾呭呹峄怈怿易枍泆炈绎诣驿俋奕帟帠弈枻浂玴疫羿衵轶唈垼悒挹栧欭浥浳益袣谊貤陭勚埶埸悘悥殹異羛翊翌萟訲訳豙豛逸釴隿', 'Y幆敡晹棭殔湙焲蛡詍跇鈠骮亄兿意溢獈痬竩缢義肄裔裛詣勩嫕廙榏潩瘗膉蓺蜴靾駅億撎槸毅熠熤熼瘞誼镒鹝鹢黓劓圛墿嬑嬟嶧憶懌曀殪澺燚瘱瞖穓縊艗薏螠褹寱斁曎檍歝燡燱翳翼臆貖鮨', 'Y癔藙藝贀鎰镱繶繹豷霬鯣鶂鶃鶍瀷蘙譯議醳醷饐囈鐿鷁鷊懿襼驛鷧虉鷾讛齸乚囙因阥阴侌垔姻洇茵荫音骃栶殷氤陰凐秵裀铟陻隂喑堙婣愔筃絪歅溵禋蒑蔭慇瘖銦磤緸鞇諲霒駰噾濦闉霠韾', 'Y冘吟犾苂垠泿圁峾烎狺珢粌荶訔唫婬寅崟崯淫訡银鈝龂滛碒鄞夤蔩訚誾銀龈噖殥璌嚚檭蟫霪齗齦鷣尹引吲饮蚓隐淾釿鈏飲隠靷飮朄趛檃瘾隱嶾濥螾蘟櫽癮讔印茚洕胤垽湚猌廕酳慭癊憖憗', 'Y鮣懚檼应応英偀桜珱莺啨婴媖愥渶绬朠煐瑛嫈碤锳嘤撄滎甇緓缨罂蝧賏樱璎噟罃褮霙鴬鹦嬰應膺韺甖鎣鹰鶧嚶孆孾攖瀴罌蘡櫻瓔礯譻鶯鑍纓蠳鷪軈鷹鸎鸚盁迎茔盈荥荧莹萤营萦蛍営溁溋', 'Y萾僌塋楹滢蓥潆熒蝇瑩蝿嬴營縈螢濙濚濴藀覮謍赢巆攍攚瀛瀠瀯蠅櫿灐籝灜贏籯矨郢梬颍颕颖摬影潁瘿穎頴巊廮鐛癭映暎硬媵膡鞕瀅譍哟唷喲佣拥痈邕庸傭嗈鄘雍墉嫞慵滽槦牅噰壅擁澭', 'Y郺镛臃癕雝鏞鳙廱灉饔鱅鷛癰喁颙顒鰫永甬咏怺泳俑勇勈栐埇悀柡涌恿傛惥愑湧硧詠塎嵱彮愹蛹慂踊禜鲬踴鯒用苚砽醟优忧攸呦怮泑幽悠麀滺憂優鄾嚘懮瀀櫌纋耰尢尤由沋犹邮怞油肬怣', 'Y斿柚疣峳浟秞莜莤莸逌郵铀偤蚰訧逰游猶遊鱿楢猷鲉輏駀蕕蝣魷輶鮋櫾邎友有丣卣苃酉羑庮羐莠梄聈脜铕湵蒏禉蜏銪槱牖牗黝又右幼佑侑孧狖糿哊囿姷宥峟牰祐诱迶唀梎蚴亴貁釉酭誘鼬', 'Y扜纡迂迃穻陓紆虶唹淤盓渝瘀箊于亐予邘伃余妤扵杅欤玗玙於盂臾衧鱼俞兪禺竽舁茰荢娛娯娱狳谀酑馀渔萸釪隃隅雩魚堣堬崳嵎嵛愉揄楰湡畬畭硢腴逾骬愚楡榆歈牏瑜艅虞觎漁睮窬舆褕', 'Y歶羭蕍蝓諛雓餘魣嬩懙澞覦踰歟璵螸輿鍝礖謣髃鮽旟籅騟鯲鰅鷠鸆与伛宇屿羽雨俁俣挧禹语圄峿祤偊匬圉庾敔鄅萭萮铻傴寙斞楀瑀瘐與語窳鋙龉噳嶼貐斔麌蘌齬玉驭聿芋芌妪忬饫育郁彧', 'Y昱狱秗茟俼峪栯浴砡钰预喐域堉悆惐欲淢淯袬谕逳阈喅喩喻媀寓庽御棛棜棫焴琙矞裕遇飫馭鹆愈滪煜稢罭蒮蓣誉鈺預嫗嶎戫毓獄瘉緎蜟蜮輍銉隩噊慾稶蓹薁豫遹鋊鳿澦燏燠蕷諭錥閾鴥鴧', 'Y鴪儥礇禦魊鹬癒礜穥篽繘醧鵒櫲饇蘛譽轝鐭霱欎驈鬻籞鱊鷸鸒欝軉鬰鬱灪籲爩囦鸢剈冤弲悁眢鸳寃渁渆渊渕惌淵葾棩蒬蜎鹓箢鳶蜵駌鋺鴛嬽鵷灁鼘鼝元贠邧员园沅杬垣爰貟原員圆笎蚖袁', 'Y厡酛圎援湲猨缘鈨鼋園圓塬媴嫄源溒猿獂蒝榞榬辕緣縁蝝蝯魭橼羱薗螈謜轅黿鎱櫞邍騵鶢鶰厵远盶逺遠夗肙妴苑怨院垸衏傆媛掾瑗禐愿裫褑褤噮願曰曱约約箹矱彟彠月戉刖岄抈礿岳枂玥', 'Y恱钥悅悦蚎蚏軏钺阅捳跀跃粤越鈅粵鉞閱閲嬳樾篗嶽龠籆瀹蘥黦爚禴躍籥鸑籰龥鸙蒀煴蒕熅奫蝹赟頵馧贇云勻匀伝呍囩妘抣沄纭芸昀畇眃秐郧涢紜耘耺鄖雲愪氲溳筼蒷氳熉澐蕓鋆橒篔縜', 'Y繧允阭夽抎狁玧陨荺殒喗鈗隕殞褞馻磒霣齫齳孕运枟郓恽晕鄆酝傊惲愠缊運慍暈腪韫韵熨緼蕰蕴縕薀賱醖醞餫藴韗韞蘊韻這', 'Z敱捗囃謲匨蔵冊側厠廁嶒扠挿揷蹅茝僝欃倀长仧長镸鼌鼂謿謓迧陳鈂趂朾脀憕徎胵絺泜歭遟遲迣徸漴褈緟蝩蟲紬搊椆詶薵偢芻鉏蕏傳鶨倕埀箠鎚純湻辶腏趠齱骴薋泚跐從蓯樅熜緫潀潈潨', 'Z酢噈欑穳篹嶉槯伜倅紣綷顇墫拵踆睉蔖剳蹛黱酖亶翢篴拞牴觝啇摕蝃踶點鳭調藋喋臷鰈眰鼑枓剢耑磓隊腞夛仛喥柮樲胕阝贛戇滜睪牫贑嫢啈楖嚌璾鯽穧椾碊鳽餰栫袸濺瀳鏩繳擳竧鳩砠蓻', 'Z齟怚跙脧雋捔逫嵁沴酈譧驡狵沵摨聶囁釽亝祇蚔齊磩鈆謙綪繰菬埥軽鯖伹岨恮跧甽繅洓篸箑摂攝鉐實識亊鉃適銴檡薥藷鸀尌虒睟簨駘菭襢犆媞薙嚔鐟塡怗聑跕鉄鉵獞穜潳剬剸塼摶漙篿尵', 'Z旽啍忳飩杔馲驝陁萚蘀聉顡醀錗撾扸杫咥枮鮝鞢鋅鮏鯹鎐蓔捙偞擖杝妷秇栺軼乑斦浧銿鈾圫汋帀匝沞咂拶沯桚紥紮鉔魳臜臢杂砸韴雑磼襍雜囐雥災灾甾哉栽烖菑渽溨睵賳宰载崽載再在扗', 'Z洅傤酨儎縡兂糌簪簮鐕咱偺喒昝寁撍儧攒儹攢趱趲暂暫賛赞錾鄼濽蹔酂瓉贊鏨瓒酇囋灒讃瓚禶襸讚饡牂羘赃賍臧賘贓髒贜驵駔奘弉脏塟葬銺臓臟傮遭糟蹧醩凿鑿早枣栆蚤棗璅澡璪薻藻灶', 'Z皁皂唕唣造梍喿慥煰艁噪簉燥竃譟趮躁竈啫伬则択沢择泎泽责迮則唶啧帻笮舴責溭矠嘖嫧幘箦蔶樍歵諎赜擇澤皟瞔簀耫礋襗謮賾蠌齚齰鸅仄夨庂汄昃昗捑崱稄贼賊鲗蠈鰂鱡怎谮譖譛囎曽', 'Z増鄫增憎缯橧熷璔矰磳罾繒譄鱛锃鋥甑赠贈吒迊咋抯挓柤哳偧喳揸渣溠楂劄皶箚樝觰皻譇齄齇扎札甴轧軋闸蚻铡煠牐閘霅鍘譗厏苲眨砟搩鲊鲝踷鮓鮺乍灹诈咤奓柵炸宱痄蚱詐搾摣榨醡夈', 'Z粂捚斋斎摘榸齋宅翟窄鉙债砦債寨瘵沾毡旃栴粘蛅飦惉詀趈詹閚谵噡嶦薝邅霑氈氊瞻鹯旜譫饘鳣驙魙鱣鸇讝拃斩飐展盏崭斬琖搌盞嶃嶄榐辗颭嫸醆橏蹍輾皽黵占佔战栈桟站偡绽菚棧湛戦', 'Z綻嶘輚戰虥虦覱轏蘸驏张弡張章傽鄣嫜彰慞漳獐粻蔁遧暲樟璋餦蟑鏱騿鱆麞仉涨涱掌漲幥礃鞝鐣丈仗扙帐杖胀账粀帳脹痮障墇嶂幛賬瘬瘴瞕佋钊妱巶招昭炤盄釗啁鉊駋窼鍣爫找沼瑵召兆', 'Z诏枛垗狣赵笊肁旐棹罀詔照罩箌肇肈趙曌燳鮡櫂瞾羄蜇嫬遮厇折歽矺砓籷虴哲埑粍袩啠悊晢晣辄喆棏蛰詟谪摺輒樀磔輙銸辙蟄嚞謫謺鮿轍讁襵讋者锗赭褶鍺这柘浙淛嗻蔗樜鹧蟅鷓贞针侦', 'Z浈珍珎貞帪栕桢眞真砧祯針偵敒桭酙寊湞葴遉搸斟楨獉甄禎蒖蓁鉁靕榛槇殝瑧碪禛潧箴樼澵臻薽錱轃鍖鍼籈鱵屒诊抮枕姫弫昣胗轸畛疹眕袗紾聄萙裖覙診軫嫃缜稹駗縝縥辴鬒黰圳阵纼侲', 'Z挋陣鸩振朕栚紖眹赈塦揕絼蜄敶誫賑鋴镇震鴆鎭鎮黮凧争佂姃征怔爭峥挣炡狰烝眐钲埩崝崢掙猙睁聇铮媜揁筝徰睜蒸鉦徴箏徵踭篜錚鬇癥氶抍糽拯掟塣晸愸撜整正证诤郑帧政症幀証鄭諍', 'Z鴊證之支卮汁芝吱巵汥枝知织肢徔栀祗秓秖胑胝衹衼倁疷祬秪脂隻梔戠椥臸搘禔綕榰蜘馶鳷謢鴲織蘵鼅禵执侄坧直姪値值聀釞埴執职植殖禃絷跖瓡墌摭馽嬂慹漐踯樴膱縶職蟙蹠蹢軄躑止', 'Z只凪劧旨阯址坁帋扺汦沚纸芷抧祉茋咫恉指枳洔砋轵淽疻紙訨趾軹黹酯藢襧阤至芖志忮扻豸制厔垁帙帜治炙质郅俧峙庢庤挃柣栉洷祑陟娡徏挚晊桎狾秩致袟贽轾乿偫徝掷梽猘畤痔秲秷窒', 'Z紩翐袠觗貭铚鸷傂崻彘智滞痣蛭骘寘廌搱滍稙稚筫置跱輊锧雉墆槜滯潌疐瘈製覟誌銍幟憄摯潪熫稺膣觯質踬鋕旘瀄緻隲駤鴙儨劕懥擲擿櫛穉螲懫贄櫍瓆觶騭鯯礩豑騺驇躓鷙鑕豒中伀汷刣', 'Z妐彸迚忠泈炂终柊盅衳钟舯衷終鈡幒蔠锺螤鴤螽鍾鼨蹱鐘籦肿种冢喠尰塚歱煄腫瘇種踵仲众妕狆祌茽衶重蚛偅眾堹媑筗衆諥州舟诌侜周洀洲炿诪烐珘辀郮婤徟淍矪週鸼喌粥赒輈銂賙輖霌', 'Z駲嚋盩謅鵃騆譸妯轴軸碡肘帚疛菷晭睭箒鯞纣伷呪咒宙绉冑咮昼紂胄荮晝皱酎粙葤詋甃僽皺駎噣縐骤籀籕籒驟朱劯侏诛邾洙茱株珠诸猪硃袾铢絑蛛誅跦槠潴蝫銖橥諸豬駯鮢鴸瀦藸櫧櫫鼄', 'Z鯺蠩竹泏竺炢笁茿烛窋逐笜舳瘃蓫燭蠋躅鱁劚孎灟斸曯欘爥蠾钃主宔拄砫罜陼渚煑煮詝嘱濐麈瞩屬囑矚伫佇住助纻芧苎坾杼注苧贮迬驻壴柱柷殶炷祝疰眝祩竚莇秼紵紸羜著蛀嵀筑註貯跓', 'Z軴铸筯鉒飳馵墸箸翥樦鋳駐築篫霔麆鑄抓檛膼簻髽爪拽跩专叀専砖專鄟嫥瑼甎膞颛磚諯蟤顓鱄转孨転竱轉灷啭堟蒃瑑僎赚撰篆馔縳襈賺譔饌囀籑妆庄妝庒荘娤桩莊湷粧装裝樁糚丬壮壯状', 'Z狀壵梉焋幢撞戅隹追骓椎锥錐騅鵻沝坠笍娷缀惴甀缒畷硾膇墜綴赘縋諈醊錣餟礈贅轛鑆宒迍肫窀谆諄衠准埻凖準綧訰稕卓拙炪倬捉桌棁涿棳琸窧槕穛穱蠿圴彴犳灼叕妰茁斫浊丵浞烵诼酌', 'Z啄啅娺梲着斮晫椓琢斱硺窡罬撯擆斲禚劅諁諑鋜濁篧擢斀斵濯櫡謶镯鐯鵫灂蠗鐲籗鷟籱仔孖孜茊兹咨姕姿茲栥玆紎赀资崰淄秶缁谘赼嗞孳嵫椔湽滋葘辎鄑孶禌觜貲資趑锱稵緇鈭镃龇輜鼒', 'Z澬諮趦輺錙髭鲻鍿鎡頾頿鯔鶅齍鰦齜籽子吇姉姊杍矷秄胏呰秭耔虸笫梓釨啙紫滓訾訿榟橴字自芓茡倳剚恣牸渍眥眦胔胾漬唨宗倧综骔堫嵏嵕惾棕猣腙葼朡椶嵸稯綜緃熧緵翪艐蝬踨踪磫豵', 'Z蹤騌鬃騣鬉鬷鯮鯼鑁总偬捴惣愡揔搃傯蓗摠総縂燪總鍯鏓纵昮疭倊猔碂粽糉瘲縦錝縱邹驺诹郰陬掫菆棷棸鄒箃緅諏鄹鲰鯫黀騶齺赱走鯐奏揍媰租菹葅蒩卆足卒哫崒崪族傶稡箤踤踿镞鏃诅', 'Z阻组俎爼珇祖組詛靻鎺謯劗躜鑚躦鑽繤缵纂纉籫纘钻揝攥厜朘嗺樶蟕纗嶊嘴噿濢璻枠栬絊酔晬最祽罪辠酻蕞醉嶵檇鋷錊檌穝欈尊嶟遵樽繜罇鶎鐏鳟鱒鷷僔噂撙譐捘銌昨秨莋捽椊葃稓筰鈼', 'Z左佐繓作坐阼岝岞怍侳柞祚胙唑座袏做葄蓙飵糳咗' ); function MakeSpellCode(const stText: String): String; var I: Integer; len: Integer; c: UnicodeChar; substr: String; usText, usubstr: UnicodeString; begin Result := ''; usText:= UTF8Decode(stText); if usText = '' then Exit; len:= Length(usText); for I:= 1 to len do begin c := usText[I]; if (Ord(c) >= 19968) and (Ord(c) < 40869) then begin for substr in strChineseCharList do begin usubstr:= UTF8Decode(substr); if Pos(c, usubstr) <> 0 then begin Result:= Result + substr[1]; Break; end; end; end else Result := Result + UTF16ToUTF8(c); end; end; end. doublecmd-0.9.8/src/uhotkeymanager.pas0000644000175000001440000011015613144134011017041 0ustar alexxusers { 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 = class Instance: InstanceClass; KeyDownProc: TKeyEvent; end; THMFormInstance = specialize THMObjectInstance; THMControlInstance = specialize THMObjectInstance; { 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; { 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: TDynamicStringArray): 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 = 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; THMBaseControls = specialize TFPGObjectList; { 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; TActionLists = specialize TFPGObjectList; { 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; { 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 i: Integer; begin Result := nil; for i := StartIndex to High(ShortcutsWithParams) do begin s := ShortcutsWithParams[i]; if s <> '' then AddString(Result, s) else Break; end; StartIndex := i + 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: TDynamicStringArray): 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 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-0.9.8/src/uhotdir.pas0000644000175000001440000014074713573126536015530 0ustar alexxusers{ 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} ; { 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 := 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 := 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 := 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 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 := 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 LocalHotDir.HotDirPath<>'' then LocalHotDir.HotDirPath:=ExcludeBackPathDelimiter(LocalHotDir.HotDirPath); if LocalHotDir.HotDirTarget<>'' 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(mbExpandFilename(TotalCommanderConfigFilename)); 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; RememberCursor: TCursor; begin Result := True; OffsetForOnesAlreadyThere := 0; try RememberCursor := Screen.Cursor; Screen.Cursor := crHourGlass; 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.Cursor := RememberCursor; end; end; {$ENDIF} end. doublecmd-0.9.8/src/uhighlighterprocs.pas0000644000175000001440000001035411740433676017572 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; procedure GetHighlighters(AOwner: TComponent; AHighlighters: TStringList; AppendToList: boolean); function GetHighlightersFilter(AHighlighters: TStringList): string; function GetHighlighterFromFileExt(AHighlighters: TStringList; Extension: string): TSynCustomHighlighter; implementation uses SysUtils; procedure GetHighlighters(AOwner: TComponent; AHighlighters: TStringList; AppendToList: boolean); var i: integer; Highlighter: TSynCustomHighlighter; begin if Assigned(AOwner) and Assigned(AHighlighters) then begin if not AppendToList then AHighlighters.Clear; for i := AOwner.ComponentCount - 1 downto 0 do begin if not (AOwner.Components[i] is TSynCustomHighlighter) then continue; Highlighter := AOwner.Components[i] as TSynCustomHighlighter; // only one highlighter for each language if AHighlighters.IndexOf(Highlighter.GetLanguageName) = -1 then AHighlighters.AddObject(Highlighter.GetLanguageName, Highlighter); end; AHighlighters.Sort; end; end; 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-0.9.8/src/uhash.pas0000644000175000001440000001300313347143212015127 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- General Hash Unit: This unit defines the common types, functions, and procedures 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 uHash; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCPcrypt2, crc; type THashContext = TDCP_hash; THashAlgorithm = (HASH_BLAKE2S, HASH_BLAKE2SP, HASH_BLAKE2B, HASH_BLAKE2BP, 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 ); var HashFileExt: array[THashAlgorithm] of String = ( 'blake2s', 'blake2sp', 'blake2b', 'blake2bp', 'crc32', 'haval', 'md4', 'md5', 'ripemd128', 'ripemd160', 'sfv', 'sha', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3', 'sha3', 'sha3', 'sha3', 'tiger' ); var HashName: array[THashAlgorithm] of String = ( 'blake2s', 'blake2sp', 'blake2b', 'blake2bp', '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; const 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 FileExtIsHash(const FileExt: String): Boolean; function FileExtToHashAlg(const FileExt: String): THashAlgorithm; implementation uses LazUTF8, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPcrc32, DCPsha1, DCPsha256, DCPsha512, DCPtiger, DCPblake2, DCPsha3; procedure HashInit(out Context: THashContext; const Algorithm: THashAlgorithm); begin 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_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 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-0.9.8/src/uguimessagequeue.pas0000644000175000001440000001433411747211345017417 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-0.9.8/src/ugraphics.pas0000644000175000001440000001101613523551375016017 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Graphic functions Copyright (C) 2013-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 uGraphics; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, IntfGraphics; type { TImageListHelper } TImageListHelper = class helper for TImageList public procedure LoadThemeIcon(Index: Integer; const AIconName: String); end; procedure BitmapAssign(Bitmap: TBitmap; Image: TRasterImage); procedure BitmapAssign(Bitmap: TBitmap; Image: TLazIntfImage); procedure BitmapAlpha(var ABitmap: TBitmap; APercent: Single); procedure BitmapCenter(var Bitmap: TBitmap; Width, Height: Integer); implementation uses GraphType, FPimage, uPixMapManager; type TRawAccess = class(TRasterImage) end; procedure BitmapAssign(Bitmap: TBitmap; 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: TBitmap; 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]); AImage.CreateData; 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 Target.CreateData; 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; { TImageListHelper } procedure TImageListHelper.LoadThemeIcon(Index: Integer; const AIconName: String); var ABitmap: TBitmap; begin ABitmap:= PixMapManager.GetThemeIcon(AIconName, Self.Width); if (ABitmap = nil) then ABitmap:= TBitmap.Create; if (Index < Count) then Self.Replace(Index, ABitmap , nil) else begin Self.Insert(Index, ABitmap , nil) end; ABitmap.Free; end; end. doublecmd-0.9.8/src/uglobs.pas0000644000175000001440000044001513530175472015330 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Globals variables and some consts 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 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-2018 Alexander Koblov (alexx2000@mail.ru) } unit uGlobs; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Forms, Grids, Types, uExts, uColorExt, Graphics, DCClassesUtf8, uMultiArc, uColumns, uHotkeyManager, uSearchTemplate, uFileSourceOperationOptions, uWFXModule, uWCXModule, uWDXModule, uwlxmodule, udsxmodule, DCXmlConfig, uInfoToolTip, fQuickSearch, uTypes, uClassesEx, uHotDir, uSpecialDir, uVariableMenuSupport, SynEdit, uFavoriteTabs, fTreeViewMenu, uConvEncoding; 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); TFileOperationsConfirmations = set of TFileOperationsConfirmation; { 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); TPluginFilenameStyle = (pfsAbsolutePath, pfsRelativeToDC, pfsRelativeToFollowingPath); TDCFont = (dcfMain, dcfViewer, dcfEditor, dcfLog, dcfViewerBook, dcfConsole, dcfSearchResults, dcfPathEdit, dcfFunctionButtons, dcfOptionsTree, dcfOptionsMain); TDCFontOptions = record Name: String; Size: Integer; Style: TFontStyles; Quality: TFontQuality; 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); const { Default hotkey list version number } hkVersion = 46; // 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 ConfigVersion = 10; // 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; { Global font sizes limitations } MAX_FONT_SIZE_MAIN=50; MIN_FONT_SIZE_MAIN=6; MAX_FONT_SIZE_EDITOR=70; MIN_FONT_SIZE_EDITOR=6; MAX_FONT_SIZE_VIEWER=70; MIN_FONT_SIZE_VIEWER=6; MAX_FONT_SIZE_FILE_SEARCH_RESULTS=70; MIN_FONT_SIZE_FILE_SEARCH_RESULTS=6; MAX_FONT_SIZE_PATHEDIT=40; MIN_FONT_SIZE_PATHEDIT=8; MAX_FONT_SIZE_FUNCTION_BUTTONS=20; MIN_FONT_SIZE_FUNCTION_BUTTONS=8; MAX_FONT_SIZE_OPTIONS_TREE=14; MIN_FONT_SIZE_OPTIONS_TREE=10; MAX_FONT_SIZE_OPTIONS_MAIN=12; MIN_FONT_SIZE_OPTIONS_MAIN=8; 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: TPluginFilenameStyle = pfsAbsolutePath; gPluginPathToBeRelativeTo: string = '%COMMANDER_PATH%'; { MultiArc addons } gMultiArcList: TMultiArcList; { Columns Set } ColSet:TPanelColumnsList; { Layout page } gMainMenu, gButtonBar, gToolBarFlat, gDriveBar1, gDriveBar2, gDriveBarFlat, gDrivesListButton, gDirectoryTabs, gCurDir, gTabHeader, gStatusBar, gCmdLine, gLogWindow, gTermWindow, gKeyButtons, gInterfaceFlat, gDriveInd, gDriveFreeSpace, gProgInMenuBar, gPanelOfOp, gHorizontalFilePanels, gShortFormatDriveInfo: Boolean; gDrivesListButtonOptions: TDrivesListButtonOptions; gSeparateTree: Boolean; { Toolbar } gToolBarButtonSize, gToolBarIconSize: Integer; gToolbarReportErrorWithCommands: boolean; 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; gSortFolderMode: TSortFolderMode; gNewFilesPosition: TNewFilesPosition; gUpdatedFilesPosition: TUpdatedFilesPosition; gLynxLike:Boolean; gFirstTextSearch: Boolean; gExtraLineSpan: Integer; { Mouse } gMouseSelectionEnabled: Boolean; gMouseSelectionButton: Integer; gMouseSingleClickStart: Integer; gMouseSelectionIconClick: Integer; gAutoFillColumns: Boolean; gAutoSizeColumn: Integer; gColumnsAutoSaveWidth: Boolean; gColumnsTitleStyle: TTitleStyle; gCustomColumnsChangeAllColumns: Boolean; gSupportForVariableHelperMenu:TSupportForVariableHelperMenu=nil; gSpecialDirList:TSpecialDirList=nil; gDirectoryHotlist:TDirectoryHotlist; gHotDirAddTargetOrNot: Boolean; gHotDirFullExpandOrNot: Boolean; gShowPathInPopup: boolean; gShowOnlyValidEnv: boolean = TRUE; gWhereToAddNewHotDir: TPositionWhereToAddHotDir; glsDirHistory:TStringListEx; glsCmdLineHistory: TStringListEx; glsMaskHistory : TStringListEx; glsSearchHistory : TStringListEx; glsSearchPathHistory : TStringListEx; glsReplaceHistory : TStringListEx; glsReplacePathHistory : TStringListEx; glsSearchDirectories: TStringList; glsSearchExcludeFiles: TStringList; glsSearchExcludeDirectories: TStringList; glsIgnoreList : TStringListEx; gOnlyOneAppInstance, gCutTextToColWidth : Boolean; gExtendCellWidth : Boolean; gSpaceMovesDown: Boolean; gScrollMode: TScrollMode; gWheelScrollLines: Integer; gAlwaysShowTrayIcon: Boolean; gMinimizeToTray: Boolean; gFileSizeFormat: TFileSizeFormat; gHeaderFooterSizeFormat: TFileSizeFormat; gOperationSizeFormat: TFileSizeFormat; gFileSizeDigits: Integer; gHeaderFooterDigits: 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; gCursorBorderColor: TColor; gUseFrameCursor: Boolean; gForeColor, //text color gBackColor, //Background color gBackColor2, //Background color 2 gMarkColor, // Mark color gCursorColor, //Cursor color gCursorText, //text color under cursor gInactiveCursorColor, //Inactive cursor color gInactiveMarkColor: TColor; //Inactive Mark color gUseInvertedSelection: Boolean; gUseInactiveSelColor: Boolean; gAllowOverColor: Boolean; gBorderFrameWidth :integer; gInactivePanelBrightness: Integer; // 0 .. 100 (black .. full color) gIndUseGradient : Boolean; // use gradient on drive label gIndForeColor, // foreColor of use space on drive label gIndBackColor: TColor; // backColor of free space on drive label gLogInfoColor, gLogErrorColor, gLogSuccessColor: TColor; gShowIcons: TShowIconsMode; gShowIconsNew: TShowIconsMode; gIconOverlays : Boolean; gIconsSize, gIconsSizeNew : Integer; gDiskIconsSize : Integer; gDiskIconsAlpha : Integer; gFiOwnDCIcon : PtrInt; 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 } 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; gShowDialogOnDragDrop: Boolean; gDragAndDropDesiredTextFormat:array[0..pred(NbOfDropTextFormat)] of tDesiredDropTextFormat; gDragAndDropAskFormatEachTime: Boolean; gDragAndDropTextAutoFilename: Boolean; gDragAndDropSaveUnicodeTextInUFT8: Boolean; gNtfsHourTimeDelay: Boolean; gAutoExtractOpenMask: String; gFileOperationsProgressKind: TFileOperationsProgressKind; gFileOperationsConfirmations: TFileOperationsConfirmations; { Folder tabs page } gDirTabOptions : TTabsOptions; gDirTabActionOnDoubleClick : TTabsOptionsDoubleClick; gDirTabLimit : Integer; gDirTabPosition : TTabsPosition; { Log page } gLogFile : Boolean; gLogFileWithDateInName : Boolean; gLogFileName : String; gLogOptions : TLogOptions; { Configuration page } gUseConfigInProgramDir, gUseConfigInProgramDirNew, gSaveConfiguration, gSaveWindowState, gSaveFolderTabs, gSaveSearchReplaceHistory, gSaveDirHistory, gSaveCmdLineHistory, gSaveFileMaskHistory : Boolean; gSortOrderOfConfigurationOptionsTree: TSortConfigurationOptions; gCollapseConfigurationOptionsTree: TConfigurationTreeState; { Quick Search page } gQuickSearchOptions: TQuickSearchOptions; gQuickFilterAutoHide: Boolean; gQuickFilterSaveSessionModifications: Boolean; { Misc page } gGridVertLine, gGridHorzLine, gShowWarningMessages, gDirBrackets, gInplaceRename, gInplaceRenameButton, gDblClickToParent, gGoToRoot: Boolean; gActiveRight: Boolean; gShowToolTip: Boolean; gShowToolTipMode: TToolTipMode; gToolTipHideTimeOut: TToolTipHideTimeOut; gThumbSize: TSize; gThumbSave: Boolean; gSearchDefaultTemplate: String; gSearchTemplateList: TSearchTemplateList; gDescCreateUnicode: Boolean; gDescReadEncoding: TMacroEncoding; gDescWriteEncoding: TMacroEncoding; { 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; gOperationOptionFileExists: TFileSourceOperationOptionFileExists; gOperationOptionDirectoryExists: TFileSourceOperationOptionDirectoryExists; gOperationOptionSetPropertyError: TFileSourceOperationOptionSetPropertyError; gOperationOptionReserveSpace: Boolean; gOperationOptionCheckFreeSpace: Boolean; gOperationOptionCopyAttributes: 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; gImageCenter: Boolean; gCopyMovePath1, gCopyMovePath2, gCopyMovePath3, gCopyMovePath4, gCopyMovePath5: String; gImagePaintMode: TViewerPaintTool; gImagePaintWidth, gColCount, gViewerMode, gMaxTextWidth, gTabSpaces : Integer; gImagePaintColor, gBookBackgroundColor, gBookFontColor: TColor; gTextPosition:PtrInt; { Editor } gEditWaitTime: Integer; gEditorSynEditOptions: TSynEditorOptions; gEditorSynEditTabWidth: Integer; {SyncDirs} gSyncDirsSubdirs, gSyncDirsByContent, gSyncDirsAsymmetric, gSyncDirsIgnoreDate, gSyncDirsAsymmetricSave, gSyncDirsShowFilterCopyRight, gSyncDirsShowFilterEqual, gSyncDirsShowFilterNotEqual, gSyncDirsShowFilterCopyLeft, gSyncDirsShowFilterDuplicates, gSyncDirsShowFilterSingles: Boolean; gSyncDirsFileMask: string; { Internal Associations} gUseShellForFileOperations: Boolean; gFileAssociationLastCustomAction: string; gOfferToAddToFileAssociations: boolean; gExtendedContextMenu: boolean; gOpenExecuteViaShell: boolean; gExecuteViaTerminalClose: boolean; gExecuteViaTerminalStayOpen: boolean; gIncludeFileAssociation: boolean; { TreeViewMenu } gslAccents, gslAccentsStripped: TStringList; gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand: boolean; gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick: boolean; gUseTreeViewMenuWithFavoriteTabsFromMenuCommand: boolean; gUseTreeViewMenuWithFavoriteTabsFromDoubleClick: boolean; gUseTreeViewMenuWithDirHistory: boolean; gUseTreeViewMenuWithViewHistory: boolean; gUseTreeViewMenuWithCommandLineHistory: boolean; gTreeViewMenuUseKeyboardShortcut: boolean; gTVMBackgroundColor: TColor; gTVMShortcutColor: TColor; gTVMNormalTextColor: TColor; gTVMSecondaryTextColor: TColor; gTVMFoundTextColor: TColor; gTVMUnselectableTextColor: TColor; gTVMCursorColor: TColor; gTVMShortcutUnderCursor: TColor; gTVMNormalTextUnderCursor: TColor; gTVMSecondaryTextUnderCursor: TColor; gTVMFoundTextUnderCursor: TColor; gTVMUnselectableUnderCursor: TColor; gTreeViewMenuOptions: array [0..(ord(tvmcLASTONE)-2)] of TTreeViewMenuOptions; gTreeViewMenuShortcutExit: boolean; gTreeViewMenuSingleClickExit: boolean; gTreeViewMenuDoubleClickExit: boolean; crArrowCopy: Integer = 1; crArrowMove: Integer = 2; crArrowLink: Integer = 3; { 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; out 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; implementation uses LCLProc, LCLType, Dialogs, Laz2_XMLRead, LazUTF8, uExifWdx, uGlobsPaths, uLng, uShowMsg, uFileProcs, uOSUtils, uFindFiles, uDCUtils, fMultiRename, uFile, uDCVersion, uDebug, uFileFunctions, uDefaultPlugins, Lua, uKeyboard, DCOSUtils, DCStrUtils, uPixMapManager {$IF DEFINED(MSWINDOWS)} , ShlObj, win32proc {$ENDIF} ; const TKeyTypingModifierToNodeName: array[TKeyTypingModifier] of String = ('NoModifier', 'Alt', 'CtrlAlt'); type TLoadConfigProc = function(var ErrorMessage: String): Boolean; var DefaultDateTimeFormat: String; // Double Commander version // loaded from configuration file gPreviousVersion: String = ''; FInitList: array of TProcedure; 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; function AskUserOnError(var ErrorMessage: String): Boolean; begin // Show error messages. if ErrorMessage <> EmptyStr then begin Result := QuestionDlg(Application.Title + ' - ' + rsMsgErrorLoadingConfiguration, ErrorMessage, mtWarning, [1, rsDlgButtonContinue, 'isdefault', 2, rsDlgButtonExitProgram], 0) = 1; // 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 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); var 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 HistoryList.Add(History.GetContent(Node)); 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('FileMask', glsMaskHistory); LoadHistory('SearchText', glsSearchHistory); LoadHistory('SearchTextPath', glsSearchPathHistory); LoadHistory('ReplaceText', glsReplaceHistory); LoadHistory('ReplaceTextPath', glsReplacePathHistory); 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); 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 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 gSaveSearchReplaceHistory then begin SaveHistory('SearchText', glsSearchHistory); SaveHistory('SearchTextPath', glsSearchPathHistory); SaveHistory('ReplaceText', glsReplaceHistory); SaveHistory('ReplaceTextPath', glsReplacePathHistory); 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 AddIfNotExists(['F1'],[],'cm_About'); AddIfNotExists(['F2','','', 'Shift+F6','',''],'cm_RenameOnly'); AddIfNotExists(['F3'],[],'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; 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+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+`','','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'); AddIfNotExists(['N' ,'','', 'Right','',''],'cm_LoadNextFile'); //, ['N'], []); AddIfNotExists(['P' ,'','', 'Left','',''],'cm_LoadPrevFile'); //, ['P'], []); AddIfNotExists(['1'],[],'cm_ShowAsText'); AddIfNotExists(['2'],[],'cm_ShowAsBin'); AddIfNotExists(['3'],[],'cm_ShowAsHex'); AddIfNotExists(['4'],[],'cm_ShowAsWrapText'); AddIfNotExists(['5'],[],'cm_ShowAsBook'); AddIfNotExists(['6'],[],'cm_ShowGraphics'); AddIfNotExists(['7'],[],'cm_ShowPlugins'); AddIfNotExists(['Q' ,'','', 'Esc','',''],'cm_ExitViewer'); AddIfNotExists(['F' ,'','', SmkcSuper + 'F' ,'','', 'F7' ,'',''],'cm_Find'); // , ['F'], []); 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_A, [ssModifier], 'cm_SelectAll'); AddIfNotExists(VK_C, [ssModifier], 'cm_CopyToClipboard'); 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(['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('Copy/Move Dialog'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'],[],'cm_AddToQueue'); 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; 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; out 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 { Create default configuration files if need } if gpCfgDir <> gpGlobalCfgDir then begin // extension file if not mbFileExists(gpCfgDir + gcfExtensionAssociation) then CopyFile(gpGlobalCfgDir + 'extassoc.xml', gpCfgDir + 'ExtAssoc.xml'); // pixmaps file if not mbFileExists(gpCfgDir + 'pixmaps.txt') then CopyFile(gpGlobalCfgDir + 'pixmaps.txt', gpCfgDir + 'pixmaps.txt'); // multiarc configuration file if not mbFileExists(gpCfgDir + sMULTIARC_FILENAME) then CopyFile(gpGlobalCfgDir + 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; glsMaskHistory := TStringListEx.Create; glsSearchHistory := TStringListEx.Create; glsSearchPathHistory := TStringListEx.Create; glsReplaceHistory := TStringListEx.Create; glsReplacePathHistory := 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; ColSet := TPanelColumnsList.Create; HotMan := THotKeyManager.Create; end; procedure DestroyGlobs; begin FreeThenNil(gColorExt); FreeThenNil(gFileInfoToolTip); FreeThenNil(glsDirHistory); FreeThenNil(glsCmdLineHistory); FreeThenNil(gSupportForVariableHelperMenu); FreeThenNil(gSpecialDirList); FreeThenNil(gDirectoryHotlist); FreeThenNil(gFavoriteTabsList); FreeThenNil(glsMaskHistory); FreeThenNil(glsSearchHistory); FreeThenNil(glsSearchPathHistory); FreeThenNil(glsReplaceHistory); FreeThenNil(glsReplacePathHistory); FreeThenNil(glsIgnoreList); FreeThenNil(glsSearchDirectories); FreeThenNil(glsSearchExcludeFiles); FreeThenNil(glsSearchExcludeDirectories); FreeThenNil(gExts); FreeThenNil(gConfig); FreeThenNil(gSearchTemplateList); FreeThenNil(gDSXPlugins); FreeThenNil(gWCXPlugins); FreeThenNil(gWDXPlugins); FreeThenNil(gWFXPlugins); FreeThenNil(gWLXPlugins); FreeThenNil(gMultiArcList); FreeThenNil(ColSet); FreeThenNil(HotMan); 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; gSortFolderMode := sfmSortNameShowFirst; gNewFilesPosition := nfpSortedPosition; gUpdatedFilesPosition := ufpNoChange; gFileSizeFormat := fsfFloat; gHeaderFooterSizeFormat := fsfFloat; gOperationSizeFormat := fsfFloat; gFileSizeDigits := 1; gHeaderFooterDigits := 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. gMinimizeToTray := False; gAlwaysShowTrayIcon := False; gMouseSelectionEnabled := True; gMouseSelectionButton := 0; // Left gMouseSingleClickStart := 0; gMouseSelectionIconClick := 0; gScrollMode := smLineByLine; gWheelScrollLines:= Mouse.WheelScrollLines; gAutoFillColumns := False; gAutoSizeColumn := 1; gColumnsAutoSaveWidth := True; gColumnsTitleStyle := {$IFDEF LCLWIN32}tsNative{$ELSE}tsStandard{$ENDIF}; gCustomColumnsChangeAllColumns := False; gDateTimeFormat := DefaultDateTimeFormat; 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; { 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[dcfEditor].Name := MonoSpaceFont; gFonts[dcfEditor].Size := 14; gFonts[dcfEditor].Style := []; gFonts[dcfEditor].Quality := fqDefault; gFonts[dcfViewer].Name := MonoSpaceFont; gFonts[dcfViewer].Size := 14; gFonts[dcfViewer].Style := []; gFonts[dcfViewer].Quality := fqDefault; gFonts[dcfSearchResults].Name := 'default'; gFonts[dcfSearchResults].Size := 14; gFonts[dcfSearchResults].Style := []; gFonts[dcfSearchResults].Quality := fqDefault; gFonts[dcfPathEdit].Name := 'default'; gFonts[dcfPathEdit].Size := 8; gFonts[dcfPathEdit].Style := []; gFonts[dcfPathEdit].Quality := fqDefault; gFonts[dcfFunctionButtons].Name := 'default'; gFonts[dcfFunctionButtons].Size := 8; gFonts[dcfFunctionButtons].Style := []; gFonts[dcfFunctionButtons].Quality := fqDefault; gFonts[dcfOptionsTree].Name := 'default'; gFonts[dcfOptionsTree].Size := 10; gFonts[dcfOptionsTree].Style := []; gFonts[dcfOptionsTree].Quality := fqDefault; gFonts[dcfOptionsMain].Name := 'default'; gFonts[dcfOptionsMain].Size := 10; gFonts[dcfOptionsMain].Style := []; gFonts[dcfOptionsMain].Quality := fqDefault; gFonts[dcfLog].Name := MonoSpaceFont; gFonts[dcfLog].Size := 12; gFonts[dcfLog].Style := []; gFonts[dcfLog].Quality := fqDefault; gFonts[dcfViewerBook].Name := 'default'; gFonts[dcfViewerBook].Size := 16; gFonts[dcfViewerBook].Style := [fsBold]; gFonts[dcfViewerBook].Quality := fqDefault; gFonts[dcfConsole].Name := MonoSpaceFont; gFonts[dcfConsole].Size := 12; gFonts[dcfConsole].Style := []; gFonts[dcfConsole].Quality := fqDefault; { Colors page } gUseCursorBorder := False; gCursorBorderColor := clHighlight; gUseFrameCursor := False; gForeColor := clWindowText; gBackColor := clWindow; gBackColor2 := clWindow; gMarkColor := clRed; gCursorColor := clHighlight; gCursorText := clHighlightText; gInactiveCursorColor := clInactiveCaption; gInactiveMarkColor := clMaroon; gUseInvertedSelection := False; gUseInactiveSelColor := False; gAllowOverColor := True; gBorderFrameWidth:=1; gInactivePanelBrightness := 100; // Full brightness gIndUseGradient := True; gIndForeColor := clBlack; gIndBackColor := clWhite; gLogInfoColor:= clNavy; gLogErrorColor:= clRed; gLogSuccessColor:= clGreen; { Layout page } gMainMenu := True; gButtonBar := True; gToolBarFlat := True; gToolBarButtonSize := 24; gToolBarIconSize := 16; gToolbarReportErrorWithCommands := FALSE; 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; gDrivesListButtonOptions := [dlbShowLabel, dlbShowFileSystem, dlbShowFreeSpace]; gSeparateTree := False; { Keys page } gKeyTyping[ktmNone] := ktaQuickSearch; gKeyTyping[ktmAlt] := ktaNone; gKeyTyping[ktmCtrlAlt] := ktaQuickFilter; { File operations page } 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; gShowDialogOnDragDrop := False; 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]; // Operations options gOperationOptionSymLinks := fsooslNone; gOperationOptionCorrectLinks := False; gOperationOptionFileExists := fsoofeNone; gOperationOptionDirectoryExists := fsoodeNone; gOperationOptionSetPropertyError := fsoospeNone; gOperationOptionReserveSpace := False; gOperationOptionCheckFreeSpace := True; gOperationOptionCopyAttributes := 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; 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; gSaveCmdLineHistory := True; gSaveFileMaskHistory := 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; gShowWarningMessages := True; gSpaceMovesDown := False; gDirBrackets := True; gInplaceRename := False; gInplaceRenameButton := False; gDblClickToParent := False; gHotDirAddTargetOrNot := False; gHotDirFullExpandOrNot:=False; gShowPathInPopup:=FALSE; gShowOnlyValidEnv:=TRUE; gWhereToAddNewHotDir := ahdSmart; gShowToolTip := True; gShowToolTipMode := tttmCombineDcSystem; gToolTipHideTimeOut := ttthtSystem; gThumbSave := True; gThumbSize.cx := 128; gThumbSize.cy := 128; gSearchDefaultTemplate := EmptyStr; gDescReadEncoding:= meUTF8; gDescWriteEncoding:= meUTF8BOM; gDescCreateUnicode:= True; { Auto refresh page } gWatchDirs := [watch_file_name_change, watch_attributes_change]; gWatchDirsExclude := ''; gWatcherMode := fswmAllowDelete; { Icons page } gShowIcons := sim_all_and_exe; gShowIconsNew := gShowIcons; gIconOverlays := False; gIconsSize := 32; gIconsSizeNew := gIconsSize; gDiskIconsSize := 16; gDiskIconsAlpha := 50; 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 := False; gImageCenter := True; gPreviewVisible := False; gCopyMovePath1 := ''; gCopyMovePath2 := ''; gCopyMovePath3 := ''; gCopyMovePath4 := ''; gCopyMovePath5 := ''; gImagePaintMode := vptPen; gImagePaintWidth := 5; gColCount := 1; gTabSpaces := 8; gMaxTextWidth := 1024; gImagePaintColor := clRed; gBookBackgroundColor := clBlack; gBookFontColor := clWhite; gTextPosition:= 0; gViewerMode:= 0; { Editor } gEditWaitTime := 2000; gEditorSynEditOptions := SYNEDIT_DEFAULT_OPTIONS; gEditorSynEditTabWidth := 8; {SyncDirs} gSyncDirsSubdirs := False; gSyncDirsByContent := False; gSyncDirsAsymmetric := False; gSyncDirsIgnoreDate := False; gSyncDirsAsymmetricSave := False; gSyncDirsShowFilterCopyRight := True; gSyncDirsShowFilterEqual := True; gSyncDirsShowFilterNotEqual := True; gSyncDirsShowFilterCopyLeft := True; gSyncDirsShowFilterDuplicates := True; gSyncDirsShowFilterSingles := True; gSyncDirsFileMask := '*'; { Internal Associations} gFileAssociationLastCustomAction := rsMsgDefaultCustomActionName; gOfferToAddToFileAssociations := False; gExtendedContextMenu := False; gOpenExecuteViaShell := False; gExecuteViaTerminalClose := False; gExecuteViaTerminalStayOpen := False; gIncludeFileAssociation := False; { 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; gTVMBackgroundColor := clForm; gTVMShortcutColor := clRed; gTVMNormalTextColor := clWindowText; gTVMSecondaryTextColor := clWindowFrame; gTVMFoundTextColor := clHighLight; gTVMUnselectableTextColor := clGrayText; gTVMCursorColor := clHighlight; gTVMShortcutUnderCursor := clHighlightText; gTVMNormalTextUnderCursor := clHighlightText; gTVMSecondaryTextUnderCursor := clBtnHighlight; gTVMFoundTextUnderCursor := clYellow; gTVMUnselectableUnderCursor := clGrayText; { - Other - } gGoToRoot := False; gLuaLib := LuaDLL; gActiveRight := False; gNameSCFile := 'shortcuts.scf'; gHotKeySortOrder := hksoByCommand; gUseEnterToCloseHotKeyEditor := True; gLastUsedPacker := 'zip'; gUseShellForFileOperations := {$IF DEFINED(MSWINDOWS)}WindowsVersion >= wvVista{$ELSE}False{$ENDIF}; 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; 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; gDirHistoryCount := 30; gFirstTextSearch := True; gErrorFile := gpCfgDir + ExtractOnlyFileName(Application.ExeName) + '.err'; DefaultDateTimeFormat := FormatSettings.ShortDateFormat + ' hh:nn:ss'; FormatSettings.DecimalSeparator:='.'; 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 LoadConfigCheckErrors(@LoadGlobalConfig, gpGlobalCfgDir + 'doublecmd.xml', ErrorMessage); gConfig.TryGetValue(gConfig.RootNode, 'Configuration/UseConfigInProgramDir', gUseConfigInProgramDir); 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); if mbFileExists(gpCfgDir + 'dirhistory.txt') then begin LoadStringsFromFile(glsDirHistory, gpCfgDir + 'dirhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'dirhistory.txt', gpCfgDir + 'dirhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'cmdhistory.txt') then begin LoadStringsFromFile(glsCmdLineHistory, gpCfgDir + 'cmdhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'cmdhistory.txt', gpCfgDir + 'cmdhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'maskhistory.txt') then begin LoadStringsFromFile(glsMaskHistory, gpCfgDir + 'maskhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'maskhistory.txt', gpCfgDir + 'maskhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'searchpathhistory.txt') then begin LoadStringsFromFile(glsSearchPathHistory, gpCfgDir + 'searchpathhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'searchpathhistory.txt', gpCfgDir + 'searchpathhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'searchhistory.txt') then begin LoadStringsFromFile(glsSearchHistory, gpCfgDir + 'searchhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'searchhistory.txt', gpCfgDir + 'searchhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'replacehistory.txt') then begin LoadStringsFromFile(glsReplaceHistory, gpCfgDir + 'replacehistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'replacehistory.txt', gpCfgDir + 'replacehistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'replacehpathhistory.txt') then begin LoadStringsFromFile(glsReplacePathHistory, gpCfgDir + 'replacepathhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'replacepathhistory.txt', gpCfgDir + 'replacepathhistory.txt.obsolete'); end; LoadStringsFromFile(glsIgnoreList, ReplaceEnvVars(gIgnoreListFile)); { Hotkeys } if not mbFileExists(gpCfgDir + gNameSCFile) then gNameSCFile := 'shortcuts.scf'; // Rename old shortcuts file to new name. if mbFileExists(gpCfgDir + 'shortcuts.ini') and not mbFileExists(gpCfgDir + gNameSCFile) then mbRenameFile(gpCfgDir + 'shortcuts.ini', gpCfgDir + gNameSCFile); LoadConfigCheckErrors(@LoadHotManConfig, gpCfgDir + gNameSCFile, 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); { Localization } msgLoadLng; 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 TmpConfig: TXmlConfig; ErrMsg: String = ''; begin if (gUseConfigInProgramDirNew <> gUseConfigInProgramDir) and (gpCmdLineCfgDir = EmptyStr) then begin LoadPaths; if gUseConfigInProgramDirNew then begin gpCfgDir := gpGlobalCfgDir; UpdateEnvironmentVariable; FileClose(mbFileCreate(gpGlobalCfgDir + 'doublecmd.inf')); end else begin if mbFileExists(gpGlobalCfgDir + 'doublecmd.inf') then mbDeleteFile(gpGlobalCfgDir + 'doublecmd.inf') end; { Remove location of configuration files from XML} if mbFileAccess(gpGlobalCfgDir + 'doublecmd.xml', fmOpenWrite or fmShareDenyWrite) then begin TmpConfig := TXmlConfig.Create(gpGlobalCfgDir + 'doublecmd.xml', True); try TmpConfig.DeleteNode(TmpConfig.RootNode, 'Configuration/UseConfigInProgramDir'); TmpConfig.Save; finally TmpConfig.Free; end; end; gConfig.FileName := gpCfgDir + 'doublecmd.xml'; end; if mbFileAccess(gpCfgDir, fmOpenWrite or fmShareDenyNone) then begin SaveWithCheck(@SaveCfgIgnoreList, 'ignore list', ErrMsg); SaveWithCheck(@SaveCfgMainConfig, 'main configuration', ErrMsg); SaveWithCheck(@SaveHistoryConfig, 'various history', 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); begin if Assigned(Node) then gConfig.GetFont(Node, '', FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality), FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality)); 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 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); { 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; { Behaviours page } Node := Root.FindNode('Behaviours'); if Assigned(Node) then begin gGoToRoot := GetValue(Node, 'GoToRoot', gGoToRoot); gActiveRight := GetValue(Node, 'ActiveRight', gActiveRight); //Trick to split initial legacy command for terminal // Initial name in config was "RunInTerminal". // If it is still present in config, it means we're running from an older version. // So if it's different than our setting, let's split it to get actual "cmd" and "params". // New version uses "RunInTerminalCloseCmd" from now on. // ALSO, in the case of Windows, installation default was "cmd.exe /K ..." which means Run-and-stayopen // in the case of Unix, installation default was "xterm -e sh -c ..." which means Run-and-close // So because of these two different behavior, transition is done slightly differently. {$IF DEFINED(MSWINDOWS)} gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminal', gRunInTermStayOpenCmd); if gRunInTermStayOpenCmd<>RunInTermCloseCmd then begin SplitCmdLineToCmdParams(gRunInTermStayOpenCmd, gRunInTermStayOpenCmd, gRunInTermStayOpenParams); if gRunInTermStayOpenParams<>'' then gRunInTermStayOpenParams:=gRunInTermStayOpenParams+' {command}' else gRunInTermStayOpenParams:='{command}'; end else begin gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminalStayOpenCmd', RunInTermStayOpenCmd); gRunInTermStayOpenParams := GetValue(Node, 'RunInTerminalStayOpenParams', RunInTermStayOpenParams); end; gRunInTermCloseCmd := GetValue(Node, 'RunInTerminalCloseCmd', RunInTermCloseCmd); gRunInTermCloseParams := GetValue(Node, 'RunInTerminalCloseParams', RunInTermCloseParams); {$ELSE} gRunInTermCloseCmd := GetValue(Node, 'RunInTerminal', gRunInTermCloseCmd); if gRunInTermCloseCmd<>RunInTermCloseCmd then begin SplitCmdLineToCmdParams(gRunInTermCloseCmd, gRunInTermCloseCmd, gRunInTermCloseParams); if gRunInTermCloseParams<>'' then gRunInTermCloseParams:=gRunInTermCloseParams+' {command}' else gRunInTermStayOpenParams:='{command}'; end else begin gRunInTermCloseCmd := GetValue(Node, 'RunInTerminalCloseCmd', RunInTermCloseCmd); gRunInTermCloseParams := GetValue(Node, 'RunInTerminalCloseParams', RunInTermCloseParams); end; gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminalStayOpenCmd', RunInTermStayOpenCmd); gRunInTermStayOpenParams := GetValue(Node, 'RunInTerminalStayOpenParams', RunInTermStayOpenParams); {$ENDIF} // Let's try to be backward comptible and re-load possible old values for terminal launch command gRunTermCmd := GetValue(Node, 'JustRunTerminal', ''); if gRunTermCmd = '' then begin gRunTermCmd := GetValue(Node, 'RunTerminal', RunTermCmd); SplitCmdLineToCmdParams(gRunTermCmd, gRunTermCmd,gRunTermParams); end else begin gRunTermParams := GetValue(Node, 'JustRunTermParams', RunTermParams); end; 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; gHeaderFooterSizeFormat := TFileSizeFormat(GetValue(Node,'HeaderFooterSizeFormat', ord(gHeaderFooterSizeFormat))); gOperationSizeFormat := TFileSizeFormat(GetValue(Node, 'OperationSizeFormat', Ord(gOperationSizeFormat))); gFileSizeDigits := GetValue(Node, 'FileSizeDigits', gFileSizeDigits); gHeaderFooterDigits := GetValue(Node, 'HeaderFooterDigits', gHeaderFooterDigits); 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])); 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); 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/OptionsTree'), gFonts[dcfOptionsTree]); GetDCFont(gConfig.FindNode(Root, 'Fonts/OptionsMain'), gFonts[dcfOptionsMain]); GetDCFont(gConfig.FindNode(Root, 'Fonts/SearchResults'), gFonts[dcfSearchResults]); GetDCFont(gConfig.FindNode(Root, 'Fonts/PathEdit'), gFonts[dcfPathEdit]); GetDCFont(gConfig.FindNode(Root, 'Fonts/FunctionButtons'), gFonts[dcfFunctionButtons]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Log'), gFonts[dcfLog]); GetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook'), gFonts[dcfViewerBook]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Console'), gFonts[dcfConsole]); { Colors page } Node := Root.FindNode('Colors'); if Assigned(Node) then begin gUseCursorBorder := GetValue(Node, 'UseCursorBorder', gUseCursorBorder); gCursorBorderColor := GetValue(Node, 'CursorBorderColor', gCursorBorderColor); gUseFrameCursor := GetValue(Node, 'UseFrameCursor', gUseFrameCursor); gForeColor := GetValue(Node, 'Foreground', gForeColor); gBackColor := GetValue(Node, 'Background', gBackColor); gBackColor2 := GetValue(Node, 'Background2', gBackColor2); gMarkColor := GetValue(Node, 'Mark', gMarkColor); gCursorColor := GetValue(Node, 'Cursor', gCursorColor); gCursorText := GetValue(Node, 'CursorText', gCursorText); gInactiveCursorColor := GetValue(Node, 'InactiveCursor', gInactiveCursorColor); gInactiveMarkColor := GetValue(Node, 'InactiveMark', gInactiveMarkColor); 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); gIndForeColor := GetValue(Node, 'FreeSpaceIndicator/ForeColor', gIndForeColor); gIndBackColor := GetValue(Node, 'FreeSpaceIndicator/BackColor', gIndBackColor); gLogInfoColor:= GetValue(Node, 'LogWindow/Info', gLogInfoColor); gLogErrorColor:= GetValue(Node, 'LogWindow/Error', gLogErrorColor); gLogSuccessColor:= GetValue(Node, 'LogWindow/Success', gLogSuccessColor); gColorExt.Load(gConfig, Node); 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); gToolbarReportErrorWithCommands := GetValue(SubNode,'ReportErrorWithCommands',gToolbarReportErrorWithCommands); 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); 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); 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 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); 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); 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))); 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 options SubNode := Node.FindNode('Options'); if Assigned(SubNode) then begin gOperationOptionSymLinks := TFileSourceOperationOptionSymLink(GetValue(SubNode, 'Symlink', Integer(gOperationOptionSymLinks))); gOperationOptionCorrectLinks := GetValue(SubNode, 'CorrectLinks', gOperationOptionCorrectLinks); 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); 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; 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); 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); gSaveCmdLineHistory := GetAttr(Root, 'History/CmdLineHistory/Save', gSaveCmdLineHistory); gSaveFileMaskHistory := GetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); 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); 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))); 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); 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); 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); gViewerMode := GetValue(Node, 'ViewerMode' , gViewerMode); gImagePaintColor := GetValue(Node, 'PaintColor', gImagePaintColor); gBookBackgroundColor := GetValue(Node, 'BackgroundColor', gBookBackgroundColor); gBookFontColor := GetValue(Node, 'FontColor', gBookFontColor); gTextPosition := GetValue(Node, 'TextPosition', gTextPosition); 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); 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); gSyncDirsShowFilterCopyLeft := GetValue(Node, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); gSyncDirsShowFilterDuplicates := GetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); gSyncDirsShowFilterSingles := GetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); gSyncDirsFileMask := GetValue(Node, 'FileMask', gSyncDirsFileMask); 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); gOpenExecuteViaShell := GetValue(Node,'ExecuteViaShell', gOpenExecuteViaShell); gExecuteViaTerminalClose := GetValue(Node,'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); gExecuteViaTerminalStayOpen := GetValue(Node,'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); gIncludeFileAssociation := GetValue(Node,'IncludeFileAssociation',gIncludeFileAssociation); 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); gTVMBackgroundColor := GetValue(Node, 'BackgroundColor', gTVMBackgroundColor); gTVMShortcutColor := GetValue(Node, 'ShortcutColor', gTVMShortcutColor); gTVMNormalTextColor := GetValue(Node, 'NormalTextColor', gTVMNormalTextColor); gTVMSecondaryTextColor := GetValue(Node, 'SecondaryTextColor', gTVMSecondaryTextColor); gTVMFoundTextColor := GetValue(Node, 'FoundTextColor', gTVMFoundTextColor); gTVMUnselectableTextColor := GetValue(Node, 'UnselectableTextColor', gTVMUnselectableTextColor); gTVMCursorColor := GetValue(Node, 'CursorColor', gTVMCursorColor); gTVMShortcutUnderCursor := GetValue(Node, 'ShortcutUnderCursor', gTVMShortcutUnderCursor); gTVMNormalTextUnderCursor := GetValue(Node, 'NormalTextUnderCursor', gTVMNormalTextUnderCursor); gTVMSecondaryTextUnderCursor := GetValue(Node, 'SecondaryTextUnderCursor', gTVMSecondaryTextUnderCursor); gTVMFoundTextUnderCursor := GetValue(Node, 'FoundTextUnderCursor', gTVMFoundTextUnderCursor); gTVMUnselectableUnderCursor := GetValue(Node, 'UnselectableUnderCursor', gTVMUnselectableUnderCursor); 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); gUseShellForFileOperations:= GetValue(Root, 'UseShellForFileOperations', gUseShellForFileOperations); 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); { 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 := TPluginFilenameStyle(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); SetValue(Root, 'Configuration/UseConfigInProgramDir', gUseConfigInProgramDirNew); { Language page } SetValue(Root, 'Language/POFileName', gPOFileName); { Behaviours page } Node := FindNode(Root, 'Behaviours', True); ClearNode(Node); SetValue(Node, 'GoToRoot', gGoToRoot); 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, 'HeaderFooterSizeFormat', Ord(gHeaderFooterSizeFormat)); SetValue(Node, 'FileSizeDigits', gFileSizeDigits); SetValue(Node, 'HeaderFooterDigits', gHeaderFooterDigits); 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, '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, '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/OptionsTree', True), gFonts[dcfOptionsTree]); SetDCFont(gConfig.FindNode(Root, 'Fonts/OptionsMain', True), gFonts[dcfOptionsMain]); SetDCFont(gConfig.FindNode(Root, 'Fonts/SearchResults',True), gFonts[dcfSearchResults]); SetDCFont(gConfig.FindNode(Root, 'Fonts/PathEdit',True), gFonts[dcfPathEdit]); SetDCFont(gConfig.FindNode(Root, 'Fonts/FunctionButtons',True), gFonts[dcfFunctionButtons]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Log', True), gFonts[dcfLog]); SetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook', True), gFonts[dcfViewerBook]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Console', True), gFonts[dcfConsole]); { Colors page } Node := FindNode(Root, 'Colors', True); SetValue(Node, 'UseCursorBorder', gUseCursorBorder); SetValue(Node, 'CursorBorderColor', gCursorBorderColor); SetValue(Node, 'UseFrameCursor', gUseFrameCursor); SetValue(Node, 'Foreground', gForeColor); SetValue(Node, 'Background', gBackColor); SetValue(Node, 'Background2', gBackColor2); SetValue(Node, 'Cursor', gCursorColor); SetValue(Node, 'CursorText', gCursorText); SetValue(Node, 'Mark', gMarkColor); SetValue(Node, 'InactiveCursor', gInactiveCursorColor); SetValue(Node, 'InactiveMark', gInactiveMarkColor); 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); SetValue(Node, 'FreeSpaceIndicator/ForeColor', gIndForeColor); SetValue(Node, 'FreeSpaceIndicator/BackColor', gIndBackColor); SetValue(Node, 'LogWindow/Info', gLogInfoColor); SetValue(Node, 'LogWindow/Error', gLogErrorColor); SetValue(Node, 'LogWindow/Success', gLogSuccessColor); 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, 'ReportErrorWithCommands', gToolbarReportErrorWithCommands); 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); { Files views } Node := FindNode(Root, 'FilesViews', True); SubNode := FindNode(Node, 'Sorting', True); SetValue(SubNode, 'CaseSensitivity', Integer(gSortCaseSensitivity)); SetValue(SubNode, 'NaturalSorting', gSortNatural); SetValue(SubNode, 'SortFolderMode', Integer(gSortFolderMode)); SetValue(SubNode, 'NewFilesPosition', Integer(gNewFilesPosition)); SetValue(SubNode, 'UpdatedFilesPosition', Integer(gUpdatedFilesPosition)); SubNode := FindNode(Node, 'ColumnsView', True); 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); { 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, '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, '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, '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, '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; { 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, '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/CmdLineHistory/Save', gSaveCmdLineHistory); SetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); 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, 'HotDirAddTargetOrNot',gHotDirAddTargetOrNot); SetValue(Node, 'HotDirFullExpandOrNot', gHotDirFullExpandOrNot); SetValue(Node, 'ShowPathInPopup', gShowPathInPopup); SetValue(Node, 'ShowOnlyValidEnv', gShowOnlyValidEnv); SetValue(Node, 'WhereToAddNewHotDir', Integer(gWhereToAddNewHotDir)); { 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, '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, '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, 'MaxTextWidth', gMaxTextWidth); SetValue(Node, 'ViewerMode' , gViewerMode); SetValue(Node, 'PaintColor', gImagePaintColor); SetValue(Node, 'BackgroundColor', gBookBackgroundColor); SetValue(Node, 'FontColor', gBookFontColor); SetValue(Node, 'TextPosition', gTextPosition); { Editor } Node := FindNode(Root, 'Editor',True); SetValue(Node, 'EditWaitTime', gEditWaitTime); SetValue(Node, 'SynEditOptions', Integer(gEditorSynEditOptions)); SetValue(Node, 'SynEditTabWidth', gEditorSynEditTabWidth); { 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, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); SetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); SetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); SetValue(Node, 'FileMask', gSyncDirsFileMask); { Internal Associations} Node := FindNode(Root, 'InternalAssociations', True); SetValue(Node, 'OfferToAddNewFileType', gOfferToAddToFileAssociations); SetValue(Node, 'LastCustomAction', gFileAssociationLastCustomAction); SetValue(Node, 'ExpandedContextMenu', gExtendedContextMenu); SetValue(Node, 'ExecuteViaShell', gOpenExecuteViaShell); SetValue(Node, 'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); SetValue(Node, 'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); SetValue(Node, 'IncludeFileAssociation', gIncludeFileAssociation); { 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); SetValue(Node, 'BackgroundColor', gTVMBackgroundColor); SetValue(Node, 'ShortcutColor', gTVMShortcutColor); SetValue(Node, 'NormalTextColor', gTVMNormalTextColor); SetValue(Node, 'SecondaryTextColor', gTVMSecondaryTextColor); SetValue(Node, 'FoundTextColor', gTVMFoundTextColor); SetValue(Node, 'UnselectableTextColor', gTVMUnselectableTextColor); SetValue(Node, 'CursorColor', gTVMCursorColor); SetValue(Node, 'ShortcutUnderCursor', gTVMShortcutUnderCursor); SetValue(Node, 'NormalTextUnderCursor', gTVMNormalTextUnderCursor); SetValue(Node, 'SecondaryTextUnderCursor', gTVMSecondaryTextUnderCursor); SetValue(Node, 'FoundTextUnderCursor', gTVMFoundTextUnderCursor); SetValue(Node,'UnselectableUnderCursor', gTVMUnselectableUnderCursor); { 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, 'UseShellForFileOperations', gUseShellForFileOperations); 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-0.9.8/src/ufunctionthread.pas0000644000175000001440000001036211747211345017233 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; FreeThenNil(FFunctionsToCall); FreeThenNil(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-0.9.8/src/ufpreadtiff.pas0000644000175000001440000021555613104342611016332 0ustar alexxusers{ This file is part of the Free Pascal run time library. Copyright (c) 2012-2013 by the Free Pascal development team Tiff reader for fpImage. 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. ********************************************************************** Working: Black and white 1 bit, Grayscale 8,16bit (optional alpha), RGB 8,16bit (optional alpha), Orientation, skipping Thumbnail to read first image, compression: packbits, LZW, deflate endian multiple images strips and tiles ToDo: Compression: jpeg, ... PlanarConfiguration 2 ColorMap separate mask fillorder - not needed by baseline tiff reader bigtiff 64bit offsets XMP tag 700 ICC profile tag 34675 orientation with rotation } unit uFPReadTiff; {$mode objfpc}{$H+} {$inline on} interface uses Math, Classes, SysUtils, ctypes, zinflate, zbase, FPimage, FPTiffCmn; type TFPReaderTiff = class; TTiffCreateCompatibleImgEvent = procedure(Sender: TFPReaderTiff; ImgFileDir: TTiffIFD) of object; TTiffCheckIFDOrder = ( tcioSmart, tcioAlways, tcioNever ); { TFPReaderTiff } TFPReaderTiff = class(TFPCustomImageReader) private FCheckIFDOrder: TTiffCheckIFDOrder; FFirstIFDStart: DWord; FOnCreateImage: TTiffCreateCompatibleImgEvent; FReverserEndian: boolean; IFD: TTiffIFD; {$ifdef FPC_Debug_Image} FDebug: boolean; {$endif} fIFDStarts: TFPList; FReverseEndian: Boolean; fStartPos: int64; s: TStream; function GetImages(Index: integer): TTiffIFD; procedure TiffError(Msg: string); procedure SetStreamPos(p: DWord); function ReadTiffHeader(QuickTest: boolean; out IFDStart: DWord): boolean; // returns IFD: offset to first IFD function ReadIFD(Start: DWord): DWord;// Image File Directory procedure ReadDirectoryEntry(var EntryTag: Word); function ReadEntryUnsigned: DWord; function ReadEntrySigned: Cint32; function ReadEntryRational: TTiffRational; function ReadEntryString: string; function ReadByte: Byte; function ReadWord: Word; function ReadDWord: DWord; procedure ReadValues(StreamPos: DWord; out EntryType: word; out EntryCount: DWord; out Buffer: Pointer; out ByteCount: PtrUInt); procedure ReadShortOrLongValues(StreamPos: DWord; out Buffer: PDWord; out Count: DWord); procedure ReadShortValues(StreamPos: DWord; out Buffer: PWord; out Count: DWord); procedure ReadImageProperties( out RedBits, GreenBits, BlueBits, GrayBits, AlphaBits: Word; out ExtraSamples: PWord; out ExtraSampleCnt: DWord; out SampleBits: PWord; out SampleBitsPerPixel: DWord); procedure ReadImgValue(BitCount: Word; var Run: Pointer; x: dword; Predictor: word; var LastValue: word; out Value: Word); inline; function FixEndian(w: Word): Word; inline; function FixEndian(d: DWord): DWord; inline; procedure SetFPImgExtras(CurImg: TFPCustomImage); procedure DecodePackBits(var Buffer: Pointer; var Count: PtrInt); procedure DecodeLZW(var Buffer: Pointer; var Count: PtrInt); procedure DecodeDeflate(var Buffer: Pointer; var Count: PtrInt; ExpectedCount: PtrInt); protected procedure InternalRead(Str: TStream; AnImage: TFPCustomImage); override; function InternalCheck(Str: TStream): boolean; override; procedure DoCreateImage(ImgFileDir: TTiffIFD); virtual; public ImageList: TFPList; // list of TTiffIFD constructor Create; override; destructor Destroy; override; procedure Clear; procedure LoadFromStream(aStream: TStream; AutoClear: boolean = true); procedure LoadHeaderFromStream(aStream: TStream); procedure LoadIFDsFromStream; // requires LoadHeaderFromStream, creates Images procedure LoadImageFromStream(Index: integer); // requires LoadIFDsFromStream {$ifdef FPC_Debug_Image} property Debug: boolean read FDebug write FDebug; {$endif} property StartPos: int64 read fStartPos; property ReverserEndian: boolean read FReverserEndian; property TheStream: TStream read s; property OnCreateImage: TTiffCreateCompatibleImgEvent read FOnCreateImage write FOnCreateImage; property CheckIFDOrder: TTiffCheckIFDOrder read FCheckIFDOrder write FCheckIFDOrder; function FirstImg: TTiffIFD; function GetBiggestImage: TTiffIFD; function ImageCount: integer; property Images[Index: integer]: TTiffIFD read GetImages; default; property FirstIFDStart: DWord read FFirstIFDStart; end; procedure DecompressPackBits(Buffer: Pointer; Count: PtrInt; out NewBuffer: Pointer; out NewCount: PtrInt); procedure DecompressLZW(Buffer: Pointer; Count: PtrInt; out NewBuffer: PByte; out NewCount: PtrInt); function DecompressDeflate(Compressed: PByte; CompressedCount: cardinal; out Decompressed: PByte; var DecompressedCount: cardinal; ErrorMsg: PAnsiString = nil): boolean; implementation function CMYKToFPColor(C,M,Y,K: Word): TFPColor; var R, G, B : LongWord; begin R := $ffff - ((LongWord(C)*($ffff-LongWord(K))) shr 16) - LongWord(K) ; G := $ffff - ((LongWord(M)*($ffff-LongWord(K))) shr 16) - LongWord(K) ; B := $ffff - ((LongWord(Y)*($ffff-LongWord(K))) shr 16) - LongWord(K) ; Result := FPColor(R and $ffff,G and $ffff,B and $ffff); end ; procedure TFPReaderTiff.TiffError(Msg: string); begin Msg:=Msg+' at position '+IntToStr(s.Position); if fStartPos>0 then Msg:=Msg+' (TiffPosition='+IntToStr(fStartPos)+')'; raise Exception.Create(Msg); end; function TFPReaderTiff.GetImages(Index: integer): TTiffIFD; begin Result:=TTiffIFD(ImageList[Index]); end; procedure TFPReaderTiff.ReadImageProperties(out RedBits, GreenBits, BlueBits, GrayBits, AlphaBits: Word; out ExtraSamples: PWord; out ExtraSampleCnt: DWord; out SampleBits: PWord; out SampleBitsPerPixel: DWord); var BytesPerPixel: Word; SampleCnt: DWord; i: Integer; begin ReadShortValues(IFD.BitsPerSample, SampleBits, SampleCnt); if SampleCnt<>IFD.SamplesPerPixel then TiffError('Samples='+IntToStr(SampleCnt)+' <> SamplesPerPixel='+IntToStr(IFD .SamplesPerPixel)); if IFD.ExtraSamples>0 then ReadShortValues(IFD.ExtraSamples, ExtraSamples, ExtraSampleCnt); if ExtraSampleCnt>=SampleCnt then TiffError('Samples='+IntToStr(SampleCnt)+' ExtraSampleCnt='+IntToStr( ExtraSampleCnt)); case IFD.PhotoMetricInterpretation of 0, 1: if SampleCnt-ExtraSampleCnt<>1 then TiffError('gray images expect one sample per pixel, but found '+IntToStr( SampleCnt)); 2: if SampleCnt-ExtraSampleCnt<>3 then TiffError('rgb images expect three samples per pixel, but found '+IntToStr( SampleCnt)); 3: if SampleCnt-ExtraSampleCnt<>1 then TiffError('palette images expect one sample per pixel, but found '+IntToStr( SampleCnt)); 4: if SampleCnt-ExtraSampleCnt<>1 then TiffError('mask images expect one sample per pixel, but found '+IntToStr( SampleCnt)); 5: if SampleCnt-ExtraSampleCnt<>4 then TiffError('cmyk images expect four samples per pixel, but found '+IntToStr( SampleCnt)); end; GrayBits:=0; RedBits:=0; GreenBits:=0; BlueBits:=0; AlphaBits:=0; BytesPerPixel:=0; SampleBitsPerPixel:=0; for i:=0 to SampleCnt-1 do begin if SampleBits[i]>64 then TiffError('Samples bigger than 64 bit not supported'); if not (SampleBits[i] in [1, 8, 16]) then TiffError('Only samples of 1, 8 and 16 bit are supported'); inc(SampleBitsPerPixel, SampleBits[i]); end; case IFD.PhotoMetricInterpretation of 0, 1: begin GrayBits:=SampleBits[0]; IFD.GrayBits:=GrayBits; for i:=0 to ExtraSampleCnt-1 do begin if ExtraSamples[i] in [1, 2] then begin AlphaBits:=SampleBits[1+i]; IFD.AlphaBits:=AlphaBits; end; end; if not (GrayBits in [1, 8, 16]) then TiffError('gray image only supported with gray BitsPerSample 1, 8 or 16'); if not (AlphaBits in [0, 8, 16]) then TiffError('gray image only supported with alpha BitsPerSample 8 or 16'); end; 2: begin RedBits:=SampleBits[0]; GreenBits:=SampleBits[1]; BlueBits:=SampleBits[2]; IFD.RedBits:=RedBits; IFD.GreenBits:=GreenBits; IFD.BlueBits:=BlueBits; IFD.AlphaBits:=0; for i:=0 to ExtraSampleCnt-1 do begin //writeln(' ',i,'/',ExtraSampleCnt,' Type=',ExtraSamples[i],' Count=',SampleBits[3+i]); if ExtraSamples[i] in [1, 2] then begin AlphaBits:=SampleBits[3+i]; IFD.AlphaBits:=AlphaBits; end; end; if not (RedBits in [8, 16]) then TiffError('RGB image only supported with red BitsPerSample 8 or 16'); if not (GreenBits in [8, 16]) then TiffError('RGB image only supported with green BitsPerSample 8 or 16'); if not (BlueBits in [8, 16]) then TiffError('RGB image only supported with blue BitsPerSample 8 or 16'); if not (AlphaBits in [0, 8, 16]) then TiffError('RGB image only supported with alpha BitsPerSample 8 or 16'); end; 5: begin RedBits:=SampleBits[0]; GreenBits:=SampleBits[1]; BlueBits:=SampleBits[2]; GrayBits:=SampleBits[3]; IFD.RedBits:=RedBits; IFD.GreenBits:=GreenBits; IFD.BlueBits:=BlueBits; IFD.GrayBits:=GrayBits; IFD.AlphaBits:=0; for i:=0 to ExtraSampleCnt-1 do begin if ExtraSamples[i] in [1, 2] then begin AlphaBits:=SampleBits[4+i]; IFD.AlphaBits:=AlphaBits; end; end; if not (RedBits in [8, 16]) then TiffError('CMYK image only supported with cyan BitsPerSample 8 or 16'); if not (GreenBits in [8, 16]) then TiffError('CMYK image only supported with magenta BitsPerSample 8 or 16' ); if not (BlueBits in [8, 16]) then TiffError('CMYK image only supported with yellow BitsPerSample 8 or 16' ); if not (GrayBits in [8, 16]) then TiffError('CMYK image only supported with black BitsPerSample 8 or 16'); if not (AlphaBits in [0, 8, 16]) then TiffError('CMYK image only supported with alpha BitsPerSample 8 or 16'); end; end; BytesPerPixel:=(GrayBits+RedBits+GreenBits+BlueBits+AlphaBits) div 8; IFD.BytesPerPixel:=BytesPerPixel; {$ifdef FPC_Debug_Image} if Debug then writeln('BytesPerPixel=', BytesPerPixel); {$endif} if not (IFD.FillOrder in [0, 1]) then TiffError('FillOrder unsupported: '+IntToStr(IFD.FillOrder)); end; procedure TFPReaderTiff.SetFPImgExtras(CurImg: TFPCustomImage); begin ClearTiffExtras(CurImg); // set Tiff extra attributes CurImg.Extra[TiffPhotoMetric]:=IntToStr(IFD.PhotoMetricInterpretation); //writeln('TFPReaderTiff.SetFPImgExtras PhotoMetric=',CurImg.Extra[TiffPhotoMetric]); if IFD.Artist<>'' then CurImg.Extra[TiffArtist]:=IFD.Artist; if IFD.Copyright<>'' then CurImg.Extra[TiffCopyright]:=IFD.Copyright; if IFD.DocumentName<>'' then CurImg.Extra[TiffDocumentName]:=IFD.DocumentName; if IFD.DateAndTime<>'' then CurImg.Extra[TiffDateTime]:=IFD.DateAndTime; if IFD.HostComputer<>'' then CurImg.Extra[TiffHostComputer]:=IFD.HostComputer; if IFD.ImageDescription<>'' then CurImg.Extra[TiffImageDescription]:=IFD.ImageDescription; if IFD.Make_ScannerManufacturer<>'' then CurImg.Extra[TiffMake_ScannerManufacturer]:=IFD.Make_ScannerManufacturer; if IFD.Model_Scanner<>'' then CurImg.Extra[TiffModel_Scanner]:=IFD.Model_Scanner; if IFD.Software<>'' then CurImg.Extra[TiffSoftware]:=IFD.Software; if not (IFD.Orientation in [1..8]) then IFD.Orientation:=1; CurImg.Extra[TiffOrientation]:=IntToStr(IFD.Orientation); if IFD.ResolutionUnit<>0 then CurImg.Extra[TiffResolutionUnit]:=IntToStr(IFD.ResolutionUnit); if (IFD.XResolution.Numerator<>0) or (IFD.XResolution.Denominator<>0) then CurImg.Extra[TiffXResolution]:=TiffRationalToStr(IFD.XResolution); if (IFD.YResolution.Numerator<>0) or (IFD.YResolution.Denominator<>0) then CurImg.Extra[TiffYResolution]:=TiffRationalToStr(IFD.YResolution); CurImg.Extra[TiffRedBits]:=IntToStr(IFD.RedBits); CurImg.Extra[TiffGreenBits]:=IntToStr(IFD.GreenBits); CurImg.Extra[TiffBlueBits]:=IntToStr(IFD.BlueBits); CurImg.Extra[TiffGrayBits]:=IntToStr(IFD.GrayBits); CurImg.Extra[TiffAlphaBits]:=IntToStr(IFD.AlphaBits); if IFD.PageCount>0 then begin CurImg.Extra[TiffPageNumber]:=IntToStr(IFD.PageNumber); CurImg.Extra[TiffPageCount]:=IntToStr(IFD.PageCount); end; if IFD.PageName<>'' then CurImg.Extra[TiffPageName]:=IFD.PageName; if IFD.ImageIsThumbNail then CurImg.Extra[TiffIsThumbnail]:='1'; if IFD.ImageIsMask then CurImg.Extra[TiffIsMask]:='1'; if IFD.Compression<>TiffCompressionNone then CurImg.Extra[TiffCompression]:=IntToStr(IFD.Compression); {$ifdef FPC_Debug_Image} if Debug then WriteTiffExtras('SetFPImgExtras', CurImg); {$endif} end; procedure TFPReaderTiff.ReadImgValue(BitCount: Word; var Run: Pointer; x: dword; Predictor: word; var LastValue: word; out Value: Word); inline; var BitNumber: byte; begin case BitCount of 1: begin //Get the value of the right bit depending on x value and scale it to dword. BitNumber:=7-(x mod 8); //Leftmost pixel starts with bit 7 Value:=$ffff*((PCUInt8(Run)^) and (1 shl BitNumber) shr BitNumber); if Predictor=2 then begin TiffError('predictor 2 not supported for bilevel images'); end; if ((x+1) mod 8)=0 then inc(Run); //next byte when all bits read end; 8: begin Value:=PCUInt8(Run)^; if Predictor=2 then begin // horizontal difference if x>0 then Value:=(Value+LastValue) and $ff; LastValue:=Value; end; Value:=Value shl 8+Value; inc(Run); end; 16: begin Value:=FixEndian(PCUInt16(Run)^); if Predictor=2 then begin // horizontal difference if x>0 then Value:=(Value+LastValue) and $ffff; LastValue:=Value; end; inc(Run,2); end; end; end; procedure TFPReaderTiff.SetStreamPos(p: DWord); var NewPosition: int64; begin NewPosition:=Int64(p)+fStartPos; if NewPosition>s.Size then TiffError('Offset outside of stream'); s.Position:=NewPosition; end; procedure TFPReaderTiff.LoadFromStream(aStream: TStream; AutoClear: boolean); var IFDStart: DWord; i: Integer; aContinue: Boolean; begin if AutoClear then Clear; aContinue:=true; Progress(psStarting, 0, False, Rect(0,0,0,0), '', aContinue); if not aContinue then exit; LoadHeaderFromStream(aStream); try IFDStart:=FirstIFDStart; i:=0; while IFDStart>0 do begin if i=ImageCount then ImageList.Add(TTiffIFD.Create); IFD:=Images[i]; IFDStart:=ReadIFD(IFDStart); LoadImageFromStream(i); inc(i); end; finally IFD:=nil; end; Progress(psEnding, 100, False, Rect(0,0,0,0), '', aContinue); end; procedure TFPReaderTiff.LoadHeaderFromStream(aStream: TStream); begin FFirstIFDStart:=0; s:=aStream; fStartPos:=s.Position; ReadTiffHeader(false,FFirstIFDStart); end; procedure TFPReaderTiff.LoadIFDsFromStream; var i: Integer; IFDStart: DWord; begin try IFDStart:=FirstIFDStart; i:=0; while IFDStart>0 do begin if ImageCount=i then ImageList.Add(TTiffIFD.Create); IFD:=Images[i]; IFDStart:=ReadIFD(IFDStart); inc(i); end; finally IFD:=nil; end; end; function TFPReaderTiff.FirstImg: TTiffIFD; begin Result:=nil; if (ImageList=nil) or (ImageList.Count=0) then exit; Result:=TTiffIFD(ImageList[0]); end; function TFPReaderTiff.GetBiggestImage: TTiffIFD; var Size: Int64; Img: TTiffIFD; CurSize: int64; i: Integer; begin Result:=nil; Size:=0; for i:=0 to ImageCount-1 do begin Img:=Images[i]; CurSize:=Int64(Img.ImageWidth)*Img.ImageHeight; if CurSize2 then begin {$ifdef FPC_Debug_Image} if Debug then begin write('TFPReaderTiff.ReadDirectoryEntry Tag 297: PageNumber/Count: '); for i:=0 to Count-1 do write(IntToStr(WordBuffer[i]),' '); writeln; end; {$endif} TiffError('PageNumber Count=2 expected, but found '+IntToStr(Count)); end; IFD.PageNumber:=WordBuffer[0]; IFD.PageCount:=WordBuffer[1]; if IFD.PageNumber>=IFD.PageCount then begin // broken order => repair UValue:=IFD.PageNumber; IFD.PageNumber:=IFD.PageCount; IFD.PageCount:=UValue; end; finally ReAllocMem(WordBuffer,0); end; {$ifdef FPC_Debug_Image} if Debug then begin writeln('TFPReaderTiff.ReadDirectoryEntry Tag 297: PageNumber=',IFD.PageNumber,'/',IFD.PageCount); end; {$endif} end; 305: begin // Software IFD.Software:=ReadEntryString; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 305: Software="',IFD.Software,'"'); {$endif} end; 306: begin // DateAndTime IFD.DateAndTime:=ReadEntryString; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 306: DateAndTime="',IFD.DateAndTime,'"'); {$endif} end; 315: begin // Artist IFD.Artist:=ReadEntryString; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 315: Artist="',IFD.Artist,'"'); {$endif} end; 316: begin // HostComputer IFD.HostComputer:=ReadEntryString; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 316: HostComputer="',IFD.HostComputer,'"'); {$endif} end; 317: begin // Predictor UValue:=word(ReadEntryUnsigned); case UValue of 1: ; 2: ; else TiffError('expected Predictor, but found '+IntToStr(UValue)); end; IFD.Predictor:=UValue; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 317: Predictor="',IFD.Predictor,'"'); {$endif} end; 320: begin // ColorMap: N = 3*2^BitsPerSample IFD.ColorMap:=GetPos; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 320: skipping ColorMap'); {$endif} end; 322: begin // TileWidth IFD.TileWidth:=ReadEntryUnsigned; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 322: TileWidth=',IFD.TileWidth); {$endif} if IFD.TileWidth=0 then TiffError('TileWidth=0'); end; 323: begin // TileLength = TileHeight IFD.TileLength:=ReadEntryUnsigned; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 323: TileLength=',IFD.TileLength); {$endif} if IFD.TileLength=0 then TiffError('TileLength=0'); end; 324: begin // TileOffsets IFD.TileOffsets:=GetPos; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 324: TileOffsets=',IFD.TileOffsets); {$endif} if IFD.TileOffsets=0 then TiffError('TileOffsets=0'); end; 325: begin // TileByteCounts IFD.TileByteCounts:=GetPos; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 325: TileByteCounts=',IFD.TileByteCounts); {$endif} if IFD.TileByteCounts=0 then TiffError('TileByteCounts=0'); end; 338: begin // ExtraSamples: if SamplesPerPixel is bigger than PhotometricInterpretation // then ExtraSamples is an array defining the extra samples // 0=unspecified // 1=alpha (premultiplied) // 2=alpha (unassociated) IFD.ExtraSamples:=GetPos; {$ifdef FPC_Debug_Image} if Debug then begin ReadShortValues(IFD.ExtraSamples,WordBuffer,Count); write('TFPReaderTiff.ReadDirectoryEntry Tag 338: ExtraSamples: '); for i:=0 to Count-1 do write(IntToStr(WordBuffer[i]),' '); writeln; ReAllocMem(WordBuffer,0); end; {$endif} end; 347: begin // ToDo: JPEGTables {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 347: skipping JPEG Tables'); {$endif} end; 512: begin // ToDo: JPEGProc // short // 1 = baseline sequential // 14 = lossless process with Huffman encoding {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 512: skipping JPEGProc'); {$endif} end; 513: begin // ToDo: JPEGInterchangeFormat // long // non zero: start of start of image SOI marker {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 513: skipping JPEGInterchangeFormat'); {$endif} end; 514: begin // ToDo: JPEGInterchangeFormatLength // long // length in bytes of 513 {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 514: skipping JPEGInterchangeFormatLength'); {$endif} end; 515: begin // ToDo: JPEGRestartInterval // short {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 515: skipping JPEGRestartInterval'); {$endif} end; 517: begin // ToDo: JPEGLosslessPredictor // short // Count: SamplesPerPixels {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 517: skipping JPEGLosslessPredictor'); {$endif} end; 518: begin // ToDo: JPEGPointTransforms // short // Count: SamplesPerPixels {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 518: skipping JPEGPointTransforms'); {$endif} end; 519: begin // ToDo: JPEGQTables // long // Count: SamplesPerPixels {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 519: skipping JPEGQTables'); {$endif} end; 520: begin // ToDo: JPEGDCTables // long // Count: SamplesPerPixels {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 520: skipping JPEGDCTables'); {$endif} end; 521: begin // ToDo: JPEGACTables // long // Count: SamplesPerPixels {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 521: skipping JPEGACTables'); {$endif} end; 530: begin // ToDo: YCbCrSubSampling alias ChromaSubSampling {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 530: skipping YCbCrSubSampling alias ChromaSubSampling'); {$endif} end; 700: begin // ToDo: XMP {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 700: skipping XMP'); {$endif} end; 33432: begin // Copyright IFD.Copyright:=ReadEntryString; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 33432: Copyright="',IFD.Copyright,'"'); {$endif} end; 34675: begin // ToDo: ICC Profile {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag 34675: skipping ICC profile'); {$endif} end; else begin EntryType:=ReadWord; EntryCount:=ReadDWord; EntryStart:=ReadDWord; if (EntryType=0) and (EntryCount=0) and (EntryStart=0) then ; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.ReadDirectoryEntry Tag=',EntryTag,' Type=',EntryType,' Count=',EntryCount,' ValuesStart=',EntryStart); {$endif} end; end; end; function TFPReaderTiff.ReadEntryUnsigned: DWord; var EntryCount: LongWord; EntryType: Word; begin Result:=0; EntryType:=ReadWord; EntryCount:=ReadDWord; if EntryCount<>1 then TiffError('EntryCount=1 expected, but found '+IntToStr(EntryCount)); //writeln('TFPReaderTiff.ReadEntryUnsigned Tag=',EntryTag,' Type=',EntryType,' Count=',EntryCount,' ValuesStart=',EntryStart]); case EntryType of 1: begin // byte: 8bit unsigned Result:=ReadByte; end; 3: begin // short: 16bit unsigned Result:=ReadWord; end; 4: begin // long: 32bit unsigned long Result:=ReadDWord; end; else TiffError('expected single unsigned value, but found type='+IntToStr(EntryType)); end; end; function TFPReaderTiff.ReadEntrySigned: Cint32; var EntryCount: LongWord; EntryType: Word; begin Result:=0; EntryType:=ReadWord; EntryCount:=ReadDWord; if EntryCount<>1 then TiffError('EntryCount+1 expected, but found '+IntToStr(EntryCount)); //writeln('TFPReaderTiff.ReadEntrySigned Tag=',EntryTag,' Type=',EntryType,' Count=',EntryCount,' ValuesStart=',EntryStart]); case EntryType of 1: begin // byte: 8bit unsigned Result:=cint8(ReadByte); end; 3: begin // short: 16bit unsigned Result:=cint16(ReadWord); end; 4: begin // long: 32bit unsigned long Result:=cint32(ReadDWord); end; 6: begin // sbyte: 8bit signed Result:=cint8(ReadByte); end; 8: begin // sshort: 16bit signed Result:=cint16(ReadWord); end; 9: begin // slong: 32bit signed long Result:=cint32(ReadDWord); end; else TiffError('expected single signed value, but found type='+IntToStr(EntryType)); end; end; function TFPReaderTiff.ReadEntryRational: TTiffRational; var EntryCount: LongWord; EntryStart: LongWord; EntryType: Word; begin Result:=TiffRational0; EntryType:=ReadWord; EntryCount:=ReadDWord; if EntryCount<>1 then TiffError('EntryCount+1 expected, but found '+IntToStr(EntryCount)); //writeln('TFPReaderTiff.ReadEntryUnsigned Tag=',EntryTag,' Type=',EntryType,' Count=',EntryCount,' ValuesStart=',EntryStart]); case EntryType of 1: begin // byte: 8bit unsigned Result.Numerator:=ReadByte; end; 3: begin // short: 16bit unsigned Result.Numerator:=ReadWord; end; 4: begin // long: 32bit unsigned long Result.Numerator:=ReadDWord; end; 5: begin // rational: Two longs: numerator + denominator // this does not fit into 4 bytes EntryStart:=ReadDWord; SetStreamPos(EntryStart); Result.Numerator:=ReadDWord; Result.Denominator:=ReadDWord; end; else TiffError('expected rational unsigned value, but found type='+IntToStr(EntryType)); end; end; function TFPReaderTiff.ReadEntryString: string; var EntryType: Word; EntryCount: LongWord; EntryStart: LongWord; begin Result:=''; EntryType:=ReadWord; if EntryType<>2 then TiffError('asciiz expected, but found '+IntToStr(EntryType)); EntryCount:=ReadDWord; EntryStart:=ReadDWord; SetStreamPos(EntryStart); SetLength(Result,EntryCount-1); if EntryCount>1 then s.Read(Result[1],EntryCount-1); end; function TFPReaderTiff.ReadByte: Byte; begin Result:=s.ReadByte; end; function TFPReaderTiff.ReadWord: Word; begin Result:=FixEndian(s.ReadWord); end; function TFPReaderTiff.ReadDWord: DWord; begin Result:=FixEndian(s.ReadDWord); end; procedure TFPReaderTiff.ReadValues(StreamPos: DWord; out EntryType: word; out EntryCount: DWord; out Buffer: Pointer; out ByteCount: PtrUint); var EntryStart: DWord; begin Buffer:=nil; ByteCount:=0; EntryType:=0; EntryCount:=0; SetStreamPos(StreamPos); ReadWord; // skip tag EntryType:=ReadWord; EntryCount:=ReadDWord; if EntryCount=0 then exit; case EntryType of 1,6,7: ByteCount:=EntryCount; // byte 2: ByteCount:=EntryCount; // asciiz 3,8: ByteCount:=2*EntryCount; // short 4,9: ByteCount:=4*EntryCount; // long 5,10: ByteCount:=8*EntryCount; // rational 11: ByteCount:=4*EntryCount; // single 12: ByteCount:=8*EntryCount; // double else TiffError('invalid EntryType '+IntToStr(EntryType)); end; if ByteCount>4 then begin EntryStart:=ReadDWord; SetStreamPos(EntryStart); end; GetMem(Buffer,ByteCount); s.Read(Buffer^,ByteCount); end; procedure TFPReaderTiff.ReadShortOrLongValues(StreamPos: DWord; out Buffer: PDWord; out Count: DWord); var p: Pointer; ByteCount: PtrUInt; EntryType: word; i: DWord; begin Buffer:=nil; Count:=0; p:=nil; try ReadValues(StreamPos,EntryType,Count,p,ByteCount); if Count=0 then exit; if EntryType=3 then begin // short GetMem(Buffer,SizeOf(DWord)*Count); for i:=0 to Count-1 do Buffer[i]:=FixEndian(PWord(p)[i]); end else if EntryType=4 then begin // long Buffer:=p; p:=nil; if FReverseEndian then for i:=0 to Count-1 do Buffer[i]:=FixEndian(PDWord(Buffer)[i]); end else TiffError('only short or long allowed'); finally if p<>nil then FreeMem(p); end; end; procedure TFPReaderTiff.ReadShortValues(StreamPos: DWord; out Buffer: PWord; out Count: DWord); var p: Pointer; ByteCount: PtrUInt; EntryType: word; i: DWord; begin Buffer:=nil; Count:=0; p:=nil; try ReadValues(StreamPos,EntryType,Count,p,ByteCount); //writeln('ReadShortValues ',FReverseEndian,' ',EntryType,' Count=',Count,' ByteCount=',ByteCount); if Count=0 then exit; if EntryType=3 then begin // short Buffer:=p; p:=nil; if FReverseEndian then for i:=0 to Count-1 do Buffer[i]:=FixEndian(Buffer[i]); //for i:=0 to Count-1 do writeln(i,' ',Buffer[i]); end else TiffError('only short allowed, but found '+IntToStr(EntryType)); finally if p<>nil then FreeMem(p); end; end; procedure TFPReaderTiff.LoadImageFromStream(Index: integer); var ChunkOffsets: PDWord; ChunkByteCounts: PDWord; Chunk: PByte; ChunkCount: DWord; ChunkIndex: Dword; CurCount: DWord; CurOffset: DWord; CurByteCnt: PtrInt; Run: PByte; x, y, cx, cy, dx, dy, sx: integer; SampleBits: PWord; SampleBitsPerPixel: DWord; ExtraSamples: PWord; ExtraSampleCnt: DWord; GrayBits, GrayValue, LastGrayValue: Word; RedBits, RedValue, LastRedValue: Word; GreenBits, GreenValue, LastGreenValue: Word; BlueBits, BlueValue, LastBlueValue: Word; AlphaBits, AlphaValue, LastAlphaValue: Word; Col: TFPColor; i: Integer; CurFPImg: TFPCustomImage; aContinue: Boolean; ExpectedChunkLength: PtrInt; ChunkType: TTiffChunkType; TilesAcross, TilesDown: DWord; ChunkLeft, ChunkTop, ChunkWidth, ChunkHeight: DWord; CurImg: TTiffIFD; ChunkBytesPerLine: DWord; begin {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.LoadImageFromStream Index=',Index); {$endif} IFD:=Images[Index]; if IFD.PhotoMetricInterpretation=High(IFD.PhotoMetricInterpretation) then TiffError('missing PhotometricInterpretation'); if IFD.BitsPerSample=0 then TiffError('missing BitsPerSample'); if IFD.TileWidth>0 then begin ChunkType:=tctTile; if IFD.TileLength=0 then TiffError('missing TileLength'); if IFD.TileOffsets=0 then TiffError('missing TileOffsets'); if IFD.TileByteCounts=0 then TiffError('missing TileByteCounts'); end else begin ChunkType:=tctStrip; if IFD.RowsPerStrip=0 then TiffError('missing RowsPerStrip'); if IFD.StripOffsets=0 then TiffError('missing StripOffsets'); if IFD.StripByteCounts=0 then TiffError('missing StripByteCounts'); end; if (IFD.ImageWidth=0) or (IFD.ImageHeight=0) then exit; if Index=ImageCount then ImageList.Add(TTiffIFD.Create); CurImg:=Images[Index]; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.LoadImageFromStream reading ...'); {$endif} ChunkOffsets:=nil; ChunkByteCounts:=nil; Chunk:=nil; ExtraSamples:=nil; SampleBits:=nil; ExtraSampleCnt:=0; try // read chunk starts and sizes if ChunkType=tctTile then begin TilesAcross:=(IFD.ImageWidth+IFD.TileWidth-1) div IFD.TileWidth; TilesDown:=(IFD.ImageHeight+IFD.TileLength-1) div IFD.TileLength; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.LoadImageFromStream TilesAcross=',TilesAcross,' TilesDown=',TilesDown); {$endif} ChunkCount := TilesAcross * TilesDown; ReadShortOrLongValues(IFD.TileOffsets,ChunkOffsets,CurCount); if CurCount<>ChunkCount then TiffError('number of TileCounts is wrong'); ReadShortOrLongValues(IFD.TileByteCounts,ChunkByteCounts,CurCount); if CurCount<>ChunkCount then TiffError('number of TileByteCounts is wrong'); end else begin //strip ChunkCount:=((IFD.ImageHeight-1) div IFD.RowsPerStrip)+1; ReadShortOrLongValues(IFD.StripOffsets,ChunkOffsets,CurCount); if CurCount<>ChunkCount then TiffError('number of StripCounts is wrong'); ReadShortOrLongValues(IFD.StripByteCounts,ChunkByteCounts,CurCount); if CurCount<>ChunkCount then TiffError('number of StripByteCounts is wrong'); end; // read image structure ReadImageProperties(RedBits, GreenBits, BlueBits, GrayBits, AlphaBits, ExtraSamples, ExtraSampleCnt, SampleBits, SampleBitsPerPixel); CurImg.Assign(IFD); // create FPimage DoCreateImage(CurImg); CurFPImg:=CurImg.Img; if CurFPImg=nil then exit; SetFPImgExtras(CurFPImg); case IFD.Orientation of 0,1..4: CurFPImg.SetSize(IFD.ImageWidth,IFD.ImageHeight); 5..8: CurFPImg.SetSize(IFD.ImageHeight,IFD.ImageWidth); end; {$ifdef FPC_Debug_Image} if Debug then writeln('TFPReaderTiff.LoadImageFromStream SampleBitsPerPixel=',SampleBitsPerPixel); {$endif} // read chunks for ChunkIndex:=0 to ChunkCount-1 do begin CurOffset:=ChunkOffsets[ChunkIndex]; CurByteCnt:=ChunkByteCounts[ChunkIndex]; //writeln('TFPReaderTiff.LoadImageFromStream CurOffset=',CurOffset,' CurByteCnt=',CurByteCnt); if CurByteCnt<=0 then continue; ReAllocMem(Chunk,CurByteCnt); SetStreamPos(CurOffset); s.Read(Chunk^,CurByteCnt); // decompress if ChunkType=tctTile then ExpectedChunkLength:=(SampleBitsPerPixel*IFD.TileWidth+7) div 8*IFD.TileLength else ExpectedChunkLength:=((SampleBitsPerPixel*IFD.ImageWidth+7) div 8)*IFD.RowsPerStrip; case IFD.Compression of TiffCompressionNone: ; TiffCompressionPackBits: DecodePackBits(Chunk,CurByteCnt); TiffCompressionLZW: DecodeLZW(Chunk,CurByteCnt); TiffCompressionDeflateAdobe, TiffCompressionDeflateZLib: DecodeDeflate(Chunk,CurByteCnt,ExpectedChunkLength); else TiffError('compression '+TiffCompressionName(IFD.Compression)+' not supported yet'); end; if CurByteCnt<=0 then continue; // compute current chunk area if ChunkType=tctTile then begin ChunkLeft:=(ChunkIndex mod TilesAcross)*IFD.TileWidth; ChunkTop:=(ChunkIndex div TilesAcross)*IFD.TileLength; ChunkWidth:=Min(IFD.TileWidth,IFD.ImageWidth-ChunkLeft); ChunkHeight:=Min(IFD.TileLength,IFD.ImageHeight-ChunkTop); ChunkBytesPerLine:=(SampleBitsPerPixel*ChunkWidth+7) div 8; ExpectedChunkLength:=ChunkBytesPerLine*ChunkHeight; if CurByteCnt=0 then begin Img:=Images[Best]; Img.Img:=AnImage; LoadImageFromStream(Best); end; // end Progress(psEnding, 100, False, Rect(0,0,0,0), '', aContinue); end; function TFPReaderTiff.InternalCheck(Str: TStream): boolean; var IFDStart: DWord; begin try s:=Str; fStartPos:=s.Position; Result:=ReadTiffHeader(true,IFDStart) and (IFDStart<>0); s.Position:=fStartPos; except Result:=false; end; end; procedure TFPReaderTiff.DoCreateImage(ImgFileDir: TTiffIFD); begin if Assigned(OnCreateImage) then OnCreateImage(Self,ImgFileDir); end; constructor TFPReaderTiff.Create; begin ImageList:=TFPList.Create; end; destructor TFPReaderTiff.Destroy; begin Clear; FreeAndNil(ImageList); inherited Destroy; end; procedure TFPReaderTiff.Clear; var i: Integer; Img: TTiffIFD; begin for i:=ImageCount-1 downto 0 do begin Img:=Images[i]; ImageList.Delete(i); if IFD=Img then IFD:=nil; Img.Free; end; FReverseEndian:=false; FreeAndNil(fIFDStarts); end; procedure DecompressPackBits(Buffer: Pointer; Count: PtrInt; out NewBuffer: Pointer; out NewCount: PtrInt); { Algorithm: while not got the expected number of bytes read one byte n if n in 0..127 copy the next n+1 bytes else if n in -127..-1 then copy the next byte 1-n times else continue end } var p: Pcint8; n: cint8; d: pcint8; i,j: integer; EndP: Pcint8; begin // compute NewCount NewCount:=0; NewBuffer:=nil; if Count=0 then exit; p:=Pcint8(Buffer); EndP:=p+Count; while p16 then begin // read from three bytes if SrcPos+3>Count then Error('LZW stream overrun'); v:=PByte(Buffer)[SrcPos]; inc(SrcPos); v:=(v shl 8)+PByte(Buffer)[SrcPos]; inc(SrcPos); v:=(v shl 8)+PByte(Buffer)[SrcPos]; v:=v shr (24-CurBitLength-SrcPosBit); end else begin // read from two bytes if SrcPos+2>Count then Error('LZW stream overrun'); v:=PByte(Buffer)[SrcPos]; inc(SrcPos); v:=(v shl 8)+PByte(Buffer)[SrcPos]; if CurBitLength+SrcPosBit=16 then inc(SrcPos); v:=v shr (16-CurBitLength-SrcPosBit); end; Result:=v and ((1 shl CurBitLength)-1); SrcPosBit:=(SrcPosBit+CurBitLength) and 7; //writeln('GetNextCode END SrcPos=',SrcPos,' SrcPosBit=',SrcPosBit,' Result=',Result,' Result=',hexstr(Result,4)); end; procedure ClearTable; var i: Integer; begin for i:=0 to TableCount-1 do ReAllocMem(Table[i].Data,0); TableCount:=0; end; procedure InitializeTable; begin CurBitLength:=9; ClearTable; end; function IsInTable(Code: word): boolean; begin Result:=Code<258+TableCount; end; procedure WriteStringFromCode(Code: integer; AddFirstChar: boolean = false); var s: TLZWString; b: byte; begin //WriteLn('WriteStringFromCode Code=',Code,' AddFirstChar=',AddFirstChar,' x=',(NewCount div 4) mod IFD.ImageWidth,' y=',(NewCount div 4) div IFD.ImageWidth,' PixelByte=',NewCount mod 4); if Code<256 then begin // write byte b:=Code; s.Data:=@b; s.Count:=1; end else if Code>=258 then begin // write string if Code-258>=TableCount then Error('LZW code out of bounds'); s:=Table[Code-258]; end else Error('LZW code out of bounds'); if NewCount+s.Count+1>NewCapacity then begin NewCapacity:=NewCapacity*2+8; ReAllocMem(NewBuffer,NewCapacity); end; System.Move(s.Data^,NewBuffer[NewCount],s.Count); //for i:=0 to s.Count-1 do write(HexStr(NewBuffer[NewCount+i],2)); // debug inc(NewCount,s.Count); if AddFirstChar then begin NewBuffer[NewCount]:=s.Data^; //write(HexStr(NewBuffer[NewCount],2)); // debug inc(NewCount); end; //writeln(',WriteStringFromCode'); // debug end; procedure AddStringToTable(Code, AddFirstCharFromCode: integer); // add string from code plus first character of string from code as new string var b1, b2: byte; s1, s2: TLZWString; p: PByte; begin //WriteLn('AddStringToTable Code=',Code,' FCFCode=',AddFirstCharFromCode,' TableCount=',TableCount,' TableCapacity=',TableCapacity); if TableCount=4096-259 then Error('LZW too many codes'); // grow table if TableCount>=TableCapacity then begin TableCapacity:=TableCapacity*2+128; ReAllocMem(Table,TableCapacity*SizeOf(TLZWString)); end; // find string 1 if Code<256 then begin // string is byte b1:=Code; s1.Data:=@b1; s1.Count:=1; end else if Code>=258 then begin // normal string if Code-258>=TableCount then Error('LZW code out of bounds'); s1:=Table[Code-258]; end else Error('LZW code out of bounds'); // find string 2 if AddFirstCharFromCode<256 then begin // string is byte b2:=AddFirstCharFromCode; s2.Data:=@b2; s2.Count:=1; end else begin // normal string if AddFirstCharFromCode-258>=TableCount then Error('LZW code out of bounds'); s2:=Table[AddFirstCharFromCode-258]; end; // set new table entry Table[TableCount].Count:=s1.Count+1; p:=nil; GetMem(p,s1.Count+1); Table[TableCount].Data:=p; System.Move(s1.Data^,p^,s1.Count); // add first character from string 2 p[s1.Count]:=s2.Data^; // increase TableCount inc(TableCount); case TableCount+259 of 512,1024,2048: inc(CurBitLength); end; end; begin NewBuffer:=nil; NewCount:=0; if Count=0 then exit; //WriteLn('DecompressLZW START Count=',Count); //for SrcPos:=0 to 19 do // write(HexStr(PByte(Buffer)[SrcPos],2)); //writeln(); NewCapacity:=Count*2; ReAllocMem(NewBuffer,NewCapacity); SrcPos:=0; SrcPosBit:=0; CurBitLength:=9; Table:=nil; TableCount:=0; TableCapacity:=0; try repeat Code:=GetNextCode; //WriteLn('DecompressLZW Code=',Code); if Code=EoiCode then break; if Code=ClearCode then begin InitializeTable; Code:=GetNextCode; //WriteLn('DecompressLZW after clear Code=',Code); if Code=EoiCode then break; if Code=ClearCode then Error('LZW code out of bounds'); WriteStringFromCode(Code); OldCode:=Code; end else begin if Code Z_OK then begin if ErrorMsg<>nil then ErrorMsg^:='inflateInit failed'; exit; end; // set input = compressed data stream.avail_in := CompressedCount; stream.next_in := Compressed; // set output = decompressed data if DecompressedCount=0 then DecompressedCount:=CompressedCount; Getmem(Decompressed,DecompressedCount); stream.avail_out := DecompressedCount; stream.next_out := Decompressed; // Finish the stream while TRUE do begin //writeln('run: total_in=',stream.total_in,' avail_in=',stream.avail_in,' total_out=',stream.total_out,' avail_out=',stream.avail_out); if (stream.avail_out=0) then begin // need more space if DecompressedCount<128 then DecompressedCount:=DecompressedCount+128 else if DecompressedCount>High(DecompressedCount)-1024 then begin if ErrorMsg<>nil then ErrorMsg^:='inflate decompression failed, because not enough space'; exit; end else DecompressedCount:=DecompressedCount*2; ReAllocMem(Decompressed,DecompressedCount); stream.next_out:=Decompressed+stream.total_out; stream.avail_out:=DecompressedCount-stream.total_out; end; err := inflate(stream, Z_NO_FLUSH); if err = Z_STREAM_END then break; if err<>Z_OK then begin if ErrorMsg<>nil then ErrorMsg^:='inflate finish failed'; exit; end; end; //writeln('decompressed: total_in=',stream.total_in,' total_out=',stream.total_out); DecompressedCount:=stream.total_out; ReAllocMem(Decompressed,DecompressedCount); err := inflateEnd(stream); if err<>Z_OK then begin if ErrorMsg<>nil then ErrorMsg^:='inflateEnd failed'; exit; end; Result:=true; end; initialization if ImageHandlers.ImageReader[TiffHandlerName]=nil then ImageHandlers.RegisterImageReader (TiffHandlerName, 'tif;tiff', TFPReaderTiff); end. doublecmd-0.9.8/src/uformcommands.pas0000644000175000001440000005626613337574170016725 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); 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-0.9.8/src/ufindthread.pas0000644000175000001440000005011113546360050016317 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Thread for search files (called from frmSearchDlg) Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) 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 uFindThread; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, uFindFiles, uFindEx, uFindByrMr, uMasks, uRegExprA, uRegExprW; type { TFindThread } TFindThread = class(TThread) private FItems: TStrings; FCurrentDir:String; FFilesScanned:Integer; FFilesFound:Integer; FFoundFile:String; FCurrentDepth: Integer; FTextSearchType: TTextSearch; FSearchTemplate: TSearchTemplateRec; FSelectedFiles: TStringList; FFileChecks: TFindFileChecks; FLinkTargets: TStringList; // A list of encountered directories (for detecting cycles) RecodeTable:TRecodeTable; FFilesMasks: TMaskList; FExcludeFiles: TMaskList; FExcludeDirectories: TMaskList; FFilesMasksRegExp: TRegExprW; FExcludeFilesRegExp: TRegExprW; FRegExpr: TRegExpr; FTimeSearchStart:TTime; FTimeSearchEnd:TTime; FTimeOfScan:TTime; 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 FindInFile(const sFileName: String;sData: String; bCase, bRegExp: Boolean): Boolean; procedure FileReplaceString(const FileName, SearchString, ReplaceString: string; bCase, bRegExp: Boolean); protected procedure Execute; override; public constructor Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); destructor Destroy; override; procedure AddFile; procedure AddArchiveFile; 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 Items:TStrings write FItems; end; implementation uses LCLProc, StrUtils, LConvEncoding, DCStrUtils, uLng, DCClassesUtf8, uFindMmap, uGlobs, uShowMsg, DCOSUtils, uOSUtils, uLog, uWCXmodule, WcxPlugin, Math, uDCUtils, uConvEncoding, DCDateTimeUtils; 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; { TFindThread } constructor TFindThread.Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); begin inherited Create(True); FLinkTargets := TStringList.Create; FSearchTemplate := AFindOptions; FSelectedFiles := SelectedFiles; with FSearchTemplate do begin if SearchDepth < 0 then SearchDepth := MaxInt; if IsFindText then begin if HexValue then begin TextEncoding := EncodingAnsi; FindText := HexToBin(FindText); end else begin TextEncoding := NormalizeEncoding(TextEncoding); if TextRegExp then FRegExpr := TRegExpr.Create(TextEncoding); FindText := ConvertEncoding(FindText, EncodingUTF8, TextEncoding); ReplaceText := ConvertEncoding(ReplaceText, EncodingUTF8, TextEncoding); end; // Determine search type if SingleByteEncoding(TextEncoding) then begin FTextSearchType := tsAnsi; RecodeTable := InitRecodeTable(TextEncoding, CaseSensitive); end else if (CaseSensitive = False) then begin if TextEncoding = EncodingDefault then begin TextEncoding := GetDefaultTextEncoding; end; if ((TextEncoding = EncodingUTF8) or (TextEncoding = EncodingUTF8BOM)) then FTextSearchType:= tsUtf8 else if (TextEncoding = EncodingUCS2LE) then FTextSearchType:= tsUtf16le else if (TextEncoding = EncodingUCS2BE) then FTextSearchType:= tsUtf16be else FTextSearchType:= tsOther; end else begin FTextSearchType:= tsOther; end; end end; SearchTemplateToFindFileChecks(FSearchTemplate, FFileChecks); with FFileChecks do begin if RegExp then begin FFilesMasksRegExp := TRegExprW.Create(UTF8Decode(FilesMasks)); FExcludeFilesRegExp := TRegExprW.Create(UTF8Decode(ExcludeFiles)); end else begin FFilesMasks := TMaskList.Create(FilesMasks); FExcludeFiles := TMaskList.Create(ExcludeFiles); end; FExcludeDirectories := TMaskList.Create(ExcludeDirectories); end; FTimeSearchStart:=0; FTimeSearchEnd:=0; FTimeOfScan:=0; end; destructor TFindThread.Destroy; begin // FItems.Add('End'); FreeAndNil(FRegExpr); FreeAndNil(FFilesMasks); FreeAndNil(FExcludeFiles); FreeThenNil(FLinkTargets); FreeAndNil(FFilesMasksRegExp); FreeAndNil(FExcludeFilesRegExp); FreeAndNil(FExcludeDirectories); 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 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, Self); end; function TFindThread.CheckDirectory(const CurrentDir, FolderName : String): Boolean; begin with FSearchTemplate do begin Result := CheckDirectoryName(FolderName) and CheckDirectoryNameRelative(FFileChecks, CurrentDir + PathDelim + FolderName, FSearchTemplate.StartPath); end; end; function TFindThread.FindInFile(const sFileName: String; sData: 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 lastPos, sDataLength, DataRead: Longint; BufferSize: Integer; Buffer: PAnsiChar = nil; S: String; begin Result := False; if sData = '' then Exit; // 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; Exit(FRegExpr.ExecRegExpr(sData, S)); end; if gUseMmapInSearch then begin // Memory mapping should be slightly faster and use less memory case FTextSearchType of tsAnsi: lastPos:= FindMmapBM(sFileName, sData, RecodeTable, @IsAborting); tsUtf8: lastPos:= FindMmapU(sFileName, sData); tsUtf16le: lastPos:= FindMmapW(sFileName, sData, True); tsUtf16be: lastPos:= FindMmapW(sFileName, sData, False); else lastPos:= FindMmap(sFileName, sData, bCase, @IsAborting); end; case lastPos of 0 : Exit(False); 1 : Exit(True); // else fall back to searching via stream reading end; end; BufferSize := gCopyBlockSize; sDataLength := Length(sData); if sDataLength > BufferSize then raise Exception.Create(rsMsgErrSmallBuf); fs := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone or fmOpenNoATime); try if sDataLength > fs.Size then // string longer than file, cannot search Exit; // 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 + sDataLength - 1); if Assigned(Buffer) then 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 FTextSearchType of tsAnsi: begin if PosMemBoyerMur(@Buffer[0], DataRead + sDataLength - 1, sData, RecodeTable) <> -1 then Exit(True); end; tsUtf8: begin if PosMemU(@Buffer[0], DataRead + sDataLength - 1, 0, sData, False) <> Pointer(-1) then Exit(True); end; tsUtf16le, tsUtf16be: begin if PosMemW(@Buffer[0], DataRead + sDataLength - 1, 0, sData, False, FTextSearchType = tsUtf16le) <> Pointer(-1) then Exit(True); end; else begin if PosMem(@Buffer[0], DataRead + sDataLength - 1, 0, sData, 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; finally FreeAndNil(fs); if Assigned(Buffer) then begin FreeMem(Buffer); Buffer := nil; end; end; end; procedure TFindThread.FileReplaceString(const FileName, SearchString, ReplaceString: string; bCase, bRegExp: Boolean); var S: String; fs: TFileStreamEx; 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; if bRegExp then S := FRegExpr.ReplaceRegExpr(SearchString, S, replaceString, True) else begin Include(Flags, rfReplaceAll); if not bCase then Include(Flags, rfIgnoreCase); S := StringReplace(S, SearchString, replaceString, 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; Header: TWcxHeader; function CheckHeader: Boolean; var NameLength: Integer; DirectoryName: String; begin with FSearchTemplate do begin if IsFindText then begin // Skip directories if (Header.FileAttr and faFolder) <> 0 then Exit(False); // Some plugins end directories with path delimiter. // And not set directory attribute. Process this case. NameLength := Length(Header.FileName); if (NameLength > 0) and (Header.FileName[NameLength] = PathDelim) then Exit(False); end; DirectoryName:= ExtractFileName(ExtractFileDir(Header.FileName)); if not CheckDirectoryName(DirectoryName) then Exit(False); if not CheckFileName(ExtractFileName(Header.FileName)) then Exit(False); if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result := CheckFileDateTime(FFileChecks, WcxFileTimeToDateTime(Header.FileTime)); if (IsFileSizeFrom or IsFileSizeTo) and Result then Result := CheckFileSize(FFileChecks, Header.UnpSize); if Result then Result := CheckFileAttributes(FFileChecks, Header.FileAttr); end; end; var Flags: Integer; Result: Boolean; Operation: Integer; TargetPath: String; ArcHandle: TArcHandle; TargetFileName: String; WcxModule: TWcxModule = nil; 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; 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 TargetPath:= GetTempName(GetTempFolder); if not mbCreateDir(TargetPath) then Exit; WcxModule.WcxSetChangeVolProc(ArcHandle); WcxModule.WcxSetProcessDataProc(ArcHandle, @ProcessDataProcAG, @ProcessDataProcWG); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = 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(Header.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, FindText, CaseSensitive, TextRegExp); if NotContainingText then Result:= not Result; mbDeleteFile(TargetFileName); end; end; end; if Result then begin FFoundFile := FileName + ReversePathDelim + Header.FileName; Synchronize(@AddArchiveFile); Inc(FFilesFound); end; FreeAndNil(Header); end; 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 := UTF8Decode(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.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(Folder + PathDelim + sr.Name, FindText, CaseSensitive, TextRegExp); if (Result and IsReplaceText) then FileReplaceString(Folder + PathDelim + sr.Name, FindText, ReplaceText, 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 + ' (' + Folder + PathDelim + sr.Name + ')', lmtError); end; end; end; end; if Result and ContentPlugin then begin Result:= CheckPlugin(FSearchTemplate, Folder + PathDelim + sr.Name); 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 FFoundFile := IncludeTrailingBackslash(sNewDir) + sr.Name; Synchronize(@AddFile); Inc(FFilesFound); 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-0.9.8/src/ufindmmap.pas0000644000175000001440000002632612756114647016030 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 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; {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 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-0.9.8/src/ufindfiles.pas0000644000175000001440000004300713603447456016172 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-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 uFindFiles; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uFile; type 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; { 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 FileName: String) : Boolean; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String) : Boolean; function CheckDirectoryNameRelative(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, uRegExprW; 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 FileName: String): Boolean; var I: Integer; Work: Boolean; Value: Variant; Module: TWdxModule; begin 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 Continue; 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); 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 Result := Result and Work else Result := Result or Work; end; end; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String): Boolean; begin with FileChecks do begin Result := not MatchesMaskList(DirectoryName, ExcludeDirectories); end; end; function CheckDirectoryNameRelative(const FileChecks: TFindFileChecks; const FullPath, BasePath: String): Boolean; begin Result := True; with FileChecks do begin // Check if FullPath is a path relative to BasePath. if GetPathType(ExcludeDirectories) = ptRelative then begin Result := ExcludeDirectories <> ExtractDirLevel(BasePath, FullPath); 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.FullPath); end; end; end; end. doublecmd-0.9.8/src/ufindbyrmr.pas0000644000175000001440000001054313146332337016213 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: Integer; const sFindData: String; RecodeTable: TRecodeTable): Integer; {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):Integer; {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: Integer; const sFindData: String; RecodeTable: TRecodeTable):Integer; 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:Integer; 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):Integer; 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-0.9.8/src/ufileviewnotebook.pas0000644000175000001440000005176513573157206017611 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains TFileViewPage and TFileViewNotebook objects. 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 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; 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; {$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} OnDragOver := @DragOverEvent; OnDragDrop := @DragDropEvent; 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; procedure TFileViewNotebook.DestroyAllPages; var tPage:TFileViewPage; begin while PageCount > 0 do begin tPage:=Page[0]; if tPage<>nil then FreeAndNil(tPage); end; 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; 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} OnDblClick(Self); FStartDrag:= False; FLastMouseDownTime:= 0; FLastMouseDownPageIndex:= -1; end; end; end; procedure TFileViewNotebook.MouseMove(Shift: TShiftState; X, Y: Integer); var ATabIndex: Integer; begin inherited; if ShowHint then begin ATabIndex := IndexOfPageAt(Classes.Point(X, Y)); if (ATabIndex >= 0) and (ATabIndex <> FHintPageIndex) then begin FHintPageIndex := ATabIndex; Application.CancelHint; if (ATabIndex <> PageIndex) and (Length(Page[ATabIndex].LockPath) <> 0) then Hint := Page[ATabIndex].LockPath else Hint := View[ATabIndex].CurrentPath; end; end; if FStartDrag then begin FStartDrag := False; BeginDrag(False); end; end; procedure TFileViewNotebook.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; FStartDrag := False; end; procedure TFileViewNotebook.DragOverEvent(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var ATabIndex: Integer; begin if (Source is TFileViewNotebook) and (Sender is TFileViewNotebook) then begin ATabIndex := IndexOfPageAt(Classes.Point(X, Y)); Accept := (Source <> Sender) or ((ATabIndex <> -1) and (ATabIndex <> FDraggedPageIndex)); end else Accept := False; end; {$IFDEF MSWINDOWS} 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.DragDropEvent(Sender, Source: TObject; X, Y: Integer); var SourceNotebook: TFileViewNotebook; ATabIndex: Integer; ANewPage, DraggedPage: TFileViewPage; begin if (Source is TFileViewNotebook) and (Sender is TFileViewNotebook) then begin SourceNotebook := TFileViewNotebook(Source); ATabIndex := IndexOfPageAt(Classes.Point(X, Y)); if Source = Sender 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; end; procedure TFileViewNotebook.DoChange; begin inherited DoChange; ActivePage.DoActivate; end; function TFileViewNotebook.GetPageClass: TCustomPageClass; begin Result:= TFileViewPage; end; end. doublecmd-0.9.8/src/ufilesorting.pas0000644000175000001440000010575413163755010016551 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, gSortCaseSensitivity); end; function ICompareByName(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Name, item2.Name, gSortNatural, 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, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; end; function ICompareByExt(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Extension, item2.Extension, gSortNatural, 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, 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; // 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-0.9.8/src/ufileproperty.pas0000644000175000001440000006504713603447456016763 0ustar alexxusersunit uFileProperty; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; type TFilePropertyType = ( fpName = 0, fpSize = 1, // = fpUncompressedSize fpCompressedSize = 2, fpAttributes = 3, fpModificationTime = 4, fpCreationTime = 5, fpLastAccessTime = 6, fpChangeTime = 7, fpLink = 8, fpOwner = 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 Format(Formatter: IFilePropertyFormatter): String; override; property Value: String read FName write SetName; end; TFileSizeProperty = class(TFileProperty) private FSize: Int64; 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; // Retrieve possible values for the property. function GetMinimumValue: Int64; function GetMaximumValue: Int64; function Format(Formatter: IFilePropertyFormatter): String; override; 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 = class(TFileProperty) private FIsValid: Boolean; FDateTime: TDateTime; public constructor Create; override; constructor Create(DateTime: TDateTime); virtual; overload; procedure CloneTo(FileProperty: TFileProperty); 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; class function GetID: TFilePropertyType; override; function IsNativeAttributes: Boolean; // Is the file a directory. function IsDirectory: 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; // 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 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 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 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 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 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, 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.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; 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; end; end; end; class function TFileSizeProperty.GetDescription: String; begin Result := rsSizeDescription; end; class function TFileSizeProperty.GetID: TFilePropertyType; begin Result := fpSize; 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(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.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.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.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.IsSysFile: boolean; begin Result := ((FAttributes and FILE_ATTRIBUTE_SYSTEM) <> 0) or ((FAttributes and FILE_ATTRIBUTE_HIDDEN) <> 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.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.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.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.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.Format(Formatter: IFilePropertyFormatter): String; begin if not VarIsBool(FValue) then Result := FValue else if FValue then result := rsSimpleWordTrue else result := rsSimpleWordFalse; end; end. doublecmd-0.9.8/src/ufileprocs.pas0000644000175000001440000001774113266444345016222 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 Read string from a text file into variable and goto next line @param(hFile Handle of file) @param(S Stores the result string) } function FileReadLn(hFile: THandle; out S: String): Boolean; {en Write string to a text file and append newline @param(hFile Handle of file) @param(S String for writing) } procedure FileWriteLn(hFile: Integer; S: String); function GetNextCopyName(FileName: String; IsDirectory: Boolean): String; function mbReadFileToString(const FileName: String): String; implementation uses LCLProc, Dialogs, SysUtils, uLng, uGlobs, DCClassesUtf8, DCStrUtils, DCOSUtils, uFileSystemFileSource, uFile, uFileSystemDeleteOperation, uFileSourceOperationOptions; 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 FreeThenNil(aFiles); FreeThenNil(DeleteOperation); end; end; function FileReadLn(hFile: THandle; out S: String): Boolean; const cBufSize = 4096; var Buf: array[1..cBufSize] of Char; iNumRead, iCounter, iBufPos: Integer; bEOLFound: Boolean; iFilePos, iFileSize: Int64; begin S:=''; Result:= False; // get current position iFilePos:= FileSeek(hFile, 0, soFromCurrent); // get file size iFileSize:= FileSeek(hFile, 0, soFromEnd); // restore position FileSeek(hFile, iFilePos, soFromBeginning); bEOLFound:= False; while (iFilePos < iFileSize) and not bEOLFound do begin iNumRead:= FileRead(hFile, Buf, SizeOf(Buf)); for iCounter:= 1 to iNumRead do begin if Buf[iCounter] in [#13, #10] then begin bEOLFound:=True; iBufPos:=iCounter+1; if ((iBufPos) <= iNumRead) and (Buf[iBufPos] in [#13, #10]) then Inc(iBufPos); Buf[iCounter]:= #0; S:= StrPas(@Buf); FileSeek(hFile, iFilePos+iBufPos-1, soFromBeginning); Exit(True); end; end; // for if (not bEOLFound) then begin if (iNumRead < cBufSize) then Buf[iNumRead+1]:= #0; S:= StrPas(@Buf); end; Inc(iFilePos, iNumRead); end; // while end; procedure FileWriteLn(hFile: Integer; S: String); begin S:= S + LineEnding; FileWrite(hFile, PChar(S)[0], 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: Result := sFilePath + Format(rsCopyNameTemplate, [CopyNumber, sFileName]); 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 mbReadFileToString(const FileName: String): String; var Text: String; ASize: Int64; Handle: THandle; begin Result:= EmptyStr; ASize:= mbFileSize(FileName); SetLength(Text, ASize); if Length(Text) = 0 then Exit; Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); if Handle <> feInvalidHandle then begin if FileRead(Handle, Text[1], ASize) = ASize then Result:= Text; FileClose(Handle); end; end; end. doublecmd-0.9.8/src/ufilepanelselect.pas0000644000175000001440000000023111747211345017347 0ustar alexxusersunit uFilePanelSelect; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFilePanelSelect = (fpLeft, fpRight); implementation end. doublecmd-0.9.8/src/ufilefunctions.pas0000644000175000001440000004537013434541344017075 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit 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, 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(MenuItem: TMenuItem; 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, 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; 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 := '[' + AFile.Name + ']' 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 Length(AParam) = 0 then Result := AFile.Properties[fpSize].Format(DefaultFilePropertyFormatter) else 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; 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 Result := AFile.Properties[fpModificationTime].Format( DefaultFilePropertyFormatter); fsfCreationTime: if fpCreationTime in AFile.SupportedProperties then Result := AFile.Properties[fpCreationTime].Format( DefaultFilePropertyFormatter); fsfLastAccessTime: if fpLastAccessTime in AFile.SupportedProperties then Result := AFile.Properties[fpLastAccessTime].Format( DefaultFilePropertyFormatter); fsfChangeTime: if fpChangeTime in AFile.SupportedProperties then Result := AFile.Properties[fpChangeTime].Format( DefaultFilePropertyFormatter); 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 := '[' + AFile.NameNoExt + ']' 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 Result:= GetVariantFileProperty(FuncS, AFile, AFileSource) 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: Integer; sUnits: String; 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:= Module.FieldList[J]; MenuItem.Items[MenuItem.Count - 1].Add(MI); if WdxField.FType <> ft_multiplechoice then begin sUnits:= WdxField.FUnits; while sUnits <> EmptyStr do begin MI2:=TMenuItem.Create(MenuItem); MI2.Tag:= 2; MI2.Caption:= Copy2SymbDel(sUnits, '|'); MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); end; end; if MI.Count = 0 then MI.OnClick:= OnMenuItemClick; end; end; end; procedure FillContentFieldMenu(MenuItem: TMenuItem; OnMenuItemClick: TNotifyEvent; const FileSystem: String); var I, J: Integer; MI, MI2: TMenuItem; Module: TWDXModule; FileSize: TDynamicStringArray; begin MenuItem.Clear; // DC commands MI:= TMenuItem.Create(MenuItem); MI.Caption:= 'DC'; MenuItem.Add(MI); for I:= 0 to FileFunctionsStr.Count - 1 do begin MI:= TMenuItem.Create(MenuItem); MI.Tag:= 0; MI.Hint:= FileFunctionsStr.Names[I]; MI.Caption:= FileFunctionsStr.ValueFromIndex[I] + ' (' + MI.Hint + ')'; MenuItem.Items[0].Add(MI); // Special case for attributes if TFileFunctionStrings[fsfAttr] = FileFunctionsStr.Names[I] then begin // String attributes MI2:= TMenuItem.Create(MenuItem); MI2.Tag:= 3; MI2.Hint:= ''; MI2.Caption:= rsMnuContentDefault; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); // Octal attributes MI2:= TMenuItem.Create(MenuItem); 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(MenuItem); 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(MenuItem); 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(MenuItem); MI.Caption:= rsOptionsEditorPlugins; MenuItem.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(MenuItem, 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-0.9.8/src/ufile.pas0000644000175000001440000007100513325114313015125 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; //= 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.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 {$IFDEF MSWINDOWS} if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(Properties[fpAttributes]).IsSysFile else Result := 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 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-0.9.8/src/ufavoritetabs.pas0000644000175000001440000015533413372424751016723 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; function GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName: 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; 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-0.9.8/src/uexts.pas0000644000175000001440000005404413401360470015177 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-0.9.8/src/uexifwdx.pas0000644000175000001440000001150313072422754015673 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple exif-wdx plugin. 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, 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; function GetADetectStr: 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; function TExifWdx.GetADetectStr: String; begin Result:= CallContentGetDetectString; end; constructor TExifWdx.Create; begin inherited Create; FExif:= TExifReader.Create; end; destructor TExifWdx.Destroy; begin FExif.Free; inherited Destroy; end; procedure TExifWdx.CallContentGetSupportedField; begin AddField(rsMake, ft_string); AddField(rsModel, ft_string); AddField(rsImageWidth, ft_numeric_32); AddField(rsImageHeight, ft_numeric_32); AddField(rsOrientation, ft_numeric_32); AddField(rsDateTimeOriginal, ft_string); 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 Length(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: Result:= FExif.DateTimeOriginal; end; finally LeaveCriticalSection(FMutex); end; end; function TExifWdx.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin Result:= 0; end; end. doublecmd-0.9.8/src/uexifreader.pas0000644000175000001440000001643413034407560016337 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple exchangeable image file format reader 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 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: String; private procedure Reset; function ReadString(Offset, Count: Int32): String; 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: String read FDateTimeOriginal; end; resourcestring rsMake = 'Manufacturer'; rsModel = 'Camera model'; rsImageWidth = 'Width'; rsImageHeight = 'Height'; rsOrientation = 'Orientation'; rsDateTimeOriginal = 'Date taken'; implementation uses Math, DCClassesUtf8; { TExifReader } procedure TExifReader.Reset; begin Clear; FImageWidth:= 0; FImageHeight:= 0; FOrientation:= 0; FMake:= EmptyStr; FModel:= EmptyStr; FDateTimeOriginal:= EmptyStr; end; function TExifReader.ReadString(Offset, Count: Int32): String; var AOffset: Int64; begin AOffset:= Self.Seek(0, soCurrent); Self.Seek(Offset, soBeginning); SetLength(Result, Count); Self.ReadBuffer(Result[1], Count); Result:= PAnsiChar(Result); Self.Seek(AOffset, soBeginning); 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 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 + FOffset, ATag.Count); end; $0110: // Shows model number of digicam begin FModel:= ReadString(ATag.Offset + FOffset, 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:= ReadString(ATag.Offset + FOffset, 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-0.9.8/src/uexceptions.pas0000644000175000001440000001412713002464432016373 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 FindInvalidUTF8Character(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-0.9.8/src/udsxmodule.pas0000644000175000001440000002440313367401147016224 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-0.9.8/src/udriveslist.pas0000644000175000001440000003762413377666635016441 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} {$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); {$IFNDEF ForceVirtualKeysShortcuts} procedure KeyPressEvent(Sender: TObject; var Key: Char); 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; {$IFNDEF ForceVirtualKeysShortcuts} OnKeyPress := @KeyPressEvent; 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} else if (CheckShortcut(TUTF8Char(Char(Key)))) then Key := 0; {$ENDIF} end; end; {$IFNDEF ForceVirtualKeysShortcuts} procedure TDrivesListPopup.KeyPressEvent(Sender: TObject; var Key: Char); begin if CheckShortcut(TUTF8Char(Key)) then Key := #0; end; 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 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 ForceVirtualKeysShortcuts} 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]) and IsAvailable(Drive, False) and GetDiskFreeSpace(Drive^.Path, FreeSize, TotalSize) then begin Cells[4, RowNr] := Format('%s/%s', [cnvFormatFileSize(FreeSize, uoscHeaderFooter), cnvFormatFileSize(TotalSize, uoscHeaderFooter)]) 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-0.9.8/src/udrive.pas0000644000175000001440000001042612674324561015335 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-0.9.8/src/udisplayfile.pas0000644000175000001440000001522012070253712016513 0ustar alexxusersunit uDisplayFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, uFile; type TDisplayItemPtr = Pointer; {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-0.9.8/src/udiffonp.pas0000644000175000001440000006710112475401266015650 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-0.9.8/src/udiffond.pas0000644000175000001440000006074312475401266015641 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-0.9.8/src/udetectstr.pas0000644000175000001440000002431113163532315016213 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Detect string parser. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } 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 public function TestFileResult(const aFile: TFile): boolean; overload; function TestFileResult(const aFileName: String): boolean; overload; private input,output,stack:array of tmathchar; fmathstring:string; fforce:boolean; function getresult(const aFile: TFile):boolean; function calculate(aFile: TFile; operand1,operand2,Aoperator:Tmathchar):string; function getoperator(c:String):TMathOperatortype; function getoperand(mid:integer;var len:integer):string; procedure processstring; procedure convertinfixtopostfix; function isdigit(c:String):boolean; function isoperator(c:String):boolean; function getprecedence(mop:TMathOperatortype):integer; function BooleanToStr(x:boolean):string; function StrToBoolean(s:string):boolean; public destructor Destroy; override; published property DetectStr:string read fmathstring write fmathstring; property IsForce:boolean read fforce write fforce; end; implementation uses uDebug, uFileProperty, uFileSystemFileSource; function TParserControl.calculate(aFile: TFile; operand1,operand2,Aoperator:Tmathchar):string; var tmp, data1: 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; //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 tmp:= IntToStr(aFile.Size); case Aoperator.op of moequ: Result:= BooleanToStr(strtoint(tmp)=strtoint(operand2.data)); moneq: Result:= BooleanToStr(strtoint(tmp)<>strtoint(operand2.data)); moles: Result:= BooleanToStr(strtoint(tmp)strtoint(operand2.data)); end; end; { case Aoperator.op of moneq: ; moequ: ; moles: ; momor: ; moor: ; moand: ; monot: ; end;} end; function TParserControl.TestFileResult(const aFile: TFile):boolean; begin Result:= getresult(aFile); end; function TParserControl.TestFileResult(const aFileName: String): boolean; var aFile: TFile; begin aFile:= TFileSystemFileSource.CreateFileFromFile(aFileName); try DCDebug('aFile.Extension = ' + aFile.Extension); Result:= getresult(aFile); finally aFile.Free; end; end; function TParserControl.getresult(const aFile: TFile):boolean; var i:integer; tmp1,tmp2,tmp3:tmathchar; begin if fmathstring='' then begin Result:=true; exit; end; convertinfixtopostfix; setlength(stack,0); for i:=0 to length(output)-1 do begin if output[i].mathtype=mtoperand then begin setlength(stack,length(stack)+1); stack[length(stack)-1]:=output[i]; end else if output[i].mathtype=mtoperator then begin tmp1:=stack[length(stack)-1]; tmp2:=stack[length(stack)-2]; setlength(stack,length(stack)-2); tmp3.mathtype:=mtoperand; tmp3.data:=calculate(aFile, tmp2,tmp1,output[i]); setlength(stack,length(stack)+1); stack[length(stack)-1]:=tmp3; end; end; result:=strToBoolean(stack[0].data); setlength(stack,0); setlength(input,0); setlength(output,0); end; function TParserControl.getoperator(c:String):TMathOperatortype; begin result:=monone; if c='<' then result:=moles else if c='>' then result:=momor else if c='&' then result:=moand else if c='=' then result:=moequ else if c='#' then result:=moneq else if c='|' then result:=moor else if c='!' then result:=monot; end; function TParserControl.getoperand(mid:integer;var len:integer):string; var i,j:integer; begin Result := ''; j:=1; for i:=mid to length(fmathstring)-1 do begin if isdigit(fmathstring[i]) then begin if j<=20 then Result:=Result+fmathstring[i]; j:=j+1; end else break; end; len:=length(Result); end; procedure TParserControl.processstring; var i:integer; numlen:integer; begin //--------------------- while pos('!=',fmathstring)>0 do begin i:=pos('!=',fmathstring); delete(fmathstring,i,2); insert('#',fmathstring,i); end; //--------------------- fmathstring:= StringReplace(fmathstring, 'FORCE', BooleanToStr(fforce), [rfReplaceAll, rfIgnoreCase]); //--------------------- fmathstring:= StringReplace(fmathstring, 'MULTIMEDIA', 'true', [rfReplaceAll, rfIgnoreCase]); //--------------------- numlen:=1; while numlen < length(fmathstring) do 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); //--------------------- i:=0; numlen:=0; setlength(output,0); setlength(input,0); setlength(stack,0); fmathstring:='('+fmathstring+')'; setlength(input,length(fmathstring)); while i<=length(fmathstring)-1 do begin if fmathstring[i+1]='(' then begin input[i].mathtype:=mtlbracket; i:=i+1; end else if fmathstring[i+1]=')' then begin input[i].mathtype:=mtrbracket; i:=i+1; end else if isoperator(fmathstring[i+1]) then begin input[i].mathtype:=mtoperator; input[i].op:=getoperator(fmathstring[i+1]); i:=i+1; end else if isdigit(fmathstring[i+1]) then begin input[i].mathtype:=mtoperand; input[i].data:=getoperand(i+1,numlen); i:=i+numlen; end else {if fmathstring[i+1]=' ' then} inc(i); end; end; function TParserControl.isoperator(c:String):boolean; begin result:=false; if (c='=') or (c='#') or (c='!') or (c='&') or (c='<') or (c='>') or (c='|') then result:=true; end; function TParserControl.isdigit(c:String):boolean; begin result:=false; if pos(c,'=#!&<>|() ')<=0 then result:=true; end; function TParserControl.getprecedence(mop:TMathOperatortype):integer; begin result:=-1; case mop of moor:result:=1; moand:result:=1; moequ:result:=2; moneq:result:=2; moles:result:=2; momor:result:=2; monot:result:=2; end; end; function TParserControl.BooleanToStr(x: boolean): string; begin if x then Result:='true' else Result:='false'; end; function TParserControl.StrToBoolean(s: string): boolean; begin if s='true' then Result:=true else Result:=false; end; destructor TParserControl.Destroy; begin inherited Destroy; end; procedure TParserControl.convertinfixtopostfix; var i,j,prec:integer; begin processstring; for i:=0 to length(input)-1 do begin if input[i].mathtype=mtoperand then begin setlength(output,length(output)+1); output[length(output)-1]:=input[i]; end else if input[i].mathtype=mtlbracket then begin setlength(stack,length(stack)+1); stack[length(stack)-1]:=input[i]; end else if input[i].mathtype=mtoperator then begin prec:=getprecedence(input[i].op); j:=length(stack)-1; if j>=0 then begin while (j>=0) and (getprecedence(stack[j].op)>=prec) do begin setlength(output,length(output)+1); output[length(output)-1]:=stack[j]; setlength(stack,length(stack)-1); j:=j-1; end; setlength(stack,length(stack)+1); stack[length(stack)-1]:=input[i]; end; end else if input[i].mathtype=mtrbracket then begin j:=length(stack)-1; if j>=0 then begin while (j>=0) and (stack[j].mathtype<>mtlbracket) do begin setlength(output,length(output)+1); output[length(output)-1]:=stack[j]; setlength(stack,length(stack)-1); j:=j-1; end; if j>=0 then setlength(stack,length(stack)-1); end; end; end; end; end. doublecmd-0.9.8/src/udescr.pas0000644000175000001440000003310612756114647015327 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-0.9.8/src/udefaultfilepropertyformatter.pas0000644000175000001440000001063213121450422022220 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-0.9.8/src/udebug.pas0000644000175000001440000000672513441176555015322 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({$if lcl_fullversion < 2010000}const{$endif} s: string); override; procedure DoDebugLn({$if lcl_fullversion < 2010000}const{$endif} s: string); override; public constructor Create; destructor Destroy; override; end; function CreateDCLogger: TRefCountedObject; begin Result := TDCLogger.Create; TDCLogger(Result).Assign(GetExistingDebugLogger); end; { TDCLogger } procedure TDCLogger.DoDbgOut({$if lcl_fullversion < 2010000}const{$endif} s: string); begin DebugLnLock.Acquire; try inherited DoDbgOut(s); finally DebugLnLock.Release; end; end; procedure TDCLogger.DoDebugLn({$if lcl_fullversion < 2010000}const{$endif} s: string); 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-0.9.8/src/udcutils.pas0000644000175000001440000010572613557263023015677 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Several useful functions Copyright (C) 2006-2018 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, {$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, uoscHeaderFooter, uoscOperation, uoscNoUnit); 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 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 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(iSize: Int64; FSF: TFileSizeFormat; Number: Integer): String; function cnvFormatFileSize(iSize: Int64; UsageOfSizeConversion: TUsageOfSizeConversion): String; function cnvFormatFileSize(iSize: Int64): String; inline; {en Minimize file path @param(PathToMince File path) @param(Canvas Output canvas) @param(MaxLen Max length of path in pixels) @returns(Minimized file path) } function MinimizeFilePath(const PathToMince: String; Canvas: TCanvas; MaxLen: 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; CaseSensitivity: TCaseSensitivity): PtrInt; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox); {en Compares two strings taking into account the numbers. Strings must have tailing zeros (#0). } function StrFloatCmpW(str1, str2: PWideChar; CaseSensitivity: TCaseSensitivity): PtrInt; function EstimateRemainingTime(StartValue, CurrentValue, EndValue: Int64; StartTime: TDateTime; CurrentTime: TDateTime; out SpeedPerSecond: Int64): TDateTime; 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; 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; implementation uses uLng, LCLProc, LCLType, uMasks, FileUtil, StrUtils, uOSUtils, uGlobs, uGlobsPaths, DCStrUtils, DCOSUtils, LazUTF8; 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 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; begin if (Pos('://', sFileName) > 0) then Result:= sFileName else begin Result:= NormalizePathDelimiters(sFileName); Result:= ReplaceEnvVars(Result); if Pos(PathDelim, Result) <> 0 then Result:= ExpandFileName(Result); end; end; function cnvFormatFileSize(iSize: int64; FSF: TFileSizeFormat; 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(iSize: Int64; 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); uoscHeaderFooter: Result := cnvFormatFileSize(iSize, gHeaderFooterSizeFormat, gHeaderFooterDigits); uoscNoUnit: Result := IntToStr(iSize); end; end; function cnvFormatFileSize(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; MaxLen: Integer): String; {=========================================================} // "C:\Program Files\Delphi\DDropTargetDemo\main.pas" // "C:\Program Files\..\main.pas" Var sl: TStringList; sHelp, sFile, sFirst: String; iPos: Integer; Begin if MaxLen <= 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 := ''; MaxLen := MaxLen - Canvas.TextWidth('XXX'); if (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxLen) then begin While (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxLen) 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) > MaxLen + Canvas.TextWidth('XXX') then begin while (Length(Result) > 0) and (Canvas.TextWidth(Result) > MaxLen) do begin Delete(Result, Length(Result), 1); end; Result := Copy(Result, 1, Length(Result) - 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; CaseSensitivity: TCaseSensitivity): PtrInt; inline; begin if Natural then Result:= StrFloatCmpW(PWideChar(UTF8Decode(s1)), PWideChar(UTF8Decode(s2)), CaseSensitivity) else begin case CaseSensitivity of cstNotSensitive: Result := WideCompareText(UTF8Decode(s1), UTF8Decode(s2)); cstLocale: Result := WideCompareStr(UTF8Decode(s1), UTF8Decode(s2)); cstCharValue: Result := SysUtils.CompareStr(S1, S2); else raise Exception.Create('Invalid CaseSensitivity parameter'); end; end; end; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox); 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; end; end; function WideStrComp(const Str1, Str2 : WideString): 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 StrFloatCmpW(str1, str2: PWideChar; CaseSensitivity: TCaseSensitivity): PtrInt; var is_digit1, is_digit2: boolean; string_result: ptrint = 0; number_result: ptrint = 0; number1_size: ptrint = 0; number2_size: ptrint = 0; str_cmp: function(const s1, s2: WideString): PtrInt; function is_digit(c: widechar): boolean; inline; begin result:= (c in ['0'..'9']); end; function is_point(c: widechar): boolean; inline; begin result:= (c in [',', '.']); end; begin // Set up compare function case CaseSensitivity of cstNotSensitive: str_cmp:= @WideCompareText; cstLocale: str_cmp:= @WideCompareStr; cstCharValue: str_cmp:= @WideStrComp; else raise Exception.Create('Invalid CaseSensitivity parameter'); end; while (true) do begin // compare string part while (true) do begin if str1^ = #0 then begin if str2^ <> #0 then exit(-1) else exit(0); end; if str2^ = #0 then begin if str1^ <> #0 then exit(+1) else exit(0); end; is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (is_digit1 and is_digit2) then break; string_result:= str_cmp(str1^, str2^); if (string_result <> 0) then exit(string_result); inc(str1); inc(str2); end; // skip leading zeroes for number while (str1^ = '0') do inc(str1); while (str2^ = '0') do inc(str2); // compare number before decimal point while (true) do begin is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (not is_digit1 and not is_digit2) then break; if ((number_result = 0) and is_digit1 and is_digit2) then begin if (str1^ > str2^) then number_result := +1 else if (str1^ < str2^) then number_result := -1 else number_result := 0; end; if (is_digit1) then begin inc(str1); inc(number1_size); end; if (is_digit2) then begin inc(str2); inc(number2_size); end; end; if (number1_size <> number2_size) then exit(number1_size - number2_size); if (number_result <> 0) then exit(number_result); // if there is a decimal point, compare number after one if (is_point(str1^) or is_point(str2^)) then begin if (is_point(str1^)) then inc(str1); if (is_point(str2^)) then inc(str2); while (true) do begin is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (not is_digit1 and not is_digit2) then break; if (is_digit1 and not is_digit2) then begin while (str1^ = '0') do inc(str1); if (is_digit(str1^)) then exit(+1) else break; end; if (is_digit2 and not is_digit1) then begin while (str2^ = '0') do inc(str2); if (is_digit(str2^)) then exit(-1) else break; end; if (str1^ > str2^) then exit(+1) else if (str1^ < str2^) then exit(-1); inc(str1); inc(str2); end; 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 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; 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; end. doublecmd-0.9.8/src/udctiffimage.pas0000644000175000001440000000112213104342611016440 0ustar alexxusersunit uDCTiffImage; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, FPImage; type { TTiffImage } TTiffImage = class(Graphics.TTiffImage) protected class function GetReaderClass: TFPCustomImageReaderClass; override; end; implementation uses uFPReadTiff; { TTiffImage } class function TTiffImage.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TFPReaderTiff; end; initialization TPicture.UnregisterGraphicClass(Graphics.TTiffImage); TPicture.RegisterFileFormat(TTiffImage.GetFileExtensions, 'Tagged Image File Format', TTiffImage); end. doublecmd-0.9.8/src/udcreadpsd.pas0000644000175000001440000000364212561717131016151 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-0.9.8/src/ucryptproc.pas0000644000175000001440000003356013325702523016245 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-0.9.8/src/uconvencoding.pas0000644000175000001440000003765613347426742016720 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Encoding conversion and related stuff Copyright (C) 2011-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 uConvEncoding; {$mode delphi} interface uses Classes; const EncodingOem = 'oem'; EncodingDefault = 'default'; 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, nsCore, nsUniversalDetector, uLng; var Lang, FallbackLang: AnsiString; 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:= 'KOI-8'; 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:= 'KOI-8'; else begin Result:= CharsetInfo.Name; // When unknown encoding then use system encoding if SupportedEncodings.IndexOf(Result) < 0 then begin if (FallbackLang = 'be') or (FallbackLang = 'bg') or (FallbackLang = 'ky') or (FallbackLang = 'mk') or (FallbackLang = 'mn') or (FallbackLang = 'ru') or (FallbackLang = '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)); 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; begin L:= Length(S); if L = 0 then begin Result:= GetDefaultTextEncoding; Exit; end; // Try detect Unicode case DetectEncoding(S, meOEM, False) of meUTF8: Exit(EncodingUTF8); meUTF8BOM: Exit(EncodingUTF8BOM); meUTF16LE: Exit(EncodingUCS2LE); meUTF16BE: Exit(EncodingUCS2BE); 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; // Try to detect encoding Result:= MyDetectCodePageType(S); end; function SingleByteEncoding(TextEncoding: String): Boolean; begin TextEncoding := NormalizeEncoding(TextEncoding); if TextEncoding = EncodingDefault then TextEncoding := GetDefaultTextEncoding; Result := (TextEncoding <> EncodingUTF8) and (TextEncoding <> EncodingUTF8BOM) and (TextEncoding <> EncodingUCS2LE) and (TextEncoding <> EncodingUCS2BE); 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:= UTF8CharacterStrictLength(@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 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 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; GetLanguageIDs(Lang, FallbackLang); SupportedEncodings:= TStringList.Create; GetSupportedEncodings(SupportedEncodings); finalization FreeAndNil(SupportedEncodings); end. doublecmd-0.9.8/src/uconnectionmanager.pas0000644000175000001440000001567713436740403017725 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^.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 // 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)); Application.QueueAsyncCall(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-0.9.8/src/ucolumns.pas0000644000175000001440000012011713163730360015673 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } unit uColumns; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, Graphics, uFile, uFileSource, DCXmlConfig, DCBasicTypes, uFileFunctions; 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 FFuncString: 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; destructor Destroy; override; //------------------------------------------------------ property FuncString: String read FFuncString write SetFuncString; end; { TPanelColumnsClass } TPanelColumnsClass = class //------------------------------------------------------ private FList: TList; 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; 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 Clear; procedure AddDefaultColumns; procedure AddDefaultEverything; //--------------------- procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; //--------------------- procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; //--------------------- function GetSignature(Seed:dword=$000000):dword; property ColumnsCount: Integer read GetCount; property Count: Integer read GetCount; property CustomView: Boolean read FCustomView write FCustomView; property CurrentColumnsSetName: String read fSetName write fSetName; property SetName: String read fSetName write fSetName; property Name: String read fSetName write fSetName; 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 fSet: TStringList; function GetCount: Integer; public constructor Create; destructor Destroy; override; //--------------------- procedure Clear; 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; //--------------------- property Items: TStringList read fSet; property Count: Integer read GetCount; end; function StrToAlign(str: String): TAlignment; implementation uses LCLType, Forms, crc, DCStrUtils, uDebug, uLng, uGlobs; var 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; { 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 := gForeColor; end; function TPanelColumnsClass.GetColumnBackground(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background else Result := gBackColor; end; function TPanelColumnsClass.GetColumnBackground2(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background2 else Result := gBackColor2; end; function TPanelColumnsClass.GetColumnMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).MarkColor else Result := gMarkColor; end; function TPanelColumnsClass.GetColumnCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorColor else Result := gCursorColor; end; function TPanelColumnsClass.GetColumnCursorText(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorText else Result := gCursorText; end; function TPanelColumnsClass.GetColumnInactiveCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveCursorColor else Result := gInactiveCursorColor; end; function TPanelColumnsClass.GetColumnInactiveMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveMarkColor else Result := gInactiveMarkColor; 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 := GetColumnMarkColor(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; 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 := gCursorBorderColor; 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; 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.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.Create; 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; AColumn.TextColor := gForeColor; AColumn.Background := gBackColor; AColumn.Background2 := gBackColor2; AColumn.MarkColor := gMarkColor; AColumn.CursorColor := gCursorColor; AColumn.CursorText := gCursorText; AColumn.InactiveCursorColor := gInactiveCursorColor; AColumn.InactiveMarkColor := gInactiveMarkColor; 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 SetName := '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; FCustomView := False; FCursorBorder := gUseCursorBorder; FCursorBorderColor := gCursorBorderColor; 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 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); FCursorBorderColor := TColor(AConfig.GetValue(ANode, 'CursorBorder/Color', gCursorBorderColor)); FUseFrameCursor := AConfig.GetAttr(ANode, 'UseFrameCursor', gUseFrameCursor); 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.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); AColumn.TextColor := TColor(AConfig.GetValue(SubNode, 'TextColor', gForeColor)); AColumn.Background := TColor(AConfig.GetValue(SubNode, 'Background', gBackColor)); AColumn.Background2 := TColor(AConfig.GetValue(SubNode, 'Background2', gBackColor2)); AColumn.MarkColor := TColor(AConfig.GetValue(SubNode, 'MarkColor', gMarkColor)); AColumn.CursorColor := TColor(AConfig.GetValue(SubNode, 'CursorColor', gCursorColor)); AColumn.CursorText := TColor(AConfig.GetValue(SubNode, 'CursorText', gCursorText)); AColumn.InactiveCursorColor := TColor(AConfig.GetValue(SubNode, 'InactiveCursorColor', gInactiveCursorColor)); AColumn.InactiveMarkColor := TColor(AConfig.GetValue(SubNode, 'InactiveMarkColor', gInactiveMarkColor)); 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, 'CustomView', FCustomView); AConfig.SetValue(ANode, 'FileSystem', FFileSystem); AConfig.SetValue(ANode, 'PixelsPerInch', Screen.PixelsPerInch); AConfig.SetAttr(ANode, 'CursorBorder/Enabled', FCursorBorder); if FCursorBorderColor <> clNone then AConfig.SetValue(ANode, 'CursorBorder/Color', FCursorBorderColor); 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, '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); if AColumn.TextColor <> clNone then AConfig.AddValue(SubNode, 'TextColor', AColumn.TextColor); if AColumn.Background <> clNone then AConfig.AddValue(SubNode, 'Background', AColumn.Background); if AColumn.Background2 <> clNone then AConfig.AddValue(SubNode, 'Background2', AColumn.Background2); if AColumn.MarkColor <> clNone then AConfig.AddValue(SubNode, 'MarkColor', AColumn.MarkColor); if AColumn.CursorColor <> clNone then AConfig.AddValue(SubNode, 'CursorColor', AColumn.CursorColor); if AColumn.CursorText <> clNone then AConfig.AddValue(SubNode, 'CursorText', AColumn.CursorText); if AColumn.InactiveCursorColor <> clNone then AConfig.AddValue(SubNode, 'InactiveCursorColor', AColumn.InactiveCursorColor); if AColumn.InactiveMarkColor <> clNone then AConfig.AddValue(SubNode, 'InactiveMarkColor', AColumn.InactiveMarkColor); AConfig.AddValue(SubNode, 'UseInvertedSelection', AColumn.UseInvertedSelection); AConfig.AddValue(SubNode, 'UseInactiveSelColor', AColumn.UseInactiveSelColor); AConfig.AddValue(SubNode, 'Overcolor', AColumn.Overcolor); end; end; procedure TPanelColumnsClass.Delete(const Index: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Free; FList.Delete(Index); 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; 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.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 FFuncString := NewValue; FillListFromString(FuncList, NewValue); end; { TPanelColumnsList } function TPanelColumnsList.GetCount: Integer; begin Result := fSet.Count; end; constructor TPanelColumnsList.Create; begin FSet := TStringList.Create; end; destructor TPanelColumnsList.Destroy; var i: Integer; begin if Assigned(FSet) then begin for i := 0 to Fset.Count - 1 do TPanelColumnsClass(Fset.Objects[i]).Free; FreeAndNil(FSet); end; inherited Destroy; end; procedure TPanelColumnsList.Clear; var i: Integer; begin for i := 0 to Fset.Count - 1 do TPanelColumnsClass(Fset.Objects[i]).Free; Fset.Clear; end; procedure TPanelColumnsList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName: String; AnObject: TPanelColumnsClass; begin Clear; 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; 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; function TPanelColumnsList.Add(Item: TPanelColumnsClass): Integer; begin Result := Fset.AddObject(Item.Name, Item); end; procedure TPanelColumnsList.Insert(AIndex: Integer; Item: TPanelColumnsClass); begin Fset.InsertObject(AIndex, Item.Name, 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 Fset.AddObject('Default', TPanelColumnsClass.Create); TPanelColumnsClass(Fset.Objects[0]).AddDefaultColumns; end; Result := TPanelColumnsClass(Fset.Objects[0]); end; end; function TPanelColumnsList.GetColumnSet(Setname: String): TPanelColumnsClass; begin //DCDebug('FsetCount='+inttostr(fset.Count)); if fset.IndexOf(Setname) > -1 then Result := TPanelColumnsClass(Fset.Objects[fset.IndexOf(Setname)]) else begin if fset.Count = 0 then begin Fset.AddObject('Default', TPanelColumnsClass.Create); TPanelColumnsClass(Fset.Objects[0]).AddDefaultColumns; end; Result := TPanelColumnsClass(Fset.Objects[0]); end; end; { TColPrm } constructor TColPrm.Create; begin Self.FontName := gFonts[dcfMain].Name; Self.FontSize := gFonts[dcfMain].Size; Self.FontStyle := gFonts[dcfMain].Style; Self.TextColor := gForeColor; Self.Background := gBackColor; Self.Background2 := gBackColor2; Self.MarkColor := gMarkColor; Self.CursorColor := gCursorColor; Self.CursorText := gCursorText; Self.InactiveCursorColor := gInactiveCursorColor; Self.InactiveMarkColor := gInactiveMarkColor; Self.UseInvertedSelection:= gUseInvertedSelection; Self.UseInactiveSelColor:= gUseInactiveSelColor; Self.Overcolor := gAllowOverColor; end; end. doublecmd-0.9.8/src/ucmdlineparams.pas0000644000175000001440000001002613445430215017026 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, uAdministrator, 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..6] of TOption; OptionUnknown: String; begin FillChar(Options, SizeOf(Options), #0); with Options[1] do begin Name:= 'no-console'; 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; with Options[6] do begin Name:= 'operation'; Has_arg:= 1; 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 {$IF DEFINED(NIGHTLY_BUILD)} HideConsoleWindow; {$ENDIF} 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; 6: begin ExecuteOperation(ParamStrU(TrimQuotes(OptArg))); 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-0.9.8/src/uclassesex.pas0000644000175000001440000001076313101312132016173 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, SynEdit; type { 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; { TSynEditHelper } TSynEditHelper = class helper for TSynEdit public procedure FixDefaultKeystrokes; end; implementation uses LCLType, Forms, Controls, LCLVersion, SynEditKeyCmds, DCStrUtils, DCClassesUtf8; { 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-0.9.8/src/ubinarydiffviewer.pas0000644000175000001440000001434513040461524017554 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Binary difference viewer and comparator Copyright (C) 2014 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 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; 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; 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; P1, P2: PAnsiChar; CurrentPos, LineStart: 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; Y := yIndex * FTextHeight; LineStart := CurrentPos; AddLineOffset(CurrentPos); // Mine text Mine := TransformHex(CurrentPos, FHighLimit); MineLength:= Min(cHexWidth, (Length(Mine) - cHexStartHex) div cWordSize); // Foreign text Foreign := SecondViewer.TransformHex(LineStart, SecondViewer.FHighLimit); ForeignLength:= (Length(Foreign) - cHexStartHex) div cWordSize; // 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 := clRed else Canvas.Font.Color := clBlack; 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, cHexWidth); for I:= 1 to Length(WordHex) do begin Canvas.Font.Color := SymbolColor[I - 1]; Canvas.TextOut(X, Y, WordHex[I]); Inc(X, SymbolWidth); end; Canvas.Font.Color := clBlack 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); 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-0.9.8/src/uadministrator.pas0000644000175000001440000001174113431750245017077 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Executes file operations with administrator privileges 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 uAdministrator; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Dialogs, uFileSystemFileSource, uFile, uFileSystemDeleteOperation; type EAccessDenied = class(Exception); procedure ExecuteOperation(const FileList: String); procedure Delete(Helper: TFileSystemDeleteOperation; Files: TFiles; Index: Integer); implementation uses uFileSource, uFileSourceOperationMessageBoxesUI, dmCommonData, uOSUtils, uGlobs, uGlobsPaths, uOperationsManager, uFileSourceOperation, DCXmlConfig, uFileSourceOperationOptions, uSpecialDir, uVariableMenuSupport, DCOSUtils, uDCUtils; type { TDummy } TDummy = class procedure Finish(Operation: TFileSourceOperation; State: TFileSourceOperationState); end; var Dummy: TDummy; FFileSourceOperationMessageBoxesUI: TFileSourceOperationMessageBoxesUI; procedure Initialize; begin LoadPaths; LoadWindowsSpecialDir; LoadVariableMenuSupport; InitGlobs; Dummy:= TDummy.Create; Application.CreateForm(TdmComData, dmComData); // common data FFileSourceOperationMessageBoxesUI := TFileSourceOperationMessageBoxesUI.Create; end; procedure Delete(Xml: TXmlConfig); var Files: TFiles; ANode: TXmlNode; FileSource: IFileSource; Operation: TFileSystemDeleteOperation; begin ANode:= Xml.FindNode(Xml.RootNode, 'FileList'); if Assigned(ANode) then begin Files:= TFiles.Create(Xml.GetAttr(aNode, 'Path', EmptyStr)); ANode:= ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Item') = 0 then begin Files.Add(TFileSystemFileSource.CreateFileFromFile(Xml.GetAttr(aNode, 'Name', EmptyStr))); end; ANode:= ANode.NextSibling; end; FileSource:= TFileSystemFileSource.GetFileSource; Operation:= FileSource.CreateDeleteOperation(Files) as TFileSystemDeleteOperation; Operation.SkipErrors:= False; Operation.Recycle:= Xml.GetValue(Xml.RootNode, 'Recycle', False); Operation.SymLinkOption:= TFileSourceOperationOptionSymLink(Xml.GetValue(Xml.RootNode, 'SymLinkOption', Integer(fsooslNone))); Operation.DeleteReadOnly:= TFileSourceOperationOptionGeneral(Xml.GetValue(Xml.RootNode, 'DeleteReadOnly', Integer(fsoogNone))); Operation.AddUserInterface(FFileSourceOperationMessageBoxesUI); Operation.AddStateChangedListener([fsosStopped], @Dummy.Finish); OperationsManager.AddOperation(Operation, True); end; end; procedure Delete(Helper: TFileSystemDeleteOperation; Files: TFiles; Index: Integer); var I: Integer; Xml: TXmlConfig; ANode: TXmlNode; SubNode: TXmlNode; FileName: String; begin FileName:= GetTempFileName; Xml:= TXmlConfig.Create(FileName); Xml.SetValue(Xml.RootNode, 'Operation', 0); Xml.SetValue(Xml.RootNode, 'Recycle', Helper.Recycle); Xml.SetValue(Xml.RootNode, 'DeleteReadOnly', Integer(Helper.DeleteReadOnly)); Xml.SetValue(Xml.RootNode, 'SymLinkOption', Integer(Helper.SymLinkOption)); ANode := Xml.AddNode(Xml.RootNode, 'FileList'); Xml.SetAttr(ANode, 'Path', Files.Path); for I:= 0 to Index do begin SubNode := Xml.AddNode(ANode, 'Item'); Xml.SetAttr(SubNode, 'Name', Files[I].FullPath); end; Xml.Save; Xml.Free; ExecCmdAdmin(ParamStrU(0), '--config-dir=' + QuoteStr(gpCfgDir) + ' ' + '--operation=' + QuoteStr(FileName)); end; procedure ExecuteOperation(const FileList: String); var Xml: TXmlConfig; begin try Initialize; Xml:= TXmlConfig.Create(FileList, True); try case Xml.GetValue(Xml.RootNode, 'Operation', -1) of 0: Delete(Xml); end; finally Xml.Free; mbDeleteFile(FileList); end; Application.Run; Halt(0); except on E: Exception do begin ShowMessage(E.Message); Halt(1); end; end; end; { TDummy } procedure TDummy.Finish(Operation: TFileSourceOperation; State: TFileSourceOperationState); begin Application.Terminate; end; end. doublecmd-0.9.8/src/uaccentsutils.pas0000644000175000001440000001561413161144471016721 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; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, //DC uGlobs, uLng, DCStrUtils; { LoadInMemoryOurAccentLookupTableList } procedure LoadInMemoryOurAccentLookupTableList; var slTempoAccents, slTempoAccentsStripped: TStringList; iChar, iPos: integer; begin slTempoAccents := TStringList.Create; slTempoAccentsStripped := TStringList.Create; try ParseLineToList(rsStrAccents, slTempoAccents); ParseLineToList(rsStrAccentsStripped, 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.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-0.9.8/src/uShowMsg.pas0000644000175000001440000006456513364377277015641 0ustar alexxusers { Double commander ------------------------------------------------------------------------- Implementing of Showing messages with localization Copyright (C) 2007-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 } { 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, 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, 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; 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: String; Buttons: TDynamicStringArray): Integer; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String) : Boolean; end; function msgYesNo(const sMsg: String): Boolean; overload; function msgYesNo(Thread: TThread; const sMsg: String): Boolean; overload; function msgYesNoCancel(const sMsg: String): 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): Integer; overload; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray): 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, FChoices); 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: String; Buttons: TDynamicStringArray): Integer; begin FMessage:= Message; FChoices:= Buttons; 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); const cButtonCount = 8; cButtonSpace = 8; var iIndex: Integer; iCount: Integer; 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 AutoSize:= True; Caption:= cLngButton[Buttons[iIndex]]; Parent:= frmMsg.pnlButtons; Constraints.MinWidth:= MinButtonWidth; if Buttons[iIndex] >= Low(TMyMsgActionButton) then Tag:= -2-iIndex else Tag:= iIndex; 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):Boolean; begin Result:= MsgBox(nil, sMsg,[msmbYes, msmbNo], msmbYes, 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):TMyMsgResult; begin Result:= MsgBox(sMsg,[msmbYes, msmbNo, msmbCancel], msmbYes, 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 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 if slValueList.IndexOf(cbValue.Text) < 0 then slValueList.Add(cbValue.Text); 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): Integer; const cButtonSpace = 8; var Index: Integer; frmMsg: TfrmMsg; CaptionWidth: Integer; MinButtonWidth: Integer; begin frmMsg:= TfrmMsg.Create(Application); try frmMsg.BorderStyle:= bsSingle; frmMsg.Position:= poScreenCenter; frmMsg.BorderIcons:= [biSystemMenu]; frmMsg.Caption:= Application.Title; 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; // 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; end; end; frmMsg.ShowModal; Result:= frmMsg.iSelected; finally frmMsg.Free; end; end; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray): Integer; var DialogMainThread : TDialogMainThread; begin Result := -1; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowMessageChoiceBox(Message, Buttons); 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[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-0.9.8/src/uGlobsPaths.pas0000644000175000001440000000424013101576472016263 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 gpThumbCacheDir : String = ''; // thumbnails cache directory //Global Configuration Filename const gcfExtensionAssociation : string = 'extassoc.xml'; procedure LoadPaths; procedure UpdateEnvironmentVariable; implementation uses SysUtils, LazFileUtils, uDebug, uOSUtils, DCOSUtils, DCStrUtils; function GetAppName : String; begin Result := 'doublecmd'; end; procedure UpdateEnvironmentVariable; begin mbSetEnvironmentVariable('COMMANDER_INI', gpCfgDir + 'doublecmd.xml'); end; procedure LoadPaths; begin OnGetApplicationName := @GetAppName; gpExePath := ExtractFilePath(TryReadAllLinks(ParamStrU(0))); DCDebug('Executable directory: ', gpExePath); gpGlobalCfgDir := gpExePath; if gpCmdLineCfgDir <> EmptyStr then begin if GetPathType(gpCmdLineCfgDir) <> ptAbsolute then gpCmdLineCfgDir := IncludeTrailingPathDelimiter(mbGetCurrentDir) + gpCmdLineCfgDir; gpCmdLineCfgDir := ExpandAbsolutePath(gpCmdLineCfgDir); gpCfgDir := gpCmdLineCfgDir; end else begin gpCfgDir := GetAppConfigDir; if gpCfgDir = EmptyStr then begin DCDebug('Warning: Cannot get user config directory.'); gpCfgDir := gpGlobalCfgDir; end; end; gpCfgDir := IncludeTrailingPathDelimiter(gpCfgDir); gpLngDir := gpExePath + 'language' + DirectorySeparator; gpPixmapPath := gpExePath + 'pixmaps' + DirectorySeparator; gpHighPath:= gpExePath + 'highlighters' + DirectorySeparator; gpThumbCacheDir := GetAppCacheDir + PathDelim + 'thumbnails'; // set up environment variables UpdateEnvironmentVariable; mbSetEnvironmentVariable('COMMANDER_DRIVE', ExtractRootDir(gpExePath)); mbSetEnvironmentVariable('COMMANDER_PATH', ExcludeTrailingBackslash(gpExePath)); end; end. doublecmd-0.9.8/src/uColorExt.pas0000644000175000001440000002006313143576760015763 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Load colors of files in file panels Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2017 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, DCXmlConfig; type { TMaskItem } TMaskItem = class private FExt: String; FMaskList: TMaskList; procedure SetExt(const AValue: String); public sName: String; sModeStr: String; cColor: TColor; constructor Create; destructor Destroy; override; procedure Assign(ASource: TMaskItem); property sExt: String read FExt write SetExt; end; { TColorExt } TColorExt = class private lslist: TList; function GetCount: Integer; function GetItems(const Index: Integer): TMaskItem; public constructor Create; destructor Destroy; override; procedure Clear; procedure Add(AItem: TMaskItem); function GetColorByExt(const sExt: String): TColor; function GetColorByAttr(const sModeStr: String): TColor; function GetColorBy(const AFile: TFile): TColor; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); property Count: Integer read GetCount; property Items[const Index: Integer]: TMaskItem read GetItems; default; end; implementation uses SysUtils, uDebug, uGlobs, uFileProperty; { TMaskItem } procedure TMaskItem.SetExt(const AValue: String); begin FExt:= AValue; FreeAndNil(FMaskList); FMaskList:= TMaskList.Create(FExt); end; constructor TMaskItem.Create; begin FMaskList:= TMaskList.Create(FExt); end; destructor TMaskItem.Destroy; begin FreeAndNil(FMaskList); inherited Destroy; end; procedure TMaskItem.Assign(ASource: TMaskItem); begin Assert(Assigned(ASource)); sExt := ASource.sExt; sModeStr := ASource.sModeStr; cColor := ASource.cColor; sName := ASource.sName; end; function TColorExt.GetCount: Integer; begin Result := lslist.Count; end; function TColorExt.GetItems(const Index: Integer): TMaskItem; begin Result := TMaskItem(lslist[Index]); end; constructor TColorExt.Create; begin inherited; lslist:= TList.Create; end; destructor TColorExt.Destroy; begin Clear; FreeAndNil(lsList); inherited; end; procedure TColorExt.Clear; begin while lslist.Count > 0 do begin TMaskItem(lslist[0]).Free; lslist.Delete(0); end; end; procedure TColorExt.Add(AItem: TMaskItem); begin lslist.Add(AItem); end; function TColorExt.GetColorByExt(const sExt: String): TColor; var I: Integer; begin Result:= clDefault; for I:=0 to lslist.Count-1 do begin if MatchesMaskList(sExt, TMaskItem(lslist[I]).sExt,';') then begin Result:= TMaskItem(lslist[I]).cColor; Exit; end; end; end; function TColorExt.GetColorByAttr(const sModeStr: String): TColor; var I: Integer; begin Result:= clDefault; for I:=0 to lslist.Count-1 do begin if MatchesMaskList(sModeStr,TMAskItem(lslist[I]).sModeStr,';') then begin Result:=TMAskItem(lslist[I]).cColor; Exit; end; end; end; function TColorExt.GetColorBy(const AFile: TFile): TColor; var Attr: String; I, J: Integer; MaskItem: TMaskItem; begin Result:= clDefault; if not (fpAttributes in AFile.SupportedProperties) then Attr:= EmptyStr else begin Attr:= AFile.Properties[fpAttributes].AsString; end; for I:= 0 to lslist.Count-1 do begin MaskItem:= TMaskItem(lslist[I]); // Get color by search template if MaskItem.sExt[1] = '>' then begin for J:= 0 to gSearchTemplateList.Count - 1 do with gSearchTemplateList do begin if (Templates[J].TemplateName = PChar(MaskItem.sExt)+1) and Templates[J].CheckFile(AFile) then begin Result:= MaskItem.cColor; Exit; end; end; Continue; end; // Get color by extension and attribute. // If attributes field is empty then don't match directories. if ((MaskItem.sExt = '') or (((MaskItem.sModeStr <> '') or not (AFile.IsDirectory or AFile.IsLinkToDirectory)) and MaskItem.FMaskList.Matches(AFile.Name))) and ((MaskItem.sModeStr = '') or (Length(Attr) = 0) or MatchesMaskList(Attr, MaskItem.sModeStr, ';')) then begin Result:= MaskItem.cColor; Exit; end; end; end; (* Load colors of files from doublecmd.ini *) { format of colors storage as in Total Commander: doublecmd.ini [Colors] ColorFilter1=*.o;*.ppu;*.rst;*.bak;*.dcu ColorFilter1Color=16711680 ColorFilter2=*.pas ColorFilter2Color=16711000 etc... Added Attributes: ColorFilter1Attributes=-r*xr*xr*x //all read/executable file ColorFilter2Attributes=-*x* //all executable ColorFilter3Attributes=d* //all directories ColorFilter4Attributes=l* //all links Be careful with * expression. Functions return just first found value. This is right demo of [Colors] section: ColorFilter3=* ColorFilter3Color=55758 ColorFilter3Attributes=-rwxrwxr*x ColorFilter3Name=SomeName3 ColorFilter4=* ColorFilter4Color=32768 ColorFilter4Attributes=-*x* ColorFilter4Name=SomeName4 This IS WRONG because ColorFilter3Attributes=-*x* will be found and ColorFilter3Color=32768 will be returned first: ColorFilter3=* ColorFilter3Color=32768 ColorFilter3Attributes=-*x* ColorFilter3Name=SomeName3 ColorFilter4=* ColorFilter4Color=55758 ColorFilter4Attributes=-rwxrwxr*x ColorFilter4Name=SomeName4 !!! The "?" and other regular expressions DOES NOT SUPPORTED } procedure TColorExt.Load(AConfig: TXmlConfig; ANode: TXmlNode); var sExtMask, sAttr, sName: String; iColor: Integer; 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 lsList.Add(TMaskItem.Create); TMaskItem(lsList.Last).sName := sName; TMaskItem(lsList.Last).cColor := iColor; TMaskItem(lsList.Last).sExt := sExtMask; TMaskItem(lsList.Last).sModeStr := sAttr; 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); var I : Integer; SubNode: TXmlNode; begin if not Assigned(lslist) then Exit; ANode := AConfig.FindNode(ANode, 'FileFilters', True); AConfig.ClearNode(ANode); for I:=0 to lslist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'Filter'); AConfig.AddValue(SubNode, 'Name', TMaskItem(lsList[I]).sName); AConfig.AddValue(SubNode, 'FileMasks', TMaskItem(lsList[I]).sExt); AConfig.AddValue(SubNode, 'Color', TMaskItem(lsList[I]).cColor); AConfig.AddValue(SubNode, 'Attributes', TMaskItem(lsList[I]).sModeStr); end; end; end. doublecmd-0.9.8/src/synhighlighterlua.pas0000644000175000001440000012313013121030117017541 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-0.9.8/src/platform/0000755000175000001440000000000013615241423015142 5ustar alexxusersdoublecmd-0.9.8/src/platform/win/0000755000175000001440000000000013615241423015737 5ustar alexxusersdoublecmd-0.9.8/src/platform/win/uwinterm.pas0000644000175000001440000001701412630372731020324 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Terminal emulator implementation for Windows Copyright (C) 2009-2010 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 uWinTerm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, uTerminal; {$IF FPC_FULLVERSION < 30000} type TStartupInfoW = TStartupInfo; {$ENDIF} type { TWinTerm } TWinTerm = class(TTerminal) private FConsoleWindow: HWND; FSecurityAttributes: TSecurityAttributes; FStartupInfo: TStartupInfoW; FProcessInformation: TProcessInformation; PipeStdInRead, PipeStdInWrite, PipeStdOutRead, PipeStdOutWrite: THandle; public constructor Create; destructor Destroy; override; //--------------------- function Read_Pty(var Output: String; const TimeOut: LongInt = 10): LongInt; override; // Read info from pty function Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String=''): THandle; override;//Create new pty and start cmd function Write_pty(const Input: String): Boolean; override; //write str to pty //--------------------- function SendBreak_pty(): Boolean; override; // ^C function SendSignal_pty(Sig: Cint): Boolean; override; function SetScreenSize(ColCount, RowCount: Integer): Boolean; override; function SetCurrentDir(const NewDir: String): Boolean; override; //--------------------- function KillShell: LongInt; override; function CSI_GetTaskId(const buf:String):integer; override; end; { TWinConThread } TWinConThread = class(TConsoleThread) private procedure AddSymbol; protected procedure Execute; override; public constructor Create; destructor Destroy; override; end; implementation uses LazUTF8, JwaWinCon, uOSUtils; { TWinTerm } constructor TWinTerm.Create; begin if not isConsole then begin AllocConsole(); FConsoleWindow:= GetConsoleWindow(); ShowWindow(FConsoleWindow, SW_HIDE); end; end; destructor TWinTerm.Destroy; begin KillShell; if not isConsole then FreeConsole(); inherited Destroy; end; function TWinTerm.Read_Pty(var Output: String; const timeout: LongInt): LongInt; var I: Integer; dwRead, BufSize, DesBufSize: DWORD; Res: Boolean; pcOutput: PChar; begin try BufSize:= 0; dwRead:= 0; Output:= EmptyStr; repeat for I:= 0 to 9 do begin Res:= PeekNamedPipe(PipeStdOutRead, nil, 0, nil, @DesBufSize, nil); Res:= Res and (DesBufSize > 0); if Res then Break; Sleep(TimeOut); end; if Res then begin if DesBufSize > BufSize then begin GetMem(pcOutput, DesBufSize); BufSize:= DesBufSize; end; Res:= ReadFile(PipeStdOutRead, pcOutput^, BufSize, dwRead, nil); end; until not Res; except end; if dwRead > 0 then begin Output:= ConsoleToUTF8(Copy(pcOutput, 1, dwRead)); FreeMem(pcOutput); end; Result:= dwRead; end; function TWinTerm.Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String): THandle; var hTmp1, hTmp2: THandle; begin ZeroMemory(@FSecurityAttributes, SizeOf(FSecurityAttributes)); FSecurityAttributes.nLength:= SizeOf(FSecurityAttributes); FSecurityAttributes.bInheritHandle:= True; FSecurityAttributes.lpSecurityDescriptor:= nil; // create input/output pipes CreatePipe(PipeStdInRead, PipeStdInWrite, @FSecurityAttributes, 0); CreatePipe(PipeStdOutRead, PipeStdOutWrite, @FSecurityAttributes, 0); DuplicateHandle(GetCurrentProcess(), PipeStdInWrite, GetCurrentProcess(), @hTmp1, 0, False, DUPLICATE_SAME_ACCESS); DuplicateHandle(GetCurrentProcess(), PipeStdOutRead, GetCurrentProcess(), @hTmp2, 0, False, DUPLICATE_SAME_ACCESS); CloseHandle(PipeStdInWrite); CloseHandle(PipeStdOutRead); PipeStdInWrite:= hTmp1; PipeStdOutRead:= hTmp2; ZeroMemory(@FStartupInfo, SizeOf(FStartupInfo)); FStartupInfo.cb:= SizeOf(FStartupInfo); with FStartupInfo do begin dwFlags:= STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow:= SW_HIDE; hStdInput:= PipeStdInRead; hStdOutput:= PipeStdOutWrite; hStdError:= PipeStdOutWrite; end; ZeroMemory(@FProcessInformation, SizeOf(FProcessInformation)); CreateProcessW(nil, PWideChar(UTF8Decode(Command)), // command line nil, // process security attributes nil, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags nil, // use parent's environment nil, // use parent's current directory FStartupInfo, // STARTUPINFO pointer FProcessInformation); // receives PROCESS_INFORMATION Result:= FProcessInformation.hProcess; end; function TWinTerm.Write_pty(const Input: String): Boolean; var dwWritten, BufSize: DWORD; pcCommand: PChar; begin pcCommand:= PChar(UTF8ToConsole(Input)); BufSize:= Length(pcCommand); Result:= WriteFile(PipeStdInWrite, pcCommand^, BufSize, dwWritten, nil); Result:= Result and (BufSize = dwWritten); end; function TWinTerm.SendBreak_pty(): Boolean; begin Result:= SendSignal_pty(CTRL_C_EVENT); end; function TWinTerm.SendSignal_pty(Sig: Cint): Boolean; begin SetConsoleCtrlHandler(nil, True); Result:= GenerateConsoleCtrlEvent(Sig, 0); end; function TWinTerm.SetScreenSize(ColCount, RowCount: Integer): Boolean; begin Result:= False; end; function TWinTerm.SetCurrentDir(const NewDir: String): Boolean; begin Result:= Write_pty('cd /D "' + NewDir + '"' + #13#10); end; function TWinTerm.KillShell: LongInt; begin try CloseHandle(PipeStdInRead); CloseHandle(PipeStdInWrite); CloseHandle(PipeStdOutRead); CloseHandle(PipeStdOutWrite); CloseHandle(FProcessInformation.hThread); CloseHandle(FProcessInformation.hProcess); Result := 0; except Result := -1; end; end; function TWinTerm.CSI_GetTaskId(const buf:String):integer; begin Result := 0; // Dummy end; { TWinConThread } procedure TWinConThread.AddSymbol; begin if Assigned(FOut) then FOut.Write(FBuf); end; procedure TWinConThread.Execute; begin FShell:= GetShell; if Length(FShell) = 0 then FShell:= RunTermCmd; if Assigned(FTerm) then FTerm.Fork_pty(FRowsCount, FColsCount, FShell); while True do begin if Assigned(FTerm) then begin if FTerm.Read_pty(FBuf, 0) > 0 then Synchronize(@AddSymbol) else Sleep(1); end else Break; end; end; constructor TWinConThread.Create; begin inherited Create(True); System.InitCriticalSection(FLock); FTerm:= TWinTerm.Create; FRowsCount:= 50; FColsCount:= 100; end; destructor TWinConThread.Destroy; begin FreeAndNil(FTerm); System.DoneCriticalSection(FLock); inherited Destroy; end; end. doublecmd-0.9.8/src/platform/win/uwin32widgetsetfix.pas0000644000175000001440000000666413465251004022235 0ustar alexxusersunit uWin32WidgetSetFix; {$mode objfpc}{$H+} interface implementation uses Classes, SysUtils, Win32Int, WSLCLClasses, Forms, Windows, Win32Proc, Controls, LCLType, Win32WSComCtrls, ComCtrls, LMessages, LCLMessageGlue; type { TWin32WSCustomTabControlEx } TWin32WSCustomTabControlEx = class(TWin32WSCustomTabControl) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSCustomTabControlEx } function ChangeTabPage(TabControlHandle: HWND): Integer; var TabControl: TCustomTabControl; PageIndex: Integer; PageHandle: HWND; begin TabControl := GetWin32WindowInfo(TabControlHandle)^.WinControl as TCustomTabControl; if (TabControl.PageIndex <> -1) then Windows.ShowWindow(TabControl.CustomPage(TabControl.PageIndex).Handle, SW_HIDE); PageIndex := Windows.SendMessage(TabControlHandle, TCM_GETCURSEL, 0, 0); PageIndex := TabControl.TabToPageIndex(PageIndex); if (TabControl is TTabControl) then Exit(PageIndex); if PageIndex = -1 then Exit(PageIndex); PageHandle := TabControl.CustomPage(PageIndex).Handle; Windows.SetWindowPos(PageHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW); Windows.RedrawWindow(PageHandle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN or RDW_ERASE); Result := PageIndex; end; function TabControlParentMsgHandler(const AWinControl: TWinControl; Window: HWnd; Msg: UInt; WParam: Windows.WParam; LParam: Windows.LParam; var MsgResult: Windows.LResult; var WinProcess: Boolean): Boolean; var NMHdr: PNMHDR; LMNotify: TLMNotify; begin Result := False; if Msg = WM_NOTIFY then begin NMHdr := PNMHDR(LParam); with NMHdr^ do case code of TCN_SELCHANGE: begin Result := True; idFrom := ChangeTabPage(HWndFrom); with LMNotify Do begin Msg := LM_NOTIFY; IDCtrl := WParam; NMHdr := PNMHDR(LParam); Result := CallDefaultWindowProc(Window, Msg, WParam, LParam); end; DeliverMessage(AWinControl, LMNotify); TabControlFocusNewControl(AWinControl as TCustomTabControl, idFrom); MsgResult := LMNotify.Result; end; TCN_SELCHANGING: begin Result := True; with LMNotify Do begin Msg := LM_NOTIFY; IDCtrl := WParam; NMHdr := PNMHDR(LParam); Result := CallDefaultWindowProc(Window, Msg, WParam, LParam); end; DeliverMessage(AWinControl, LMNotify); MsgResult := LMNotify.Result; end; end; end; end; class function TWin32WSCustomTabControlEx.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var WindowInfo: PWin32WindowInfo; begin Result:= inherited CreateHandle(AWinControl, AParams); WindowInfo:= GetWin32WindowInfo(Result); WindowInfo^.ParentMsgHandler := @TabControlParentMsgHandler; end; procedure Initialize; begin // Replace TCustomTabControl widgetset class // Fix blinking: https://bugs.freepascal.org/view.php?id=22080 RegisterCustomTabControl; RegisterWSComponent(TCustomTabControl, TWin32WSCustomTabControlEx); end; initialization Initialize; end. doublecmd-0.9.8/src/platform/win/uthumbnailprovider.pas0000644000175000001440000001167612612505011022372 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; 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:= UTF8Decode(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:= UTF8Decode(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(UTF8Decode(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:= Graphics.TBitmap.Create; Result.Handle:= Bitmap; end; end; initialization SHCreateItemFromParsingName:= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHCreateItemFromParsingName'); TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-0.9.8/src/platform/win/ushlobjadditional.pas0000644000175000001440000002213213434540707022151 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, 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 } 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 SHChangeIconDialog(hOwner: HWND; var FileName: String; var IconIndex: Integer): Boolean; function SHGetOverlayIconIndex(const sFilePath, sFileName: String): Integer; function SHGetInfoTip(const sFilePath, sFileName: String): String; function SHFileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; function PathIsUNCA(pszPath: LPCSTR): WINBOOL; stdcall; external 'shlwapi' name 'PathIsUNCA'; function PathIsUNCW(pwszPath: LPCWSTR): WINBOOL; stdcall; external 'shlwapi' name 'PathIsUNCW'; function PathFindNextComponentA(pszPath: LPCSTR): LPSTR; stdcall; external 'shlwapi' name 'PathFindNextComponentA'; function PathFindNextComponentW(pwszPath: LPCWSTR): LPWSTR; stdcall; external 'shlwapi' name 'PathFindNextComponentW'; procedure OleErrorUTF8(ErrorCode: HResult); procedure OleCheckUTF8(Result: HResult); implementation uses SysUtils, ShellApi, JwaShlGuid, ComObj, LazUTF8, DCOSUtils; 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 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 := UTF8Decode(FileName); Result := SHChangeIconW(hOwner, FileNameW, SizeOf(FileNameW), IconIndex); if Result then FileName := UTF16ToUTF8(UnicodeString(FileNameW)); end end; 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:= UTF8Decode(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:= UTF8Decode(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:= UTF8Decode(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:= UTF8Decode(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(UTF8Decode(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; end. { ShlObjAdditional } doublecmd-0.9.8/src/platform/win/ushellcontextmenu.pas0000644000175000001440000007460713324577617022266 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-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 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'; type { EContextMenuException } EContextMenuException = class(Exception); { TShellContextMenu } TShellContextMenu = class private FOnClose: TNotifyEvent; FParent: TWinControl; FFiles: TFiles; FBackground: boolean; FShellMenu1: IContextMenu; FShellMenu: HMENU; FUserWishForContextMenu: TUserWishForContextMenu; 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; 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 := DefWindowProc(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 GetRecycleBinContextMenu(Handle: HWND): IContextMenu; var PathPIDL: PItemIDList = nil; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetSpecialFolderLocation(Handle, CSIDL_BITBUCKET, PathPIDL)); DesktopFolder.GetUIObjectOf(Handle, 1, PathPIDL, IID_IContextMenu, nil, Result); end; function GetForegroundContextMenu(Handle: HWND; Files: TFiles): IContextMenu; type PPIDLArray = ^PItemIDList; var Folder, DesktopFolder: IShellFolder; PathPIDL: PItemIDList = nil; tmpPIDL: PItemIDList = nil; S: WideString; List: PPIDLArray = nil; I: integer; pchEaten: ULONG; dwAttributes: ULONG = 0; begin Result := nil; OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); try List := CoTaskMemAlloc(SizeOf(PItemIDList) * Files.Count); ZeroMemory(List, SizeOf(PItemIDList) * Files.Count); for I := 0 to Files.Count - 1 do begin if Files[I].Name = EmptyStr then S := EmptyWideStr else S := UTF8Decode(Files[I].Path); 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 := UTF8Decode(Files[I].Path) else S := UTF8Decode(Files[I].Name); OleCheckUTF8(Folder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, tmpPIDL, dwAttributes)); (List + i)^ := tmpPIDL; end; Folder.GetUIObjectOf(Handle, Files.Count, PItemIDList(List^), IID_IContextMenu, nil, Result); 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 := UTF8Decode(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 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; DCIconRequired = True; var I, iDummy: integer; sAct: String; iMenuPositionInsertion: integer = 0; Always_Expanded_Action_Count: integer = 0; liiSource: TLazIntfImage = nil; liiDestination: TLazIntfImage = nil; ImgFormatDescription: TRawImageDescription; bSeparatorAlreadyInserted: boolean; function GetMeTheBitmapForThis(ImageRequiredIndex: PtrInt): 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); PixMapManager.DrawBitmap(ImageRequiredIndex, Result.Canvas, 0, 0); if Result.PixelFormat <> pf32bit then begin liiSource := Result.CreateIntfImage; liiDestination := TLazIntfImage.Create(gIconsSize, gIconsSize); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(gIconsSize, gIconsSize); liiDestination.DataDescription := ImgFormatDescription; liiDestination.CopyPixels(liiSource); Result.FreeImage; Result.PixelFormat := pf32bit; Result.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; 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(UTF8Decode(paramExtActionList.ExtActionCommand[MenuDispatcher].ActionName)), iMenuPositionInsertion, MenuDispatcher + USER_CMD_ID, MFT_STRING, paramExtActionList.ExtActionCommand[MenuDispatcher].IconBitmap) else InsertMenuItemEx(MenuWhereToAdd, 0, PWChar(UTF8Decode(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 := GetMeTheBitmapForThis(gFiOwnDCIcon); 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 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); // Now let's add the action button if paramExtActionList.Count > Always_Expanded_Action_Count then begin 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 liiSource := paramExtActionList.ExtActionCommand[I].IconBitmap.CreateIntfImage; liiDestination := TLazIntfImage.Create(gIconsSize, gIconsSize); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(gIconsSize, gIconsSize); liiDestination.DataDescription := ImgFormatDescription; liiDestination.CopyPixels(liiSource); paramExtActionList.ExtActionCommand[I].IconBitmap.FreeImage; paramExtActionList.ExtActionCommand[I].IconBitmap.PixelFormat := pf32bit; paramExtActionList.ExtActionCommand[I].IconBitmap.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; end; LocalInsertMenuItemExternal(I); end else begin LocalInsertMenuSeparator; end; end; end; if gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen 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 LocalInsertMenuSeparator; I := paramExtActionList.Add(TExtActionCommand.Create(rsConfigurationFileAssociation, 'cm_FileAssoc', '', '')); LocalInsertMenuItemExternal(I, ContextMenucm_FileAssoc); end; end; end; { TShellContextMenu } { TShellContextMenu.Create } constructor TShellContextMenu.Create(Parent: TWinControl; var Files: TFiles; Background: boolean; UserWishForContextMenu: TUserWishForContextMenu); var UFlags: UINT = CMF_EXPLORE; begin // Replace window procedure {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtr(Parent.Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} FParent := Parent; FFiles := Files; FBackground := Background; FShellMenu := 0; FUserWishForContextMenu := UserWishForContextMenu; if Assigned(Files) 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(Parent.Handle, 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} SetWindowLongPtr(FParent.Handle, 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; 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 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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(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(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add submenu to context menu InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(UTF8Decode(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(UTF8Decode(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; if FUserWishForContextMenu = uwcmComplete then InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(UTF8Decode(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.Handle, 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 with FFiles[0] do begin if not SameText(FullPath, ExtractFileDrive(FullPath) + PathDelim) then frmMain.actRenameOnly.Execute else // change drive label begin sVolumeLabel := mbGetVolumeLabel(FullPath, True); if InputQuery(rsMsgSetVolumeLabel, rsMsgVolumeLabel, sVolumeLabel) then mbSetVolumeLabel(FullPath, sVolumeLabel); end; end else frmMain.actRename.Execute; 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.Handle, FShellMenu1, sVerb).Start; 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.Handle; 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) or (Result = COPYENGINE_E_USER_CANCELLED)) then OleErrorUTF8(Result); // Reload after possible changes on the filesystem. if SameText(sVerb, sCmdVerbLink) or SameText(sVerb, sCmdVerbDelete) then frmMain.ActiveFrame.FileSource.Reload(frmMain.ActiveFrame.CurrentPath); 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.Handle, FShellMenu1, sCmdVerbPaste).Start else FormCommands.ExecuteCommand(UserSelectedCommand.CommandName, []); bHandled := True; end else 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 bHandled := True; end; end; end; finally if Assigned(InnerExtActionList) then FreeAndNil(InnerExtActionList); if Assigned(UserSelectedCommand) then FreeAndNil(UserSelectedCommand); if Assigned(ContextMenuDCIcon) then 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-0.9.8/src/platform/win/unetworkthread.pas0000644000175000001440000000435513357720535021532 0ustar alexxusersunit uNetworkThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SyncObjs, JwaWinNetWk, Windows; type { 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; CheckOperationState: TThreadMethod = nil): Integer; end; implementation uses uMyWindows; { 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; 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-0.9.8/src/platform/win/umywindows.pas0000644000175000001440000007103413405446340020700 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific WINDOWS functions. 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 uMyWindows; {$mode objfpc}{$H+} interface uses Graphics, Classes, SysUtils, JwaWinBase, Windows; 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); 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 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: LongBool; {en This routine returns @true if the caller's process is running in the remote desktop session } function RemoteSession: Boolean; {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; procedure InitErrorMode; procedure FixCommandLineToUTF8; implementation uses ShellAPI, MMSystem, JwaWinNetWk, JwaWinUser, JwaNative, JwaVista, LazUTF8, ActiveX, ShlObj, ComObj, DCWindows, 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: WideString): WideString; var SFI: TSHFileInfoW; begin FillChar(SFI, SizeOf(SFI), 0); SHGetFileInfoW(PWChar(wsDrv), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME); Result:= SFI.szDisplayName; if Pos('(', Result) <> 0 then SetLength(Result, Pos('(', Result) - 2); 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; (* Drive ready *) function mbDriveReady(const sDrv: String): Boolean; var NotUsed: DWORD; wsDrv: WideString; begin wsDrv:= UTF8Decode(sDrv); Result:= GetVolumeInformationW(PWChar(wsDrv), nil, 0, nil, NotUsed, NotUsed, nil, 0); end; (* Disk label *) function mbGetVolumeLabel(const sDrv: String; const bVolReal: Boolean): String; var WinVer: Byte; DriveType, NotUsed: DWORD; Buf: array [0..MAX_PATH - 1] of WideChar; wsDrv, wsResult: UnicodeString; begin Result:= ''; wsDrv:= UTF8Decode(sDrv); WinVer:= LOBYTE(LOWORD(GetVersion)); DriveType:= GetDriveTypeW(PWChar(wsDrv)); if (WinVer <= 4) and (DriveType <> DRIVE_REMOVABLE) or bVolReal then begin // Win9x, Me, NT <= 4.0 Buf[0]:= #0; GetVolumeInformationW(PWChar(wsDrv), Buf, DWORD(SizeOf(Buf)), nil, NotUsed, NotUsed, nil, 0); wsResult:= Buf; if bVolReal and (WinVer >= 5) and (Result <> '') and (DriveType <> DRIVE_REMOVABLE) then // Win2k, XP and higher wsResult:= DisplayName(wsDrv) else if (Result = '') and (not bVolReal) then wsResult:= ''; end else wsResult:= DisplayName(wsDrv); Result:= UTF16ToUTF8(wsResult); end; (* Wait for change disk label *) function mbSetVolumeLabel(sRootPathName, sVolumeName: String): Boolean; var wsRootPathName, wsVolumeName: UnicodeString; begin wsRootPathName:= UTF8Decode(sRootPathName); wsVolumeName:= UTF8Decode(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; (* Close CD/DVD *) 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; function IsWow64: BOOL; const Wow64Process: TDuplicates = dupIgnore; var IsWow64Process: function(hProcess: HANDLE; Wow64Process: PBOOL): BOOL; stdcall; begin if (Wow64Process = dupIgnore) then begin Result:= False; Pointer(IsWow64Process):= GetProcAddress(GetModuleHandle(Kernel32), 'IsWow64Process'); if (IsWow64Process <> nil) then IsWow64Process(GetCurrentProcess, @Result); if Result then Wow64Process:= dupAccept else Wow64Process:= dupError; 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:= UTF8Decode(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:= UTF8Decode(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 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): WideString; 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: WideString; 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 := UTF8Decode(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(UTF8Decode(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(UTF8Decode(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 IsUserAdmin: LongBool; var ReturnLength: DWORD = 0; TokenHandle: HANDLE = INVALID_HANDLE_VALUE; TokenInformation: array [0..1023] of Byte; ElevationType: JwaVista.TTokenElevationType absolute TokenInformation; begin Result:= OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, TokenHandle); if not Result then begin if GetLastError = ERROR_NO_TOKEN then Result:= OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle); end; if Result then begin Result:= GetTokenInformation(TokenHandle, Windows.TTokenInformationClass(TokenElevationType), @TokenInformation, SizeOf(TokenInformation), ReturnLength); CloseHandle(TokenHandle); if Result then begin case ElevationType of TokenElevationTypeDefault: Result:= False; // The token does not have a linked token. (UAC disabled) TokenElevationTypeFull: Result:= True; // The token is an elevated token. (Administrator) TokenElevationTypeLimited: Result:= False; // The token is a limited token. (User) end; end; end; 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 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(UTF8Decode(Target)))); OleCheckUTF8(ISLink.SetArguments(PWideChar(TargetArguments))); OleCheckUTF8(ISLink.SetWorkingDirectory(PWideChar(UTF8Decode(ExtractFilePath(Target))))); { Get the desktop location } LinkName := UTF8Decode(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 InitErrorMode; begin SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOOPENFILEERRORBOX); 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; initialization if (IsWow64) then begin Pointer(Wow64DisableWow64FsRedirection):= GetProcAddress(GetModuleHandle(Kernel32), 'Wow64DisableWow64FsRedirection'); Pointer(Wow64RevertWow64FsRedirection):= GetProcAddress(GetModuleHandle(Kernel32), 'Wow64RevertWow64FsRedirection'); end; end. doublecmd-0.9.8/src/platform/win/ulistgetpreviewbitmap.pas0000644000175000001440000000441213351715131023103 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, 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:= Graphics.TBitmap.Create; Result.Handle:= Bitmap; Exit; end; end; end; end; Result:= nil; end; initialization TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-0.9.8/src/platform/win/uicofiles.pas0000644000175000001440000006332611766020706020444 0ustar alexxusers// Copyright (C) - .selfip.com // , // , . // "" , // , , // , png, , alpha-, // 32 true color . // // , , // // , http://janych.selfip.com/examples/Delphi/Icons/ // ********************************************************************************************* // Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) // Add some changes for compiling under FPC/Lazarus // Add function CreateIconFromHandle unit uIcoFiles; {$mode delphi} interface uses Classes,Graphics,Windows, JwaWinGDI; {$ASSERTIONS ON} const rc3_StockIcon = 0; rc3_Icon = 1; rc3_Cursor = 2; { currentlly defined blend function } AC_SRC_OVER = $00; AC_SRC_ALPHA = $01; type TCursorOrIcon = packed record Reserved: Word; wType: Word; Count: Word; end; TIconRec = packed record // Graphics Width: Byte; Height: Byte; Colors: Word; Reserved1: Word; Reserved2: Word; DIBSize: Longint; DIBOffset: Longint; end; TBits = array of Byte; TIconData = packed record // Info: TIconRec; // BitmapInfo, // , MaskBitmapInfo: PBitmapInfo; // - , needMaskBitmapInfo ImageLineWidth, // IsValidAlpha ConvertToPNG MaskLineWidth: Integer; // ConvertToPNG ImageBits: TBits; // MaskBits: TBits; // iRgbTable: integer; // , BitmapInfo end; TIcons = array of TIconData; // "" type TIcoFile = class(TComponent) private FIcons: TIcons; public destructor Destroy;override; procedure loadFromStream(Stream:TStream); procedure loadFromHandle(h:hicon); procedure saveTrueColorFrom32(icoNo:integer;out IconData:TIconData); procedure saveToStream(Stream:TStream); procedure check; procedure draw(icoNo,x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean);overload; procedure draw(IconData:TIconData;x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean);overload; function IsValidAlpha(icoNo:integer): boolean; // , - property Icons: TIcons read FIcons write FIcons; { procedure ConvertToPNG(icoNo:integer;Stream:TStream); procedure saveAsPng(icoNo:integer;fn:string); } procedure Add(IconData:TIconData); procedure AddCopy(IconData:TIconData); procedure DestroyIconData(IconData: TIconData); end; function getIconHandleForFile(fn:string;large:boolean): hicon; function CreateIconFromHandle(IconHandle : HIcon) : TIcon; implementation uses sysUtils, ShellAPI; // getIconHandleForFile //pngimage; // ConvertToPNG/saveAsPng, , type TRGBQuadArray = array[byte] of TRGBQuad; PRGBQuadArray = ^TRGBQuadArray; function BytesPerScanline(PixelsPerScanline, BitsPerPixel, Alignment: Longint): Longint; begin Dec(Alignment); Result := ((PixelsPerScanline * BitsPerPixel) + Alignment) and not Alignment; Result := Result div 8; end; { TIcoFile } destructor TIcoFile.Destroy; var i: integer; begin if Length(FIcons) > 0 then for i:=low(FIcons) to high(FIcons) do DestroyIconData(FIcons[i]); inherited; end; procedure TIcoFile.loadFromStream(Stream:TStream); var FileHeader: TCursorOrIcon; i,Size: integer; begin Stream.ReadBuffer(FileHeader,SizeOf(FileHeader)); // if (FileHeader.Reserved<>0) or not (FileHeader.wType in [RC3_ICON,RC3_CURSOR]) then raise Exception.Create('Invalid icon'); SetLength(FIcons,FileHeader.Count); // . Stream 1 for i:=0 to FileHeader.Count-1 do // - with FIcons[i] do Stream.ReadBuffer(Info,SizeOf(TIconRec)); for i:=0 to FileHeader.Count-1 do begin with FIcons[i] do begin Stream.Position := Info.DIBOffset; getMem(BitmapInfo,SizeOf(BitmapInfo^.bmiHeader)); Stream.ReadBuffer(BitmapInfo^.bmiHeader,SizeOf(BitmapInfo^.bmiHeader)); // with BitmapInfo^.bmiHeader do begin if biBitCount > 16 then iRgbTable := 0 else if (biBitCount < 16) then iRgbTable := (1 shl biBitCount)*sizeof(RGBQUAD) else Assert(false); // end; BitmapInfo := ReallocMemory(BitmapInfo,sizeof(BITMAPINFOHEADER)+iRgbTable); if iRgbTable <> 0 then Stream.ReadBuffer(BitmapInfo^.bmiColors,iRgbTable); with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := (biHeight div 2)*ImageLineWidth; // SetLength(ImageBits,Size); // Stream.ReadBuffer(ImageBits[0],Size); // MaskLineWidth := BytesPerScanline(biWidth,1,32); Size := (biHeight div 2)*MaskLineWidth; // (1-) Assert((biWidth+31) div 32*4*(biHeight div 2) = Size); end; SetLength(MaskBits,Size); Stream.ReadBuffer(MaskBits[0],Size); // end; end; end; function InternalGetDIB(Bitmap:HBITMAP;out iRgbTable:integer;out BitmapInfo:PBitmapInfo;var Bits:TBits): Boolean; var DC: HDC; DS: TDIBSection; Bytes: Integer; begin iRgbTable := 0; getMem(BitmapInfo,SizeOf(TBitmapInfo.bmiHeader)); try FillChar(BitmapInfo^.bmiHeader,sizeof(TBitmapInfo.bmiHeader),0); with BitmapInfo^ do begin DS.dsbmih.biSize := 0; Bytes := GetObject(Bitmap,SizeOf(DS),@DS); Assert(Bytes<>0); if (Bytes>=(sizeof(DS.dsbm)+sizeof(DS.dsbmih))) and (DS.dsbmih.biSize>=DWORD(sizeof(DS.dsbmih))) then bmiHeader := DS.dsbmih else begin bmiHeader.biSize := SizeOf(bmiHeader); bmiHeader.biWidth := DS.dsbm.bmWidth; bmiHeader.biHeight := DS.dsbm.bmHeight; bmiHeader.biBitCount := DS.dsbm.bmBitsPixel; bmiHeader.biPlanes := DS.dsbm.bmPlanes; end; if bmiHeader.biClrImportant > bmiHeader.biClrUsed then bmiHeader.biClrImportant := bmiHeader.biClrUsed; if bmiHeader.biSizeImage = 0 then bmiHeader.biSizeImage := BytesPerScanLine(bmiHeader.biWidth,bmiHeader.biBitCount,32)*Abs(bmiHeader.biHeight); Assert(bmiHeader.biCompression=0); if bmiHeader.biBitCount > 16 then iRgbTable := 0 else if bmiHeader.biClrUsed = 0 then iRgbTable := SizeOf(TRGBQuad)*(1 shl bmiHeader.biBitCount) else iRgbTable := SizeOf(TRGBQuad)*bmiHeader.biClrUsed; end; if iRgbTable > 0 then BitmapInfo := ReallocMemory(BitmapInfo,SizeOf(TBitmapInfoHeader)+iRgbTable); setLength(Bits,BitmapInfo^.bmiHeader.biSizeImage); DC := CreateCompatibleDC(0); try Result := GetDIBits(DC,Bitmap,0,BitmapInfo^.bmiHeader.biHeight,@Bits[0],BitmapInfo^,DIB_RGB_COLORS)<>0; finally DeleteDC(DC); end; except freeMem(BitmapInfo); BitmapInfo := nil; raise; end; end; procedure TIcoFile.loadFromHandle(h:hicon); var IconInfo: TIconInfo; Size: Cardinal; i: integer; begin if not GetIconInfo(h, IconInfo) then Exit; try try setLength(FIcons,length(FIcons)+1); with FIcons[high(FIcons)] do begin InternalGetDIB(IconInfo.hbmColor,iRgbTable,BitmapInfo,ImageBits); InternalGetDIB(IconInfo.hbmMask,i,MaskBitmapInfo,MaskBits); // MaskBitmapInfo , } with Info do begin Colors := 0; Width := BitmapInfo^.bmiHeader.biWidth; Height := BitmapInfo^.bmiHeader.biHeight; Reserved1 := MaskBitmapInfo^.bmiHeader.biBitCount; Reserved2 := BitmapInfo^.bmiHeader.biBitCount; DIBSize := MaskBitmapInfo^.bmiHeader.biSizeImage+DWORD(iRgbTable)+BitmapInfo^.bmiHeader.biSize+BitmapInfo^.bmiHeader.biSizeImage; DIBOffset := -1; // . end; with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := biHeight*ImageLineWidth; // Assert(Size=biSizeImage); biHeight := biHeight*2; // - end; with MaskBitmapInfo^.bmiHeader do begin MaskLineWidth := BytesPerScanline(biWidth,biBitCount,32); Assert((biWidth+31) div 32*4 = MaskLineWidth); // Size := biHeight*MaskLineWidth; // (1-) Assert(Size=biSizeImage); end; end; except setLength(FIcons,length(FIcons)-1); end; finally DeleteObject(IconInfo.hbmColor); DeleteObject(IconInfo.hbmMask); end; end; procedure TIcoFile.saveTrueColorFrom32(icoNo:integer;out IconData:TIconData); var useAlpha: boolean; Bitmap1,Bitmap2: Graphics.TBitmap; Size: integer; procedure setNewBitmap(h:HBITMAP); begin with IconData do begin if BitmapInfo <> nil then begin freeMem(BitmapInfo); BitmapInfo := nil; end; InternalGetDIB(h,iRgbTable,BitmapInfo,ImageBits); Assert(BitmapInfo <> nil); with Info do begin Colors := 0; Width := BitmapInfo^.bmiHeader.biWidth; Height := BitmapInfo^.bmiHeader.biHeight; Reserved1 := MaskBitmapInfo^.bmiHeader.biBitCount; Reserved2 := BitmapInfo^.bmiHeader.biBitCount; DIBSize := MaskBitmapInfo^.bmiHeader.biSizeImage+DWORD(iRgbTable)+BitmapInfo^.bmiHeader.biSize+BitmapInfo^.bmiHeader.biSizeImage; DIBOffset := -1; // . end; with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := biHeight*ImageLineWidth; // Assert(Size=biSizeImage); biHeight := biHeight*2; end; end; end; begin useAlpha := FIcons[icoNo].BitmapInfo.bmiHeader.biBitCount=32; if useAlpha then useAlpha := IsValidAlpha(icoNo); try IconData := FIcons[high(FIcons)]; Bitmap1 := Graphics.TBitmap.Create; Bitmap2 := Graphics.TBitmap.Create; try with IconData do begin MaskBits := copy(FIcons[high(FIcons)].MaskBits); getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); move(FIcons[high(FIcons)].MaskBitmapInfo^,MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); with MaskBitmapInfo^.bmiHeader do begin Assert(MaskLineWidth=BytesPerScanline(biWidth,biBitCount,32)); MaskLineWidth := BytesPerScanline(biWidth,biBitCount,32); Assert((biWidth+31) div 32*4 = MaskLineWidth); Size := biHeight*MaskLineWidth; Assert(Size=biSizeImage); end; BitmapInfo := nil; // , with FIcons[high(FIcons)] do begin Bitmap2.Width := Info.Width; Bitmap2.Height := Info.Height; Bitmap2.PixelFormat := pf24bit; if useAlpha then begin Bitmap1.Width := Info.Width; Bitmap1.Height := Info.Height; Bitmap1.PixelFormat := pf24bit; Bitmap1.Canvas.Brush.Color := clWhite; Bitmap1.Canvas.FillRect(Classes.Rect(0,0,Bitmap1.Width,Bitmap1.Height)); // Bitmap1 setNewBitmap(Bitmap1.Handle); Bitmap2.Canvas.Brush.Color := clWhite; Bitmap2.Canvas.FillRect(Classes.Rect(0,0,Bitmap2.Width,Bitmap2.Height)); draw(IconData,0,0,Bitmap2.Canvas.Handle,true,true,false); // - draw(IcoNo,0,0,Bitmap2.Canvas.Handle,true,true,useAlpha); end else begin // , Bitmap2.Canvas.Brush.Color := clBlack; Bitmap2.Canvas.FillRect(Classes.Rect(0,0,Bitmap2.Width,Bitmap2.Height)); draw(IcoNo,0,0,Bitmap2.Canvas.Handle,true,true,useAlpha); end; setNewBitmap(Bitmap2.Handle); end; end; finally Bitmap1.Free; Bitmap2.Free; end; except setLength(FIcons,length(FIcons)-1); end; end; procedure TIcoFile.saveToStream(Stream:TStream); var FileHeader: TCursorOrIcon; i: integer; offset: integer; begin FileHeader.Reserved := 0; FileHeader.wType := RC3_ICON; FileHeader.Count := length(FIcons); Stream.WriteBuffer(FileHeader,SizeOf(FileHeader)); offset := Stream.Position+length(FIcons)*SizeOf(TIconRec); // if Length(FIcons) > 0 then begin for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Info.DIBOffset := offset; Stream.WriteBuffer(Info,SizeOf(TIconRec)); offset := offset+SizeOf(BitmapInfo^.bmiHeader)+iRgbTable+length(ImageBits)+length(MaskBits); end; for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Stream.WriteBuffer(BitmapInfo^.bmiHeader,SizeOf(BitmapInfo^.bmiHeader)+iRgbTable); Stream.WriteBuffer(ImageBits[0],length(ImageBits)); Stream.WriteBuffer(MaskBits[0],length(MaskBits)); end; end; end; procedure TIcoFile.check; var i: integer; begin // , , . // , // . // " - ." if Length(FIcons) > 0 then for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Assert((Info.Reserved1=0) = (Info.Reserved2=0)); // Assert((Info.Colors<>0) or (Info.Reserved1<>0)); Assert(Info.Reserved1 in [0,1]); with BitmapInfo^.bmiHeader do begin Assert(biSize=sizeOf(BitmapInfo^.bmiHeader)); Assert(Info.Width=biWidth); Assert(Info.Height*2=biHeight); Assert(biPlanes=1); Assert(Info.Reserved2 in [0,biBitCount]); Assert(biBitCount in [1,4,8,16,24,32]); Assert(biCompression=BI_RGB{=0}); Assert(biXPelsPerMeter=0); Assert(biYPelsPerMeter=0); end; end; end; procedure TIcoFile.draw(icoNo,x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean); begin draw(Icons[icoNo],x,y,dest,drawMask,drawImage,drawAlpha); end; procedure TIcoFile.draw(IconData:TIconData;x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean); var h,hdcColor,hdcMask: hdc; pcolorBits: pointer; colorBitmap,hOldC,maskBitmap,hOldM: HBITMAP; pmaskBits: pointer; blend: BLENDFUNCTION; procedure needMaskBitmapInfo(var IconData:TIconData); begin with IconData do begin if MaskBitmapInfo <> nil then exit; // getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); FillChar(MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2,0); with MaskBitmapInfo^ do begin bmiHeader.biSize := sizeof(BITMAPINFOHEADER); bmiHeader.biWidth := BitmapInfo^.bmiHeader.biWidth; bmiHeader.biHeight := BitmapInfo^.bmiHeader.biHeight; bmiHeader.biPlanes := 1; bmiHeader.biBitCount := 1; bmiHeader.biSizeImage := length(MaskBits); bmiColors[0].rgbReserved := 0; bmiColors[0].rgbRed := 0; bmiColors[0].rgbBlue := 0; bmiColors[0].rgbGreen := 0; with PRGBQuadArray(@bmiColors)^[1] do begin rgbReserved := 0; rgbRed := 255; rgbBlue := 255; rgbGreen := 255; end; end; end; end; begin h := GetDC(0); pcolorBits := nil; colorBitmap := CreateDIBSection(h,IconData.BitmapInfo,DIB_RGB_COLORS,pcolorBits,0,0); hdcColor := CreateCompatibleDC(h); ReleaseDC(0,h); hOldC := SelectObject(hdcColor,colorBitmap); with IconData do begin if not drawAlpha then begin needMaskBitmapInfo(IconData); pmaskBits := nil; maskBitmap := CreateDIBSection(0,MaskBitmapInfo,DIB_RGB_COLORS,pmaskBits,0,0); hdcMask := CreateCompatibleDC(0); hOldM := SelectObject(hdcMask,maskBitmap); SetDIBitsToDevice(hdcMask,0,0,Info.Width,Info.Height,0,0,0,Info.Height,MaskBits,MaskBitmapInfo^,DIB_RGB_COLORS); if drawMask then BitBlt(dest,0,0,Info.Width,Info.Height,hdcMask,0,0,SRCAND); end else begin // hdcMask := 0; maskBitmap := 0; hOldM := 0; end; SetDIBitsToDevice(hdcColor,0,0,Info.Width,Info.Height,0,0,0,Info.Height,ImageBits,BitmapInfo^,DIB_RGB_COLORS); if drawImage then if not drawAlpha then BitBlt(dest,0,0,Info.Width,Info.Height,hdcColor,0,0,SRCINVERT) else begin // - blend.BlendOp := AC_SRC_OVER; blend.BlendFlags := 0; blend.SourceConstantAlpha := 255; blend.AlphaFormat := AC_SRC_ALPHA; AlphaBlend(dest,0,0,Info.Width,Info.Height,hdcColor,0,0,Info.Width,Info.Height,blend); end; end; // GDI , , . SelectObject(hdcColor,hOldC); if not drawAlpha then begin SelectObject(hdcMask,hOldM); DeleteObject(hdcMask); DeleteObject(maskBitmap); end; DeleteObject(hdcColor); DeleteObject(colorBitmap); end; function TIcoFile.IsValidAlpha(icoNo:integer): boolean; var X,Y: integer; Line32: PRGBQuadArray; begin with Icons[icoNo] do begin result := false; if BitmapInfo.bmiHeader.biBitCount <= 24 then exit; Result := true; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; for X:=0 to Info.Width-1 do // shGetFileInfo - if not Line32[X].rgbReserved=0 then exit; end; end; Result := false; end; function getIconHandleForFile(fn:string;large:boolean): hicon; var shfi: TShFileInfo; flag: integer; begin fillChar(shfi,SizeOf(TShFileInfo),0); if large then flag := SHGFI_LARGEICON else flag := SHGFI_SMALLICON; shGetFileInfo(pchar(fn),0,shfi,SizeOf(shfi),SHGFI_ICON or flag or SHGFI_SYSICONINDEX); Result := shfi.hIcon; end; function CreateIconFromHandle(IconHandle : HIcon) : TIcon; var I : Integer; IconData : TIconData; IcoFile : TIcoFile = nil; TempStream : TMemoryStream = nil; ColorDepth : Integer = 32; ActiveWindow: HWND; DeviceContext: HDC; begin Result := TIcon.Create; ActiveWindow := GetActiveWindow; DeviceContext := GetDC(ActiveWindow); // Get display color depth if (DeviceContext <> 0) then begin ColorDepth := GetDeviceCaps(DeviceContext, BITSPIXEL); ReleaseDC(ActiveWindow, DeviceContext); end; // Alpha channel can be used only with 24-32 bit color depth // otherwise use standard method to get icon from handle // because our method don't work in this case if (ColorDepth < 24) then Result.Handle:= IconHandle else begin IcoFile := TIcoFile.Create(nil); TempStream := TMemoryStream.Create; try IcoFile.loadFromHandle(IconHandle); if Length(IcoFile.Icons) = 0 then Result.Handle:= IconHandle else begin for I := Low(IcoFile.Icons) to High(IcoFile.Icons) do begin // If icon has invalid alpha channel // then display it as 24 bit icon if not IcoFile.IsValidAlpha(I) then begin IcoFile.saveTrueColorFrom32(I, IconData); IcoFile.DestroyIconData(IcoFile.Icons[I]); IcoFile.Icons[I] := IconData; end; end; IcoFile.saveToStream(TempStream); TempStream.Seek(0, soBeginning); Result.LoadFromStream(TempStream); end; finally FreeAndNil(IcoFile); FreeAndNil(TempStream); end; end; end; { type TChunkIHDRHack = class(TChunkIHDR); procedure Convert(const PNG:TPNGObject;const IconData:TIconData); var X,Y,Y2,BitCount: Integer; BitBuf: Byte; Line32: PRGBQuadArray; PNGLine: pRGBLine; Alpha: PByteArray; Mask: PByte; OnlyAlpha: boolean; begin with IconData do begin PNG.Header.Width := Info.Width; PNG.Header.Height := Info.Height; PNG.Header.BitDepth := 8; PNG.Header.ColorType := COLOR_RGBALPHA; TChunkIHDRHack(PNG.Header).PrepareImageData; BitBuf := 0; onlyAlpha := true; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; for X:=0 to Info.Width-1 do if Line32[X].rgbReserved=0 then begin onlyAlpha := false; break; end; if not onlyAlpha then break; end; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; Mask := @MaskBits[Y*MaskLineWidth]; Y2 := Info.Height-Y-1; Alpha := PNG.AlphaScanline[Y2]; PNGLine := PNG.ScanLine[Y2]; BitCount := 0; for X:=0 to Info.Width-1 do begin if BitCount=0 then begin BitCount := 8; BitBuf := Mask^; Inc(Mask); end; if BitBuf and $80=0 then with PNGLine[X],Line32[X] do begin rgbtRed := rgbRed; rgbtGreen := rgbGreen; rgbtBlue := rgbBlue; if not onlyAlpha then Alpha[X] := rgbReserved else Alpha[X] := $FF; end else with PNGLine[X] do begin rgbtRed := 0; rgbtGreen := 0; rgbtBlue := 0; Alpha[X] := 0; end; BitBuf := BitBuf shl 1; Dec(BitCount); end; end; end; end; procedure TIcoFile.ConvertToPNG(icoNo:integer;Stream:TStream); var PNG: TPNGObject; begin with Icons[icoNo] do begin Assert(BitmapInfo.bmiHeader.biBitCount>=24); if IsValidAlpha(icoNo) then PNG := TPNGObject.CreateBlank(COLOR_RGBALPHA,8,Info.Width,Info.Height) else PNG := TPNGObject.CreateBlank(COLOR_RGB,8,Info.Width,Info.Height); try Convert(PNG,Icons[icoNo]); PNG.CompressionLevel := 9; PNG.SaveToStream(Stream); finally PNG.Free; end; end; end; procedure TIcoFile.saveAsPng(icoNo:integer;fn:string); var Stream: TStream; begin Stream := TFileStream.Create(fn,fmCreate); try ConvertToPNG(icoNo,Stream); finally Stream.Free; end; end; } procedure TIcoFile.Add(IconData:TIconData); begin setLength(FIcons,length(FIcons)+1); Icons[high(FIcons)] := IconData; end; procedure TIcoFile.AddCopy(IconData:TIconData); begin setLength(FIcons,length(FIcons)+1); Icons[high(FIcons)] := IconData; with Icons[high(FIcons)] do begin ImageBits := copy(IconData.ImageBits); MaskBits := copy(IconData.MaskBits); getMem(BitmapInfo,sizeof(BITMAPINFOHEADER)+iRgbTable); getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); move(IconData.BitmapInfo^,BitmapInfo^,sizeof(BITMAPINFOHEADER)+iRgbTable); move(IconData.MaskBitmapInfo^,MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); end; end; procedure TIcoFile.DestroyIconData(IconData: TIconData); begin with IconData do begin if BitmapInfo<>nil then FreeMem(BitmapInfo); BitmapInfo := nil; if MaskBitmapInfo<>nil then FreeMem(MaskBitmapInfo); MaskBitmapInfo := nil; end; end; end. doublecmd-0.9.8/src/platform/win/ugdiplus.pas0000644000175000001440000003755211740433676020326 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains some GDI+ API functions Copyright (C) 2008 Koblov Alexander (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 objfpc}{$H+} interface uses Windows; 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 = ( // ... 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; type // functions prototypes TGdiplusStartup = function (out token: ULONG; input: PGdiplusStartupInput; output: PGdiplusStartupOutput): GPSTATUS; stdcall; TGdiplusShutdown = procedure (token: ULONG); stdcall; TGdipCreateBitmapFromHICON = function (hicon: HICON; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromHBITMAP = function (hbitmap: HBITMAP; hpalette: HPALETTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromScan0 = function (Width, Height: Integer; Stride: Integer; PixelFormat: GPPIXELFORMAT; Scan0: LPBYTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromGraphics = function (Width, Height: Integer; graphics: GPGRAPHICS; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateFromHDC = function (hdc: HDC; out graphics: GPGRAPHICS): GPSTATUS; stdcall; TGdipDrawImageRectI = function (graphics: GPGRAPHICS; image: GPIMAGE; x: Integer; y: Integer; width: Integer; height: Integer): GPSTATUS; stdcall; TGdipDrawImageRectRectI = 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; TGdipDisposeImage = function (image: GPIMAGE): GPSTATUS; stdcall; TGdipDeleteGraphics = function (graphics: GPGRAPHICS): GPSTATUS; stdcall; TGdipGraphicsClear = function (graphics: GPGRAPHICS; color: Integer): GPSTATUS; stdcall; TGdipSetInterpolationMode = function (graphics: GPGRAPHICS; interpolation: Integer): GPSTATUS; stdcall; TGdipCreateImageAttributes = function (out imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; TGdipDisposeImageAttributes = function (imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; TGdipSetImageAttributesColorKeys = function (imageattr: GPIMAGEATTRIBUTES; ColorAdjustType: GpColorAdjustType; Enable: BOOL; ColorLow: LONG; ColorHigh: LONG): GPSTATUS; stdcall; TGdipBitmapLockBits = function (bitmap: GPBITMAP; rect: LPRECT; flags: UINT; PixelFormat: GPPIXELFORMAT; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; TGdipBitmapUnlockBits = function (bitmap: GPBITMAP; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; TGdipGetImagePixelFormat = function (image: GPIMAGE; out pixelFormat: GPPIXELFORMAT): GPSTATUS; stdcall; var IsGdiPlusLoaded: Boolean = False; GdiplusStartup: TGdiplusStartup; GdiplusShutdown: TGdiplusShutdown; GdipCreateBitmapFromHICON: TGdipCreateBitmapFromHICON; GdipCreateBitmapFromHBITMAP: TGdipCreateBitmapFromHBITMAP; GdipCreateBitmapFromScan0: TGdipCreateBitmapFromScan0; GdipCreateBitmapFromGraphics: TGdipCreateBitmapFromGraphics; GdipCreateFromHDC: TGdipCreateFromHDC; GdipDrawImageRectI: TGdipDrawImageRectI; GdipDrawImageRectRectI: TGdipDrawImageRectRectI; GdipDisposeImage: TGdipDisposeImage; GdipDeleteGraphics: TGdipDeleteGraphics; GdipGraphicsClear: TGdipGraphicsClear; GdipSetInterpolationMode: TGdipSetInterpolationMode; GdipCreateImageAttributes: TGdipCreateImageAttributes; GdipDisposeImageAttributes: TGdipDisposeImageAttributes; GdipSetImageAttributesColorKeys: TGdipSetImageAttributesColorKeys; GdipBitmapLockBits: TGdipBitmapLockBits; GdipBitmapUnlockBits: TGdipBitmapUnlockBits; GdipGetImagePixelFormat: TGdipGetImagePixelFormat; function GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; function GdiPlusStretchDraw(himl: hImageList; ImageIndex: Integer; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; implementation uses CommCtrl; 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 GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; 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; 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; initialization hLib:= LoadLibrary('gdiplus.dll'); IsGdiPlusLoaded:= (hLib <> 0); if IsGdiPlusLoaded then begin GdiplusStartup:= TGdiplusStartup(GetProcAddress(hLib, 'GdiplusStartup')); GdiplusShutdown:= TGdiplusShutdown(GetProcAddress(hLib, 'GdiplusShutdown')); GdipCreateBitmapFromHICON:= TGdipCreateBitmapFromHICON(GetProcAddress(hLib, 'GdipCreateBitmapFromHICON')); GdipCreateBitmapFromHBITMAP:= TGdipCreateBitmapFromHBITMAP(GetProcAddress(hLib, 'GdipCreateBitmapFromHBITMAP')); GdipCreateBitmapFromScan0:= TGdipCreateBitmapFromScan0(GetProcAddress(hLib, 'GdipCreateBitmapFromScan0')); GdipCreateBitmapFromGraphics:= TGdipCreateBitmapFromGraphics(GetProcAddress(hLib, 'GdipCreateBitmapFromGraphics')); GdipCreateFromHDC:= TGdipCreateFromHDC(GetProcAddress(hLib, 'GdipCreateFromHDC')); GdipDrawImageRectI:= TGdipDrawImageRectI(GetProcAddress(hLib, 'GdipDrawImageRectI')); GdipDrawImageRectRectI:= TGdipDrawImageRectRectI(GetProcAddress(hLib, 'GdipDrawImageRectRectI')); GdipDisposeImage:= TGdipDisposeImage(GetProcAddress(hLib, 'GdipDisposeImage')); GdipDeleteGraphics:= TGdipDeleteGraphics(GetProcAddress(hLib, 'GdipDeleteGraphics')); GdipGraphicsClear:= TGdipGraphicsClear(GetProcAddress(hLib, 'GdipGraphicsClear')); GdipSetInterpolationMode:= TGdipSetInterpolationMode(GetProcAddress(hLib, 'GdipSetInterpolationMode')); GdipCreateImageAttributes:= TGdipCreateImageAttributes(GetProcAddress(hLib, 'GdipCreateImageAttributes')); GdipDisposeImageAttributes:= TGdipDisposeImageAttributes(GetProcAddress(hLib, 'GdipDisposeImageAttributes')); GdipSetImageAttributesColorKeys:= TGdipSetImageAttributesColorKeys(GetProcAddress(hLib, 'GdipSetImageAttributesColorKeys')); GdipBitmapLockBits:= TGdipBitmapLockBits(GetProcAddress(hLib, 'GdipBitmapLockBits')); GdipBitmapUnlockBits:= TGdipBitmapUnlockBits(GetProcAddress(hLib, 'GdipBitmapUnlockBits')); GdipGetImagePixelFormat:= TGdipGetImagePixelFormat(GetProcAddress(hLib, 'GdipGetImagePixelFormat')); // Initialize GDI+ StartupInput structure StartupInput.DebugEventCallback:= nil; StartupInput.SuppressBackgroundThread:= False; StartupInput.SuppressExternalCodecs:= False; StartupInput.GdiplusVersion:= 1; // Initialize GDI+ GdiplusStartup(gdiplusToken, @StartupInput, nil); end; finalization if IsGdiPlusLoaded then begin // Close GDI + GdiplusShutdown(gdiplusToken); GdiplusStartup:= nil; GdiplusShutdown:= nil; GdipCreateBitmapFromHICON:= nil; GdipCreateBitmapFromHBITMAP:= nil; GdipCreateBitmapFromScan0:= nil; GdipCreateBitmapFromGraphics:= nil; GdipCreateFromHDC:= nil; GdipDrawImageRectI:= nil; GdipDrawImageRectRectI:= nil; GdipDisposeImage:= nil; GdipDeleteGraphics:= nil; GdipGraphicsClear:= nil; GdipSetInterpolationMode:= nil; GdipCreateImageAttributes:= nil; GdipDisposeImageAttributes:= nil; GdipSetImageAttributesColorKeys:= nil; GdipBitmapLockBits:= nil; GdipBitmapUnlockBits:= nil; GdipGetImagePixelFormat:= nil; FreeLibrary(hLib); end; end. doublecmd-0.9.8/src/platform/win/ufileunlock.pas0000644000175000001440000004171513472537516021010 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, 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:= UTF8Encode(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:= UTF8Decode(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(UTF8Decode(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:= UTF8Encode(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:= UTF8Encode(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-0.9.8/src/platform/win/uexceptionhandlerfix.pas0000644000175000001440000001375011740433676022714 0ustar alexxusers{ Replaces Free Pascal exception handler Fixes bug: http://doublecmd.sourceforge.net/mantisbt/view.php?id=50 Uses workaround from: http://bugs.freepascal.org/view.php?id=17280 http://bugs.freepascal.org/view.php?id=12974 } unit uExceptionHandlerFix; {$mode delphi} interface implementation uses Windows, SysUtils; type M128A = record Low : QWord; High : Int64; end; PContext = ^TContext; TContext = record P1Home : QWord; P2Home : QWord; P3Home : QWord; P4Home : QWord; P5Home : QWord; P6Home : QWord; ContextFlags : DWord; MxCsr : DWord; SegCs : word; SegDs : word; SegEs : word; SegFs : word; SegGs : word; SegSs : word; EFlags : DWord; Dr0 : QWord; Dr1 : QWord; Dr2 : QWord; Dr3 : QWord; Dr6 : QWord; Dr7 : QWord; Rax : QWord; Rcx : QWord; Rdx : QWord; Rbx : QWord; Rsp : QWord; Rbp : QWord; Rsi : QWord; Rdi : QWord; R8 : QWord; R9 : QWord; R10 : QWord; R11 : QWord; R12 : QWord; R13 : QWord; R14 : QWord; R15 : QWord; Rip : QWord; Header : array[0..1] of M128A; Legacy : array[0..7] of M128A; Xmm0 : M128A; Xmm1 : M128A; Xmm2 : M128A; Xmm3 : M128A; Xmm4 : M128A; Xmm5 : M128A; Xmm6 : M128A; Xmm7 : M128A; Xmm8 : M128A; Xmm9 : M128A; Xmm10 : M128A; Xmm11 : M128A; Xmm12 : M128A; Xmm13 : M128A; Xmm14 : M128A; Xmm15 : M128A; VectorRegister : array[0..25] of M128A; VectorControl : QWord; DebugControl : QWord; LastBranchToRip : QWord; LastBranchFromRip : QWord; LastExceptionToRip : QWord; LastExceptionFromRip : QWord; end; type PExceptionRecord = ^TExceptionRecord; TExceptionRecord = record ExceptionCode : DWord; ExceptionFlags : DWord; ExceptionRecord : PExceptionRecord; ExceptionAddress : Pointer; NumberParameters : DWord; ExceptionInformation : array[0..EXCEPTION_MAXIMUM_PARAMETERS-1] of Pointer; end; PExceptionPointers = ^TExceptionPointers; TExceptionPointers = packed record ExceptionRecord : PExceptionRecord; ContextRecord : PContext; end; type PVectoredExceptionNode = ^TVectoredExceptionNode; TVectoredExceptionNode = record m_pNextNode: PVectoredExceptionNode; m_pPreviousNode: PVectoredExceptionNode; m_Unknown: Pointer; m_pfnVectoredHandler: Pointer; end; function AddVectoredExceptionHandler(FirstHandler: ULONG; VectoredHandler: Pointer): Pointer; stdcall; external 'kernel32.dll' name 'AddVectoredExceptionHandler'; function RemoveVectoredExceptionHandler(VectoredHandlerHandle: Pointer): ULONG; stdcall; external 'kernel32.dll' name 'RemoveVectoredExceptionHandler'; function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: Pointer; var hModule: THandle): BOOL; stdcall; external 'kernel32.dll' name 'GetModuleHandleExA'; function RtlEncodePointer(pfnVectoredHandler: Pointer): Pointer; stdcall; external 'ntdll' name 'RtlEncodePointer'; const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2; GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4; // These entries are linked from FPC's RTL. // If the RTL changes, the entries should be changed accordingly. function syswin64_x86_64_exception_handler(excep : pointer) : Longint; external name 'SYSTEM_SYSWIN64_X86_64_EXCEPTION_HANDLER$PEXCEPTIONPOINTERS$$LONGINT'; var _fltused: int64 external name '_fltused'; // Test if the exception address resides in our program. function CheckOurModule(p: Pointer): boolean; var ModuleWithException: THandle; OurModule: THandle; Flags: DWORD; begin Result := False; { It's necessary to keep refcount intact. } Flags := GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS or GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT; with PExceptionPointers(p)^.ExceptionRecord^ do Result := GetModuleHandleEx(Flags, ExceptionAddress, ModuleWithException) and GetModuleHandleEx(Flags, @CheckOurModule, OurModule) and (ModuleWithException = OurModule); end; function ProcessException(p: Pointer): longint; stdcall; var _SS: PCardinal; Saved: TExceptionRecord; begin Result := EXCEPTION_CONTINUE_SEARCH; if CheckOurModule(p) then begin Saved := PExceptionPointers(p)^.ExceptionRecord^; with PExceptionPointers(p)^.ExceptionRecord^ do begin // Dirty hack - in system.pp, private variable _SS is just after public _fltused. This might change in the future. _SS := @_fltused; inc(PBYTE(_SS), sizeof(int64)); _SS^ := PExceptionPointers(p)^.ContextRecord^.SegSs; // Trying to unwind the stack in FPC's way - by walking the linked list of exception handers. Result := syswin64_x86_64_exception_handler(p); end; if Result <> 0 then begin // The FPC's unwind failed for some reason. // Restoring the Exception record, so the program's exception handlers can try to recover from the exception. PExceptionPointers(p)^.ExceptionRecord^ := Saved; // You can insert some kind of logging etc here. // ... end; end; end; var VectoredExceptionHandler: PVectoredExceptionNode = nil; procedure InstallExceptionHandler; var HandlerAddress: Pointer; Node: PVectoredExceptionNode; begin // Get Free Pascal exception handler encoded address HandlerAddress := RtlEncodePointer(@syswin64_x86_64_exception_handler); VectoredExceptionHandler := AddVectoredExceptionHandler(1, @ProcessException); // Find Free Pascal exception handler and remove it Node:= VectoredExceptionHandler^.m_pNextNode; repeat if (Node^.m_pfnVectoredHandler = HandlerAddress) then begin RemoveVectoredExceptionHandler(Node); Break; end; Node := Node^.m_pNextNode; until (Node = nil); end; procedure UninstallExceptionHandler; begin if Assigned(VectoredExceptionHandler) then begin RemoveVectoredExceptionHandler(VectoredExceptionHandler); VectoredExceptionHandler := nil; end; end; initialization InstallExceptionHandler; finalization UninstallExceptionHandler; end. doublecmd-0.9.8/src/platform/win/udclass.pas0000644000175000001440000000540213465251004020102 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Setup unique window class name for main form Copyright (C) 2016-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 uDClass; {$mode objfpc}{$H+} interface implementation uses Classes, SysUtils, Win32Int, WSLCLClasses, Forms, Windows, Win32Proc, Controls, WSForms, Win32WSForms, LCLType, fMain; const ClassNameW: UnicodeString = 'DClass'#0; type { TWin32WSCustomFormEx } TWin32WSCustomFormEx = class(TWin32WSCustomForm) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSCustomFormEx } class function TWin32WSCustomFormEx.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var AClass: String; AMainForm: Boolean; begin AMainForm := AWinControl is TfrmMain; if AMainForm then begin AClass := ClsName; ClsName := String(ClassNameW); end; Result := inherited CreateHandle(AWinControl, AParams); if AMainForm then ClsName := AClass; end; 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 := PWideChar(ClassNameW); end; Result := Windows.RegisterClassW(@WindowClassW) <> 0; end; procedure Initialize; begin WinRegister; // Replace TCustomForm widgetset class RegisterCustomForm; RegisterWSComponent(TCustomForm, TWin32WSCustomFormEx); end; initialization Initialize; finalization Windows.UnregisterClassW(PWideChar(ClassNameW), System.HInstance); end. doublecmd-0.9.8/src/platform/win/uTotalCommander.pas0000644000175000001440000032225113422141577021554 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Creates Total Commander fake window (some plugins don't work without it) 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 } { Equivalence of some abbreviation here: TC = Total Commander DC = Double Commander } unit uTotalCommander; {$MODE DELPHI} {.$DEFINE DEBUG} 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; procedure CreateTotalCommanderWindow({%H-}hWindow: HWND); 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 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, JwaDbt, SysUtils, LCLProc, LazUTF8, //DC fOptionsMisc, uKASToolItemsExtended, DCClassesUtf8, DCOSUtils, uDebug, DCStrUtils, uPixMapManager, uShowMsg, uDCUtils, uLng, uGlobs, uGlobsPaths, DCConvertEncoding, uMyWindows; type { TTCommandEquivalence } TTCommandEquivalence = record TCCommand: string; TCIcon: longint; DCCommand: string; DCParameters: string; end; const NUMBEROFCOMMANDS = 458; //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: '' ), //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: ''; 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: ''; 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_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: ''; 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_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_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 wcFakeWndClass: TWndClassEx; //hMainWindow, {$IFDEF DEBUG} hFakeWindow: HWND; {$ENDIF} TCIconSize: integer = 32; TCNumberOfInstance: integer; TCListOfCreatedTCIconFilename: TStringList; 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; { WindowProc } function WindowProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin { Resend message to DoubleCommander main window. Disabled currently, because it may interfere with LCL, especially since the fake TotalCmd window is also a main app window (WS_OVERLAPPEDWINDOW). May be enabled in future if any plugins need this, but following messages should be skipped because they are known to cause conflict: - WM_ACTIVATEAPP Confuses LCL about which main form (window) is currently active and it stops calling OnExit events for controls (see TWinControl.WMKillFocus). } //SendMessage(hMainWindow, uiMsg, wParam, lParam); if (uiMsg = WM_SETTINGCHANGE) and (lParam <> 0) and (StrComp('Environment', {%H-}PAnsiChar(lParam)) = 0) then begin UpdateEnvironment; DCDebug('WM_SETTINGCHANGE:Environment'); end; {$IF (lcl_fullversion >= 1020000)} 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; {$ENDIF} {$IFDEF DEBUG} WriteLn(uiMsg); {$ENDIF} Result := DefWindowProc(hWnd, uiMsg, wParam, lParam); end; { CreateTotalCommanderWindow } procedure CreateTotalCommanderWindow(hWindow: HWND); begin // hMainWindow:= hWindow; FillByte(wcFakeWndClass, SizeOf(wcFakeWndClass), 0); wcFakeWndClass.cbSize := SizeOf(wcFakeWndClass); wcFakeWndClass.Style := CS_HREDRAW or CS_VREDRAW; wcFakeWndClass.lpfnWndProc := @WindowProc; wcFakeWndClass.hInstance := hInstance; wcFakeWndClass.hbrBackground := Color_BtnFace + 12; wcFakeWndClass.lpszMenuName := nil; wcFakeWndClass.lpszClassName := 'TTOTAL_CMD'; RegisterClassEx(wcFakeWndClass); // Create Total Commander fake window {$IFDEF DEBUG} hFakeWindow := {$ENDIF} CreateWindowEx(0, 'TTOTAL_CMD', 'Double Commander', WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, 0, 0, hInstance, nil); {$IFDEF DEBUG} // Show window (for debugging only) ShowWindow(hFakeWindow, SW_SHOW); {$ENDIF} end; // 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); GetClassName(Wnd, ClassName, 99); if ClassName = 'TTOTAL_CMD' then Inc(TCNumberOfInstance); 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 > 1); 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; end. doublecmd-0.9.8/src/platform/uuniqueinstance.pas0000644000175000001440000002667613463601555021117 0ustar alexxusersunit uUniqueInstance; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SimpleIPC, uCmdLineParams, RegExpr; 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, 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); IndexInstance:=1; Result:=FALSE; repeat LocalClientIPC.ServerID:=GetServerIdNameToCheck; Result:=LocalClientIPC.ServerRunning; inc(IndexInstance); until Result OR (IndexInstance>=10); 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-0.9.8/src/platform/utrash.pas0000644000175000001440000002530713530175472017172 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some functions for working with trash 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 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, {$IF DEFINED(MSWINDOWS)} Windows, ShellApi, Win32Int, InterfaceBase, uMyWindows {$ELSEIF DEFINED(UNIX)} BaseUnix, uMyUnix, DCStrUtils, uOSUtils, FileUtil {$IFDEF DARWIN} , MacOSAll, DynLibs, CocoaAll, uMyDarwin {$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 wsFileName:= UTF8Decode(FileName); // Windows before Vista don't move symlink into recycle bin // correctly, so we return False in that 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.Wnd := TWin32Widgetset(Widgetset).AppHandle; 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(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 (fpLStat(UTF8ToSys(sHomeDir), st1) >= 0) and (fpLStat(UTF8ToSys(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(UTF8Decode(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-0.9.8/src/platform/uterminal.pas0000644000175000001440000000622112612505011017640 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Terminal emulator abstract class Copyright (C) 2009-2010 Koblov Alexander (Alexx2000@mail.ru) Based on terminal emulator implementation 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 uTerminal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uCmdBox; type Cint = Integer; { TTerminal } TTerminal = class protected FChildPid: THandle; Fpty: LongInt; public {en Read info from pty } function Read_pty(var Output: String; const TimeOut: LongInt = 10): LongInt; virtual; abstract; {en Create new pty and start cmd } function Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String = ''): THandle; virtual; abstract; {en Write string to pty } function Write_pty(const Input: String): Boolean; virtual; abstract; //--------------------- function SendBreak_pty(): Boolean; virtual; abstract; // ^C function SendSignal_pty(Sig: Cint): Boolean; virtual; abstract; function SetScreenSize(ColCount, RowCount: Integer): Boolean; virtual; abstract; function SetCurrentDir(const NewDir: String): Boolean; virtual; abstract; //--------------------- function KillShell: LongInt; virtual; abstract; function CSI_GetTaskId(const buf:String):integer; virtual; abstract; //get index of sequence in CSILast list //---------------------} property ShellPid: THandle read FChildPid; property PtyPid: LongInt read Fpty; end; { TConsoleThread } TConsoleThread = class(TThread) protected FLock: System.TRTLCriticalSection; FTerm: TTerminal; FBuf: String; FRowsCount, FColsCount: Integer; FOut: TCmdBox; FShell: String; public property Terminal: TTerminal read FTerm; property RowsCount: Integer read FRowsCount write FRowsCount; property ColsCount: Integer read FColsCount write FColsCount; property CmdBox: TCmdBox read FOut write FOut; property Shell: String read FShell write FShell; end; function CreateConsoleThread: TConsoleThread; implementation uses {$IF DEFINED(WINDOWS)} uWinTerm; {$ELSEIF DEFINED(UNIX)} uUnixTerm; {$ENDIF} function CreateConsoleThread: TConsoleThread; {$IF DEFINED(WINDOWS)} begin Result:= TWinConThread.Create; end; {$ELSEIF DEFINED(UNIX)} begin Result:= TUnixConThread.Create; end; {$ENDIF} end. doublecmd-0.9.8/src/platform/utarwriter.pas0000644000175000001440000005561113445406227020075 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-0.9.8/src/platform/urandom.pas0000644000175000001440000000637313146135576017337 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-0.9.8/src/platform/upixmapmanager.pas0000644000175000001440000021076413605332007020675 0ustar alexxusers{ File name: uPixMapManager.pas Date: 2004/04/xx Author: Radek Cervinka Fast pixmap memory manager a loader Copyright (C) 2004 contributors: Copyright (C) 2006-2014 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 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 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. } uses Classes, SysUtils, Graphics, syncobjs, uFileSorting, StringHashList, uFile, uIconTheme, uDrive, uDisplayFile, uGlobs, uDCReadPSD, uOSUtils {$IF DEFINED(UNIX)} , DCFileAttributes {$IF DEFINED(DARWIN)} {$IF (FPC_FULLVERSION >= 30000)} , uDCTiffImage {$ENDIF} {$ELSE} , contnrs, uDCReadSVG, uGio {$IFDEF LCLGTK2} , 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 : TStringHashList; {en Maps icon filename to index of bitmap (in FPixmapList) for this icon. Uses absolute file names. } FPixmapsFileNames : TStringHashList; {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; FiDirLinkIconID : PtrInt; FiDirLinkBrokenIconID : PtrInt; FiLinkIconID : PtrInt; FiLinkBrokenIconID : PtrInt; FiEmblemLinkID: PtrInt; FiEmblemUnreadableID: PtrInt; FiUpDirIconID : PtrInt; FiDefaultIconID : PtrInt; FiExeIconID : PtrInt; FiArcIconID : PtrInt; FiSortAscID : PtrInt; FiSortDescID : PtrInt; {$IF DEFINED(MSWINDOWS)} FSysImgList : THandle; FiSysDirIconID : PtrInt; {$ELSEIF DEFINED(DARWIN)} FUseSystemTheme: Boolean; {$ELSEIF DEFINED(UNIX)} {en Maps file extension to MIME icon name(s). } FExtToMimeIconName: TFPDataHashTable; {$IFDEF LCLGTK2} FIconTheme: PGtkIconTheme; {$ELSE} FIconTheme: TIconTheme; {$ENDIF} FHomeFolder: String; {$ENDIF} {en Maps theme icon name to index of bitmap (in FPixmapList) for this icon. } FThemePixmapsFileNames: TStringHashList; FDCIconTheme: TIconTheme; procedure CreateIconTheme; procedure DestroyIconTheme; {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. } 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 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(WINDOWS)} {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 GetSystemFolderIcon: PtrInt; function GetSystemArchiveIcon: PtrInt; function GetSystemExecutableIcon: PtrInt; {$ENDIF} {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {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; {$ENDIF} function GetBuiltInDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; 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) : Graphics.TBitmap; function GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; function GetVirtualDriveIcon(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; 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, DCOSUtils, DCClassesUtf8, LazUTF8, uGraphics {$IFDEF LCLGTK2} , uPixMapGtk, gdk2pixbuf, gdk2, glib2 {$ENDIF} {$IFDEF MSWINDOWS} , CommCtrl, ShellAPI, Windows, DCFileAttributes, uIcoFiles, uGdiPlus, IntfGraphics, uShlObjAdditional {$ELSE} , StrUtils, Types, DCBasicTypes {$ENDIF} {$IFDEF DARWIN} , CocoaAll, MacOSAll, uClassesEx {$ENDIF} {$IFDEF RabbitVCS} , Math, uRabbitVCS {$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; var memstream: TMemoryStream; {$IFDEF MSWINDOWS} liiSource: TLazIntfImage = nil; liiDestination: TLazIntfImage = nil; ImgFormatDescription:TRawImageDescription; {$ENDIF} begin {$IFDEF MSWINDOWS} //Let's make sure we're working with 32-bits bitmap if bmBitmap.PixelFormat<>pf32bit then begin liiSource:=bmBitmap.CreateIntfImage; liiDestination:=TLazIntfImage.Create(bmBitmap.Width,bmBitmap.Height); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(bmBitmap.Width,bmBitmap.Height); liiDestination.DataDescription:=ImgFormatDescription; liiDestination.CopyPixels(liiSource); bmBitmap.FreeImage; bmBitmap.PixelFormat:=pf32bit; bmBitmap.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; {$ENDIF} if (iIconSize <> bmBitmap.Height) or (iIconSize <> bmBitmap.Width) then begin Result := Graphics.TBitMap.Create; try Result.SetSize(iIconSize, iIconSize); if bmBitmap.RawImage.Description.AlphaPrec <> 0 then // if bitmap has alpha channel Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width) else with Result do begin Canvas.Brush.Color := clBackColor; Canvas.FillRect(Canvas.ClipRect); Canvas.StretchDraw(Canvas.ClipRect, bmBitmap); { For drawing color transparent bitmaps } memstream := TMemoryStream.Create; try SaveToStream(memstream); memstream.position := 0; LoadFromStream(memstream); finally memstream.free; end; Transparent := True; if bmBitmap.RawImage.Description.MaskBitsPerPixel = 0 then TransparentColor := clBackColor; end; // with if bFreeAtEnd then FreeAndNil(bmBitmap); except FreeAndNil(Result); raise; end; end else // Don't need to stretch. begin 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; end; { TPixMapManager } { TPixMapManager.LoadBitmapFromFile } function TPixMapManager.LoadBitmapFromFile(AIconFileName: String; out ABitmap: Graphics.TBitmap): Boolean; var {$IFDEF LCLGTK2} pbPicture : PGdkPixbuf; {$ELSE} Picture: TPicture; {$ENDIF} begin Result:= False; {$IFDEF LCLGTK2} 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.Bitmap); // 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; Icon : TIcon = nil; IconFileName: String; {$ENDIF} AFile: TFile; iIndex : PtrInt; sExtFilter, sGraphicFilter : String; 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(UTF8Decode(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 try Icon:= CreateIconFromHandle(phIcon); bmStandartBitmap := Graphics.TBitMap.Create; bmStandartBitmap.Assign(Icon); bmStandartBitmap.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlResourceFileExtracted; finally FreeThenNil(Icon); end; DestroyIcon(phIconLarge); DestroyIcon(phIconSmall); end; end // GetIconResourceIndex else {$ENDIF} begin sExtFilter := UTF8LowerCase(ExtractFileExt(sFileName)) + ';'; sGraphicFilter := GraphicFilter(TGraphic); // if file is graphic if (Length(sExtFilter) > 1) and (Pos(sExtFilter, sGraphicFilter) <> 0) and mbFileExists(sFileName) then begin LoadBitmapFromFile(sFileName, bmStandartBitmap); 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.CheckAddPixmap(AIconName: String; AIconSize : Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF LCLGTK2} pbPicture : PGdkPixbuf; {$ELSE} bmpBitmap: Graphics.TBitmap; {$ENDIF} begin Result:= -1; if AIconName = EmptyStr then Exit; if AIconSize = 0 then AIconSize := gIconsSize; AIconName := ReplaceEnvVars(AIconName); if GetPathType(AIconName) = ptAbsolute then begin FPixmapsLock.Acquire; try // Determine if this file is already loaded. fileIndex := FPixmapsFileNames.Find(AIconName); if fileIndex < 0 then begin {$IFDEF LCLGTK2} 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} bmpBitmap := LoadBitmapEnhanced(AIconName, AIconSize, False, clNone, nil); if Assigned(bmpBitmap) then begin // Shrink big bitmaps before putting them into PixmapManager, // to speed up later drawing. // // Note: Transparent bitmaps may lose transparency, because // they must drawn onto a background, so we allow smaller bitmaps // up to 48x48 (icons for example) to load in full size and they // are resized upon drawing. // // TODO: // This should resize any non-transparent, // non-alpha channel bitmaps to gIconsSize // (so if Width<>gIconsSize or Height<>gIconsSize then Resize). if (bmpBitmap.Width > 48) or (bmpBitmap.Height > 48) then begin bmpBitmap := StretchBitmap(bmpBitmap, AIconSize, clBlack, True); end; Result := FPixmapList.Add(bmpBitmap); FPixmapsFileNames.Add(AIconName, Pointer(Result)); end; {$ENDIF} end else begin Result:= PtrInt(FPixmapsFileNames.List[fileIndex]^.Data); end; finally FPixmapsLock.Release; end; end else begin Result := CheckAddThemePixmap(AIconName, AIconSize); end; end; procedure TPixMapManager.CreateIconTheme; var DirList: array of string; begin {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {$IFDEF LCLGTK2} // 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)} {$IFDEF LCLGTK2} FIconTheme:= nil; {$ELSE} if Assigned(FIconTheme) then FreeAndNil(FIconTheme); {$ENDIF} {$ENDIF} FreeThenNil(FDCIconTheme); end; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} procedure TPixMapManager.LoadMimeIconNames; const mime_globs = '/usr/share/mime/globs'; mime_generic_icons = '/usr/share/mime/generic-icons'; pixmaps_cache = 'pixmaps.cache'; cache_signature: DWord = $44435043; // 'DCPC' cache_version: DWord = 1; var I, J, K: Integer; globs: TStringListEx = nil; generic_icons: TStringListEx = nil; cache: TFileStreamEx = nil; mTime: TFileTime; sMimeType, sMimeIconName, sExtension: String; node: THTDataNode = nil; iconsList: TStringList; EntriesCount, IconsCount: Cardinal; nodeList: TFPObjectList; begin try // Try to load from cache. mTime:= mbFileAge(mime_globs); 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); if (cache.ReadDWord <> NtoBE(cache_signature)) or (cache.ReadDWord <> cache_version) then begin FreeAndNil(cache); end; except cache:= nil; end; if Assigned(cache) 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 iconsList.Add(cache.ReadAnsiString); end; end else if mbFileAccess(mime_globs, fmOpenRead) then begin // Load mapping: MIME type -> file extension. globs:= TStringListEx.Create; globs.NameValueSeparator:= ':'; globs.LoadFromFile(mime_globs); // Try to load mapping: MIME type -> generic MIME icon name. if mbFileExists(mime_generic_icons) then begin generic_icons:= TStringListEx.Create; generic_icons.NameValueSeparator:= ':'; generic_icons.LoadFromFile(mime_generic_icons); end; EntriesCount := 0; // 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]; sMimeIconName:= StringReplace(sMimeType, '/', '-', []); 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 not Assigned(node) then begin iconsList := TStringList.Create; FExtToMimeIconName.Add(sExtension, iconsList); Inc(EntriesCount); end else iconsList := TStringList(node.Data); 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; // save to cache 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; finally FreeAndNil(globs); FreeAndNil(generic_icons); FreeAndNil(cache); 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 := CheckAddThemePixmapLocked(iconList.Strings[I], AIconSize); if Result <> -1 then break; end; end; 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 TPixMapManager.GetApplicationBundleIcon(sFileName: String; iDefaultIcon: PtrInt): PtrInt; var I, J: PtrInt; slInfoFile: TStringListEx = nil; sTemp, sIconName: String; begin Result:= iDefaultIcon; slInfoFile:= TStringListEx.Create; try try slInfoFile.LoadFromFile(sFileName + '/Contents/Info.plist'); sTemp:= slInfoFile.Text; I:= Pos('CFBundleIconFile', sTemp); if I <= 0 then Exit; I:= PosEx('', sTemp, I) + 8; J:= PosEx('', sTemp, I); sIconName:= Copy(sTemp, I, J - I); if not StrEnds(sIconName, '.icns') then sIconName:= sIconName + '.icns'; sIconName:= sFileName + '/Contents/Resources/' + sIconName; except Exit; end; finally slInfoFile.Free; end; I:= GetIconByName(sIconName); if I >= 0 then Result:= I; end; {$ENDIF} // Unix function TPixMapManager.CheckAddThemePixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF LCLGTK2} 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(LCLGTK2) 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.LoadIconThemeBitmapLocked(AIconName: String; AIconSize: Integer): Graphics.TBitmap; var sIconFileName: String; {$IFDEF LCLGTK2} pbPicture: PGdkPixbuf = nil; {$ENDIF} begin // This function must be called under FPixmapsLock. {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} Result := nil; {$IFDEF LCLGTK2} if gShowIcons > sim_standart then begin pbPicture:= gtk_icon_theme_load_icon(FIconTheme, Pgchar(PChar(AIconName)), AIconSize, GTK_ICON_LOOKUP_USE_BUILTIN, nil); if pbPicture <> nil then Result := PixBufToBitmap(pbPicture); end; {$ELSE} sIconFileName:= FIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then begin if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(sIconFileName)) then Result := BitmapLoadFromScalable(sIconFileName, AIconSize, AIconSize) else Result := CheckLoadPixmapFromFile(sIconFileName); end; {$ENDIF} if not Assigned(Result) then {$ENDIF} begin sIconFileName:= FDCIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then Result := CheckLoadPixmapFromFile(sIconFileName) else Result := nil; end; 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(UTF8Decode(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; 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(LCLGTK2)} 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} {$IFDEF WINDOWS} 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.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 Result := FileInfo.iIcon + SystemIconIndexStart; end; function TPixMapManager.GetSystemArchiveIcon: PtrInt; const SIID_ZIPFILE = 105; var psii: TSHStockIconInfo; SHGetStockIconInfo: function(siid: Int32; uFlags: UINT; var psii: TSHStockIconInfo): HRESULT; stdcall; begin Result:= -1; if (Win32MajorVersion > 5) then begin Pointer(SHGetStockIconInfo):= GetProcAddress(GetModuleHandle(Shell32), 'SHGetStockIconInfo'); if Assigned(SHGetStockIconInfo) then begin psii.cbSize:= SizeOf(TSHStockIconInfo); if SHGetStockIconInfo(SIID_ZIPFILE, SHGFI_SYSICONINDEX, psii) = S_OK then Result:= psii.iSysImageIndex + SystemIconIndexStart; end; end; end; function TPixMapManager.GetSystemExecutableIcon: PtrInt; var FileInfo: TSHFileInfo; begin if (SHGetFileInfo(PAnsiChar('a.exe'), // Ansi version is enough. FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) = 0) then Result := -1 else Result := FileInfo.iIcon + SystemIconIndexStart; end; {$ENDIF} constructor TPixMapManager.Create; {$IF DEFINED(DARWIN)} var systemVersion: SInt32; {$ELSEIF DEFINED(MSWINDOWS)} var iIconSize : Integer; {$ENDIF} begin FExtList := TStringHashList.Create(True); FPixmapsFileNames := TStringHashList.Create(True); FPixmapList := TFPList.Create; {$IF DEFINED(DARWIN)} FUseSystemTheme:= NSAppKitVersionNumber >= 1038; {$ELSEIF DEFINED(UNIX)} FExtToMimeIconName := TFPDataHashTable.Create; FHomeFolder := IncludeTrailingBackslash(GetHomeDir); {$ENDIF} FThemePixmapsFileNames := TStringHashList.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); {$ENDIF} FPixmapsLock := syncobjs.TCriticalSection.Create; end; destructor TPixMapManager.Destroy; var I : Integer; K: TDriveType; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} 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 LCLGTK2} 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)} ImageList_Destroy(FSysImgList); {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} 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; FreeThenNil(FExtToMimeIconName); {$ENDIF} DestroyIconTheme; FreeThenNil(FThemePixmapsFileNames); FreeThenNil(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(UNIX) AND NOT DEFINED(DARWIN)} if gShowIcons > sim_standart then begin LoadMimeIconNames; // For use with GetMimeIcon {$IFNDEF LCLGTK2} 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; {$ENDIF} {$IF DEFINED(MSWINDOWS) or DEFINED(DARWIN)} FiDirIconID := -1; if (gShowIcons > sim_standart) and (not (cimFolder in gCustomIcons)) then FiDirIconID := GetSystemFolderIcon; if FiDirIconID = -1 then {$ENDIF} FiDirIconID:=CheckAddThemePixmap('folder'); FiDirLinkIconID:=CheckAddThemePixmap('folder-link'); FiDirLinkBrokenIconID:=CheckAddThemePixmap('folder-link-broken'); FiLinkIconID:=CheckAddThemePixmap('link'); FiLinkBrokenIconID:=CheckAddThemePixmap('link-broken'); FiUpDirIconID:=CheckAddThemePixmap('go-up'); {$IFDEF MSWINDOWS} FiArcIconID := -1; if (gShowIcons > sim_standart) and (not (cimArchive in gCustomIcons)) then FiArcIconID := GetSystemArchiveIcon; if FiArcIconID = -1 then {$ENDIF} FiArcIconID := CheckAddThemePixmap('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'); gFiOwnDCIcon := CheckAddPixmap(ParamStr(0), gIconsSize); { 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; (* 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 *) end; function TPixMapManager.GetBitmap(iIndex: PtrInt): Graphics.TBitmap; var PPixmap: Pointer; PixmapFromList: Boolean = False; {$IFDEF MSWINDOWS} hicn: HICON; Icon: TIcon = nil; {$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 LCLGTK2} Result:= PixBufToBitmap(PGdkPixbuf(PPixmap)); {$ELSE} // Make a new copy. Result := Graphics.TBitmap.Create; Result.Assign(Graphics.TBitmap(PPixmap)); {$ENDIF} end else {$IFDEF MSWINDOWS} if iIndex >= SystemIconIndexStart then begin Result:= nil; hicn:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); if hicn <> 0 then try Icon := CreateIconFromHandle(hicn); Result := Graphics.TBitmap.Create; Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 finally FreeThenNil(Icon); DestroyIcon(hicn); 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 LCLGTK2} 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 LCLGTK2} 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 (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; 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 // Windows XP doesn't draw link overlay icon for soft links (don't know about Vista or 7). if DirectAccess then begin if AFile.IconOverlayID >= SystemIconIndexStart then Result:= DrawBitmap(AFile.IconOverlayID {$IFDEF RabbitVCS} - SystemIconIndexStart {$ENDIF}, Canvas, X, Y); 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; {$ENDIF} begin Result := -1; if not Assigned(AFile) then Exit; with AFile do begin if Name = '..' then begin Result := FiUpDirIconID; Exit; end; if IsLinkToDirectory then begin if GetIconWithLink then begin if (LinkProperty = nil) or LinkProperty.IsValid then Result := FiDirLinkIconID else Result := FiDirLinkBrokenIconID; Exit; end; end; if (DirectAccess = False) and (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; if IsDirectory or IsLinkToDirectory then begin {$IF DEFINED(MSWINDOWS)} if (IconsMode = sim_standart) or // Directory has special icon only if it has "read only" or "system" attributes // and contains desktop.ini file (not (DirectAccess and (IsSysFile or FileIsReadOnly(Attributes)) and mbFileExists(FullPath + '\desktop.ini'))) or (GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 16) then {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if (IconsMode = sim_all_and_exe) and (DirectAccess) then begin if mbFileAccess(Path + Name + '/.directory', fmOpenRead) then begin if LoadIcon then Result := GetIconByDesktopFile(Path + Name + '/.directory', FiDirIconID) else Result := -1; Exit; end else if (FHomeFolder = Path) then begin if LoadIcon then Result := CheckAddThemePixmap(GioFileGetIcon(FullPath)) else Result := -1; 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 (LinkProperty = nil) or LinkProperty.IsValid then Exit(FiLinkIconID) else Exit(FiLinkBrokenIconID); end; if (Extension = '') then Exit(FiDefaultIconID); Ext := UTF8LowerCase(Extension); {$IF DEFINED(MSWINDOWS)} if IconsMode <> sim_all_and_exe then begin if Ext = 'exe' then Exit(FiExeIconID) else if Ext = 'lnk' then Exit(FiLinkIconID) else if Ext = 'url' then Exit(FiLinkIconID) else if Ext = 'ico' then Exit(FiDefaultIconID) end; {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if IconsMode = sim_all_and_exe then begin if DirectAccess and (Ext = 'desktop') 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 IconsMode <= sim_standart then Exit(FiDefaultIconID); {$IF DEFINED(UNIX)} 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(UTF8Decode(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 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)} function TPixMapManager.GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; begin if DirectAccess then Result:= SHGetOverlayIconIndex(AFile.Path, AFile.Name) + SystemIconIndexStart else Result:= -1; 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) : Graphics.TBitmap; {$IFDEF MSWINDOWS} var SFI: TSHFileInfoW; Icon: TIcon = nil; uFlags: UINT; iIconSmall, iIconLarge: Integer; {$ENDIF} begin if Drive^.DriveType = dtVirtual then begin Result := GetVirtualDriveIcon(IconSize, clBackColor); Exit; end; Result := nil; {$IFDEF MSWINDOWS} if GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 15 then Exit; if (not (cimDrive in gCustomIcons)) and (GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) > 16) then begin SFI.hIcon := 0; Result := Graphics.TBitMap.Create; iIconSmall:= GetSystemMetrics(SM_CXSMICON); iIconLarge:= GetSystemMetrics(SM_CXICON); if (IconSize <= iIconSmall) then uFlags := SHGFI_SMALLICON // Use small icon else begin uFlags := SHGFI_LARGEICON; // Use large icon end; if (SHGetFileInfoW(PWideChar(UTF8Decode(Drive^.Path)), 0, SFI, SizeOf(SFI), uFlags or SHGFI_ICON) <> 0) and (SFI.hIcon <> 0) then begin if (IconSize = iIconSmall) or (IconSize = iIconLarge) then // standart icon size try Icon := CreateIconFromHandle(SFI.hIcon); Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 finally FreeThenNil(Icon); DestroyIcon(SFI.hIcon); end else // non standart icon size try Icon := CreateIconFromHandle(SFI.hIcon); Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 Result := StretchBitmap(Result, IconSize, clBackColor, True); finally FreeAndNil(Icon); DestroyIcon(SFI.hIcon); end 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 GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 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; function TPixMapManager.GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; var Drive: TDrive = (DisplayName: ''; Path: ''; DriveLabel: ''; DeviceId: ''; DriveType: dtHardDisk; FileSystem: ''; IsMediaAvailable: True; IsMediaEjectable: False; IsMediaRemovable: False; IsMounted: True; AutoMount: True); begin Result := GetBuiltInDriveIcon(@Drive, IconSize, clBackColor); end; function TPixMapManager.GetVirtualDriveIcon(IconSize: Integer; clBackColor: TColor): Graphics.TBitmap; var DriveIconListIndex: Integer; begin 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 need stretch icon if (IconSize <> 16) and (IconSize <> 24) and (IconSize <> 32) then begin Result := StretchBitmap(Bitmap[dtVirtual], IconSize, clBackColor, False); end else begin Result := Graphics.TBitmap.Create; Result.Assign(Bitmap[dtVirtual]); end; end; 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; begin DCDebug('Creating PixmapManager'); PixMapManager:=TPixMapManager.Create; PixMapManager.Load(gpCfgDir + 'pixmaps.txt'); end; initialization finalization if Assigned(PixMapManager) then begin DCDebug('Shutting down PixmapManager'); FreeAndNil(PixMapManager); end; end. doublecmd-0.9.8/src/platform/upixmapgtk.pas0000644000175000001440000000650513467737150020062 0ustar alexxusersunit uPixMapGtk; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, IntfGraphics, gtk2def, gdk2pixbuf, gdk2, glib2; 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; // or use this { begin iPixbufWidth := gdk_pixbuf_get_width(pbPicture); iPixbufHeight := gdk_pixbuf_get_height(pbPicture); Result := TBitMap.Create; Result.SetSize(iPixbufWidth, iPixbufHeight); Result.Canvas.Brush.Color := clBackColor; Result.Canvas.FillRect(0, 0, iPixbufWidth, iPixbufHeight); DrawPixbufAtCanvas(Result.Canvas, pbPicture, 0, 0, 0, 0, iPixbufWidth, iPixbufHeight); end; } end. doublecmd-0.9.8/src/platform/uosforms.pas0000644000175000001440000005502113407366746017546 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. 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 uOSForms; {$mode delphi}{$H+} interface uses LCLType, 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; {$ELSEIF DEFINED(LCLWIN32)} public constructor Create(TheOwner: TComponent); override; {$ENDIF} 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)} {en Show open with dialog @param(FileList List of files to open with) } procedure ShowOpenWithDialog(TheOwner: TComponent; const FileList: TStringList); {$ENDIF} implementation uses ExtDlgs, LCLProc, Menus, Graphics, InterfaceBase, WSForms, LMessages, LCLIntf, uConnectionManager {$IF DEFINED(MSWINDOWS)} , ComObj, fMain, DCOSUtils, uOSUtils, uFileSystemFileSource , uTotalCommander, FileUtil, Windows, ShlObj, uShlObjAdditional , uWinNetFileSource, uVfsModule, uLng, uMyWindows, DCStrUtils , uListGetPreviewBitmap, uThumbnailProvider, uDCReadSVG, uFileSourceUtil , Dialogs, Clipbrd, uShowMsg {$ENDIF} {$IFDEF UNIX} , BaseUnix, fFileProperties, uJpegThumb {$IF NOT DEFINED(DARWIN)} , uDCReadSVG, uMagickWand, uGio, uGioFileSource, uVfsModule, uVideoThumb , uDCReadWebP {$ELSE} , MacOSAll, fMain, uQuickLook, uMyDarwin, uShowMsg, uLng {$ENDIF} {$IF NOT DEFINED(DARWIN)} , fOpenWith, uKde {$ENDIF} {$IF DEFINED(LCLQT) and not DEFINED(DARWIN)} , qt4, qtwidgets {$ENDIF} {$IF DEFINED(LCLGTK2)} , gtk2 {$ENDIF} {$ENDIF}; { 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; {$ELSEIF DEFINED(LCLWIN32)} constructor TAloneForm.Create(TheOwner: TComponent); begin inherited Create(TheOwner); if ShowInTaskBar = stAlways then // Set window owner to zero, so it will be really standalone window SetWindowLong(Handle, GWL_HWNDPARENT, 0); end; {$ENDIF} { 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 Params.Style := Params.Style or WS_POPUP; 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 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 EnableWindow(FParentWindow, False); // If window already created then recreate it to force // call CreateParams with appropriate parent window if HandleAllocated then RecreateWnd(Self); 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; EnableWindow(FParentWindow, True); // 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} 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; 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 CopyNetNamesToClip(Self, Sender: TObject); 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; 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) and not DEFINED(DARWIN))} 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)} 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; {$ENDIF} procedure MainFormCreate(MainForm : TCustomForm); {$IFDEF MSWINDOWS} var Handler: TMethod; MenuItem: TMenuItem; begin 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); // Emulate Total Commander window CreateTotalCommanderWindow(MainForm.Handle); // Register network file source RegisterVirtualFileSource(rsVfsNetwork, TWinNetFileSource); if (Win32MajorVersion > 5) and IsUserAdmin then // if run under administrator MainForm.Caption:= MainForm.Caption + ' - Administrator'; 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.Caption:= rsMnuCopyNetNamesToClip; Handler.Code:= @CopyNetNamesToClip; MenuItem.OnClick:= TNotifyEvent(Handler); 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(LCLGTK2) or DEFINED(DARWIN)} var Handler: TMethod; {$ENDIF} {$IF DEFINED(DARWIN)} MenuItem: TMenuItem; {$ENDIF} begin if fpGetUID = 0 then // if run under root MainForm.Caption:= MainForm.Caption + ' - ROOT PRIVILEGES'; {$IF NOT DEFINED(DARWIN)} if HasGio then RegisterVirtualFileSource('GVfs', TGioFileSource, False); {$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)} Handler.Data:= MainForm; Handler.Code:= @ScreenFormEvent; ScreenFormEvent(MainForm, MainForm, MainForm); Screen.AddHandlerFormAdded(TScreenFormEvent(Handler), True); {$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 FreeThenNil(ShellContextMenu); end; end; {$ELSE} begin if Files.Count = 0 then begin FreeAndNil(Files); Exit; end; // Free previous created menu FreeThenNil(ShellContextMenu); // Create new context menu ShellContextMenu:= TShellContextMenu.Create(nil, Files, Background, UserWishForContextMenu); ShellContextMenu.OnClose := CloseEvent; // Show context menu ShellContextMenu.PopUp(X, Y); 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); aFile.FullPath := ADrive^.Path; aFile.Attributes := faFolder; 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 FreeThenNil(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 ShowFileProperties(aFileSource, Files); end; {$ELSE} var cmici: TCMINVOKECOMMANDINFO; contMenu: IContextMenu; begin if Files.Count = 0 then Exit; try contMenu := GetShellContextMenu(frmMain.Handle, Files, False); if Assigned(contMenu) then begin FillChar(cmici, sizeof(cmici), #0); with cmici do begin cbSize := sizeof(cmici); hwnd := frmMain.Handle; lpVerb := sCmdVerbProperties; nShow := SW_SHOWNORMAL; end; OleCheckUTF8(contMenu.InvokeCommand(cmici)); 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)+'|'+ 'Programs and Libraries (*.exe;*.dll)|*.exe;*.dll'+'|'+ Format('All files (%s)|%s',[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(Owner.Handle, 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; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} procedure ShowOpenWithDialog(TheOwner: TComponent; const FileList: TStringList); begin if not (UseKde and uKde.ShowOpenWithDialog(FileList)) then begin fOpenWith.ShowOpenWithDlg(TheOwner, FileList); end; end; {$ENDIF} finalization FreeThenNil(ShellContextMenu); end. doublecmd-0.9.8/src/platform/unix/0000755000175000001440000000000013615241423016125 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/uxdg.pas0000644000175000001440000001160013463601555017606 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Miscellaneous freedesktop.org compatible utility functions 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, 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, DCStrUtils, DCOSUtils, uOSUtils; 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 Result:= GetUserCacheDir; 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-0.9.8/src/platform/unix/uvideothumb.pas0000644000175000001440000001305213503633556021176 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-0.9.8/src/platform/unix/uusersgroups.pas0000644000175000001440000000644411740433676021442 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, uMyUnix; 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; function uidToStr(uid: Cardinal): String; var uinfo: PPasswordRecord; begin uinfo:= getpwuid(uid); if (uinfo = nil) then Result:= '' else Result:= String(uinfo^.pw_name); end; function gidToStr(gid: Cardinal): String; var ginfo: PGroupRecord; begin ginfo:= getgrgid(gid); if (ginfo = nil) then Result:= '' 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:= 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:= High(Cardinal) else Result:= ginfo^.gr_gid; end; {/mate} end. doublecmd-0.9.8/src/platform/unix/uunixterm.pas0000644000175000001440000005005313043320625020672 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Terminal emulator implementation. 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 uUnixTerm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, ExtCtrls, LCLProc, cwstring, LCLType, Graphics, termio, uTerminal, uOSUtils; {$IF NOT DEFINED(DARWIN)} {$LINKLIB util} // under Linux and BSD forkpty is situated in libutil.so library {$ENDIF} const clib = 'c'; C_stdin = 0; C_stdout = 1; C_stderr = 2; const {c_cc characters} CDISABLE = 255; //key // xterm default bindings CINTR = 003; // ^C CQUIT = 034; // ^\ CERASE = 177; // ^? CKILL = 025; // ^U CEOF = 004; // ^D CSTART = 021; // ^Q CSTOP = 023; // ^S CSUSP = 032; // ^Z CREPRINT = 022; // ^R CWERASE = 027; // ^W CLNEXT = 026; // ^V CDISCARD = 017; // ^O //disabled CTIME = 0; CMIN = 1; CSWTC = CDISABLE; CEOL = CDISABLE; CEOL2 = CDISABLE; const CSIList= '@'+ // Вставить N пустых символов. 'A'+ //Переместить курсор вверх на N рядов. 'B'+ //Переместить курсор вниз на N рядов. 'C'+ //Переместить курсор вправо на N столбцов. 'D'+ //Переместить курсор влево на N столбцов. 'E'+ //Переместить курсор вниз на N рядов, в столбец #1. 'F'+ //Переместить курсор вверх на N рядов, в столбец #1. 'G'+ //Переместить курсор в указанный столбец текущего ряда. 'H'+ //Переместить курсор в указанный ряд и столбец (начало в 1,1). 'J'+ //"Очистить" экран (по умолчанию от курсора до конца экрана). ESC [ 1 J: "очистить" от начала столбца до курсора. ESC [ 2 J: "очистить" весь экран. 'K'+ //"Очистить" строку (по умолчанию от курсора до ее конца). ESC [ 1 K: "очистить" от начала строки до курсора. ESC [ 2 K: "очистить" всю строку. 'L'+ //Вставить N пустых строк. 'M'+ //Удалить N строк. 'P'+ //Удалить (со смещением в строке) N символов в текущей строке. 'X'+ //"Очистить" (без смещения в строке) N символов в текущей строке. 'a'+ //Переместить курсор вправо на N столбцов. 'c'+ //Ответить ESC [ ? 6 c: `Я являюсь VT102'. 'd'+ //Переместить курсор в указанный ряд текущего столбца. 'e'+ //Переместить курсор вниз на N рядов. 'f'+ //Переместить курсор в указанный ряд и столбец. 'g'+ //Без параметров: "очистить" текущую позицию табуляции. ESC [ 3 g: удалить все позиции табуляции. 'h'+ //Режим установки 'l'+ //Режим сброса 'm'+ //Установка атрибутов 'n'+ //Отчет о статусе 'q'+ //Установить режимы работы индикаторов на клавиатуре. ESC [ 0 q: выключить все индикаторы ESC [ 1 q: включить индикатор "Scroll Lock" ESC [ 2 q: включить индикатор "Num Lock" ESC [ 3 q: включить индикатор "Caps Lock" 'r'+ //Установить область прокрутки; параметрами будут верхний и нижний ряды. 's'+ //Сохранить местоположение курсора. 'u'; //Восстановить местоположение курсора. //'`'+ //Переместить курсор в указанный столбец текущего ряда. const NCCS = 32; type Pwinsize = ^winsize; winsize = record ws_row : word; ws_col : word; ws_xpixel : word; ws_ypixel : word; end; __pid_t = longint; Pcc_t = ^cc_t; cc_t = char; Pspeed_t = ^speed_t; speed_t = dword; Ptcflag_t = ^tcflag_t; tcflag_t = dword; Ptermios = ^termios; termios = record c_iflag : tcflag_t; c_oflag : tcflag_t; c_cflag : tcflag_t; c_lflag : tcflag_t; c_line : cc_t; c_cc : array[0..(NCCS)-1] of cc_t; c_ispeed : speed_t; c_ospeed : speed_t; end; type { TUnixTerm } TUnixTerm = class(TTerminal) private FCols,Frows:integer; //--------------------- //--------------------- public //--------------------- constructor Create; destructor Destroy; override; { \\---------------------} function Read_Pty(var str:String; const timeout: longint=10): longint; override; // Read info from pty function Fork_pty(const rows,cols:integer; const cmd:String; const params:String=''):System.THandle; override; //Create new pty and start cmd function Write_pty(const str:String):boolean; override; //write str to pty //--------------------- function SendBreak_pty():boolean; override; // ^C function SendSignal_pty(Sig:Cint):boolean; override; function SetScreenSize(aCols,aRows:integer):boolean; override; function SetCurrentDir(const NewDir: String): Boolean; override; //--------------------- function KillShell:LongInt; override; function CSI_GetTaskId(const buf:String):integer; override; //get index of sequence in CSILast list end; { TConThread } TUnixConThread = class(TConsoleThread) private procedure AddSymbol; procedure CSIProc(NCode, Param: integer; ExParam: integer=0); procedure CSI_CaretTo(Y, X: integer); procedure CSI_Colors(const Param: integer); procedure WriteS(const s: String); protected procedure Execute; override; public constructor Create; destructor Destroy; override; end; function forkpty(__amaster:Plongint; __name:Pchar; __termp:Ptermios; __winp:Pwinsize):longint;cdecl;external clib name 'forkpty'; function setenv(__name:Pchar; __value:Pchar; __replace:longint):longint;cdecl;external clib name 'setenv'; function execl(__path:Pchar; __arg:Pchar):longint;cdecl;varargs;external clib name 'execl'; implementation uses DCUnix, uDebug; { TUnixConThread } procedure TUnixConThread.WriteS(const s:String); begin if not assigned(FOut) then exit; //Form1.CmdBox1.StopRead; FOut.Write(s); //Form1.CmdBox1.StartRead(clWhite,clBlack,'',clWhite,clBlack); end; procedure TUnixConThread.CSI_Colors(const Param:integer); begin if not assigned(FOut) then exit; with FOut do begin case Param of 0: TextColors(clWhite,clBlack);// сбросить все атрибуты в их значения по умолчанию 1: ;// установить жирный шрифт 2: ;// установить более яркий (имитированное цветом на цветном дисплее) 4: ;// установить подчеркивание (имитированное цветом на цветном дисплее); //цвета, используемые для имитации затемнения или подчеркивания, устанавливаются //при помощи ESC ] ... 5: ;// включить мерцание 7: ;// включить режим инвертированного видео 10: ;// сбросить выбранное распределение, флаги управления экраном //и переключить метафлаг 11: ;// выбрать null-распределение, установить флаг управления экраном, //сбросить переключатель метафлага. 12: ;// выбрать null-распределение, установить флаг управления экраном, //включить переключатель метафлага. Переключение метафлага //задает переключение старшего бита в байте //до его трансформации согласно таблице распределения. 21: ;// включить режим нормальной интенсивности (несовместимо с ECMA-48) 22: ;// выключить режим нормальной интенсивности 24: ;// выключить подчеркивание 25: ;// выключить мерцание 27: ;// выключить инвертированное видео 30:TextColor(clGray) ;// установить черный цвет символов 31:TextColor(clRed) ;// установить красный цвет символов 32:TextColor($0024F947) ;// установить зеленый цвет символов 33:TextColor($003A85CF) ;// установить коричневый цвет символов 34:TextColor(clBlue) ;// установить синий цвет символов 35:TextColor(clPurple) ;// установить сиреневый цвет символов 36:TextColor(clSkyBlue) ;// установить голубой цвет символов 37:TextColor(clWhite);// установить белый цвет символов 38:TextColor(clWhite);// включить подчеркивание, установить цвет символов по умолчанию 39:TextColor(clWhite) ;// выключить подчеркивание, установить цвет символов по умолчанию 40:TextBackground(clBlack) ;// установить черный цвет фона 41:TextBackground(clRed) ;// установить красный цвет фона 42:TextBackground(clGreen) ;// установить зеленый цвет фона 43:TextBackground(clRed) ;// установить коричневый цвет фона 44:TextBackground(clBlue) ;// установить синий цвет фона 45:TextBackground(clPurple) ;// установить сиреневый цвет фона 46:TextBackground(clSkyBlue) ;// установить голубой цвет фона 47:TextBackground(clWhite) ;// установить белый цвет фона 49:TextBackground(clBlack) ;// установить цвет фона по умолчанию end; end; end; procedure TUnixConThread.CSI_CaretTo(Y,X:integer); //хз x y или y x. Надо проверить. begin DCDebug(' Y: '+inttostr(Y)+' X: '+inttostr(X)); //Fout.OutY:=Y; //Fout.OutX:=X; end; procedure TUnixConThread.CSIProc(NCode, Param:integer; ExParam:integer=0); begin //DCDebug('Code:'+Inttostr(NCode)+' Param: '+inttostr(Param)); case NCode of 9:CSI_CaretTo(Param,ExParam); 24:CSI_Colors(Param); end; end; constructor TUnixConThread.Create; begin inherited Create(true); System.InitCriticalSection(FLock); Fterm:=TUnixTerm.Create; FRowsCount:=50; FColsCount:=100; end; destructor TUnixConThread.Destroy; begin FreeAndNil(fTerm); System.DoneCriticalSection(FLock); inherited Destroy; end; procedure TUnixConThread.Execute; begin FShell:=GetShell; if length(FShell)=0 then FShell:='/bin/bash'; if Assigned(fterm) then Fterm.Fork_pty(FRowsCount,FColsCount,FShell); while true do begin if Assigned(fterm) then begin if Fterm.Read_Pty(fbuf,0)>0 then Synchronize(@AddSymbol) else Sleep(1); end else break; end; end; //------------------------------------------------------ procedure TUnixConThread.AddSymbol; var SeqCode,SeqPrm,i,x:integer; es,s:String; esnow,CSINow:boolean; begin s:=''; es:=''; esnow:=false; CSInow:=false; for i:=1 to length(fbuf) do begin //разбор //------------------------------------------------------ if esnow then begin //------------------------------------------------------ if CSINow then begin //Пытаемся определить управляющий символ CSI последовательности SeqCode:=(fTerm.CSI_GetTaskId(es)); if SeqCode>0 then begin //разбор управляющей последовательности. //------------------------------------------------------ WriteS(s); s:=''; delete(es,1,1); delete(es,length(es),1); x:=pos(';',es); while x>0 do begin if tryStrToInt(copy(es,1,x-1),SeqPrm) then begin CSIProc(SeqCode,SeqPrm); delete(es,1,x); x:=pos(';',es); end else begin WriteS(copy(es,1,x-1)); delete(es,1,x); x:=pos(';',es); end; end; if es<>'' then begin if tryStrToInt(es,SeqPrm) then CSIProc(SeqCode,SeqPrm) else WriteS(es); end; //------------------------------------------------------ es:=''; esnow:=false; CSINow:=False; end else es:=es+fbuf[i]; end else es:=es+fbuf[i]; //------------------------------------------------------ end; //Начало управляющей последовательности if (fbuf[i]=#155) or ((fbuf[i]=#27)) then begin esnow:=true; //Начало CSI последовательности if (i#31) or (fbuf[i]=#13) or (fbuf[i]=#10)) then begin if fbuf[i]=#10 then begin if s<>'' then if Assigned(FOut) then FOut.Write(s+#10); s:=''; continue; end; if (fbuf[i]=#13) then if Assigned(FOut) then FOut.Write(#13); s:=s+fbuf[i]; end; //------------------------------------------------------ end; if s<>'' then begin if Assigned(FOut) then FOut.Write(s); end; end; //------------------------------------------------------ { TUnixTerm } function TUnixTerm.CSI_GetTaskId(const buf:String):integer; var Rez,L,R,M:integer; begin result:=0; if buf='' then exit; if buf[length(buf)]='`' then begin result:=length(CSIList)+1; exit; end; //бинарный поиск L:=0; R:=Length(CSIList); while (L<=R) do begin M:=(L+R) div 2; Rez:=CompareChar(CSIList[M],buf[length(buf)],1); if Rez=0 then begin Result:=M; exit; end else if Rez<0 then L:=M+1 else R:=M-1; end; result:=0; end; function TUnixTerm.Fork_pty(const rows, cols: integer; const cmd:String; const params:String=''): System.THandle; var ws:TWinSize; ChildPid:System.THandle; begin FCols:=cols; Frows:=rows; ws.ws_row:=rows; ws.ws_col:=cols; ws.ws_xpixel:=0; ws.ws_ypixel:=0; ChildPid:=forkpty(@Fpty,nil,nil,@ws); if ChildPid<0 then begin Result:=-1; Exit; end; if ChildPid=0 then begin //Child FileCloseOnExecAll; setenv('TERM', 'linux', 1); execl(pchar(cmd), pchar(params), nil); //если execl не сработал и новый процесс не подменил форкнутый, то ошибка fpWrite(C_stderr, pchar('execl() failed. Command: '+ cmd),length('execl() failed. Command: '+ cmd)); fpExit(127); // error exec'ing end; FChildPid:=ChildPid; Result:=ChildPid; end; function TUnixTerm.Read_Pty(var str:String; const timeout:longint=10):longint; var ifs:TFdSet; BytesRead:longint; buf:array [0..512] of char; begin Result:=0; if Fpty<0 then exit; //check if pty has new info for us fpFD_ZERO(ifs); fpFD_SET(Fpty,ifs); if FPSelect(fpty+1,@ifs,nil,nil,timeout)<=0 then exit; bytesread := fpread(fpty, buf, 512); result:=bytesread; str:=''; if bytesread <= 0 then exit; str:=copy(buf,0,BytesRead); end; function TUnixTerm.Write_pty(const str: String): boolean; var BytesWritten:TSize; i:integer; begin i:=1; result:=true; while i<=length(str) do begin BytesWritten:=fpwrite(Fpty,str[i],length(str[i])); result:=result and (BytesWritten>0); i:=i+1; end; end; function TUnixTerm.SendBreak_pty(): boolean; begin result:=SendSignal_pty(CINTR); end; function TUnixTerm.SendSignal_pty(Sig: Cint): boolean; var BytesWritten:TSize; begin BytesWritten:=fpwrite(Fpty,Sig,sizeof(sig)); Result := (BytesWritten>0); end; function TUnixTerm.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; if FpIOCtl(Fpty,TIOCSWINSZ,@ws)=0 then begin Result:=true; FCols:=aCols; Frows:=aRows; end else Result:=false; end; function TUnixTerm.SetCurrentDir(const NewDir: String): Boolean; begin Result:= Write_pty(' cd "' + NewDir + '"' + #13); end; function TUnixTerm.KillShell: LongInt; begin //FchildPid must be >0 in other case all processes in this group will be killed if FChildPid>0 then result:=fpkill(FChildPid,SIGKILL) else result:=-1; end; constructor TUnixTerm.Create; var tio:termio.termios; begin TCGetAttr(Fpty,tio); tio.c_iflag:=BRKINT or IGNPAR or ICRNL or IXON; tio.c_oflag:=OPOST or ONLCR; tio.c_cflag:=CS8 or CREAD; tio.c_lflag:=ISIG or ICANON or IEXTEN or ECHO or ECHOE or ECHOK or ECHOKE or ECHOCTL; tio.c_cc[VINTR]:=CINTR; tio.c_cc[VQUIT]:=CQUIT; tio.c_cc[VERASE]:=CERASE; tio.c_cc[VKILL]:=CKILL; tio.c_cc[VSTART]:=CSTART; tio.c_cc[VSTOP]:=CSTOP; tio.c_cc[VSUSP]:=CSUSP; tio.c_cc[VREPRINT]:=CREPRINT; tio.c_cc[VDISCARD]:=CDISCARD; tio.c_cc[VWERASE]:=CWERASE; tio.c_cc[VLNEXT]:=CLNEXT; tio.c_cc[VEOF]:=CEOF; tio.c_cc[VEOL]:=CEOL; tio.c_cc[VEOL2]:=CEOL2; {$IF DEFINED(LINUX)} tio.c_cc[VSWTC]:=CSWTC; {$ENDIF} tio.c_cc[VMIN]:=CMIN; tio.c_cc[VTIME]:=CTIME; TCSetAttr(Fpty,TCSANOW,tio); end; destructor TUnixTerm.Destroy; begin KillShell; inherited Destroy; end; end. {// thr.Terminal.Write_pty(#27+'[21~'); //F10 // thr.Terminal.Write_pty(#27+'[D'); //Left // thr.Terminal.Write_pty(#27+'[3~'); //delete } doublecmd-0.9.8/src/platform/unix/uunixicontheme.pas0000644000175000001440000001541713611061256021706 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some useful functions for Unix icon theme implementation 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 . } unit uUnixIconTheme; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uIconTheme; const DEFAULT_THEME_NAME = 'hicolor'; DEFAULT_THEME_KDE4 = 'default.kde4'; function GetCurrentIconTheme: String; function GetUnixDefaultTheme: String; function GetUnixIconThemeBaseDirList: TDynamicStringArray; implementation uses Laz2_DOM, Laz2_XMLRead, DCClassesUtf8, uMyUnix, DCOSUtils, uOSUtils, uGio; function GetKdeIconTheme: String; const kde3Config = '/.kde/share/config/kdeglobals'; kde4Config = '/.kde4/share/config/kdeglobals'; var kdeConfig: array[1..2] of String = (kde4Config, kde3Config); I: Integer; iniCfg: TIniFileEx = nil; begin Result:= EmptyStr; for I:= Low(kdeConfig) to High(kdeConfig) do begin if (Length(Result) = 0) and mbFileExists(GetHomeDir + kdeConfig[I]) then try iniCfg:= TIniFileEx.Create(GetHomeDir + kdeConfig[I]); try Result:= iniCfg.ReadString('Icons', 'Theme', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; if (Length(Result) = 0) and mbDirectoryExists('/usr/share/icons/default.kde4') then Result:= 'default.kde4' else if (Length(Result) = 0) and mbDirectoryExists('/usr/share/icons/default.kde') then Result:= 'default.kde'; end; function GetGnomeIconTheme: String; begin Result:= GioGetIconTheme('org.gnome.desktop.interface'); if Length(Result) = 0 then Result:= 'gnome'; 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_UNKNOWN: Result:= DEFAULT_THEME_NAME; 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 Result:= DEFAULT_THEME_NAME; 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:= 3; SetLength(UnixIconThemesBaseDirList, 8); UnixIconThemesBaseDirList[2] := Home + '/.kde/share/icons'; UnixIconThemesBaseDirList[3] := Home + '/.kde4/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'; // Default Unix icon theme if (DesktopEnv = DE_KDE) then begin UnixDefaultTheme:= DEFAULT_THEME_KDE4 + PathSep + UnixDefaultTheme; end; end; initialization InitIconThemesBaseDirList; end. doublecmd-0.9.8/src/platform/unix/ushellcontextmenu.pas0000644000175000001440000006723213340517105022430 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-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 uShellContextMenu; {$mode delphi}{$H+} 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; 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); function FillOpenWithSubMenu: Boolean; 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, uOSUtils, uFileProcs, uShellExecute, uLng, uPixMapManager, uMyUnix, fMain, fFileProperties, DCOSUtils, DCStrUtils, uExts, uArchiveFileSourceUtil {$IF DEFINED(DARWIN)} , MacOSAll {$ELSE} , uKeyFile, uMimeActions, uOSForms {$IF DEFINED(LINUX)} , uRabbitVCS {$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; {$IF NOT DEFINED(DARWIN)} function GetGnomeTemplateMenu(out Items: TStringList): Boolean; var searchRec: TSearchRecEx; templateDir: String; bmpBitmap: TBitmap = nil; userDirs: TStringList = nil; begin Result:= False; try Items:= nil; templateDir:= GetHomeDir + '/.config/user-dirs.dirs'; if not mbFileExists(templateDir) then Exit; userDirs:= TStringList.Create; try userDirs.LoadFromFile(templateDir); except Exit; end; templateDir:= userDirs.Values['XDG_TEMPLATES_DIR']; if Length(templateDir) = 0 then Exit; templateDir:= IncludeTrailingPathDelimiter(mbExpandFileName(TrimQuotes(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)} Result:= False; {$ELSE} case GetDesktopEnvironment of DE_KDE: Result:= GetKdeTemplateMenu(Items); else Result:= GetGnomeTemplateMenu(Items); end; {$ENDIF} 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 ShowFileProperties(FileSource, FFiles); end; end; (* handling user commands from template context menu *) procedure TShellContextMenu.TemplateContextMenuSelect(Sender: TObject); var SelectedItem: TMenuItem; FileName: 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); if CopyFile(SelectedItem.Hint, frmMain.ActiveFrame.CurrentPath + FileName) then begin frmMain.ActiveFrame.Reload; frmMain.ActiveFrame.SetActiveFile(FileName); end; end; end; procedure TShellContextMenu.DriveMountSelect(Sender: TObject); begin MountDrive(@FDrive); end; procedure TShellContextMenu.DriveUnmountSelect(Sender: TObject); begin UnmountDrive(@FDrive); end; procedure TShellContextMenu.DriveEjectSelect(Sender: TObject); begin EjectDrive(@FDrive); end; procedure TShellContextMenu.OpenWithOtherSelect(Sender: TObject); var I: LongInt; FileNames: TStringList; begin {$IF NOT DEFINED(DARWIN)} FileNames := TStringList.Create; for I := 0 to FFiles.Count - 1 do FileNames.Add(FFiles[I].FullPath); ShowOpenWithDialog(frmMain, FileNames); {$ENDIF} end; procedure TShellContextMenu.OpenWithMenuItemSelect(Sender: TObject); var ExecCmd: String; begin ExecCmd := (Sender as TMenuItem).Hint; try ExecCmdFork(ExecCmd); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; function TShellContextMenu.FillOpenWithSubMenu: Boolean; {$IF DEFINED(DARWIN)} var I: CFIndex; ImageIndex: PtrInt; bmpTemp: TBitmap = nil; mi, miOpenWith: TMenuItem; ApplicationArrayRef: CFArrayRef = nil; FileNameCFRef: CFStringRef = nil; FileNameUrlRef: CFURLRef = nil; ApplicationUrlRef: CFURLRef = nil; ApplicationNameCFRef: CFStringRef = nil; ApplicationCString: array[0..MAX_PATH-1] of Char; begin Result:= False; if (FFiles.Count <> 1) then Exit; try FileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PChar(FFiles[0].FullPath)); FileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, FileNameCFRef, kCFURLPOSIXPathStyle, False); ApplicationArrayRef:= LSCopyApplicationURLsForURL(FileNameUrlRef, kLSRolesViewer or kLSRolesEditor or kLSRolesShell); if Assigned(ApplicationArrayRef) and (CFArrayGetCount(ApplicationArrayRef) > 0) then begin Result:= True; miOpenWith := TMenuItem.Create(Self); miOpenWith.Caption := rsMnuOpenWith; Self.Items.Add(miOpenWith); for I:= 0 to CFArrayGetCount(ApplicationArrayRef) - 1 do begin ApplicationUrlRef:= CFURLRef(CFArrayGetValueAtIndex(ApplicationArrayRef, I)); if CFURLGetFileSystemRepresentation(ApplicationUrlRef, True, ApplicationCString, SizeOf(ApplicationCString)) then begin mi := TMenuItem.Create(miOpenWith); mi.Caption := ExtractOnlyFileName(ApplicationCString); mi.Hint := QuoteStr(ApplicationCString) + #32 + QuoteStr(FFiles[0].FullPath); ImageIndex:= PixMapManager.GetApplicationBundleIcon(ApplicationCString, -1); if LSCopyDisplayNameForURL(ApplicationUrlRef, ApplicationNameCFRef) = noErr then begin if CFStringGetCString(ApplicationNameCFRef, ApplicationCString, SizeOf(ApplicationCString), kCFStringEncodingUTF8) then mi.Caption := ApplicationCString; CFRelease(ApplicationNameCFRef); end; if ImageIndex >= 0 then begin bmpTemp:= PixMapManager.GetBitmap(ImageIndex); if Assigned(bmpTemp) then begin mi.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; end; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); end; end; end; finally if Assigned(FileNameCFRef) then CFRelease(FileNameCFRef); if Assigned(FileNameUrlRef) then CFRelease(FileNameUrlRef); if Assigned(ApplicationArrayRef) then CFRelease(ApplicationArrayRef); end; 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} 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 mi.Caption := rsMnuUmount; mi.OnClick := Self.DriveUnmountSelect; end; Self.Items.Add(mi); if ADrive^.IsMediaEjectable then begin mi :=TMenuItem.Create(Self); mi.Caption := rsMnuEject; mi.OnClick := Self.DriveEjectSelect; Self.Items.Add(mi); end; 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 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); if gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen 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 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 mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Open with" submenu if needed AddOpenWithMenu := FillOpenWithSubMenu; // Add delimiter menu mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // 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 mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // 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); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // 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); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // 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); mi:=TMenuItem.Create(miSortBy); mi.Caption := '-'; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actReverseOrder; miSortBy.Add(mi); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); mi:=TMenuItem.Create(Self); mi.Action := frmMain.actPasteFromClipboard; Self.Items.Add(mi); if GetTemplateMenu(sl) then begin mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "New" submenu miSortBy := TMenuItem.Create(Self); miSortBy.Caption := rsMnuNew; Self.Items.Add(miSortBy); // Add "Make directory" mi:= TMenuItem.Create(miSortBy); mi.Action := frmMain.actMakeDir; mi.Caption:= rsPropsFolder; miSortBy.Add(mi); mi:= TMenuItem.Create(miSortBy); mi.Caption:= '-'; miSortBy.Add(mi); 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; mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); 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 FreeThenNil(FFiles); inherited Destroy; end; end. doublecmd-0.9.8/src/platform/unix/urabbitvcs.pas0000644000175000001440000003036313613266670021014 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'; 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; procedure FillRabbitMenu(Menu: TPopupMenu; Paths: TStringList); var RabbitVCS: Boolean = False; implementation uses dbus, fpjson, jsonparser, jsonscanner, unix, uGlobs, uGlobsPaths, uMyUnix, uPython {$IF DEFINED(LCLQT5)} , uGObject2 {$ENDIF} ; const MODULE_NAME = 'rabbit-vcs'; var error: DBusError; RabbitGtk3: Boolean; conn: PDBusConnection = nil; PythonModule: PPyObject = nil; ShellContextMenu: PPyObject = nil; procedure Print(const sMessage: String); begin WriteLn('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 CheckService(const PythonScript: String): 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 Exit(False); Result:= service_exists <> 0; if Result then Print('Service found running') else begin Result:= fpSystemStatus(PythonExe + ' ' + PythonScript) = 0; if Result then Print('Service successfully started'); end; end; 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 JAnswer:= Parse as TJSONObject; try Result:= JAnswer.Strings['content']; if Result = 'unknown' then Exit(EmptyStr); except Exit(EmptyStr); end; JAnswer.Free; 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; 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 CheckVersion: Boolean; var ATemp: AnsiString; pyModule: PPyObject; pyVersion: PPyObject; AVersion: TStringArray; Major, Minor, Micro: Integer; {$IF DEFINED(LCLQT5)} 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) > 2) then begin Major:= StrToIntDef(AVersion[0], 0); Minor:= StrToIntDef(AVersion[1], 0); Micro:= StrToIntDef(AVersion[2], 0); // RabbitVCS migrated to GTK3 from version 0.17.1 RabbitGtk3:= (Major > 0) or (Minor > 17) or ((Minor = 17) and (Micro > 0)); {$IF DEFINED(LCLQT5)} // 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 Qt5 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; var PythonPath: String; 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 HasPython then begin if not CheckVersion then Exit; PythonPath:= gpExePath + 'scripts'; RabbitVCS:= CheckService(PythonPath + PathDelim + MODULE_NAME + '.py'); if RabbitVCS then begin PythonAddModulePath(PythonPath); PythonModule:= PythonLoadModule(MODULE_NAME); RabbitVCS:= Assigned(PythonModule); end; end; end; procedure Finalize; begin if Assigned(conn) then dbus_connection_unref(conn); end; initialization RegisterInitialization(@Initialize); finalization Finalize; end. doublecmd-0.9.8/src/platform/unix/uqt5workaround.pas0000644000175000001440000000117013363032026021640 0ustar alexxusersunit uQt5Workaround; {$mode objfpc}{$H+} interface implementation uses InitC, BaseUnix; procedure _exit(status: cint); cdecl; external clib; function setenv(const name, value: pchar; overwrite: cint): cint; cdecl; external clib; initialization if (LowerCase(fpGetEnv(PAnsiChar('XDG_SESSION_TYPE'))) = 'wayland') then setenv('QT_QPA_PLATFORM', 'xcb', 1); 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; end. doublecmd-0.9.8/src/platform/unix/upython.pas0000644000175000001440000002036013613100542020333 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple interface to the Python language 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 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: PPAnsiChar; 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; 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 PythonExe: String; 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; function FindPythonExecutable: String; begin if ExecutableInSystemPath('python2') then Result:= 'python2' else begin Result:= 'python'; end; end; var libpython: TLibHandle; procedure Initialize; begin PythonExe:= FindPythonExecutable; libpython:= TLibHandle(dlopen('libpython2.7.so.1.0', RTLD_NOW or RTLD_GLOBAL)); 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'); @PyString_AsString:= SafeGetProcAddress(libpython, 'PyString_AsString'); @PyString_FromString:= SafeGetProcAddress(libpython, 'PyString_FromString'); @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; end; end; procedure Finalize; begin if HasPython then Py_Finalize(); if libpython <> NilHandle then FreeLibrary(libpython); end; initialization Initialize; finalization Finalize; end. doublecmd-0.9.8/src/platform/unix/upollthread.pas0000644000175000001440000001004113573160507021157 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; 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 WriteLn('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-0.9.8/src/platform/unix/upipeserver.pas0000644000175000001440000001013113463601555021206 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Unix implementation of one-way IPC between 2 processes Copyright (C) 2015-2019 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(LINUX)} , 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 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(LINUX)} Result:= IncludeTrailingBackslash(GetUserRuntimeDir) + FileName; {$ELSE} Result:= GetTempDir(Global) + ApplicationName + '-' + IntToStr(fpGetUID) + PathDelim + FileName; {$ENDIF} Result:= Result + '.pipe' end; { TPipeServerComm } procedure TPipeServerComm.Handler(Sender: TObject); begin TThread.Synchronize(nil, @Owner.ReadMessage); end; constructor TPipeServerComm.Create(AOWner: TSimpleIPCServer); {$IF NOT DEFINED(LINUX)} var Info: TStat; Directory: String; {$ENDIF} 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); {$IF NOT DEFINED(LINUX)} // Verify directory owner Directory:= ExtractFileDir(FFileName); if not DirectoryExists(Directory) then begin if fpMkDir(Directory, &700) <> 0 then raise EIPCError.Create(SysErrorMessage(GetLastOSError)); end else begin if fpStat(Directory, Info) <> 0 then raise EIPCError.Create(SysErrorMessage(GetLastOSError)); if (Info.st_uid <> fpGetUID) or (Info.st_gid <> fpGetGID) then DoError(SErrFailedToCreatePipe, [FFileName]); end; {$ENDIF} 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-0.9.8/src/platform/unix/uoverlayscrollbarfix.pas0000644000175000001440000000073713457076727023143 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-0.9.8/src/platform/unix/umyunix.pas0000644000175000001440000005215213611061256020355 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific UNIX functions. 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 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 ); const DesktopName: array[TDesktopEnvironment] of String = ( 'Unknown', 'KDE', 'GNOME', 'Xfce', 'LXDE', 'MATE', 'Cinnamon', 'LXQt' ); 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; 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} pw_gecos: PChar; //en< real name pw_dir: PChar; //en< home directory pw_shell: PChar; //en< shell program {$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; {$IFDEF LINUX} {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} {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 libc name 'getpwuid'; {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 libc name 'getpwnam'; {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 libc name 'getgrgid'; {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 libc name 'getgrnam'; {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 libc name 'getenv'; {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: PChar; overwrite: LongInt): LongInt; cdecl; external libc name 'setenv'; 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; {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; 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, DCUnix, uDCUtils, uOSUtils {$IF (NOT DEFINED(FPC_USE_LIBC)) or (DEFINED(BSD) AND NOT DEFINED(DARWIN))} , SysCall {$ENDIF} {$IF NOT DEFINED(DARWIN)} , uMimeActions, uMimeType, uGVolume {$ENDIF} {$IFDEF LINUX} , uUDisks {$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; HaveUDisksCtl: 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; procedure CheckUDisksCtl; begin HaveUDisksCtl := (fpSystemStatus('udisksctl help > /dev/null 2>&1') = 0); end; {$ENDIF LINUX} function GetDesktopEnvironment: TDesktopEnvironment; var I: Integer; DesktopSession: String; const EnvVariable: array[0..1] of String = ('XDG_CURRENT_DESKTOP', 'DESKTOP_SESSION'); begin 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('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); 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); if fpSystemStatus('pgrep xfce4-session > /dev/null') = 0 then Exit(DE_XFCE); 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 (BaseUnix.fpAccess(UTF8ToSys(FileName), BaseUnix.X_OK) = 0); if Result and (Info.st_size >= SizeOf(dwSign)) 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 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(UTF8ToSys(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(UTF8ToSys(sTemp), recStat) < 0) then Continue; // If it is a link then checking link destination if fpS_ISLNK(recStat.st_mode) then begin sTemp:= ReadSymLink(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 ExecutableInSystemPath(const FileName: String): Boolean; var I: Integer; Path: String; Value: TDynamicStringArray; begin Path:= GetEnvironmentVariable('PATH'); Value:= SplitString(Path, PathSeparator); for I:= Low(Value) to High(Value) do begin if fpAccess(IncludeTrailingPathDelimiter(Value[I]) + FileName, X_OK) = 0 then Exit(True); end; Result:= False; end; function GetDefaultAppCmd(const FileName: String): String; {$IF NOT DEFINED(DARWIN)} 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; {$ELSE} begin Result:= 'xdg-open ' + QuoteStr(FileName); end; {$ENDIF} function GetFileMimeType(const FileName: String): String; {$IF NOT DEFINED(DARWIN)} 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 Index: Integer; 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 HaveUDisksCtl then begin Result:= RunCommand('udisksctl', ['mount', '-b', Drive^.DeviceId], MountPath); if Result then begin Write(MountPath); Index:= Pos(' at ', MountPath); if Index > 0 then begin Inc(Index, 4); Drive^.Path:= Copy(MountPath, Index, Length(MountPath) - Index - 1); end; end end; if not Result and uUDisks.Initialize then begin try Result := uUDisks.Mount(DeviceFileToUDisksObjectPath(Drive^.DeviceId), EmptyStr, nil, MountPath); except on E: Exception do begin Result := False; WriteLn(E.Message); end; end; if Result then Drive^.Path := MountPath; uUDisks.Finalize; end; if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pmount ' + Drive^.DeviceId) = 0; {$ELSE IF 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)} if Drive^.DriveType = dtSpecial then begin Exit(uGVolume.Unmount(Drive^.Path)); end; {$ENDIF} {$IF DEFINED(LINUX)} Result := False; if HaveUDisksCtl then Result := fpSystemStatus('udisksctl unmount -b ' + Drive^.DeviceId) = 0; if not Result and uUDisks.Initialize then begin Result := uUDisks.Unmount(DeviceFileToUDisksObjectPath(Drive^.DeviceId), nil); uUDisks.Finalize; end; if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pumount ' + Drive^.DeviceId) = 0; if not Result then {$ELSE IF DEFINED(DARWIN)} Result := fpSystemStatus('diskutil unmount ' + Drive^.DeviceId) = 0; if not Result then {$ENDIF} Result := fpSystemStatus('umount ' + Drive^.Path) = 0; end else Result := True; end; function EjectDrive(Drive: PDrive): Boolean; begin {$IF DEFINED(DARWIN)} Result := fpSystemStatus('diskutil eject ' + Drive^.DeviceId) = 0; 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 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 pid = -1 then { Fork failed } begin WriteLn('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)} initialization DesktopEnv := GetDesktopEnvironment; {$IFDEF LINUX} CheckPMount; CheckUDisksCtl; {$ENDIF} {$ENDIF} end. doublecmd-0.9.8/src/platform/unix/umagickwand.pas0000755000175000001440000001605313036372036021136 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- ImageMagick thumbnail provider Copyright (C) 2013-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 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..5] of String = ( 'libMagickWand-6.Q16.so.1', 'libMagickWand-6.Q16.so.2', 'libMagickWand-6.Q16.so.3', 'libMagickWand-6.Q16HDRI.so.3', 'libMagickWand.so.5', 'libMagickWand.so.4' ); type PMagickWand = Pointer; MagickBooleanType = culong; ExceptionType = Word; PExceptionType = ^ExceptionType; {$PACKENUM 4} type FilterTypes = ( UndefinedFilter, PointFilter, BoxFilter, TriangleFilter, HermiteFilter, HanningFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter, CubicFilter, CatromFilter, MitchellFilter, LanczosFilter, BesselFilter, SincFilter ); 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): culong; cdecl; MagickGetImageHeight: function(wand: PMagickWand): culong; cdecl; MagickResizeImage: function(wand: PMagickWand; const columns, rows: culong; const filter: FilterTypes; const blur: double): 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: culong; BlobStream: TBlobStream; Status: MagickBooleanType; Bitmap: TPortableNetworkGraphic; begin Result:= nil; if MaskList.Matches(aFileName) then begin // DCDebug('GetThumbnail start: ' + IntToStr(GetTickCount)); MagickWandGenesis; 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 Status:= MagickResizeImage(Wand, aSize.cx, aSize.cy, LanczosFilter, 1.0); 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); MagickWandTerminus; // 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'); @MagickResizeImage:= SafeGetProcAddress(MagickWand, 'MagickResizeImage'); @MagickSetImageFormat:= SafeGetProcAddress(MagickWand, 'MagickSetImageFormat'); @MagickGetImageBlob:= SafeGetProcAddress(MagickWand, 'MagickGetImageBlob'); // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); MaskList:= TMaskList.Create('*.xcf'); DCDebug('ImageMagick: ' + LibraryName); except // Ignore end; end; procedure Finalize; begin MaskList.Free; if (MagickWand <> NilHandle) then FreeLibrary(MagickWand); end; initialization Initialize; finalization Finalize; end. doublecmd-0.9.8/src/platform/unix/ukeyfile.pas0000755000175000001440000001472113430606042020454 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-0.9.8/src/platform/unix/ukde.pas0000644000175000001440000000465012777233461017602 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- K Desktop Environment integration unit 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 uKde; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uMyUnix; function KioOpen(const URL: String): Boolean; function ShowOpenWithDialog(const FileList: TStringList): Boolean; var UseKde: Boolean = False; HasKdeOpen: Boolean = False; implementation uses uDCUtils, uGlobs, uGlobsPaths, uOSUtils, uTrash, uPython; var KdeVersion: String; KdeOpen: String = 'kioclient'; PythonScript: String = 'scripts/doublecmd-kde.py'; function KioOpen(const URL: String): Boolean; begin Result:= ExecCmdFork(KdeOpen + ' exec ' + QuoteStr(URL)); end; function ShowOpenWithDialog(const FileList: TStringList): Boolean; var I: Integer; Args: String; begin Args := ' openwith'; for I := 0 to FileList.Count - 1 do Args+= ' ' + QuoteStr(FileList[I]); Result:= ExecCmdFork(PythonExe + ' ' + PythonScript + Args); end; function FileTrash(const FileName: String): Boolean; begin Result:= fpSystemStatus(KdeOpen + ' --noninteractive move ' + QuoteStr(FileName) + ' trash:/') = 0; end; procedure Initialize; begin UseKde:= (DesktopEnv = DE_KDE); if UseKde then begin PythonScript:= gpExePath + PythonScript; KdeVersion:= GetEnvironmentVariable('KDE_SESSION_VERSION'); if KdeVersion = '5' then KdeOpen:= 'kioclient5'; HasKdeOpen:= ExecutableInSystemPath(KdeOpen); if HasKdeOpen then FileTrashUtf8:= @FileTrash; UseKde:= (fpSystemStatus(PythonExe + ' ' + PythonScript + ' > /dev/null 2>&1') = 0); end; end; initialization RegisterInitialization(@Initialize); end. doublecmd-0.9.8/src/platform/unix/ujpegthumb.pas0000644000175000001440000000533212612505011020777 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-0.9.8/src/platform/unix/ugvolume.pas0000644000175000001440000002162113457076377020521 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to GVolumeMonitor Copyright (C) 2014-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 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 Unmount(const Path: String): Boolean; function EnumerateVolumes(DrivesList: TDrivesList): Boolean; implementation uses typinfo, fgl, uGLib2, uGio2, uGObject2, uShowMsg; type TGVolumeObserverList = specialize TFPGList; var VolumeMonitor: PGVolumeMonitor = nil; Observers: TGVolumeObserverList = nil; procedure Print(const Message: String); begin WriteLn('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; 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; 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 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-0.9.8/src/platform/unix/ugtk2fixcursorpos.pas0000644000175000001440000001711113573157206022366 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 {$if lcl_fullversion < 1090000} , Gtk2WSExtCtrls, Graphics {$endif} ; 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; {$if lcl_fullversion < 1090000} { TGtk2WSCustomPanelEx } TGtk2WSCustomPanelEx = class(TGtk2WSCustomPanel) published class function GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; override; end; {$endif} 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; {$if lcl_fullversion < 1090000} { TGtk2WSCustomPanelEx } class function TGtk2WSCustomPanelEx.GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; const DefColors: array[TDefaultColorType] of TColor = ( { dctBrush } clBackground, { dctFont } clBtnText ); begin Result := DefColors[ADefaultColorType]; end; {$endif} { 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); {$if lcl_fullversion < 1090000} // Replace TCustomPanel widgetset class with TCustomPanel.Create(nil) do Free; RegisterWSComponent(TCustomPanel, TGtk2WSCustomPanelEx); {$endif} end; initialization Initialize; end. doublecmd-0.9.8/src/platform/unix/ugio.pas0000644000175000001440000001651113457076377017623 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-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., 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 GioMimeTypeGetActions(const MimeType: String): TDynamicStringArray; function GioGetMimeType(const FileName: String; MaxExtent: LongWord): String; var HasGio: Boolean = True; implementation uses StrUtils, 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 GioGetIconTheme(const Scheme: String): String; var Theme: Pgchar; Settings: PGSettings; SettingsSchema: PGSettingsSchema; SchemaSource: PGSettingsSchemaSource; begin if not HasGio then Exit(EmptyStr); 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, 'icon-theme'); 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 GioFileGetIcon(const FileName: String): String; var GFile: PGFile; GIcon: PGIcon; AIconList: PPgchar; 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); 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; 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 // 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 Result:= 'text/plain' 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(nil, @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; WriteLn(E.Message); end; end; end; initialization Initialize; end. doublecmd-0.9.8/src/platform/unix/udcreadwebp.pas0000644000175000001440000001112513170237476021130 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- WebP reader implementation (via libwebp library) 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., 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 MemoryStream:= Stream as TMemoryStream; Result:= WebPGetInfo(MemoryStream.Memory, MemoryStream.Size, nil, nil) <> 0; end; procedure TDCReaderWebP.InternalRead(Stream: TStream; Img: TFPCustomImage); var X, Y: Integer; Data: Pointer; ImageData: PRGBA; PixelColor: TFPColor; 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; // Read image data for Y:= 0 to Img.Height - 1 do for X:= 0 to Img.Width - 1 do with ImageData^ do begin PixelColor.alpha:= Alpha + Alpha shl 8; PixelColor.red:= Red + Red shl 8; PixelColor.green:= Green + Green shl 8; PixelColor.blue:= Blue + Blue shl 8; Img.Colors[X, Y]:= PixelColor; Inc(ImageData); end; 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-0.9.8/src/platform/unix/uappindicator.pas0000644000175000001440000000773212507732524021513 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Application indicator support. 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 uAppIndicator; {$mode delphi} interface uses ExtCtrls; procedure RegisterAppIndicator(const ATrayIcon: TCustomTrayIcon); implementation uses DynLibs, WSLCLClasses, Glib2, Gtk2, Gtk2WSExtCtrls, DCOSUtils, uMyUnix; type TAppIndicatorCategory = ( APP_INDICATOR_CATEGORY_APPLICATION_STATUS, APP_INDICATOR_CATEGORY_COMMUNICATIONS, APP_INDICATOR_CATEGORY_SYSTEM_SERVICES, APP_INDICATOR_CATEGORY_HARDWARE, APP_INDICATOR_CATEGORY_OTHER ); TAppIndicatorStatus = ( APP_INDICATOR_STATUS_PASSIVE, APP_INDICATOR_STATUS_ACTIVE, APP_INDICATOR_STATUS_ATTENTION ); PAppIndicator = ^TAppIndicator; TAppIndicator = record end; type { TGtk2WSCustomTrayIconEx } TGtk2WSCustomTrayIconEx = class(TGtk2WSCustomTrayIcon) published class function Hide(const ATrayIcon: TCustomTrayIcon): Boolean; override; class function Show(const ATrayIcon: TCustomTrayIcon): Boolean; override; end; var PopupMenu: PGtkWidget; AppInd: PAppIndicator = nil; var app_indicator_new: function(const id, icon_name: Pgchar; category: TAppIndicatorCategory): PAppIndicator; cdecl; app_indicator_set_status: procedure(self: PAppIndicator; status: TAppIndicatorStatus); cdecl; app_indicator_set_menu: procedure(self: PAppIndicator; menu: PGtkWidget); cdecl; { TGtk2WSCustomTrayIconEx } class function TGtk2WSCustomTrayIconEx.Hide(const ATrayIcon: TCustomTrayIcon): Boolean; begin Result:= inherited Hide(ATrayIcon); if Assigned(AppInd) then app_indicator_set_status(AppInd, APP_INDICATOR_STATUS_PASSIVE); end; class function TGtk2WSCustomTrayIconEx.Show(const ATrayIcon: TCustomTrayIcon): Boolean; begin Result:= inherited Show(ATrayIcon); if Assigned(AppInd) then app_indicator_set_status(AppInd, APP_INDICATOR_STATUS_ACTIVE); end; function Load: Boolean; var libapp: TLibHandle; begin libapp:= LoadLibrary('libappindicator.so.1'); Result:= libapp <> NilHandle; if Result then try @app_indicator_new:= SafeGetProcAddress(libapp, 'app_indicator_new'); @app_indicator_set_menu:= SafeGetProcAddress(libapp, 'app_indicator_set_menu'); @app_indicator_set_status:= SafeGetProcAddress(libapp, 'app_indicator_set_status'); except Result:= False; FreeLibrary(libapp); end; end; procedure RegisterAppIndicator(const ATrayIcon: TCustomTrayIcon); var Index: Integer; MenuItem: PGtkWidget; WidgetSetClass: ^TWSLCLComponentClass; begin if fpSystemStatus('pgrep unity > /dev/null 2>&1') = 0 then begin if not Load then Exit; // Replace tray icon widgetset class WidgetSetClass:= @ATrayIcon.WidgetSetClass; WidgetSetClass^:= TGtk2WSCustomTrayIconEx; // Create and fill popup menu PopupMenu:= gtk_menu_new(); for Index:= 0 to ATrayIcon.PopupMenu.Items.Count - 1 do begin MenuItem:= PGtkWidget(ATrayIcon.PopupMenu.Items[Index].Handle); gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu), MenuItem); end; // Create application indicator AppInd:= app_indicator_new('doublecmd', 'doublecmd', APP_INDICATOR_CATEGORY_APPLICATION_STATUS); if Assigned(AppInd) then app_indicator_set_menu(AppInd, PopupMenu); end; end; end. doublecmd-0.9.8/src/platform/unix/qt5/0000755000175000001440000000000013615241423016636 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/qt5/interfaces.pas0000644000175000001440000000076413114763257021505 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-0.9.8/src/platform/unix/mime/0000755000175000001440000000000013615241423017054 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/mime/umimetype.pas0000644000175000001440000002272113041072462021601 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-0.9.8/src/platform/unix/mime/umimecache.pas0000644000175000001440000003450713041072462021670 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-0.9.8/src/platform/unix/mime/umimeactions.pas0000644000175000001440000004533413447624345022302 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; WriteLn('GetDesktopEntry: ', E.Message); end; end; end; function AddDesktopEntry(const MimeType, DesktopEntry: String; DefaultAction: Boolean): Boolean; var Value: String; 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; mbForceDirectory(UserDataDir + '/applications'); if (StrEnds(DesktopEntry, '.desktop') = False) then begin // Create new desktop entry file for user command CustomFile:= 'dc_' + ExtractFileName(DesktopEntry) + '_'; CustomFile:= UserDataDir + '/applications/' + 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(DesktopEntry)); 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-0.9.8/src/platform/unix/linux/0000755000175000001440000000000013615241423017264 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/linux/uudisks.pas0000644000175000001440000006560713103604541021472 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to UDisks service via DBUS. 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 TStringArray = array of string; 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. DriveCanDetach: Boolean; // Hot-plugged device (USB, Firewire, etc.) IdUsage, IdType, IdVersion, IdUuid, IdLabel, 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; const UDisksDevicePathPrefix = '/org/freedesktop/UDisks/devices/'; function UDisksObjectPathToDeviceFile(const ObjectPath: String): String; function DeviceFileToUDisksObjectPath(const DeviceFile: String): String; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: String; IsPropertyAnObjectPath: Boolean = False): Boolean; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: Boolean): Boolean; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: TStringArray): Boolean; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; function EnumerateDevices(out DevicesList: TStringArray): Boolean; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; function Mount(const ObjectPath: String; const FileSystemType: String; const Options: TStringArray; out MountPath: String): Boolean; function Unmount(const ObjectPath: String; const Options: TStringArray): Boolean; function Initialize: Boolean; procedure Finalize; procedure DispatchMessages; procedure AddObserver(Func: TUDisksDeviceNotify); procedure RemoveObserver(Func: TUDisksDeviceNotify); implementation uses dbus, ExtCtrls; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 2)} type DBusHandleMessageFunction = function(connection: PDBusConnection; message_: PDBusMessage; user_data: Pointer): DBusHandlerResult; cdecl; { Filters } function dbus_connection_add_filter(connection: PDBusConnection; function_: DBusHandleMessageFunction; user_data: Pointer; free_data_function: DBusFreeFunction): dbus_bool_t; cdecl; external LibDBus; procedure dbus_connection_remove_filter (connection: PDBusConnection; function_: DBusHandleMessageFunction; user_data: Pointer); cdecl; external LibDBus; {$ENDIF} type TDummy = class procedure OnTimer(Sender: TObject); end; var DBusConnectionOpen: Boolean = False; DBusFilterInstalled: Boolean = False; conn: PDBusConnection; error: DBusError; Observers: TUDisksObserverList = nil; InitializeCounter: Integer = 0; ConnTimer: TTimer = nil; Dummy: TDummy = nil; const UDisksMethodStr: array[TUDisksMethod] of string = ('DeviceAdded', 'DeviceRemoved', 'DeviceChanged'); UDisksAddress = 'org.freedesktop.UDisks'; UDisksObject = '/org/freedesktop/UDisks'; UDisksInterface = 'org.freedesktop.UDisks'; UDisksDeviceInterface = 'org.freedesktop.UDisks.Device'; DBusPropertiesInterface = 'org.freedesktop.DBus.Properties'; UDisksFilterStr = 'type=''signal'',' + 'sender=''' + UDisksAddress + ''',' + 'path=''' + UDisksObject + ''',' + 'interface=''' + UDisksInterface + ''''; procedure Print(const sMessage: String); begin WriteLn('UDisks: ', 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 UDisksObjectPathToDeviceFile(const ObjectPath: String): String; begin if LeftStr(ObjectPath, Length(UDisksDevicePathPrefix)) = UDisksDevicePathPrefix then Result := '/dev/' + Copy(ObjectPath, Length(UDisksDevicePathPrefix) + 1, MaxInt) else raise Exception.Create('Invalid object path: ' + ObjectPath); end; function DeviceFileToUDisksObjectPath(const DeviceFile: String): String; begin if LeftStr(DeviceFile, 5) = '/dev/' then Result := UDisksDevicePathPrefix + Copy(DeviceFile, 6, MaxInt) else raise Exception.Create('Invalid device file name: ' + DeviceFile); end; function GetObjectPath(message: PDBusMessage; out ObjectPath: String): Boolean; var object_path: PChar; got_args: dbus_bool_t; begin dbus_error_init(@error); got_args := dbus_message_get_args(message, @error, DBUS_TYPE_OBJECT_PATH, [@object_path, DBUS_TYPE_INVALID]); if CheckError('Cannot get object path', @error) then Result := False else if got_args = 0 then begin Print('Cannot get object path'); Result := False; end else begin ObjectPath := StrPas(object_path); Result := True; end; end; function GetBasicVal(pIter: PDBusMessageIter; dbus_type: Integer; Ptr: Pointer): Boolean; begin if dbus_message_iter_get_arg_type(pIter) <> dbus_type then begin Print('Not a valid type'); Result := False; end else begin dbus_message_iter_get_basic(pIter, Ptr); Result := True; end; end; function GetArrayOfString(pIter: PDBusMessageIter; dbus_string_type: Integer; out Arr: TStringArray): Boolean; var arrayIter: DBusMessageIter; counter: Integer; StringPtr: PChar; begin if (dbus_message_iter_get_arg_type(pIter) <> DBUS_TYPE_ARRAY) or (dbus_message_iter_get_element_type(pIter) <> dbus_string_type) then begin Print('Not a valid type'); Result := False; end else begin dbus_message_iter_recurse(pIter, @arrayIter); // Check if array is not empty (if the first element is there). if dbus_message_iter_get_arg_type(@arrayIter) <> DBUS_TYPE_INVALID then begin counter := 0; repeat if GetBasicVal(@arrayIter, dbus_string_type, @StringPtr) and Assigned(StringPtr) then begin SetLength(Arr, counter + 1); Arr[counter] := StrPas(StringPtr); Inc(counter); end else Exit(False); until (dbus_message_iter_next(@arrayIter) = 0); end; end; Result := True; end; function GetArrayOfString(pIter: PDBusMessageIter; out Arr: TStringArray): Boolean; begin Result := GetArrayOfString(pIter, DBUS_TYPE_STRING, Arr); end; function GetArrayOfObjectPath(pIter: PDBusMessageIter; out Arr: TStringArray): Boolean; begin // Object path is an utf-8 string in DBUS, but marked with a different type // than normal DBUS_TYPE_STRING. Result := GetArrayOfString(pIter, DBUS_TYPE_OBJECT_PATH, Arr); end; // reply needs to be freed by the caller. function SendWithReply(message: PDBusMessage; out reply: PDBusMessage; expectedReplyType: Integer; replyIter: PDBusMessageIter): Boolean; begin dbus_error_init (@error); reply := dbus_connection_send_with_reply_and_block(conn, message, -1, @error); if CheckError('Error sending message', @error) then Result := False else if not Assigned(reply) then begin Print('Reply not received'); Result := False; end else if dbus_message_iter_init(reply, replyIter) = 0 then begin Print('Reply has no arguments'); Result := False; end else if dbus_message_iter_get_arg_type(replyIter) <> expectedReplyType then begin Print('Invalid argument type in reply.'); Result := False; end else Result := True; if (not Result) and Assigned(reply) then dbus_message_unref(reply); end; function DBusListActivatableNames(out Names: TStringArray): Boolean; var message, reply: PDBusMessage; replyIter: DBusMessageIter; begin message := dbus_message_new_method_call(DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, 'ListActivatableNames'); if not Assigned(message) then begin Print('Cannot create message "ListActivatableNames"'); Result := False; end else begin Result := SendWithReply(message, reply, DBUS_TYPE_ARRAY, @replyIter); dbus_message_unref(message); if Result then begin Result := GetArrayOfString(@replyIter, Names); dbus_message_unref(reply); end; end; end; function Invoke_GetProperty(const ObjectPath: String; const PropertyName: String; out reply: PDBusMessage; // reply needs to be freed by the caller. pVariantIter: PDBusMessageIter): Boolean; var deviceInterfaceNamePChar: PChar; propertyNamePChar: PChar; message: PDBusMessage; replyIter: DBusMessageIter; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), DBusPropertiesInterface, 'Get'); if not Assigned(message) then begin Print('Cannot create message "Get"'); Exit(False); end; deviceInterfaceNamePChar := PChar(UDisksDeviceInterface); propertyNamePChar := PChar(PropertyName); if dbus_message_append_args(message, DBUS_TYPE_STRING, [@deviceInterfaceNamePChar, DBUS_TYPE_STRING, @propertyNamePChar, DBUS_TYPE_INVALID]) = 0 then begin Print('Cannot append arguments'); Result := False; end else if SendWithReply(message, reply, DBUS_TYPE_VARIANT, @replyIter) then begin dbus_message_iter_recurse(@replyIter, pVariantIter); Result := True; end else Result := False; dbus_message_unref(message); end; function Invoke_EnumerateDevices(out reply: PDBusMessage; // reply needs to be freed by the caller. pReplyIter: PDBusMessageIter): Boolean; var message: PDBusMessage; begin message := dbus_message_new_method_call(UDisksAddress, UDisksObject, UDisksInterface, 'EnumerateDevices'); if not Assigned(message) then begin Print('Cannot create message "EnumerateDevices"'); Result := False; end else begin Result := SendWithReply(message, reply, DBUS_TYPE_ARRAY, pReplyIter); dbus_message_unref(message); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: String; IsPropertyAnObjectPath: Boolean): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; StringPtr: PChar; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin if IsPropertyAnObjectPath then Result := GetBasicVal(@itVariant, DBUS_TYPE_OBJECT_PATH, @StringPtr) else Result := GetBasicVal(@itVariant, DBUS_TYPE_STRING, @StringPtr); if Result and Assigned(StringPtr) then Value := StrPas(StringPtr); dbus_message_unref(reply); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: Boolean): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; DbusValue: dbus_bool_t; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin Result := GetBasicVal(@itVariant, DBUS_TYPE_BOOLEAN, @DbusValue); if Result then Value := DbusValue <> 0; dbus_message_unref(reply); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: TStringArray): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin Result := GetArrayOfString(@itVariant, Value); dbus_message_unref(reply); end; end; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; begin // Description of properties: // http://hal.freedesktop.org/docs/udisks/Device.html with Info do begin DeviceObjectPath := ObjectPath; Result := GetObjectProperty(ObjectPath, 'DeviceFile', DeviceFile) and GetObjectProperty(ObjectPath, 'DeviceIsDrive', DeviceIsDrive) and GetObjectProperty(ObjectPath, 'DeviceIsSystemInternal', DeviceIsSystemInternal) and GetObjectProperty(ObjectPath, 'DeviceIsPartition', DeviceIsPartition) and GetObjectProperty(ObjectPath, 'DeviceIsPartitionTable', DeviceIsPartitionTable) and GetObjectProperty(ObjectPath, 'DeviceIsMounted', DeviceIsMounted) and GetObjectProperty(ObjectPath, 'DeviceIsRemovable', DeviceIsRemovable) and GetObjectProperty(ObjectPath, 'DeviceIsOpticalDisc', DeviceIsOpticalDisc) and GetObjectProperty(ObjectPath, 'DeviceIsMediaAvailable', DeviceIsMediaAvailable) and GetObjectProperty(ObjectPath, 'DevicePresentationHide', DevicePresentationHide) and GetObjectProperty(ObjectPath, 'DevicePresentationName', DevicePresentationName) and GetObjectProperty(ObjectPath, 'DevicePresentationIconName', DevicePresentationIconName) and GetObjectProperty(ObjectPath, 'DeviceAutomountHint', DeviceAutomountHint); if Result and DeviceIsPartition then Result := GetObjectProperty(ObjectPath, 'PartitionSlave', PartitionSlave, True); if Result and DeviceIsMounted then Result := GetObjectProperty(ObjectPath, 'DeviceMountPaths', DeviceMountPaths); if Result and DeviceIsDrive then begin Result := GetObjectProperty(ObjectPath, 'DriveIsMediaEjectable', DriveIsMediaEjectable) and GetObjectProperty(ObjectPath, 'DriveConnectionInterface', DriveConnectionInterface) and GetObjectProperty(ObjectPath, 'DriveMedia', DriveMedia) and GetObjectProperty(ObjectPath, 'DriveMediaCompatibility', DriveMediaCompatibility) and GetObjectProperty(ObjectPath, 'DriveCanDetach', DriveCanDetach); end; if Result then begin Result := GetObjectProperty(ObjectPath, 'IdUsage', IdUsage) and GetObjectProperty(ObjectPath, 'IdType', IdType) and GetObjectProperty(ObjectPath, 'IdVersion', IdVersion) and GetObjectProperty(ObjectPath, 'IdUuid', IdUuid) and GetObjectProperty(ObjectPath, 'IdLabel', IdLabel); end; end; end; function EnumerateDevices(out DevicesList: TStringArray): Boolean; var reply: PDBusMessage; replyIter: DBusMessageIter; begin Result := Invoke_EnumerateDevices(reply, @replyIter); if Result then begin Result := GetArrayOfObjectPath(@replyIter, DevicesList); dbus_message_unref(reply); end; end; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; var DevicesList: TStringArray; i: Integer; begin Result := EnumerateDevices(DevicesList); if Result then begin SetLength(DevicesInfos, Length(DevicesList)); for i := 0 to Length(DevicesList) - 1 do begin if not GetDeviceInfo(DevicesList[i], DevicesInfos[i]) then Exit(False); end; end; end; function Mount(const ObjectPath: String; const FileSystemType: String; const Options: TStringArray; out MountPath: String): Boolean; var message, reply: PDBusMessage; argsIter, arrayIter, replyIter: DBusMessageIter; optsPChar: PChar; i: Integer; StringPtr: PChar; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), UDisksDeviceInterface, 'FilesystemMount'); if not Assigned(message) then begin Print('Cannot create message "FilesystemMount"'); Result := False; end else begin dbus_message_iter_init_append(message, @argsIter); optsPChar := PChar(FileSystemType); Result := (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_STRING, @optsPChar) <> 0) and (dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, PChar(DBUS_TYPE_STRING_AS_STRING), @arrayIter) <> 0); if Result then begin for i := Low(Options) to High(Options) do begin optsPChar := PChar(Options[i]); if dbus_message_iter_append_basic(@arrayIter, DBUS_TYPE_STRING, @optsPChar) = 0 then begin Result := False; Break; end; end; if dbus_message_iter_close_container(@argsIter, @arrayIter) = 0 then Result := False; end; if not Result then begin Print('Cannot append arguments'); end else if SendWithReply(message, reply, DBUS_TYPE_STRING, @replyIter) then begin Result := GetBasicVal(@replyIter, DBUS_TYPE_STRING, @StringPtr) and Assigned(StringPtr); if Result then MountPath := StrPas(StringPtr); dbus_message_unref(reply); end else Result := False; dbus_message_unref(message); end; end; function Unmount(const ObjectPath: String; const Options: TStringArray): Boolean; var message, reply: PDBusMessage; argsIter, arrayIter: DBusMessageIter; optsPChar: PChar; i: Integer; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), UDisksDeviceInterface, 'FilesystemUnmount'); if not Assigned(message) then begin Print('Cannot create message "FilesystemUnmount"'); Result := False; end else begin dbus_message_iter_init_append(message, @argsIter); Result := dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, PChar(DBUS_TYPE_STRING_AS_STRING), @arrayIter) <> 0; if Result then begin for i := Low(Options) to High(Options) do begin optsPChar := PChar(Options[i]); if dbus_message_iter_append_basic(@arrayIter, DBUS_TYPE_STRING, @optsPChar) = 0 then begin Result := False; Break; end; end; if dbus_message_iter_close_container(@argsIter, @arrayIter) = 0 then Result := False; end; if not Result then begin Print('Cannot append arguments'); end else begin dbus_error_init(@error); reply := dbus_connection_send_with_reply_and_block(conn, message, -1, @error); if CheckError('Error sending message', @error) then Result := False else if not Assigned(reply) then begin Print('Reply not received'); Result := False; end else Result := True; if Assigned(reply) then dbus_message_unref(reply); end; dbus_message_unref(message); end; end; function FilterFunc(connection: PDBusConnection; message: PDBusMessage; user_data: Pointer): DBusHandlerResult; cdecl; var DeviceObjectPath: String; i: Integer; begin if dbus_message_is_signal(message, 'org.freedesktop.DBus.Local', 'Disconnected') <> 0 then begin // The bus is disconnecting. "Disconnected" is the last signal in connection. Print('Disconnected from DBUS'); DBusConnectionOpen := False; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceAdded else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceAdded])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device added: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceAdded, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceRemoved else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceRemoved])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device removed: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceRemoved, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceChanged else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceChanged])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device changed: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceChanged, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end; Exit(DBUS_HANDLER_RESULT_NOT_YET_HANDLED); end; function IsUDisksActivatable: Boolean; var ServicesNames: TStringArray; i: Integer; begin Result := False; if DBusListActivatableNames(ServicesNames) then begin for i := Low(ServicesNames) to High(ServicesNames) do if ServicesNames[i] = UDisksAddress then Exit(True); end else Print('Cannot list activatable services on DBUS'); end; function CheckUDisksService: Boolean; var udisks_exists: dbus_bool_t; start_reply: dbus_uint32_t; daemon_version: String; begin // Check if UDisks service is running. dbus_error_init(@error); udisks_exists := dbus_bus_name_has_owner(conn, UDisksAddress, @error); if CheckError('Cannot query UDisks on DBUS', @error) then Exit(False); if udisks_exists = 0 then begin // Check if UDisks service is installed and can be activated. if not IsUDisksActivatable then Exit(False); dbus_error_init(@error); dbus_bus_start_service_by_name(conn, UDisksAddress, 0, @start_reply, @error); if CheckError('Cannot request service to start', @error) then Exit(False); case start_reply of DBUS_START_REPLY_SUCCESS: Print('Service successfully started.'); DBUS_START_REPLY_ALREADY_RUNNING: Print('Service already running.'); end; end else Print('Service found running.'); if GetObjectProperty(UDisksObject, 'DaemonVersion', daemon_version) then Print('Version ' + daemon_version); Result := True; end; function Initialize: Boolean; var i: TUDisksMethod; begin Result := False; Inc(InitializeCounter); try if InitializeCounter > 1 then begin // Already initialized. Result := True; Exit; end; dbus_error_init(@error); conn := dbus_bus_get(DBUS_BUS_SYSTEM, @error); if CheckError('Cannot acquire connection to DBUS system bus', @error) then Exit; if Assigned(conn) then DBusConnectionOpen := True else Exit; // Disable exiting the application when it is disconnected from DBUS. dbus_connection_set_exit_on_disconnect(conn, 0); // Check if UDisks is running. if not CheckUDisksService then Exit; Observers := TUDisksObserverList.Create; dbus_error_init(@error); for i := Low(UDisksMethodStr) to High(UDisksMethodStr) do begin dbus_bus_add_match( conn, PChar(UDisksFilterStr + ',member=''' + UDisksMethodStr[i] + ''''), @error); CheckError('Cannot add matching rule', @error); end; Result := dbus_connection_add_filter(conn, @FilterFunc, nil, nil) <> 0; if not Result then Print('Cannot add filter for DBUS connection') else begin DBusFilterInstalled := True; Dummy := TDummy.Create; ConnTimer := TTimer.Create(nil); ConnTimer.Interval := 500; ConnTimer.OnTimer := @Dummy.OnTimer; ConnTimer.Enabled := True; end; finally if not Result then Finalize; end; end; procedure Finalize; var i: TUDisksMethod; begin Dec(InitializeCounter); if InitializeCounter <> 0 then // Don't finalize yet. Exit; if Assigned(ConnTimer) then FreeAndNil(ConnTimer); if DBusConnectionOpen then begin if DBusFilterInstalled then begin for i := Low(UDisksMethodStr) to High(UDisksMethodStr) do begin dbus_error_init(@error); dbus_bus_remove_match( conn, PChar(UDisksFilterStr + ',member=''' + UDisksMethodStr[i] + ''''), @error); CheckError('Cannot remove matching rule', @error); end; dbus_connection_remove_filter(conn, @FilterFunc, nil); DBusFilterInstalled := False; end; dbus_connection_unref(conn); DBusConnectionOpen := False; end; if Assigned(Observers) then FreeAndNil(Observers); if Assigned(Dummy) then FreeAndNil(Dummy); end; procedure DispatchMessages; begin if dbus_connection_read_write_dispatch(conn, 1) = 0 then DBusConnectionOpen := False; 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; procedure TDummy.OnTimer(Sender: TObject); begin DispatchMessages; end; end. doublecmd-0.9.8/src/platform/unix/linux/uudev.pas0000644000175000001440000005165513103604541021131 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to UDev service via libudev. Copyright (C) 2014 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, 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'; drive_media_mapping: array [0..29, 0..1] of String = ( ( 'ID_DRIVE_FLASH', 'flash' ), ( 'ID_DRIVE_FLASH_CF', 'flash_cf' ), ( 'ID_DRIVE_FLASH_MS', 'flash_ms' ), ( 'ID_DRIVE_FLASH_SM', 'flash_sm' ), ( 'ID_DRIVE_FLASH_SD', 'flash_sd' ), ( 'ID_DRIVE_FLASH_SDHC', 'flash_sdhc' ), ( 'ID_DRIVE_FLASH_MMC', 'flash_mmc' ), ( 'ID_DRIVE_FLOPPY', 'floppy' ), ( 'ID_DRIVE_FLOPPY_ZIP', 'floppy_zip' ), ( 'ID_DRIVE_FLOPPY_JAZ', 'floppy_jaz' ), ( 'ID_CDROM', 'optical_cd' ), ( 'ID_CDROM_CD_R', 'optical_cd_r' ), ( 'ID_CDROM_CD_RW', 'optical_cd_rw' ), ( 'ID_CDROM_DVD', 'optical_dvd' ), ( 'ID_CDROM_DVD_R', 'optical_dvd_r' ), ( 'ID_CDROM_DVD_RW', 'optical_dvd_rw' ), ( 'ID_CDROM_DVD_RAM', 'optical_dvd_ram' ), ( 'ID_CDROM_DVD_PLUS_R', 'optical_dvd_plus_r' ), ( 'ID_CDROM_DVD_PLUS_RW', 'optical_dvd_plus_rw' ), ( 'ID_CDROM_DVD_PLUS_R_DL', 'optical_dvd_plus_r_dl' ), ( 'ID_CDROM_DVD_PLUS_RW_DL', 'optical_dvd_plus_rw_dl' ), ( 'ID_CDROM_BD', 'optical_bd' ), ( 'ID_CDROM_BD_R', 'optical_bd_r' ), ( 'ID_CDROM_BD_RE', 'optical_bd_re' ), ( 'ID_CDROM_HDDVD', 'optical_hddvd' ), ( 'ID_CDROM_HDDVD_R', 'optical_hddvd_r' ), ( 'ID_CDROM_HDDVD_RW', 'optical_hddvd_rw' ), ( 'ID_CDROM_MO', 'optical_mo' ), ( 'ID_CDROM_MRW', 'optical_mrw' ), ( 'ID_CDROM_MRW_W', 'optical_mrw_w' ) ); procedure Print(const sMessage: String); begin WriteLn('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; begin with Info do begin DeviceFile:= udev_device_get_devnode(Device); DeviceObjectPath:= SystemPath; GetDeviceProperty(Device, 'ID_BUS', DriveConnectionInterface); 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 GetDeviceProperty(Device, 'ID_FS_LABEL', IdLabel); if not GetDeviceProperty(Device, 'ID_DRIVE_EJECTABLE', DriveIsMediaEjectable) then begin DriveIsMediaEjectable:= FALSE; DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_CDROM' ) <> nil); DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_DRIVE_FLOPPY_ZIP' ) <> nil); DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_DRIVE_FLOPPY_JAZ' ) <> nil); end; GetDeviceProperty(Device, 'UDISKS_SYSTEM_INTERNAL', DeviceIsSystemInternal); GetDeviceProperty(Device, 'UDISKS_AUTOMOUNT_HINT', DeviceAutomountHint); if not GetDeviceProperty(Device, 'UDISKS_IGNORE', DevicePresentationHide) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_HIDE', DevicePresentationHide); if not GetDeviceProperty(Device, 'UDISKS_NAME', DevicePresentationName) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_NAME', DevicePresentationName); if not GetDeviceProperty(Device, 'UDISKS_ICON_NAME', DevicePresentationIconName) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_ICON_NAME', DevicePresentationIconName); GetDeviceProperty(Device, 'ID_DRIVE_DETACHABLE', DriveCanDetach); Value:= udev_device_get_devtype(Device); DeviceIsDrive:= (Value = UDEV_DEVICE_TYPE_DISK); DeviceIsPartition:= (Value = UDEV_DEVICE_TYPE_PARTITION); if DeviceIsDrive then begin if not GetDeviceProperty(Device, 'UDISKS_PARTITION_TABLE', DeviceIsPartitionTable) then begin DeviceIsPartitionTable:= (udev_device_get_property_value(Device, 'ID_PART_TABLE_TYPE' ) <> nil); end; end else if DeviceIsPartition then begin if not GetDeviceProperty(Device, 'UDISKS_PARTITION_SLAVE', PartitionSlave) then begin if DeviceObjectPath[Length(DeviceObjectPath)] in ['0'..'9'] then begin PartitionSlave:= ExtractFileDir(DeviceObjectPath); GetDeviceAttribute(PartitionSlave, 'removable', DeviceIsRemovable); end; end; end; if not DeviceIsRemovable then begin GetDeviceAttribute(Device, 'removable', DeviceIsRemovable); end; 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; 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 SetLength(DriveMediaCompatibility, Length(DriveMediaCompatibility) + 1); DriveMediaCompatibility[High(DriveMediaCompatibility)]:= drive_media_mapping[I, 1]; end; 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(' DriveCanDetach: ', DriveCanDetach ); WriteLn(' PartitionSlave: ', PartitionSlave ); WriteLn(' DeviceIsRemovable: ', DeviceIsRemovable ); WriteLn(' DriveConnectionInterface: ', DriveConnectionInterface ); } 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-0.9.8/src/platform/unix/linux/umountwatcher.pas0000644000175000001440000000222713103604541022675 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-0.9.8/src/platform/unix/linux/uappimage.pas0000644000175000001440000000037613467737150021763 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-0.9.8/src/platform/unix/linux/statx.pp0000644000175000001440000000533513103604541020772 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 (DosVersion >= 2820); end. doublecmd-0.9.8/src/platform/unix/linux/inotify.pp0000644000175000001440000000672013103604541021307 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-0.9.8/src/platform/unix/gtk2/0000755000175000001440000000000013615241423016774 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/gtk2/interfaces.pas0000644000175000001440000001260013573157206021633 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-0.9.8/src/platform/unix/glib/0000755000175000001440000000000013615241423017042 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/glib/ugobject2.pas0000644000175000001440000020553612333344361021447 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-0.9.8/src/platform/unix/glib/uglib2.pas0000644000175000001440000060561512311071132020736 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-0.9.8/src/platform/unix/glib/ugio2.pas0000644000175000001440000202214212302344514020574 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-0.9.8/src/platform/unix/darwin/0000755000175000001440000000000013615241422017410 5ustar alexxusersdoublecmd-0.9.8/src/platform/unix/darwin/uquicklook.pas0000644000175000001440000000715113530175472022316 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-0.9.8/src/platform/unix/darwin/umydarwin.pas0000644000175000001440000001035113103604541022131 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific DARWIN functions. 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 } unit uMyDarwin; {$mode delphi} {$modeswitch objectivec1} interface uses Classes, SysUtils, MacOSAll, CocoaAll; function StringToNSString(const S: String): NSString; function StringToCFStringRef(const S: String): CFStringRef; function NSGetFolderPath(Folder: NSSearchPathDirectory): String; function GetFileDescription(const FileName: String): String; function MountNetworkDrive(const serverAddress: String): Boolean; var HasMountURL: Boolean = False; implementation uses DynLibs; 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; 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); end; procedure Finalize; begin if (NetFS <> NilHandle) then FreeLibrary(NetFS); if (CoreServices <> NilHandle) then FreeLibrary(CoreServices); end; initialization Initialize; finalization Finalize; end. doublecmd-0.9.8/src/platform/unix/darwin/uapplemagnifiedmodefix.pas0000644000175000001440000000242413103604541024622 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-0.9.8/src/platform/umicrolibc.pas0000644000175000001440000001207213326134652020005 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-0.9.8/src/platform/ukeyboard.pas0000644000175000001440000010745113213065715017646 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, mkcWin, 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+'; SmkcWin = 'WinKey+'; SmkcNumDivide = 'Num/'; SmkcNumMultiply = 'Num*'; SmkcNumAdd = 'Num+'; SmkcNumSubstract = 'Num-'; SmkcSuper = {$IF DEFINED(DARWIN)}SmkcWin{$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, SmkcWin, 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)} {$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(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} {$IF DEFINED(LCLQT)} , qt4, qtwidgets {$ELSEIF DEFINED(LCLQT5)} , qt5, qtwidgets {$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: mkcWin) ); {$IF DEFINED(X11)} var {$IF DEFINED(LCLGTK)} XDisplay: PDisplay = nil; {$ELSEIF DEFINED(LCLGTK2)} XDisplay: PGdkDisplay = nil; {$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5))} XDisplay: PDisplay = nil; {$ENDIF} {$ENDIF} {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} var // This is set to a virtual key number that AltGr is mapped on. VK_ALTGR: Byte = VK_UNDEFINED; {$IF DEFINED(LCLGTK2)} KeysChangesSignalHandlerId : gulong = 0; {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} 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); else VKToCharArray[Key] := VirtualKeyToUTF8Char(Key, []); end; end; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} {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; 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))} 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))} 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))} // 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))} KeyChar: TUTF8Char; KeySym: TKeySym; TempShiftState: TShiftState; {$ENDIF} begin {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} // Overwrite behaviour for some keys in QT. KeySym := 0; case Key of QtKey_Bar: KeySym := XK_bar; // VK_F13 QtKey_Underscore: KeySym := XK_underscore; // VK_SLEEP // '+' (XK_plus) and 'numpad +' (XK_KP_Add) are both reported as VK_ADD (QtKey_Plus) VK_ADD: KeySym := XK_KP_Add; // '*' (XK_multiply) and 'numpad *' (XK_KP_Multiply) are both reported as VK_MULTIPLY (QtKey_Asterisk) VK_MULTIPLY: KeySym := XK_KP_Multiply; end; if KeySym <> 0 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))} 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))} UpdateModifiersMasks; {$ENDIF} CacheVKToChar; end; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} 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)} procedure KeysChangedSignalHandler(keymap: PGdkKeymap; Data: gpointer); cdecl; begin OnKeyboardLayoutChanged; end; {$ENDIF} {$ENDIF} procedure UnhookKeyboardLayoutChanged; begin {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} if Assigned(KeyboardLayoutChangedHook) then FreeAndNil(KeyboardLayoutChangedHook); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} {$IF DEFINED(LCLGTK)} gdk_window_remove_filter(nil, @EventHandler, nil); {$ELSEIF DEFINED(LCLGTK2)} 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))} KeyboardLayoutChangedHook := KeyboardLayoutChangedHook.Create( TQtWidget(Application.MainForm.Handle).TheObject); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} // 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)} // Connect to GdkKeymap object for the given display. KeysChangesSignalHandlerId := g_signal_connect(gdk_keymap_get_for_display(XDisplay), 'keys-changed', TGCallback(@KeysChangedSignalHandler), nil); {$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)} SmkcWin + 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)} XDisplay := gdk_display_get_default; {$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5))} XDisplay := XOpenDisplay(nil); {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))} finalization XCloseDisplay(XDisplay); {$ENDIF} end. doublecmd-0.9.8/src/platform/uinfotooltip.pas0000644000175000001440000002317113340371272020407 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 then with (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if fpSize in aFile.SupportedProperties then with (aFile.Properties[fpSize] as TFileSizeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if fpCompressedSize in aFile.SupportedProperties 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 FreeThenNil(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-0.9.8/src/platform/uicontheme.pas0000644000175000001440000003676613101370613020023 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) Copyright (C) 2009-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 uIconTheme; {$mode objfpc}{$H+} interface uses SysUtils, Classes, StringHashList, DCClassesUtf8; 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 TStringHashList; 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; 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; 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, DCOSUtils, DCStrUtils; var IconExtensionList: TDynamicStringArray; { TIconTheme } function LookupFallbackIcon (AIconName: String): String; begin (* for each directory in $(basename list) { for extension in ("png", "svg", "xpm") { if exists directory/iconname.extension return directory/iconname.extension } } *) Result := EmptyStr; end; 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; BaseDirList: array of String; ADefaultTheme: String); var I, J: Integer; sElement: String; begin FTheme:= sThemeName; FInherits:= nil; 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; var I: Integer; begin if FOwnsInheritsObject and Assigned(FInherits) then begin for I:= FInherits.Count - 1 downto 0 do begin if Assigned(FInherits.Objects[I]) then begin TIconTheme(FInherits.Objects[I]).Free; FInherits.Objects[I]:= nil; end; end; FreeThenNil(FInherits); end; FreeThenNil(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 sThemeName:= sElement; 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; 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); DCDebug('Loading icon theme ', FThemeName); // 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; // 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 I: Integer; ATheme: TIconTheme; begin if FInherits.IndexOf(AThemeName) < 0 then begin ATheme:= CreateParentTheme(AThemeName); I:= FInherits.AddObject(AThemeName, ATheme); if not ATheme.LoadThemeWithInherited(FInherits) then begin ATheme.Free; FInherits.Delete(I); 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 I, J, FoundIndex: Integer; MinimalSize, NewSize: Integer; procedure MakeResult; inline; begin Result:= FBaseDirList[J] + PathDelim + FTheme + PathDelim + FDirectories.Strings[I] + PathDelim + AIconName + '.' + IconExtensionList[PtrInt(FDirectories.Items[I]^.FileListCache[J].List[FoundIndex]^.Data)]; end; 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 MakeResult; // 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: TStringHashList; I: Integer; begin DirList:= TStringHashList.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'); AddString(IconExtensionList, 'xpm'); end. doublecmd-0.9.8/src/platform/ufindex.pas0000644000175000001440000001561213340472703017320 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains UTF-8 versions of Find(First, Next, Close) functions Copyright (C) 2006-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 uFindEx; {$mode objfpc}{$H+} interface uses SysUtils, DCBasicTypes {$IFDEF UNIX} , BaseUnix, uMasks {$ENDIF} {$IFDEF MSWINDOWS} , Windows {$ENDIF} {$IFDEF DARWIN} , MacOSAll {$ENDIF} ; const fffPortable = $80000000; type {$IFDEF UNIX} TUnixFindData = record DirPtr: PDir; //en> directory pointer for reading directory FindPath: String; //en> file name path Mask: TMask; //en> object that will check mask StatRec: Stat; //en> Unix stat record end; PUnixFindData = ^TUnixFindData; {$ENDIF} PSearchRecEx = ^TSearchRecEx; TSearchRecEx = record Time : DCBasicTypes.TFileTime; // modification time Size : Int64; Attr : TFileAttrs; Name : String; Flags : UInt32; {$ifdef unix} FindHandle : Pointer; {$else unix} FindHandle : THandle; {$endif unix} {$if defined(Win32) or defined(WinCE) or defined(Win64)} FindData : Windows.TWin32FindDataW; {$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, uDebug {$IFDEF MSWINDOWS} , DCWindows, DCDateTimeUtils, uMyWindows {$ENDIF} {$IFDEF UNIX} , Unix, DCOSUtils, DCFileAttributes, DCConvertEncoding, uMyUnix {$ENDIF}; {$IF DEFINED(LINUX)} function fpOpenDir(dirname: PAnsiChar): pDir; cdecl; external libc name 'opendir'; function fpReadDir(var dirp: TDir): pDirent; cdecl; external libc name 'readdir64'; function fpCloseDir(var dirp: TDir): cInt; cdecl; external libc 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:= UTF16ToUTF8(UnicodeString(FindData.cFileName)); Attr:= FindData.dwFileAttributes; end; Result:= 0; end; {$ELSE} var UnixFindData: PUnixFindData absolute SearchRec.FindHandle; begin Result:= -1; if UnixFindData = nil then Exit; if (UnixFindData^.Mask = nil) or UnixFindData^.Mask.Matches(SearchRec.Name) then begin if fpLStat(UTF8ToSys(UnixFindData^.FindPath + SearchRec.Name), @UnixFindData^.StatRec) >= 0 then begin with UnixFindData^.StatRec do begin SearchRec.Size:= Int64(st_size); 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; begin SearchRec.Flags:= Flags; wsPath:= UTF16LongName(Path); SearchRec.FindHandle:= FindFirstFileW(PWideChar(wsPath), SearchRec.FindData); if SearchRec.FindHandle = INVALID_HANDLE_VALUE then Result:= GetLastError else begin Result:= mbFindMatchingFile(SearchRec); end; end; {$ELSE} var UnixFindData: PUnixFindData; begin New(UnixFindData); SearchRec.Flags:= Flags; SearchRec.FindHandle:= UnixFindData; FillChar(UnixFindData^, SizeOf(TUnixFindData), 0); with UnixFindData^ 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 FileExists(UTF8ToSys(Path)) and (mbFindMatchingFile(SearchRec) = 0) then Exit(0) else Exit(-1); end; Mask := TMask.Create(SearchRec.Name); end; DirPtr:= fpOpenDir(PAnsiChar(CeUtf8ToSys(FindPath))); 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; UnixFindData: PUnixFindData absolute SearchRec.FindHandle; begin Result:= -1; if UnixFindData = nil then Exit; if UnixFindData^.DirPtr = nil then Exit; PtrDirEnt:= fpReadDir(UnixFindData^.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(UnixFindData^.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 UnixFindData: PUnixFindData absolute SearchRec.FindHandle; begin if UnixFindData = nil then Exit; if UnixFindData^.DirPtr <> nil then fpCloseDir(UnixFindData^.DirPtr^); if Assigned(UnixFindData^.Mask) then UnixFindData^.Mask.Free; Dispose(UnixFindData); SearchRec.FindHandle:= nil; end; {$ENDIF} end. doublecmd-0.9.8/src/platform/ufilesystemwatcher.pas0000644000175000001440000012356313603447456021623 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This is a thread-component sends an event when a change in the file system occurs. Copyright (C) 2009 Koblov Alexander (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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFileSystemWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils; //{$DEFINE DEBUG_WATCHER} type TFSWatchFilter = set of (wfFileNameChange, wfAttributesChange); TFSWatcherEventType = (fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed, fswUnknownChange); TFSWatcherEventTypes = set of TFSWatcherEventType; TFSWatcherEventData = record Path: String; EventType: TFSWatcherEventType; FileName: String; // Valid for fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed NewFileName: String; // Valid for fswFileRenamed UserData: Pointer; 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); class function CanWatch(const WatchPaths: array of String): Boolean; end; implementation uses LCLProc, LazUTF8, uDebug, uExceptions, syncobjs, fgl {$IF DEFINED(MSWINDOWS)} , Windows, JwaWinNT, JwaWinBase, DCWindows, DCStrUtils, uGlobs, uOSUtils {$ELSEIF DEFINED(LINUX)} , inotify, BaseUnix, FileUtil, DCConvertEncoding, DCUnix {$ELSEIF DEFINED(BSD)} , BSD, Unix, BaseUnix, UnixType, FileUtil, DCOSUtils {$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; 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 FHandle: THandle; FObservers: TOSWatchObservers; FWatchFilter: TFSWatchFilter; FWatchPath: String; {$IF DEFINED(MSWINDOWS)} FOverlapped: OVERLAPPED; FBuffer: PByte; FNotifyFilter: DWORD; FReferenceCount: LongInt; FOldFileName: String; // for FILE_ACTION_RENAMED_OLD_NAME action {$ENDIF} {$IF DEFINED(UNIX)} FNotifyHandle: THandle; {$ENDIF} procedure CreateHandle; procedure DestroyHandle; {$IF DEFINED(MSWINDOWS)} procedure QueueCancelRead; procedure QueueRead; procedure SetFilter(aWatchFilter: TFSWatchFilter); {$ENDIF} public constructor Create(const aWatchPath: String {$IFDEF UNIX}; aNotifyHandle: THandle{$ENDIF}); reintroduce; destructor Destroy; override; procedure UpdateFilter; {$IF DEFINED(MSWINDOWS)} procedure Reference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; procedure Dereference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$ENDIF} property Handle: THandle read FHandle; 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)} FNotifyHandle: THandle; {$ENDIF} {$IF DEFINED(LINUX)} FEventPipe: TFilDes; {$ENDIF} FCurrentEventData: TFSWatcherEventData; FFinished: Boolean; 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; 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); property WatchersCount: Integer read GetWatchersCount; end; var FileSystemWatcher: TFileSystemWatcherImpl = nil; { 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; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not FileSystemWatcher.FFinished do CheckSynchronize(100); {$ENDIF} 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; 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} // ---------------------------------------------------------------------------- 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, @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; Synchronize(@DoWatcherEvent); 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 Synchronize(@DoWatcherEvent); 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(Overlapped^.hEvent); {$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; var bytes_to_parse, p, i: Integer; buf: PChar = nil; ev: 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); 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 or IN_MOVED_TO)) <> 0 then begin EventType := fswFileCreated; end else if (ev^.mask and (IN_DELETE or IN_MOVED_FROM)) <> 0 then begin EventType := fswFileDeleted; end else if (ev^.mask and (IN_DELETE_SELF or IN_MOVE_SELF)) <> 0 then begin // Watched file/directory was deleted or moved. end else EventType := fswUnknownChange; end; // call event handler Synchronize(@DoWatcherEvent); 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(BSD)} var ke: TKEvent; begin if FNotifyHandle = feInvalidHandle then exit; while not Terminated do begin FillByte(ke, SizeOf(ke), 0); if kevent(FNotifyHandle, nil, 0, @ke, 1, nil) = -1 then break; 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; Synchronize(@DoWatcherEvent); end; end; { case } end; { while } end; {$ELSE} begin end; {$ENDIF} procedure TFileSystemWatcherImpl.DoWatcherEvent; var i, j: Integer; begin if not Terminated then begin try FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i].WatchPath = FCurrentEventData.Path 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} 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 {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} // Workaround for race condition, see FPC Mantis #16884. inherited Create(True); {$ELSE} inherited Create(False); {$ENDIF} FOSWatchers := TOSWatchs.Create({$IFDEF MSWINDOWS}False{$ELSE}True{$ENDIF}); FWatcherLock := syncobjs.TCriticalSection.Create; FreeOnTerminate := False; 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(BSD)} FNotifyHandle := kqueue(); if FNotifyHandle = feInvalidHandle then ShowError('kqueue() failed'); {$ELSEIF DEFINED(UNIX)} FNotifyHandle := feInvalidHandle; {$ENDIF} {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} Resume; {$ENDIF} 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(BSD)} if FNotifyHandle <> feInvalidHandle then begin FileClose(FNotifyHandle); FNotifyHandle := feInvalidHandle; end; {$ENDIF} if Assigned(FOSWatchers) then FreeAndNil(FOSWatchers); if Assigned(FWatcherLock) then FreeAndNil(FWatcherLock); 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 CompareMethods(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}, FNotifyHandle {$ENDIF}); {$IF DEFINED(MSWINDOWS)} OSWatcher.Reference{$IFDEF DEBUG_WATCHER}('AddWatch'){$ENDIF}; // For usage by FileSystemWatcher (main thread) {$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); OSWatcher.UpdateFilter; // This creates or recreates handle. Result := OSWatcher.Handle <> feInvalidHandle; // Remove watcher if could not create notification handle. if not Result then RemoveOSWatchLocked(WatcherIndex); 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; 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; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveObserverLocked(OSWatcherIndex: Integer; aWatcherEvent: TFSWatcherEvent); var j: Integer; begin for j := 0 to FOSWatchers[OSWatcherIndex].Observers.Count - 1 do begin if CompareMethods(TMethod(FOSWatchers[OSWatcherIndex].Observers[j].WatcherEvent), TMethod(aWatcherEvent)) then begin FOSWatchers[OSWatcherIndex].Observers.Delete(j); if FOSWatchers[OSWatcherIndex].Observers.Count = 0 then RemoveOSWatchLocked(OSWatcherIndex) else FOSWatchers[OSWatcherIndex].UpdateFilter; 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} 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(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; {$ELSE} begin end; {$ENDIF} // ---------------------------------------------------------------------------- { TOSWatch } constructor TOSWatch.Create(const aWatchPath: String {$IFDEF UNIX}; aNotifyHandle: THandle{$ENDIF}); begin FObservers := TOSWatchObservers.Create(True); FWatchFilter := []; FWatchPath := aWatchPath; {$IFDEF UNIX} FNotifyHandle := aNotifyHandle; {$ENDIF} {$IF DEFINED(MSWINDOWS)} FReferenceCount := 0; FBuffer := GetMem(VAR_READDIRECTORYCHANGESW_BUFFERSIZE); {$ENDIF} FHandle := feInvalidHandle; end; destructor TOSWatch.Destroy; begin DestroyHandle; inherited; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Destroying watch ', hexStr(Self)]); {$ENDIF} FObservers.Free; {$IF DEFINED(MSWINDOWS)} Freemem(FBuffer); {$ENDIF} end; 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; {$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} 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(UTF8Decode(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 via hEvent member. FOverlapped.hEvent := Windows.HANDLE(Self); QueueRead; end; end; {$ELSEIF DEFINED(LINUX)} var hNotifyFilter: cuint32 = 0; begin if wfFileNameChange in FWatchFilter then hNotifyFilter := hNotifyFilter or IN_CREATE or IN_DELETE or IN_DELETE_SELF or IN_MOVE or IN_MOVE_SELF; 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; {$ELSE} begin FHandle := feInvalidHandle; end; {$ENDIF} procedure TOSWatch.DestroyHandle; {$IF DEFINED(MSWINDOWS)} var tmpHandle: THandle; {$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); {$ELSE} FHandle := feInvalidHandle; {$ENDIF} end; end; {$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-0.9.8/src/platform/udrivewatcher.pas0000644000175000001440000011600413467737150020541 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Enumerating and monitoring drives in the system. Copyright (C) 2006-2018 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDriveWatcher; {$mode objfpc}{$H+} 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} , BSD, BaseUnix, StrUtils, FileUtil {$ENDIF} {$IFDEF LINUX} , uUDisks, uUDev, uMountWatcher, DCStrUtils, uOSUtils, FileUtil, uGVolume {$ENDIF} {$ENDIF} {$IFDEF MSWINDOWS} uMyWindows, Windows, JwaDbt, LazUTF8, JwaWinNetWk, DCOSUtils, uDebug {$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 BSD} 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} var FObservers: TDriveWatcherObserverList = nil; InitializeCounter: Integer = 0; {$IFDEF LINUX} FakeClass: TFakeClass = nil; MountWatcher: TMountWatcher = nil; IsUDisksAvailable: Boolean = False; {$ENDIF} {$IFDEF MSWINDOWS} OldWProc: WNDPROC; {$ENDIF} {$IFDEF BSD} KQueueDriveWatcher: TKQueueDriveEventWatcher; {$ENDIF} procedure DoDriveAdded(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveAdded, ADrive); end; procedure DoDriveRemoved(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveRemoved, ADrive); end; procedure DoDriveChanged(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveChanged, ADrive); end; {$IFDEF MSWINDOWS} function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var ADrive: TDrive; lpdb: PDEV_BROADCAST_HDR absolute lParam; lpdbv: PDEV_BROADCAST_VOLUME absolute lpdb; function GetDrivePath(UnitMask: ULONG): String; var DriveNum: Byte; begin for DriveNum:= 0 to 25 do begin if ((UnitMask shr DriveNum) and $01) <> 0 then Exit(AnsiChar(DriveNum + Ord('a')) + ':\'); end; end; begin case uiMsg of WM_DEVICECHANGE: 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; // case Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; procedure SetMyWndProc(Handle : HWND); begin {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtr(Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} end; {$ENDIF} {$IFDEF BSD} 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 uUDisks.Initialize then begin IsUDisksAvailable := True; uUDisks.AddObserver(@FakeClass.OnUDisksNotify); end else begin 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; end; uGVolume.Initialize; uGVolume.AddObserver(@FakeClass.OnGVolumeNotify); {$ENDIF} {$IFDEF MSWINDOWS} SetMyWndProc(Handle); {$ENDIF} {$IFDEF BSD} 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 IsUDisksAvailable then begin uUDisks.RemoveObserver(@FakeClass.OnUDisksNotify); uUDisks.Finalize; IsUDisksAvailable := False; end else 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 BSD} 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 if IsUDisksAvailable then begin // Devices not supplied, retrieve info from UDisks. Result := uUDisks.GetDeviceInfo(DeviceObjectPath, DeviceInfo); 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; 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 := DeviceIsDrive and DriveIsMediaEjectable; Drive^.IsMediaRemovable := DeviceIsRemovable; Drive^.IsMounted := DeviceIsMounted; Drive^.AutoMount := (DeviceAutomountHint = EmptyStr) or (DeviceAutomountHint = 'always'); end; 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; DriveLetter: AnsiChar; NetworkPathSize: DWORD; lpBuffer: Pointer = nil; nFileList: PNetResourceW; RegDrivePath: UnicodeString; dwCount, dwBufferSize: DWORD; hEnum: THandle = INVALID_HANDLE_VALUE; NetworkPath: array[0..MAX_PATH] of WideChar; begin 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 + Ord('a')); 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; DriveLabel := UTF16ToUTF8(UnicodeString(NetworkPath)); DriveType := dtNetwork; AutoMount := True; end; end; RegCloseKey(Key); end; Continue; end; DriveLetter := AnsiChar(DriveNum + Ord('a')); DrivePath := DriveLetter + ':\'; WinDriveType := GetDriveType(PChar(DrivePath)); if WinDriveType = DRIVE_NO_ROOT_DIR then Continue; New(Drive); Result.Add(Drive); with Drive^ do begin DeviceId := EmptyStr; Path := DrivePath; DisplayName := DriveLetter; DriveLabel := EmptyStr; FileSystem := EmptyStr; IsMediaAvailable := True; IsMediaEjectable := False; IsMediaRemovable := False; IsMounted := True; AutoMount := True; case WinDriveType of DRIVE_REMOVABLE: begin if DriveLetter in ['a', 'b'] then DriveType := dtFloppy else DriveType := dtFlash; 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. dtHardDisk: begin DriveLabel := mbGetVolumeLabel(Path, True); FileSystem := mbGetFileSystem(DrivePath); end; dtNetwork: DriveLabel := mbGetRemoteFileName(Path); else DriveLabel := mbGetVolumeLabel(Path, True); 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 // 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 = '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.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; 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 := DeviceFileToUDisksObjectPath(DeviceFile); 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 := DeviceFileToUDisksObjectPath(DeviceFile); Result := True; end else if StrBegins(DeviceFile, '/dev/') then begin DeviceFile := mbCheckReadLinks(DeviceFile); if StrBegins(DeviceFile, '/dev/') and IsUDisksAvailable then UDisksDeviceObject := DeviceFileToUDisksObjectPath(DeviceFile) else 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 IsUDisksAvailable then HaveUDisksDevices := uUDisks.EnumerateDevices(UDisksDevices) else 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 if (IsUDisksAvailable = False) then begin UDisksDevice.DeviceIsMounted:= (I = 1); AddString(UDisksDevice.DeviceMountPaths, MountPoint); end; 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); 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/'], 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 (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 = 'ntfs' then Result := dtHardDisk else if FSType = 'msdos' then Result := dtHardDisk else if FSType = 'exfat' 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: TStatFS; fsList: array[0..MAX_FS] of TStatFS; 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]; // 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) or (fs.mountpoint = PathDelim) 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 } end; { for } 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 if IsUDisksAvailable = False then Result:= uUDev.GetDeviceInfo(ObjectPath, DeviceInfo) else Result:= uUDisks.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} { 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; {$IFDEF DARWIN} Sleep(1 * 1000); // wait so drive gets available in MacOSX {$ENDIF} Synchronize(@Self.RaiseDriveEvent); end { if } else if (ke.FFlags and NOTE_UMOUNTED <> 0) then begin Self.Event := dweDriveRemoved; {$IFDEF DARWIN} Sleep(1 * 1000); // wait so drive disappears in MacOSX {$ENDIF} 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} end. doublecmd-0.9.8/src/platform/udragdropqt.pas0000644000175000001440000003075013034217736020215 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 {$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)} 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 := URIDecode(Trim(GetMimeDataInFormat(MimeData, uriListMimeW))) else if QMimeData_hasFormat(MimeData, @textPlainMimeW) then // try decoding, as text/plain may also be percent-encoded uriList := URIDecode(Trim(GetMimeDataInFormat(MimeData, textPlainMimeW))) else Exit; // reject the drop try FileNamesList := ExtractFilenames(uriList); 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-0.9.8/src/platform/udragdropgtk.pas0000644000175000001440000003633411740433676020367 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 := URIDecode(Trim(uriList)); tidTextPlain: // try decoding, as text/plain may also be percent-encoded uriList := URIDecode(Trim(uriList)); else Exit; // not what we hoped for end; try FileNamesList := ExtractFilenames(uriList); 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-0.9.8/src/platform/udragdropex.pas0000644000175000001440000003047313373762227020215 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): TDropEffect; function GetDropEffectByKey(ShiftState: TShiftState): 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)} uses uDragDropQt; {$ENDIF} { ---------- 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)} 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)} 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)} Result := TDragDropTargetQT.Create(Control); {$ELSE} Result := TDragDropTarget.Create(Control); // Dummy {$ENDIF} end; function GetDropEffectByKey(ShiftState: TShiftState): TDropEffect; const ssBoth = [ssLeft, ssRight]; begin if (ssBoth * ShiftState = ssBoth) then Exit(DropMoveEffect); ShiftState := [ssCtrl, ssShift, ssAlt] * ShiftState; if ShiftState = [] then Result := DropCopyEffect // default to Copy when no keys pressed else if ShiftState = [ssShift] then Result := DropMoveEffect else if ShiftState = [ssCtrl] then Result := DropMoveEffect else if ShiftState = [ssCtrl, ssShift] then Result := DropLinkEffect else Result := DropNoEffect; // some other key combination pressed end; function GetDropEffectByKeyAndMouse(ShiftState: TShiftState; MouseButton: TMouseButton): TDropEffect; begin case MouseButton of mbLeft: begin if ShiftState = [ssRight] then Result := DropMoveEffect else Result := GetDropEffectByKey(ShiftState); end; mbMiddle: Result := DropAskEffect; mbRight: Result := DropAskEffect; end; end; end. doublecmd-0.9.8/src/platform/udragdropcocoa.pas0000644000175000001440000000664112767017105020657 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-0.9.8/src/platform/udefaultplugins.pas0000644000175000001440000002734313367557762021117 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some useful functions to work with plugins Copyright (C) 2011-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 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('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 DEFINED(MSWINDOWS)} if I < 0 then gWCXPlugins.Add('rar', 607, Folder + 'unrar' + PathDelim + 'unrar.wcx') else gWCXPlugins.Flags[I]:= 607; {$ELSE} if I < 0 then gWCXPlugins.Add('rar', 68, Folder + 'unrar' + PathDelim + 'unrar.wcx') else gWCXPlugins.Flags[I]:= 68; {$ENDIF} // 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(GetCmdDirFromEnvVar(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)} if gWFXPlugins.IndexOfName('Windows Network') < 0 then begin gWFXPlugins.Add('Windows Network', Folder + 'samba' + PathDelim + 'samba.wfx'); end; {$ENDIF} {$IF DEFINED(LINUX)} // Wlx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wlx' + PathDelim; I:= gWlxPlugins.IndexOfName('wlxMplayer'); if I >= 0 then begin gWlxPlugins.GetWlxModule(I).FileName:= Folder + 'wlxmplayer' + PathDelim + 'wlxmplayer.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-0.9.8/src/platform/udcversion.pas0000644000175000001440000003220613611064300020024 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Version information about DC, building tools and running environment. Copyright (C) 2006-2019 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDCVersion; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion; {$I dcrevision.inc} // Double Commander revision number {$I revision.inc} // Lazarus revision number const dcVersion = '0.9.8 beta'; dcBuildDate = {$I %DATE%}; lazVersion = lcl_version; // Lazarus version (major.minor.micro) lazRevision = RevisionStr; // Lazarus SVN revision fpcVersion = {$I %FPCVERSION%}; // FPC version (major.minor.micro) TargetCPU = {$I %FPCTARGETCPU%}; // Target CPU of FPC TargetOS = {$I %FPCTARGETOS%}; // Target Operating System of FPC var TargetWS, // Target WidgetSet of Lazarus OSVersion, // Operating System where DC is run WSVersion // WidgetSet library version where DC is run : String; procedure InitializeVersionInfo; function GetLazarusVersion: String; implementation uses InterfaceBase {$IF DEFINED(UNIX)} , BaseUnix, DCOSUtils, uDCUtils, DCClassesUtf8 {$IFDEF DARWIN} , MacOSAll {$ENDIF} {$ENDIF} {$IFDEF LCLQT} , qt4 {$ENDIF} {$IFDEF LCLQT5} , qt5 {$ENDIF} {$IFDEF LCLGTK2} , gtk2 {$ENDIF} {$IFDEF MSWINDOWS} , Windows, JwaNative, JwaNtStatus, JwaWinType, uMyWindows {$ENDIF} {$if lcl_fullversion >= 1070000} , LCLPlatformDef {$endif} ; {$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 EFilerError do; // Bypass 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 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; 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; 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('Mac OS X %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 := LoadLibrary(LPCTSTR('kernel32.dll')); 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 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 OSVersion := OSVersion + ' 10'; if (osvi.wSuiteMask and VER_SUITE_PERSONAL <> 0) then OSVersion := OSVersion + ' Home'; if RegReadKey(HKEY_LOCAL_MACHINE, CURRENT_VERSION, 'ReleaseId', ReleaseId) then OSVersion := OSVersion + ' ' + String(ReleaseId); 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; // 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; {$IFDEF DARWIN} if OSVersion = EmptyStr then OSVersion := GetMacOSXVersion; {$ENDIF} // Other methods. if OSVersion = EmptyStr then OSVersion := GetOsFromIssue; if OSVersion = EmptyStr then OSVersion := GetOsFromProcVersion; // 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'; {$ELSE} OSVersion := 'Unix'; {$ENDIF} OSVersion += ' ' + GetVersionNumber; end; {$ENDIF} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} WSVersion := 'Qt ' + QtVersion + ', libQt' + QtVersion[0] + 'Pas '; WSVersion := WSVersion + IntToStr((QT_VERSION shr 16) and 255) + '.' + IntToStr((QT_VERSION shr 8) and 255) + '.' + IntToStr((QT_VERSION ) and 255); {$ENDIF} {$IFDEF LCLGTK2} WSVersion := 'GTK ' + IntToStr(gtk_major_version) + '.' + IntToStr(gtk_minor_version) + '.' + IntToStr(gtk_micro_version); {$ENDIF} end; function GetLazarusVersion: String; var I: Integer = 1; begin Result:= lazVersion; while (I <= Length(lazRevision)) and (lazRevision[I] in ['0'..'9']) do Inc(I); if (I > 1) then begin Result += '-' + Copy(lazRevision, 1, I - 1); end; end; procedure Initialize; begin LCLPlatformDirNames[lpQT]:= 'qt4'; LCLPlatformDirNames[lpWin32]:= 'win32/win64'; end; initialization Initialize; end. doublecmd-0.9.8/src/platform/udcreadsvg.pas0000644000175000001440000002511613467737150020017 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Scalable Vector Graphics reader implementation (via rsvg and cairo) Copyright (C) 2012-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 uDCReadSVG; {$mode delphi} interface uses Classes, SysUtils, Graphics, FPImage; type { TDCReaderSVG } TDCReaderSVG = class (TFPCustomImageReader) private FRsvgHandle: Pointer; protected function InternalCheck (Stream:TStream):boolean;override; procedure InternalRead(Stream:TStream;Img:TFPCustomImage);override; end; { TScalableVectorGraphics } TScalableVectorGraphics = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: string; override; end; function BitmapLoadFromScalable(const FileName: String; AWidth, AHeight: Integer): TBitmap; 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 X, Y: Integer; ImageData: PBGRA; PixelColor: TFPColor; 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; // Read image data for Y:= 0 to Img.Height - 1 do for X:= 0 to Img.Width - 1 do with ImageData^ do begin PixelColor.alpha:= Alpha + Alpha shl 8; PixelColor.red:= Red + Red shl 8; PixelColor.green:= Green + Green shl 8; PixelColor.blue:= Blue + Blue shl 8; Img.Colors[X, Y]:= PixelColor; Inc(ImageData); end; 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; { TDCReaderSVG } function TDCReaderSVG.InternalCheck(Stream: TStream): boolean; var MemoryStream: TMemoryStream; begin MemoryStream:= Stream as TMemoryStream; FRsvgHandle:= rsvg_handle_new_from_data(MemoryStream.Memory, MemoryStream.Size, nil); Result:= Assigned(FRsvgHandle); end; procedure TDCReaderSVG.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; { TScalableVectorGraphics } class function TScalableVectorGraphics.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderSVG; end; class function TScalableVectorGraphics.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TScalableVectorGraphics.GetFileExtensions: string; begin Result:= 'svg;svgz'; 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 libcairo:= LoadLibrary(cairolib); librsvg:= LoadLibrary(rsvglib); libgobject:= LoadLibrary(gobjectlib); 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 TIconTheme.RegisterExtension('svg;svgz'); TThumbnailManager.RegisterProvider(@GetThumbnail); ImageHandlers.RegisterImageReader ('Scalable Vector Graphics', 'SVG;SVGZ', TDCReaderSVG); TPicture.RegisterFileFormat('svg;svgz', 'Scalable Vector Graphics', TScalableVectorGraphics); except 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-0.9.8/src/platform/uOleDragDrop.pas0000644000175000001440000015157113034765175020222 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, 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; 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; WantedCreationTime, WantedModificationTime, WantedLastAccessTime:DCBasicTypes.TFileTime):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) constructor Create; {$IF FPC_FULLVERSION < 020601} function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: longint): HResult; stdcall; {$ELSE} function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; stdcall; {$ENDIF} {$IF FPC_FULLVERSION < 020601} function GiveFeedback(dwEffect: longint): HResult; stdcall; {$ELSE} function GiveFeedback(dwEffect: DWORD): HResult; stdcall; {$ENDIF} 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; const 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, ShlObj, LCLIntf, ComObj, DCDateTimeUtils, Forms, DCConvertEncoding, //DC uOSUtils, fOptionsDragDrop, uShowMsg, UGlobs, DCStrUtils, DCOSUtils, uClipboard, uLng, uDebug; 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 := UTF8Decode(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 } + UTF8Decode(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 SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, 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, UTF8Decode(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 + UTF8Decode(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); if Windows.GetCursorPos(@DropFiles.pt) = False then begin DropFiles.pt.x := 0; DropFiles.pt.y := 0; end; DropFiles.fNC := True; // Pass cursor coordinates as screen coords 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; { 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. if ActiveX.RegisterDragDrop(DragDropTarget.GetControl.Handle, Self) = S_OK then FHandle := DragDropTarget.GetControl.Handle else 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:TStringList; UnusedInteger : integer; begin DragAndDropSupportedFormatList:=TStringList.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 DragAndDropSupportedFormatList.Add(IntToStr(CyclingThroughFormat.CfFormat)); //2. Let's determine our best guess. // The order for this will be: // 1st) CF_HDROP (for legacy purpose, since DC was using it first). // 2nd) CFU_FILEGROUPDESCRIPTORW + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 3rd) CFU_FILEGROUPDESCRIPTOR + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 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) ChosenFormat.CfFormat:=0; if DragAndDropSupportedFormatList.IndexOf(IntToStr(CF_HDROP))<>-1 then ChosenFormat.CfFormat:=CF_HDROP; if (ChosenFormat.CfFormat=0) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILEGROUPDESCRIPTORW))<>-1) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILECONTENTS))<>-1) then ChosenFormat.CfFormat:=CFU_FILEGROUPDESCRIPTORW; if (ChosenFormat.CfFormat=0) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILEGROUPDESCRIPTOR))<>-1) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILECONTENTS))<>-1) then ChosenFormat.CfFormat:=CFU_FILEGROUPDESCRIPTOR; // If we have no chosen format yet, let's attempt for text ones... if ChosenFormat.CfFormat=0 then begin DragTextModeOfferedList:=TStringList.Create; try if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_RICHTEXT))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_HTML))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CF_UNICODETEXT))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(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; end; //3. According to our best guess, let's store to "FileNames" list, the list of files we got (...or that we'll create!) if ChosenFormat.CfFormat<>0 then begin ChosenFormat.ptd := nil; ChosenFormat.dwAspect := DVASPECT_CONTENT; ChosenFormat.lindex := -1; ChosenFormat.tymed := TYMED_HGLOBAL; { Заносим данные в структуру Medium } Result:=dataObj.GetData(ChosenFormat, Medium); { Если все прошло успешно, далее действуем, как при операции файлового перетаскивания FMDD. } 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 then FileNames := GetDropFileGroupFilenames(dataObj, Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_FILEGROUPDESCRIPTOR then FileNames := GetDropFileGroupFilenames(dataObj, Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_HTML then FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_RICHTEXT then FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); end; end; end; end; end; //4. 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; WantedCreationTime, WantedModificationTime, WantedLastAccessTime:DCBasicTypes.TFileTime):boolean; const TEMPFILENAME='CfuContentFile.bin'; var Format : TFORMATETC; Medium : TSTGMedium; Ifile, iStg : IStorage; tIID : PGuid; hFile: THandle; pvStrm: IStream; 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 := UTF8Decode(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 (pvStrm.Seek(0, STREAM_SEEK_END, i64Size) = S_OK) then begin // Seek back to start of stream pvStrm.Seek(0, STREAM_SEEK_SET, i64Move); // 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; end; if mbFileExists(InnerFilename) then begin mbRenameFile(InnerFilename,WantedFilename); if mbFileExists(WantedFilename) then result:=mbFileSetTime(WantedFilename, WantedModificationTime, WantedCreationTime, WantedLastAccessTime); end; end; { TFileDropTarget.GetDropFileGroupFilenames } function TFileDropTarget.GetDropFileGroupFilenames(const dataObj: IDataObject; var Medium: TSTGMedium; Format: TFormatETC): TStringList; var AnyPointer: Pointer; DC_FileGroupeDescriptorW: FILEGROUPDESCRIPTORW; DC_FileGroupeDescriptor: FILEGROUPDESCRIPTOR; DC_FileDescriptorW: FILEDESCRIPTORW; DC_FileDescriptor: FILEDESCRIPTOR; NumberOfFiles, CopyNumber, IndexFile: integer; ActualFilename, DroppedTextFilename: String; SuffixStr: string; WantedCreationTime, WantedModificationTime, WantedLastAccessTime : DCBasicTypes.TFileTime; begin Result := nil; AnyPointer := GlobalLock(Medium.HGLOBAL); try // Copy the structure if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then begin MoveMemory(@DC_FileGroupeDescriptorW, AnyPointer, SizeOf(FILEGROUPDESCRIPTORW)); NumberOfFiles:=DC_FileGroupeDescriptorW.cItems; end else begin MoveMemory(@DC_FileGroupeDescriptor, AnyPointer, SizeOf(FILEGROUPDESCRIPTOR)); NumberOfFiles:=DC_FileGroupeDescriptor.cItems; end; // Return the number of messages if NumberOfFiles>0 then begin if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then AnyPointer:=AnyPointer+SizeOf(FILEGROUPDESCRIPTORW.cItems) else AnyPointer:=AnyPointer+SizeOf(FILEGROUPDESCRIPTOR.cItems); result:=TStringList.Create; for IndexFile:=0 to pred(NumberOfFiles) do begin if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then begin MoveMemory(@DC_FileDescriptorW, AnyPointer, SizeOf(FILEDESCRIPTORW)); AnyPointer:=AnyPointer+SizeOf(FILEDESCRIPTORW); ActualFilename:=UTF16ToUTF8(UnicodeString(DC_FileDescriptorW.cFileName)); WantedCreationTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftCreationTime); WantedModificationTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftLastWriteTime); WantedLastAccessTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftLastAccessTime); end else begin MoveMemory(@DC_FileDescriptor, AnyPointer, SizeOf(FILEDESCRIPTOR)); AnyPointer:=AnyPointer+SizeOf(FILEDESCRIPTOR); ActualFilename:=CeSysToUTF8(AnsiString(DC_FileDescriptor.cFileName)); WantedCreationTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftCreationTime); WantedModificationTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftLastWriteTime); WantedLastAccessTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftLastAccessTime); 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, WantedCreationTime, WantedModificationTime, WantedLastAccessTime) then result.Add(DroppedTextFilename); end; end; finally // Release the pointer GlobalUnlock(Medium.HGLOBAL); end; end; { TFileDropTarget.GetDropTextCreatedFilenames } function TFileDropTarget.GetDropTextCreatedFilenames(var Medium: TSTGMedium; Format: TFormatETC): TStringList; var FlagKeepGoing:boolean; AnyPointer: Pointer; UnicodeCharPointer: PUnicodeChar; hFile: THandle; DroppedTextFilename: String; MyUnicodeString: UnicodeString; 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, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); end; CF_UNICODETEXT: begin if gDragAndDropSaveUnicodeTextInUFT8 then begin UnicodeCharPointer:=AnyPointer; MyUnicodeString:=''; while UnicodeCharPointer^<>#$0000 do begin MyUnicodeString:=MyUnicodeString+UnicodeCharPointer^; inc(UnicodeCharPointer); end; FileWrite(hFile, PChar(#$EF+#$BB+#$BF)[0], 3); //Adding Byte Order Mask for UTF8. FileWrite(hFile, UTF16toUTF8(MyUnicodeString)[1], Length(UTF16toUTF8(MyUnicodeString))); end else begin FileWrite(hFile, PChar(#$FF+#$FE)[0], 2); //Adding Byte Order Mask for UTF16, Little-Endian first. FileWrite(hFile, PUnicodeChar(AnyPointer)^, Length(PUnicodeChar(AnyPointer))*2); end; end; else begin if Format.CfFormat=CFU_HTML then FileWrite(hFile, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); if Format.CfFormat=CFU_RICHTEXT then FileWrite(hFile, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); 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 } {$IF FPC_FULLVERSION < 020601} function TFileDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: longint): HResult; {$ELSE} function TFileDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; {$ENDIF} 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; {$IF FPC_FULLVERSION < 020601} function TFileDropSource.GiveFeedback(dwEffect: longint): HResult; {$ELSE} function TFileDropSource.GiveFeedback(dwEffect: DWORD): HResult; {$ENDIF} begin case LongWord(dwEffect) of DROPEFFECT_NONE, DROPEFFECT_COPY, DROPEFFECT_MOVE, DROPEFFECT_LINK, DROPEFFECT_SCROLL: Result := DRAGDROP_S_USEDEFAULTCURSORS; else Result := S_OK; end; 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; const 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-0.9.8/src/platform/uOSUtils.pas0000644000175000001440000010267013615104272017404 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. 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 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 = '\'; {$IFDEF DARWIN)} RunTermCmd = '/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'; {$ELSE} RunTermCmd = 'xterm'; // default terminal RunTermParams = ''; RunInTermStayOpenCmd = 'xterm'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '-e sh -c ''{command}; echo -n Press ENTER to exit... ; read a'''; RunInTermCloseCmd = 'xterm'; // default run in terminal command AND Close after command RunInTermCloseParams = '-e sh -c {command}'; MonoSpaceFont = '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; function ExecCmdAdmin(sCmd: String; sParams: String; sStartPath: String = ''): 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; {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; function mbFileGetAttr(const FileName: String; out Attr: TSearchRecEx): Boolean; overload; {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; function GetAppDataDir: String; 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 Same as mbFileGetAttr, but dereferences any encountered links. } function mbFileGetAttrNoLinks(const FileName: String): TFileAttrs; {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 mbGetEnvironmentVariable(const sName: String): String; function mbSetEnvironmentVariable(const sName, sValue: String): Boolean; {en Extract the root directory part of a file name. @returns(Drive letter under Windows and mount point under Unix) } function ExtractRootDir(const FileName: String): String; 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; var // While elevated operations is not implemented // https://doublecmd.sourceforge.io/mantisbt/view.php?id=110 AdministratorPrivileges: Boolean = True; implementation uses StrUtils, uFileProcs, FileUtil, uDCUtils, DCOSUtils, DCStrUtils, uGlobs, uLng, fConfirmCommandLine, uLog, DCConvertEncoding, LazUTF8 {$IF DEFINED(MSWINDOWS)} , JwaWinCon, Windows, uMyWindows, JwaWinNetWk, uShlObjAdditional, ShlObj, DCWindows, uNetworkThread {$ENDIF} {$IF DEFINED(UNIX)} , BaseUnix, Unix, uMyUnix, dl {$IF DEFINED(DARWIN)} , CocoaAll, uMyDarwin {$ELSE} , uGio, uClipboard, uXdg, uKde {$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; sCmd:= NormalizePathDelimiters(sCmd); 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:= UTF8Decode(sCmd); wParams:= UTF8Decode(sParams); wStartPath:= UTF8Decode(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:= UTF8Decode(mbGetCurrentDir()); sFileName:= NormalizePathDelimiters(sFileName); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch + ': ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams); ExecutionResult := ShellExecuteW(0, nil, PWideChar(UTF8Decode(sFileName)), PWideChar(UTF8Decode(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 ExecCmdAdmin(sCmd: String; sParams: String; sStartPath: String): Boolean; {$IF DEFINED(MSWINDOWS)} begin sStartPath:= RemoveQuotation(sStartPath); if sStartPath = '' then sStartPath:= mbGetCurrentDir; sCmd:= NormalizePathDelimiters(sCmd); Result:= ShellExecuteW(0, 'runas', PWideChar(UTF8Decode(sCmd)), PWideChar(UTF8Decode(sParams)), PWideChar(UTF8Decode(sStartPath)), SW_SHOW) > 32; end; {$ELSE} begin Result:= False; end; {$ENDIF} function ShellExecute(URL: String): Boolean; {$IF DEFINED(MSWINDOWS)} var Return: HINST; wsFileName: UnicodeString; wsStartPath: UnicodeString; begin URL:= NormalizePathDelimiters(URL); wsFileName:= UTF8Decode(QuoteDouble(URL)); wsStartPath:= UTF8Decode(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 ' + URL) else Result:= Return > 32; 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; sCmdLine:= EmptyStr; if FileIsUnixExecutable(URL) then begin if GetPathType(URL) <> ptAbsolute then sCmdLine := './'; sCmdLine:= sCmdLine + QuoteStr(URL); end else begin if (DesktopEnv = DE_KDE) and (HasKdeOpen = True) then Result:= KioOpen(URL) // Under KDE use "kioclient" to open files else if HasGio and (DesktopEnv <> DE_XFCE) then Result:= GioOpen(URL) // Under GNOME, Unity and LXDE use "GIO" to open files else begin if GetPathType(URL) = ptAbsolute then sCmdLine:= URL else begin sCmdLine := IncludeTrailingPathDelimiter(mbGetCurrentDir); sCmdLine:= GetAbsoluteFileName(sCmdLine, URL) end; sCmdLine:= GetDefaultAppCmd(sCmdLine); end; end; if Length(sCmdLine) <> 0 then Result:= ExecCmdFork(sCmdLine); 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; 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 (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; end; {$ELSE} var lpVolumeNameBuffer, lpFileSystemNameBuffer: array [0..255] of WideChar; lpMaximumComponentLength: DWORD = 0; lpFileSystemFlags: DWORD = 0; begin Result := High(Int64); if GetVolumeInformationW(PWideChar(UTF8Decode(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(UTF8Decode(ExtractFileDrive(SourceName)) + PathDelim), nil, 0, nil, lpDummy, lpDummy, lpSourceFileSystem, MAX_PATH) and GetVolumeInformationW(PWideChar(UTF8Decode(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 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 mbFileGetAttr(const FileName: String; out Attr: TSearchRecEx): Boolean; {$IFDEF MSWINDOWS} var FileInfo: Windows.TWin32FileAttributeData; begin Result:= GetFileAttributesExW(PWideChar(UTF16LongName(FileName)), GetFileExInfoStandard, @FileInfo); if Result then begin Attr.Time:= TWinFileTime(FileInfo.ftLastWriteTime); Int64Rec(Attr.Size).Lo:= FileInfo.nFileSizeLow; Int64Rec(Attr.Size).Hi:= FileInfo.nFileSizeHigh; Attr.Attr:= FileInfo.dwFileAttributes; end; end; {$ELSE} var StatInfo: BaseUnix.Stat; begin Result:= fpLStat(UTF8ToSys(FileName), StatInfo) >= 0; if Result then begin Attr.Time:= StatInfo.st_mtime; Attr.Size:= StatInfo.st_size; Attr.Attr:= StatInfo.st_mode; end; end; {$ENDIF} function GetHomeDir : String; {$IFDEF MSWINDOWS} var iSize: Integer; wHomeDir: UnicodeString; begin iSize:= GetEnvironmentVariableW('USERPROFILE', nil, 0); if iSize > 0 then begin SetLength(wHomeDir, iSize); GetEnvironmentVariableW('USERPROFILE', PWChar(wHomeDir), iSize); end; Delete(wHomeDir, iSize, 1); Result:= ExcludeBackPathDelimiter(UTF16ToUTF8(wHomeDir)); end; {$ELSE} begin Result:= ExcludeBackPathDelimiter(SysToUTF8(GetEnvironmentVariable('HOME'))); end; {$ENDIF} function GetShell : String; {$IFDEF MSWINDOWS} var iSize: Integer; wShell: UnicodeString; begin iSize:= GetEnvironmentVariableW('ComSpec', nil, 0); if iSize > 0 then begin SetLength(wShell, iSize); GetEnvironmentVariableW('ComSpec', PWChar(wShell), iSize); end; Delete(wShell, iSize, 1); Result:= UTF16ToUTF8(wShell); 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 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(WideString(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; {$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; {$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; {$ELSE} begin Result:= IncludeTrailingPathDelimiter(GetUserDataDir) + ApplicationName; end; {$ENDIF} 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 := UTF8Decode(ExtractFileDrive(Drive^.Path)); wsRemoteName := UTF8Decode(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 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 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 mbGetEnvironmentVariable(const sName: String): String; {$IFDEF MSWINDOWS} var wsName: UnicodeString; smallBuf: array[0..1023] of WideChar; largeBuf: PWideChar; dwResult: DWORD; begin Result := EmptyStr; wsName := UTF8Decode(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:= UTF8Decode(sName); wsValue:= UTF8Decode(sValue); Result:= SetEnvironmentVariableW(PWideChar(wsName), PWideChar(wsValue)); end; {$ELSE} begin Result:= (setenv(PAnsiChar(CeUtf8ToSys(sName)), PAnsiChar(CeUtf8ToSys(sValue)), 1) = 0); end; {$ENDIF} function ExtractRootDir(const FileName: String): String; {$IFDEF UNIX} begin Result:= ExcludeTrailingPathDelimiter(FindMountPointPath(ExcludeTrailingPathDelimiter(FileName))); end; {$ELSE} begin Result:= ExtractFileDrive(FileName); 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-0.9.8/src/platform/uClipboard.pas0000644000175000001440000004333012737241570017745 0ustar alexxusersunit uClipboard; {$mode objfpc}{$H+} 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; function ExtractFilenames(uriList: String): TStringList; function FileNameToURI(const FileName: String): String; function FormatUriList(FileNames: TStringList): String; function FormatTextPlain(FileNames: TStringList): String; procedure ClearClipboard; procedure ClipboardSetText(AText: String); const // General MIME uriListMime = 'text/uri-list'; textPlainMime = 'text/plain'; fileScheme = 'file:'; // for URI {$IFDEF 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'; {$ELSE IFDEF UNIX} // Gnome cutText = 'cut'; copyText = 'copy'; gnomeClipboardMime = 'x-special/gnome-copied-files'; // Kde kdeClipboardMime = 'application/x-kde-cutselection'; {$ENDIF} var {$IFDEF MSWINDOWS} 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, {$ELSE IFDEF UNIX} CFU_KDE_CUT_SELECTION, CFU_GNOME_COPIED_FILES, {$ENDIF} CFU_TEXT_PLAIN, CFU_URI_LIST: TClipboardFormat; implementation uses Clipbrd {$IFDEF MSWINDOWS} , Windows, ActiveX, uOleDragDrop, fMain, uShellContextMenu {$ELSE IFDEF UNIX} , LCLIntf {$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)} CFU_GNOME_COPIED_FILES := RegisterClipboardFormat(gnomeClipboardMime); CFU_KDE_CUT_SELECTION := RegisterClipboardFormat(kdeClipboardMime); {$ENDIF} CFU_TEXT_PLAIN := RegisterClipboardFormat(textPlainMime); CFU_URI_LIST := RegisterClipboardFormat(uriListMime); 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; { 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): 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 Result.Add(path); 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 Result.Add(path); 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; {$IFDEF UNIX} 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} function SendToClipboard(const filenames:TStringList; ClipboardOp: TClipboardOperation):Boolean; {$IFDEF MSWINDOWS} var DragDropInfo: TDragDropInfo; i: Integer; hGlobalBuffer: HGLOBAL; PreferredEffect: DWORD = DROPEFFECT_COPY; formatEtc: TFormatEtc = (CfFormat: 0; Ptd: nil; dwAspect: 0; lindex: 0; tymed: TYMED_HGLOBAL); {$ENDIF} {$IFDEF UNIX} var s: String; uriList: String; plainList: String; {$ENDIF} begin Result := False; if filenames.Count = 0 then Exit; {$IFDEF MSWINDOWS} if OpenClipboard(frmMain.Handle) = 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; {$ENDIF} {$IFDEF UNIX} // 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; {$ENDIF} end; function CopyToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCopy); end; function CutToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCut); end; function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; {$IFDEF MSWINDOWS} var hGlobalBuffer: HGLOBAL; pBuffer: LPVOID; PreferredEffect: DWORD; {$ELSE IF DEFINED(UNIX)} var formatId: TClipboardFormat; uriList: String; s: String; {$ENDIF} begin filenames := nil; Result := False; // Default to 'copy' if effect hasn't been given. ClipboardOp := ClipboardCopy; {$IFDEF MSWINDOWS} 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; {$ELSE IF DEFINED(UNIX)} 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; if Length(uriList) > 0 then uriList := URIDecode(Trim(uriList)); 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); if Length(uriList) > 0 then uriList := URIDecode(Trim(uriList)); 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); if (filenames <> nil) and (filenames.Count > 0) then Result := True; {$ENDIF} end; procedure ClearClipboard; {$IFDEF MSWINDOWS} begin if OpenClipboard(0) then begin EmptyClipboard; CloseClipboard; end; end; {$ELSE} begin Clipboard.Open; Clipboard.AsText := ''; Clipboard.Close; end; {$ENDIF} 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; initialization RegisterUserFormats; end. doublecmd-0.9.8/src/platform/svn2revisioninc.exe.cmd0000755000175000001440000000077612650255315021570 0ustar alexxusers@echo off 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 svnversion -n ..\ > %REVISION_TXT% IF ERRORLEVEL 1 goto EXIT set /P REVISION=<%REVISION_TXT% echo %REVISION% | find "Unversioned" > nul IF NOT ERRORLEVEL 1 goto EXIT echo // Created by Svn2RevisionInc> %REVISION_INC% echo const dcRevision = '%REVISION%';>> %REVISION_INC% :EXIT echo Subversion revision %REVISION% doublecmd-0.9.8/src/platform/svn2revisioninc.cmd0000755000175000001440000000055612650252770021006 0ustar alexxusers#!/bin/sh export REVISION_INC=$1/dcrevision.inc rm -f $REVISION_INC cp ../units/dcrevision.inc $REVISION_INC export REVISION=$(svnversion ../ | sed -e 's/\([0-9]*\).*/\1/') if [ ! -z $REVISION ]; then echo "// Created by Svn2RevisionInc" > $REVISION_INC echo "const dcRevision = '$REVISION';" >> $REVISION_INC fi echo "Subversion revision" $REVISION doublecmd-0.9.8/src/platform/lua.pas0000644000175000001440000013160113530175472016440 0ustar alexxusers(* * A Pascal wrapper for Lua 5.1-5.3 library. * * Created by Geo Massar, 2006 * Distributed as free/open source. * 2008 Added dinamicly library loading by Dmitry Kolomiets (B4rr4cuda@rambler.ru) * 2018-2019 Added Lua 5.2 - 5.3 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; function LuaCheckVersion: 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_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_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_newuserdata: function (L : Plua_State; sz : size_t) : Pointer; 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); (* ** `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_resume: function (L : Plua_State; narg : Integer) : Integer; cdecl; lua_status: function (L : Plua_State) : Integer; cdecl; (* ** 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; 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; 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_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; procedure UnloadLuaLib; begin if LuaLibD <> NilHandle then FreeLibrary(LuaLibD); end; function IsLuaLibLoaded: Boolean; begin Result:= (LuaLibD <> NilHandle); end; function LuaCheckVersion: Boolean; begin Result:= True; if Assigned(lua_version) then begin Result:= (Trunc(lua_version(nil)^) = LUA_VERSION_NUM); end; Result:= Result and (luaJIT = False); 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_resume := GetProcAddress(LuaLibD, 'lua_resume'); @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_remove := GetProcAddress(LuaLibD, 'lua_remove'); @lua_insert := GetProcAddress(LuaLibD, 'lua_insert'); @lua_replace := GetProcAddress(LuaLibD, 'lua_replace'); @lua_checkstack := GetProcAddress(LuaLibD, 'lua_checkstack'); @lua_xmove := GetProcAddress(LuaLibD, 'lua_xmove'); // Lua 5.2 - 5.3 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'); // luaJIT specific stuff luaJIT := GetProcAddress(LuaLibD, 'luaJIT_setmode') <> nil; if Assigned(lua_version) then LUA_VERSION_DYN:= Trunc(lua_version(nil)^) else begin LUA_VERSION_DYN:= LUA_VERSION_NUM; end; // 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; // 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; 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_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; (*****************************************************************************) (* 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-0.9.8/src/fviewoperations.pas0000644000175000001440000010746013467737150017273 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-0.9.8/src/fviewoperations.lrt0000644000175000001440000000206311747211345017272 0ustar alexxusersTFRMVIEWOPERATIONS.CAPTION=File operations TFRMVIEWOPERATIONS.TBPAUSEALL.CAPTION=&Pause all TFRMVIEWOPERATIONS.BTNSTOP.CAPTION=S&top TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION=&Start TFRMVIEWOPERATIONS.LBLUSEDRAGDROP.CAPTION=Use "drag && drop" to move operations between queues TFRMVIEWOPERATIONS.CBALWAYSONTOP.CAPTION=Always on top TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION=Queue TFRMVIEWOPERATIONS.MNUQUEUE0.CAPTION=Out of queue TFRMVIEWOPERATIONS.MNUQUEUE1.CAPTION=Queue 1 TFRMVIEWOPERATIONS.MNUQUEUE2.CAPTION=Queue 2 TFRMVIEWOPERATIONS.MNUQUEUE3.CAPTION=Queue 3 TFRMVIEWOPERATIONS.MNUQUEUE4.CAPTION=Queue 4 TFRMVIEWOPERATIONS.MNUQUEUE5.CAPTION=Queue 5 TFRMVIEWOPERATIONS.MNUNEWQUEUE.CAPTION=New queue TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION=Show in detached window TFRMVIEWOPERATIONS.MNUPUTFIRSTINQUEUE.CAPTION=Put first in queue TFRMVIEWOPERATIONS.MNUPUTLASTINQUEUE.CAPTION=Put last in queue TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION=Cancel TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION=Show in detached window TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION=Cancel doublecmd-0.9.8/src/fviewoperations.lfm0000644000175000001440000001503512023046500017235 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-0.9.8/src/fviewer.pas0000644000175000001440000024653213532420754015512 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Build-in File Viewer. 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 . 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, ColorBox, Spin, Grids, ActnList, viewercontrol, GifAnim, fFindView, WLXPlugin, uWLXModule, uFileSource, fModView, Types, uThumbnails, uFormCommands, uOSForms,Clipbrd, uExifReader, uShowForm; type TViewerCopyMoveAction=(vcmaCopy,vcmaMove); { TDrawGrid } TDrawGrid = class(Grids.TDrawGrid) private FMutex: Integer; private function GetIndex: Integer; procedure SetIndex(AValue: Integer); protected procedure MoveSelection; override; public property Index: Integer read GetIndex write SetIndex; end; { TfrmViewer } TfrmViewer = class(TAloneForm, IFormCommands) actAbout: TAction; actCopyFile: TAction; actDeleteFile: TAction; actCopyToClipboard: TAction; actImageCenter: TAction; actFullscreen: TAction; actCopyToClipboardFormatted: TAction; actChangeEncoding: 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; actShowPlugins: TAction; actShowAsBook: TAction; actShowAsWrapText: TAction; actShowAsHex: TAction; actShowAsBin: TAction; actShowAsText: TAction; actPreview: 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; btnPrev1: TSpeedButton; btnReload1: TSpeedButton; cbSlideShow: TCheckBox; ColorBoxPaint: TColorBox; ComboBoxWidth: TComboBox; ComboBoxPaint: TComboBox; DrawPreview: TDrawGrid; gboxPaint: TGroupBox; gboxView: TGroupBox; gboxSlideShow: TGroupBox; GifAnim: TGifAnim; memFolder: TMemo; 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; gboxHightlight: TGroupBox; Image: TImage; lblHightlight: TLabel; miZoomOut: TMenuItem; miZoomIn: TMenuItem; miRotate: TMenuItem; miMirror: TMenuItem; mi270: TMenuItem; mi180: TMenuItem; mi90: TMenuItem; miSearchPrev: TMenuItem; miPrint: TMenuItem; miSearchNext: TMenuItem; pnlFolder: TPanel; pnlPreview: TPanel; pnlEditFile: TPanel; PanelEditImage: TPanel; pmiSelectAll: TMenuItem; miDiv5: TMenuItem; pmiCopy: TMenuItem; pnlImage: TPanel; pnlText: TPanel; miDiv3: TMenuItem; miEncoding: TMenuItem; miPlugins: TMenuItem; miSeparator: TMenuItem; pmEditMenu: TPopupMenu; SavePictureDialog: TSavePictureDialog; sboxImage: TScrollBox; btnCutTuImage: TSpeedButton; btnResize: TSpeedButton; btnUndo: TSpeedButton; btnHightlight: TSpeedButton; btn270: TSpeedButton; btn90: TSpeedButton; btnMirror: TSpeedButton; btnZoomIn: TSpeedButton; btnZoomOut: TSpeedButton; btnReload: TSpeedButton; btnPaint: TSpeedButton; btnFullScreen: TSpeedButton; seTimeShow: TSpinEdit; btnRedEye: TSpeedButton; btnNext: TSpeedButton; btnPrev: TSpeedButton; btnMoveFile: TSpeedButton; btnDeleteFile: TSpeedButton; btnCopyFile: TSpeedButton; btnGifMove: TSpeedButton; btnGifToBmp: TSpeedButton; btnNextGifFrame: TSpeedButton; btnPrevGifFrame: TSpeedButton; Splitter: TSplitter; Status: TStatusBar; 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; miWrapText: TMenuItem; miAbout: TMenuItem; miAbout2: TMenuItem; miDiv1: TMenuItem; miSearch: TMenuItem; miDiv2: TMenuItem; miGraphics: TMenuItem; miEdit: TMenuItem; miSelectAll: TMenuItem; miCopyToClipboard: TMenuItem; TimerScreenshot: TTimer; TimerViewer: TTimer; 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 btnPrevGifFrameClick(Sender: TObject); procedure btnRedEyeClick(Sender: TObject); procedure btnResizeClick(Sender: TObject); procedure btnUndoClick(Sender: TObject); procedure DrawPreviewDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); 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 miLookBookClick(Sender: TObject); procedure pmEditMenuPopup(Sender: TObject); procedure pnlImageResize(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 TimerScreenshotTimer(Sender: TObject); procedure TimerViewerTimer(Sender: TObject); procedure ViewerControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure frmViewerClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormDestroy(Sender: TObject); procedure miChangeEncodingClick(Sender:TObject); 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; private 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; tmp_all: TCustomBitmap; FModSizeDialog: TfrmModView; FThumbnailManager: TThumbnailManager; FCommands: TFormCommands; FZoomFactor: Double; FExif: TExifReader; FWindowState: TWindowState; {$IF DEFINED(LCLWIN32)} FWindowBounds: TRect; {$ENDIF} FThread: TThread; //--------------------- WlxPlugins: TWLXModuleList; FWlxModule: TWlxModule; ActivePlugin: Integer; //--------------------- function GetListerRect: TRect; function CheckPlugins(const sFileName: String; bForce: Boolean = False): Boolean; function CheckGraphics(const sFileName:String):Boolean; function LoadGraphics(const sFileName:String): Boolean; procedure AdjustImageSize; procedure DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); procedure MakeTextEncodingsMenu; procedure ActivatePanel(Panel: TPanel); procedure ReopenAsTextIfNeeded; procedure CheckXY; procedure UndoTmp; procedure CreateTmp; procedure CutToImage; procedure Res(W, H: integer); procedure RedEyes; procedure DeleteCurrentFile; procedure EnableActions(AEnabled: Boolean); procedure SaveImageAs (Var sExt: String; senderSave: boolean; Quality: integer); procedure CreatePreview(FullPathToFile:string; index:integer; delete: boolean = false); property Commands: TFormCommands read FCommands implements IFormCommands; protected procedure WMCommand(var Message: TLMCommand); message LM_COMMAND; procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; public constructor Create(TheOwner: TComponent; aWaitData: TWaitData; aQuickView: Boolean = False); overload; constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure LoadFile(iIndex: Integer); procedure LoadFile(const aFileName: String); procedure LoadNextFile(Index: Integer); procedure LoadNextFile(const aFileName: String); procedure ExitPluginMode; procedure ShowTextViewer(AMode: TViewerControlMode); procedure CopyMoveFile(AViewerAction:TViewerCopyMoveAction); 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_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_Save(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_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_ExitViewer (const Params: array of string); end; procedure ShowViewer(const FilesToView:TStringList; WaitData: TWaitData = nil); 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, fMain; const HotkeysCategory = 'Viewer'; // Status bar panels indexes. sbpFileName = 0; sbpFileNr = 1; // Text sbpPosition = 2; sbpFileSize = 3; sbpTextEncoding = 4; // WLX sbpPluginName = 2; // Graphics sbpCurrentResolution = 2; sbpFullResolution = 3; 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); 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.RowCount:= Viewer.FileList.Count; Viewer.actMoveFile.Enabled := FilesToView.Count > 1; Viewer.actDeleteFile.Enabled := FilesToView.Count > 1; with Viewer.ViewerControl do case gViewerMode of 1: Mode:= vcmText; 2: Mode:= vcmBin; 3: Mode:= vcmHex; 4: Mode:= vcmWrap; //5: Mode:= vcmBook; 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.MoveSelection; begin if (FMutex = 0) then try Inc(FMutex); inherited MoveSelection; finally Dec(FMutex) 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 := 1.0; ActivePlugin := -1; FThumbnailManager:= nil; FExif:= TExifReader.Create; if not bQuickView then Menu:= MainMenu; FCommands := TFormCommands.Create(Self, actionList); FontOptionsToFont(gFonts[dcfMain], memFolder.Font); memFolder.Color:= gBackColor; ViewerControl.TabSpaces := gTabSpaces; ViewerControl.MaxTextWidth := gMaxTextWidth; end; constructor TfrmViewer.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; destructor TfrmViewer.Destroy; begin FExif.Free; 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.LoadFile(const aFileName: String); var i: Integer; aName: String; dwFileAttributes: TFileAttrs; begin FLastSearchPos := -1; Caption := 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 dwFileAttributes = faInvalidAttributes then begin ActivatePanel(pnlFolder); memFolder.Font.Color:= clRed; memFolder.Lines.Text:= rsMsgErrNoFiles; Exit; end; if bQuickView then begin iActiveFile := 0; FileList.Text := aFileName; end; Screen.Cursor:= crHourGlass; try if FPS_ISDIR(dwFileAttributes) then aName:= IncludeTrailingPathDelimiter(aFileName) else begin aName:= aFileName; end; if CheckPlugins(aName) then ActivatePanel(nil) else if FPS_ISDIR(dwFileAttributes) then begin ActivatePanel(pnlFolder); memFolder.Clear; memFolder.Font.Color:= clDefault; memFolder.Lines.Add(rsPropsFolder + ': '); memFolder.Lines.Add(aFileName); memFolder.Lines.Add(''); end else if CheckGraphics(aFileName) and LoadGraphics(aFileName) then ActivatePanel(pnlImage) else begin ViewerControl.FileName := aFileName; ActivatePanel(pnlText) end; Status.Panels[sbpFileName].Text:= aFileName; finally Screen.Cursor:= crDefault; 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]); Caption:= FileList[Index]; 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 then with FWlxModule do begin if FileParamVSDetectStr(aFileName, False) then begin if CallListLoadNext(Self.Handle, aFileName, PluginShowFlags) <> LISTPLUGIN_ERROR then Exit; end; end; ExitPluginMode; ViewerControl.ResetEncoding; LoadFile(aFileName); if ViewerControl.IsFileOpen then begin ViewerControl.GoHome; if (ViewerControl.Mode = vcmText) then ViewerControl.HGoHome; end; end; procedure TfrmViewer.LoadFile(iIndex: Integer); var ANewFile: Boolean; begin ANewFile:= iActiveFile <> iIndex; iActiveFile := iIndex; LoadFile(FileList.Strings[iIndex]); gboxPaint.Visible:= False; gboxHightlight.Visible:= 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; 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 gboxHightlight.Visible 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 gboxPaint.Visible then begin CreateTmp; Image.Picture.Bitmap.Canvas.MoveTo (x,y); end; if not (gboxHightlight.Visible) and not (gboxPaint.Visible) 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 gboxHightlight.Visible 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 gboxHightlight.Visible 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; lblHightlight.Caption := IntToStr(EndX-StartX)+'x'+IntToStr(EndY-StartY); UndoSX:=StartX; UndoSY:=StartY; UndoEX:=EndX; UndoEY:=EndY; end; end; if gboxPaint.Visible then begin with Image.Picture.Bitmap.Canvas do begin Brush.Style:= bsClear; Pen.Width := StrToInt(ComboBoxWidth.Text); Pen.Color := ColorBoxPaint.Selected; Pen.Style := psSolid; tmp:= Pen.Width+10; case TViewerPaintTool(ComboBoxPaint.ItemIndex) 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(ComboBoxPaint.ItemIndex) 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 (gboxHightlight.Visible) and not (gboxPaint.Visible) 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 PanelEditImage.Visible then begin if (button = mbLeft) and gboxHightlight.Visible 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)); lblHightlight.Caption := 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 cm_Zoom(['0.9']); end; procedure TfrmViewer.ImageMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if ssCtrl in Shift then cm_Zoom(['1.1']); 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); begin case Message.NotifyCode of itm_next: if Message.ItemID = 0 then cm_LoadNextFile([]); end; end; procedure TfrmViewer.WMSetFocus(var Message: TLMSetFocus); begin if bPlugin then FWlxModule.SetFocus; 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.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.EnableActions(AEnabled: Boolean); begin actSave.Enabled:= AEnabled; actCopyFile.Enabled:= AEnabled; actMoveFile.Enabled:= AEnabled and (FileList.Count > 1); actDeleteFile.Enabled:= AEnabled and (FileList.Count > 1); 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 EndX0 then DrawPreview.ColCount:= DrawPreview.Width div (DrawPreview.DefaultColWidth + 6); if FileList.Count mod DrawPreview.ColCount > 0 then DrawPreview.RowCount:= FileList.Count div DrawPreview.ColCount + 1 else DrawPreview.RowCount:= FileList.Count div DrawPreview.ColCount; if bPlugin then FWlxModule.ResizeWindow(GetListerRect); end; procedure TfrmViewer.TimerScreenshotTimer(Sender: TObject); begin cm_Screenshot(['']); TimerScreenshot.Enabled:=False; Application.Restore; Self.BringToFront; end; procedure TfrmViewer.DrawPreviewDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var ATextSize: TSize; sFileName: String; bmpThumb: TBitmap; Index, X, Y: Integer; begin LCLIntf.InflateRect(aRect, -2, -2); // Calculate FileList index Index:= (aRow * DrawPreview.ColCount) + aCol; if (Index >= 0) and (Index < FileList.Count) then begin DrawPreview.Canvas.FillRect(aRect); bmpThumb:= TBitmap(FileList.Objects[Index]); sFileName:= ExtractFileName(FileList.Strings[Index]); sFileName:= FitOtherCellText(sFileName, DrawPreview.Canvas, aRect.Width); ATextSize:= DrawPreview.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; DrawPreview.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; DrawPreview.Canvas.TextOut(X, Y, sFileName); end; 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 (PanelEditImage.Visible) and (i_timer > 60) and (not PanelEditImage.MouseEntered) then begin PanelEditImage.Visible:= False; AdjustImageSize; end else if (not PanelEditImage.Visible) and (sboxImage.ScreenToClient(Mouse.CursorPos).Y < PanelEditImage.Height div 2) then begin PanelEditImage.Visible:= True; AdjustImageSize; end; end; Inc(i_timer); if (cbSlideShow.Checked) and (i_timer = 60 * seTimeShow.Value) then begin if (PanelEditImage.Visible) and (not PanelEditImage.MouseEntered) then begin PanelEditImage.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.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; gImageCenter:= miCenter.Checked; gPreviewVisible := miPreview.Checked; gImagePaintMode := TViewerPaintTool(ComboBoxPaint.ItemIndex); gImagePaintWidth := StrToInt(ComboBoxWidth.Text) ; gImagePaintColor := ColorBoxPaint.Selected; case ViewerControl.Mode of vcmText: gViewerMode := 1; vcmBin : gViewerMode := 2; vcmHex : gViewerMode := 3; vcmWrap: gViewerMode := 4; vcmBook: begin gViewerMode := 4; gTextPosition := ViewerControl.Position; end; 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 gboxHightlight.Visible then begin gboxPaint.Visible:=false; gboxHightlight.Visible:=false; gboxView.Visible:=true; UndoTmp; end; AdjustImageSize; end; end; procedure TfrmViewer.FormCreate(Sender: TObject); var HMViewer: THMForm; begin if not bQuickView then InitPropStorage(Self); HMViewer := HotMan.Register(Self, HotkeysCategory); HMViewer.RegisterActionList(actionList); ParseLineToList(rsViewPaintToolsList, ComboBoxPaint.Items); SetComboWidthToLargestElement(ComboBoxPaint, 30); ViewerControl.OnGuessEncoding:= @DetectEncoding; FontOptionsToFont(gFonts[dcfViewer], ViewerControl.Font); FileList := TStringList.Create; FileList.OwnsObjects:= True; WlxPlugins:=TWLXModuleList.Create; WlxPlugins.Assign(gWLXPlugins); DCDebug('WLX: Load - OK'); FFindDialog:=nil; // dialog is created in first use sboxImage.DoubleBuffered := True; miStretch.Checked := gImageStretch; miStretchOnlyLarge.Checked := gImageStretchOnlyLarge; miCenter.Checked := gImageCenter; miPreview.Checked := gPreviewVisible; ComboBoxPaint.ItemIndex := Integer(gImagePaintMode); ComboBoxWidth.Text := IntToStr(gImagePaintWidth); ColorBoxPaint.Selected := gImagePaintColor; 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; HotMan.Register(pnlText ,'Text files'); HotMan.Register(pnlImage,'Image files'); 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_ShowAsWrapText(['']); Key := #0; end; '6': begin cm_ShowGraphics(['']); Key := #0; end; '7': begin cm_ShowPlugins(['']); 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.Caption:='||' else btnGifMove.Caption:='|>'; 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 FreeThenNil(bmp); FreeThenNil(fsFileStream); end; {miStretch.Checked:= False; Image.Stretch:= miStretch.Checked; Image.Proportional:= Image.Stretch; Image.Autosize:= not(miStretch.Checked); AdjustImageSize; } end; if gboxHightlight.Visible then UndoTmp; if Sender = btnHightlight then begin gboxHightlight.Visible := not (gboxHightlight.Visible); gboxPaint.Visible:= False; end else begin gboxPaint.Visible:= not (gboxPaint.Visible); gboxHightlight.Visible:= False; end; ImgEdit:= True; CreateTmp; 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(Application); 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.btnUndoClick(Sender: TObject); begin UndoTmp; 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.ReopenAsTextIfNeeded; begin if bImage or bAnimation or bPlugin or miPlugins.Checked then begin Image.Picture := nil; ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; procedure TfrmViewer.miChangeEncodingClick(Sender: TObject); begin cm_ChangeEncoding([(Sender as TMenuItem).Caption]); end; procedure TfrmViewer.ViewerControlMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift=[ssCtrl])and(gFonts[dcfViewer].Size>MIN_FONT_SIZE_VIEWER) 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 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; // Place and resize image if (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.LoadGraphics(const sFileName:String): Boolean; var sExt: String; fsFileHandle: System.THandle; fsFileStream: TFileStreamEx = nil; gifHeader: array[0..5] of AnsiChar; begin FZoomFactor:= 1.0; 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); btnHightlight.Visible:= not (miFullScreen.Checked); btnPaint.Visible:= not (miFullScreen.Checked); btnResize.Visible:= not (miFullScreen.Checked); miImage.Visible:= True; btnZoomIn.Visible:= True; btnZoomOut.Visible:= True; btn270.Visible:= True; btn90.Visible:= True; btnMirror.Visible:= True; btnGifMove.Visible:= False; btnGifToBmp.Visible:= False; btnNextGifFrame.Visible:= False; btnPrevGifFrame.Visible:= False; 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 Exit(False); end; end else begin GifAnim.Visible:= True; Image.Visible:= False; try GifAnim.FileName:= sFileName; btnHightlight.Visible:= False; btnPaint.Visible:= False; btnResize.Visible:= False; miImage.Visible:= False; btnZoomIn.Visible:= False; btnZoomOut.Visible:= False; btn270.Visible:= False; btn90.Visible:= False; btnMirror.Visible:= False; btnGifMove.Visible:= True; btnGifToBmp.Visible:= True; btnNextGifFrame.Visible:= True; btnPrevGifFrame.Visible:= True; except Exit(False); end; end; ImgEdit:= False; end; procedure TfrmViewer.DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); var T: QWord; PAdr: PtrInt; PAnsiAddr: PByte; bTextFound: Boolean; sSearchTextU: String; sSearchTextA: AnsiString; iSearchParameter: Integer; RecodeTable: TRecodeTable; begin // in first use create dialog if not Assigned(FFindDialog) then FFindDialog:= TfrmFindView.Create(Self); 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; end; FFindDialog.chkHex.Visible:= not bPlugin; // 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; // 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]; end; if bPlugin then begin iSearchParameter:= 0; if bSearchBackwards then iSearchParameter:= 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 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; // Choose search start position. if not bSearchBackwards then begin iSearchParameter:= Length(sSearchTextA); if FLastSearchPos = -1 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 FLastSearchPos = -1 then FLastSearchPos := ViewerControl.FileSize - 1 else if FLastSearchPos >= iSearchParameter then FLastSearchPos := FLastSearchPos - iSearchParameter; end; // 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 ViewerEncodingMultiByte) or bSearchBackwards then begin PAdr := ViewerControl.FindUtf8Text(FLastSearchPos, sSearchTextU, FFindDialog.cbCaseSens.Checked, bSearchBackwards); bTextFound := (PAdr <> PtrInt(-1)); if bTextFound then FLastSearchPos := PAdr; 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; 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.SelectText(FLastSearchPos, FLastSearchPos + Length(sSearchTextA)); end else begin msgOK(Format(rsViewNotFound, ['"' + sSearchTextU + '"'])); if (ViewerControl.Selection <> sSearchTextU) then begin ViewerControl.SelectText(0, 0); end; FLastSearchPos := -1; 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.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 1; mi.OnClick:= @miChangeEncodingClick; if ViewerControl.EncodingName = EncodingsList[I] then mi.Checked := True; miEncoding.Add(mi); end; finally FreeAndNil(EncodingsList); 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 pnlFolder.Hide; pnlImage.Hide; pnlText.Hide; if Assigned(Panel) then Panel.Visible := True; if Panel = nil then begin Status.Panels[sbpFileSize].Text:= EmptyStr; Status.Panels[sbpTextEncoding].Text:= EmptyStr; Status.Panels[sbpPluginName].Text:= FWlxModule.Name; 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: miWrapText.Checked := True; vcmBin: miBin.Checked := True; vcmHex: miHex.Checked := True; vcmDec: miDec.Checked := True; vcmBook: miLookBook.Checked := True; end; 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 CanFocus and pnlImage.CanFocus then pnlImage.SetFocus; PanelEditImage.Visible:= not (bQuickView or (miFullScreen.Checked and not PanelEditImage.MouseEntered)); end; bAnimation := (Panel = pnlImage) and (GifAnim.Visible); bImage := (Panel = pnlImage) and (bAnimation = False); bPlugin := (Panel = nil); miPlugins.Checked := (Panel = nil); miGraphics.Checked := (Panel = pnlImage); miEncoding.Visible := (Panel = pnlText); miEdit.Visible := (Panel = pnlText) or (Panel = nil); miImage.Visible := (bImage or bPlugin); miRotate.Visible := bImage; miZoomIn.Visible := bImage; miZoomOut.Visible := bImage; miFullScreen.Visible := bImage; miScreenshot.Visible := bImage; miSave.Visible := bImage; miSaveAs.Visible := bImage; pmiSelectAll.Visible := (Panel = pnlText); pmiCopyFormatted.Visible := (Panel = pnlText); 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_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:= 1.0; 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_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, 80); CreatePreview(FileList.Strings[iActiveFile], iActiveFile); finally DrawPreview.EndUpdate; end; end; end; procedure TfrmViewer.cm_SaveAs(const Params: array of string); begin if bAnimation or bImage then begin FModSizeDialog:= TfrmModView.Create(Application); try FModSizeDialog.pnlSize.Visible:=false; FModSizeDialog.pnlCopyMoveFile.Visible :=false; FModSizeDialog.pnlQuality.Visible:=true; FModSizeDialog.Caption:= rsViewImageType; if FModSizeDialog.ShowModal = mrOk then begin if StrToInt(FModSizeDialog.teQuality.Text)<=100 then SaveImageAs(FModSizeDialog.sExt,false,StrToInt(FModSizeDialog.teQuality.Text)) else msgError(rsViewBadQuality); end finally FreeAndNil(FModSizeDialog); end; 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); var k:double; begin try k:=StrToFloat(Params[0]); except exit; end; miStretch.Checked := False; miStretchOnlyLarge.Checked:= False; FZoomFactor := FZoomFactor * k; AdjustImageSize; end; procedure TfrmViewer.cm_ZoomIn(const Params: array of string); begin if miGraphics.Checked then cm_Zoom(['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 cm_Zoom(['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; gboxPaint.Visible:= false; gboxHightlight.Visible:=false; PanelEditImage.Visible:= False; miStretch.Checked:= True; miStretchOnlyLarge.Checked:= False; if miPreview.Checked then cm_Preview(['']); 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} PanelEditImage.Visible:= True; end; if ExtractOnlyFileExt(FileList.Strings[iActiveFile]) <> 'gif' then begin btnHightlight.Visible:=not(miFullScreen.Checked); btnPaint.Visible:=not(miFullScreen.Checked); btnResize.Visible:=not(miFullScreen.Checked); end; sboxImage.HorzScrollBar.Visible:= not(miFullScreen.Checked); sboxImage.VertScrollBar.Visible:= not(miFullScreen.Checked); TimerViewer.Enabled:=miFullScreen.Checked; btnReload.Visible:=not(miFullScreen.Checked); Status.Visible:=not(miFullScreen.Checked); gboxSlideShow.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 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; ViewerControl.EncodingName := Params[0]; Status.Panels[4].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end; end; end; procedure TfrmViewer.cm_CopyToClipboard(const Params: array of string); begin 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 bPlugin then FWlxModule.CallListSendCommand(lc_selectall, 0) else ViewerControl.SelectAll; end; procedure TfrmViewer.cm_Find(const Params: array of string); begin //if (not (bImage or bAnimation)) then if not miGraphics.Checked then begin FLastSearchPos := -1; DoSearch(False, False); end; end; procedure TfrmViewer.cm_FindNext(const Params: array of string); begin if not miGraphics.Checked then DoSearch(True, False); end; procedure TfrmViewer.cm_FindPrev(const Params: array of string); begin if not miGraphics.Checked then DoSearch(True, True); end; procedure TfrmViewer.cm_Preview(const Params: array of string); begin 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(vcmText); 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 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 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_ExitViewer(const Params: array of string); begin Close; end; initialization TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer); end. doublecmd-0.9.8/src/fviewer.lrj0000644000175000001440000002536313370201535015505 0ustar alexxusers{"version":1,"strings":[ {"hash":97504706,"name":"tfrmviewer.caption","sourcebytes":[86,105,101,119,101,114],"value":"Viewer"}, {"hash":234009348,"name":"tfrmviewer.gboxhightlight.caption","sourcebytes":[72,105,103,104,108,105,103,104,116],"value":"Highlight"}, {"hash":14256,"name":"tfrmviewer.lblhightlight.caption","sourcebytes":[48,120,48],"value":"0x0"}, {"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.gboxpaint.caption","sourcebytes":[80,97,105,110,116],"value":"Paint"}, {"hash":378031,"name":"tfrmviewer.btnundo.hint","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":22206,"name":"tfrmviewer.comboboxpaint.text","sourcebytes":[80,101,110],"value":"Pen"}, {"hash":49,"name":"tfrmviewer.comboboxwidth.text","sourcebytes":[49],"value":"1"}, {"hash":234009348,"name":"tfrmviewer.btnhightlight.hint","sourcebytes":[72,105,103,104,108,105,103,104,116],"value":"Highlight"}, {"hash":380871,"name":"tfrmviewer.gboxview.caption","sourcebytes":[86,105,101,119],"value":"View"}, {"hash":2108,"name":"tfrmviewer.btngifmove.caption","sourcebytes":[124,124],"value":"||"}, {"hash":83,"name":"tfrmviewer.btngiftobmp.caption","sourcebytes":[83],"value":"S"}, {"hash":33790,"name":"tfrmviewer.btnnextgifframe.caption","sourcebytes":[124,124,62],"value":"||>"}, {"hash":17468,"name":"tfrmviewer.btnprevgifframe.caption","sourcebytes":[60,124,124],"value":"<||"}, {"hash":93102341,"name":"tfrmviewer.btnresize.hint","sourcebytes":[82,101,115,105,122,101],"value":"Resize"}, {"hash":5668948,"name":"tfrmviewer.btnpaint.hint","sourcebytes":[80,97,105,110,116],"value":"Paint"}, {"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.gboxslideshow.caption","sourcebytes":[83,108,105,100,101,32,83,104,111,119],"value":"Slide Show"}, {"hash":175127959,"name":"tfrmviewer.cbslideshow.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":151352958,"name":"tfrmviewer.miprint.caption","sourcebytes":[80,114,105,110,116,46,46,46],"value":"Print..."}, {"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":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":195288076,"name":"tfrmviewer.pmiselectall.caption","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"}, {"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":106909908,"name":"tfrmviewer.actzoomout.caption","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":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":216568103,"name":"tfrmviewer.actchangeencoding.caption","sourcebytes":[67,104,97,110,103,101,32,101,110,99,111,100,105,110,103],"value":"Change encoding"} ]} doublecmd-0.9.8/src/fviewer.lfm0000644000175000001440000046032013462617634015505 0ustar alexxusersobject frmViewer: TfrmViewer Left = 930 Height = 458 Top = 427 Width = 651 HorzScrollBar.Page = 951 VertScrollBar.Page = 491 Caption = 'Viewer' ClientHeight = 458 ClientWidth = 651 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 = '1.8.4.0' object pnlFolder: TPanel Left = 179 Height = 435 Top = 0 Width = 472 Align = alClient BevelOuter = bvNone ClientHeight = 435 ClientWidth = 472 TabOrder = 0 Visible = False object memFolder: TMemo Left = 0 Height = 435 Top = 0 Width = 472 Align = alClient BorderStyle = bsNone ReadOnly = True TabOrder = 0 end end object Status: TStatusBar Left = 0 Height = 23 Top = 435 Width = 651 Panels = < item Width = 200 end item Width = 50 end item Width = 100 end item Width = 100 end item Width = 100 end> SimplePanel = False end object pnlText: TPanel Left = 179 Height = 435 Top = 0 Width = 472 Align = alClient BevelOuter = bvNone ClientHeight = 435 ClientWidth = 472 TabOrder = 2 Visible = False OnMouseWheelUp = pnlTextMouseWheelUp object ViewerControl: TViewerControl Left = 0 Height = 435 Top = 0 Width = 472 Mode = vcmText OnPositionChanged = ViewerPositionChanged OnMouseUp = ViewerControlMouseUp OnMouseWheelUp = ViewerControlMouseWheelUp OnMouseWheelDown = ViewerControlMouseWheelDown Align = alClient Color = clWindow Font.Color = clWindowText end end object pnlImage: TPanel Left = 179 Height = 435 Top = 0 Width = 472 Align = alClient BevelOuter = bvNone ClientHeight = 435 ClientWidth = 472 TabOrder = 3 Visible = False OnResize = pnlImageResize object sboxImage: TScrollBox Left = 0 Height = 385 Top = 50 Width = 472 HorzScrollBar.Page = 432 VertScrollBar.Page = 381 Align = alClient ClientHeight = 381 ClientWidth = 451 Color = clWhite ParentColor = False TabOrder = 0 OnMouseEnter = sboxImageMouseEnter OnMouseLeave = sboxImageMouseLeave OnMouseMove = sboxImageMouseMove object Image: TImage Left = 56 Height = 288 Top = 96 Width = 376 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 PanelEditImage: TPanel AnchorSideLeft.Control = pnlImage AnchorSideTop.Control = pnlImage AnchorSideRight.Control = pnlImage AnchorSideBottom.Control = sboxImage Left = 0 Height = 50 Top = 0 Width = 472 Align = alTop Alignment = taLeftJustify ClientHeight = 50 ClientWidth = 472 TabOrder = 1 object gboxHightlight: TGroupBox Left = 435 Height = 47 Top = 1 Width = 85 Align = alLeft AutoSize = True BorderSpacing.Left = 5 BorderSpacing.Bottom = 1 Caption = 'Highlight' ChildSizing.LeftRightSpacing = 4 ClientHeight = 27 ClientWidth = 81 TabOrder = 0 Visible = False object lblHightlight: TLabel AnchorSideLeft.Control = gboxHightlight AnchorSideTop.Control = btnCutTuImage AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 3 Width = 17 BorderSpacing.Left = 6 Caption = '0x0' ParentColor = False end object btnCutTuImage: TSpeedButton AnchorSideLeft.Control = lblHightlight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxHightlight Left = 28 Height = 20 Hint = 'Crop' Top = 0 Width = 20 AutoSize = True BorderSpacing.Left = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FF7315FFFF73 15FF000000000000000000000000000000000000000000000000000000000000 000000000000FF7315FFFF7315FF000000000000000000000000FFA263FFFFB8 73FFE39D6C17DFA884FCF0A36D17DEA884FCF0A36D17DEA884FCF0A36D17DEA8 84FCE29C6D17FFB873FFFFC57CFF00000000000000000000000000000000E69B 6717BC8A681EDC8F5B17D98F5C17D48F5F17D38F5F17D28F6017D38F5F17D28F 6017D18E5F17D99464170000000000000000000000000000000000000000E3A8 81FC818A8E7D757F82A4A08F833BDB8D5717D88D5817D78C5817D88C5817D88C 5817D78B5617D89F78F7F4B48C0500000000000000000000000000000000F3A2 6A17D4A07F20BCC3CAF38E9499FF858D91EDA8ACB1D1A5A5AAC597989CC59899 9FC5A1A6ACC5BEC1C5BB0000000000000000000000000000000000000000DFA7 83FCD4865117D4D5D9CBDDDEE0FFC9CBCCFF929494FF939695FFE9E9E9FFFFFF FFFFFFFFFFFFE29C6FFE0000000000000000000000000000000000000000F0A3 6D17D3865117CCCED3C5FFFFFFFFE4E4E4FFDEDEDDFFCBCBCCFF848788FF7477 75FFD3D9D9FFCBC7C8C60000000000000000000000000000000000000000DEA8 84FCD3875217CBCCD1C5FFFFFFFFFDFDFDFFD6D6D7FFCDCDD0FFC6C6C9FFB3B3 BAFF666869FF5B4B3CFF302F270D00000000000000000000000000000000F0A3 6D17D3865117CBCCD1C5FFFFFFFFFFFFFFFFF0F0F1FFB8B8BDFFB2B3B7FF8989 8CFF35332CFF3D3D36FF8F908FDA50505114000000000000000000000000DEA8 84FCD3875217CBCCD1C5FFFFFFFFFFFFFFFFFFFFFFFFD9DADDFF7F7E81FF2522 1BFF3E3C3AFF84848CFFA7A7AAFF90908FC2939393070000000000000000F0A3 6D17D3865117CBCDD2C5FFFFFFFFF7F7F7FFF4F4F4FFFBFBFBFF9E9E9BFF7875 72FFAFAFB5FF72737CFF8B8B90FFC7C7C7FFBFBFBE9D5858580000000000D1A4 87FCD18A5917CED2D8C5FDFFFFFFF6F9FBFFF5FAFDFFF8FBFCFFF7FCFFFFD7D6 DBFFECEDF0FFA2A2A9FFAAAAB0FFC0C0C2FFD0D0D1F0B1B1B13CFF7315FFFF75 04FFE3996717DDA075FEE9E6E8C5DC9869FEC9C4C5C5DE996CFEAFACACC5CF92 69FEE2E0E3F9E6E6E7FFBFBFC3FFB2B2B7FFC2C2C4F0CBCBCB57FFA263FFFFC5 7CFF000000000000000000000000000000000000000000000000000000000000 0000DEDFE239F0EDF0F7E2E2E3FFBABAC0FFB6B6BAF0C3C3C657000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000E4E2E459F3F2F3F2DDDDDEF2B9B9BDE4BBBBBF52000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000D2D0D23EE7E7E85ED0D0D358BABABF1E } OnClick = btnCutTuImageClick end object btnRedEye: TSpeedButton AnchorSideLeft.Control = btnCutTuImage AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxHightlight Left = 53 Height = 24 Hint = 'Red Eyes' Top = 0 Width = 24 BorderSpacing.Left = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000484D503ACED2D67CC5C7C7A3AAAA AAB28C8C8CAF6D6D6D995C5C5C5B000000048D8D8D0000000000000000000000 000000000000000000064D4E4E7E817C8DED493D98FF3F3279FFA29189FEF1F3 F4FFECECECFFD8D8D8FFA7A7A7FF8D8D8DEF4E4E4E3B1A1A1A00000000004A4A 4A00343434316C6D6DEDC5C6C9FF5143A6FE4E43C0FF3F36A1FF5343A2FFA194 8FFFECEEEEFFE6E6E6FFD2D2D2FF9B9B9BFE999999FF00000002666666003232 3227727272FFD1D2D2FE968ED4FF7D74D0FF241E5BFF292369FF736ACDFF4D40 A1FFF0F2F4FFEAEAEAFFC0C0C0FF8C8C8CFF8B8B8B7000000000000000007878 78D5959595FEEEEEF0FF928BD8FF4137A6FF3C3299FF221D58FF5F55C6FF6459 C1FFE0E0E2FFD0D0D0FF7E7E7EFF969696BA0000000000000000000000008A8A 8ABF6E6E6EFFDEDFDFFF9D97DCFF8C85D6FF958ED9FF4E43C0FF7E76D1FF564A C1FFCDCED0FF727272FE929292E0000000084444440500000000000000000000 0009848484DE646464FFC8C4C5FFB6B1E3FFB0ABE2FF9F98DDFFAFAAE1FF6E60 66FF6A6A6AFE8B8B8BE82929291300000002464646330000000000000000FFFF FF000000000C808080CD575757FF6A6465FE5A50C1FF4A3FBAFF585656FE6C6C 6CFF858586D11212121000000000484848740000000000000000131313014141 410B000000000000000077777774727273F06A6A6AFF6C6C6EFF777777F37E7E 7E7700000000000000004F4F4F7A686868380000000000000000000000004242 42500000000A000000000000000000000000313131203C3C3C23000000000000 0000000000003D3D3D7888888891000000000202020000000000000000000000 0000656565AF0000001F00000000000000000000000000000000000000000000 000C444444AC8F8F8FCC000000007E7E7E000000000000000000000000000000 00006565650A767676E9393939990D0D0D43010101250D0D0D413434348F5B5B 5BFB919191CD0000000100000000000000000000000000000000000000000000 0000000000003D3D3D08878787B86F6F6FFF575757FF616161FF7D7D7DFF8E8E 8E8D00000000FFFFFF0000000000000000000000000000000000000000000000 000000000000FFFFFF00000000009595952399999964A0A0A0587272720C0000 0000E2E2E2000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnRedEyeClick end end object gboxPaint: TGroupBox Left = 473 Height = 47 Top = 1 Width = 187 Align = alLeft AutoSize = True BorderSpacing.Left = 5 BorderSpacing.Bottom = 1 Caption = 'Paint' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 2 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 2 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ControlsPerLine = 1 ClientHeight = 27 ClientWidth = 183 TabOrder = 1 Visible = False object ColorBoxPaint: TColorBox AnchorSideLeft.Control = ComboBoxWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint AnchorSideTop.Side = asrCenter Left = 140 Height = 22 Top = 2 Width = 39 DefaultColorColor = clRed NoneColorColor = clRed Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] ItemHeight = 16 TabOrder = 0 end object btnUndo: TSpeedButton AnchorSideLeft.Control = gboxPaint AnchorSideTop.Control = gboxPaint AnchorSideTop.Side = asrCenter Left = 4 Height = 20 Hint = 'Undo' Top = 3 Width = 20 AutoSize = True Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002EBC D70119A7D50217A2DC010080D500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002EC0D1012ABB D20424B3D30C20ABD70B1895C90C056DA302FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0016A2D601FFFFFF00FFFFFF0025B5D30126B5D30423B2 D40A1EACD51A17A5D620119BD71D057CA573007FA66AFFFFFF00FFFFFF00FFFF FF00FFFFFF000994D901109CD701FFFFFF001DA5CE011C98B8040F8FB1131DA3 CA1617A4D62A119ED7340B96D83C0787C44902779EEB007FA633FFFFFF00FFFF FF00FFFFFF00048DDA010994D9061484AE051A7E9101007FA611007FA6980180 A7EB088FB9920B96D849058FD9540089DA5F046B97A8007FA692FFFFFF00FFFF FF00FFFFFF000381C7010484C90516758D03FFFFFF00FFFFFF00FFFFFF00007F A61B0485ADEF088ED06C0089DA6F0089DA7B036BA2AB01789FCC007FA63C007F A6B4007FA6FC007FA6FF017FA6FF007FA6FF007FA6FF007FA6E9007FA62AFFFF FF000180A89F0688C1B8048BDB890B8FDC9F0882C7B802698EF90585A9EF169C C2F8179FC4FD26AACAFD28B2D0FE20B9D5FE18B2D1FC0382A9E8007FA62AFFFF FF000181A89C078BC5CA1A96DEAE39A8E4C5349DD6DF03688CFA0D90B0F440BB E3FF50C8E6FF4ECFE7FF2EC9E1FF11BAD7FF0E89ABF4007FA651FFFFFF00007F A615067EA5F30384CAD633A7E3E348B4E8F33693C3FE03769CD40D91B1F45DCB EBFF5CCFEBFF56CEE9FF16B3DAFF119DC3FE0D7895F6027DA3B1037BA0A60867 85F7056599F91F9CE0FA56C1ECFD55C1ECFF3388AEFE007EA5950D91B0F464D1 EEFF63D3EFFF63D4EFFF55CDEBFF21AADEFF0E9CD5FF1496C8FE1990C5FE0688 CDFF27A2E2FF5CCAEEFF5FCCEFFF5BC6EAFF12789EF6007FA6370D91B0F369D9 F3FF69D9F3FF68DCF3FF66DBF3FF65DAF3FF5FCCEFFF3EB7E8FF3AB7E8FF54C8 EEFF66D9F3FF65D9F3FF68DAF3FF35A2C9F9017FA689FFFFFF000D91B0F367D9 F1FF27ACC5F948C5DDFA67DFF5FF67E5F7FF67E5F7FF67E5F7FF67E5F7FF67E5 F7FF67E5F7FF69E0F5FF3FB9E0F90383AACD007FA606FFFFFF000C8AADDC1D9C B9F5007FA6550283A86C24A9C4F754D3EBFF64DEF3FF71ECF9FF72ECF9FF69DF F4FF59D1EEFF21A3C8F50180A87E007FA604FFFFFF00FFFFFF00007FA61B007F A621FFFFFF00FFFFFF00007FA6220283A9811092B4C035A9C3EF44ADC8F31993 B7C60181A788007FA62BFFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = btnUndoClick end object ComboBoxPaint: TComboBox AnchorSideLeft.Control = btnUndo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint AnchorSideTop.Side = asrCenter Left = 26 Height = 23 Top = 2 Width = 63 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Pen' 'Rect' 'Ellipse' ) Style = csDropDownList TabOrder = 1 Text = 'Pen' end object ComboBoxWidth: TComboBox AnchorSideLeft.Control = ComboBoxPaint AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint AnchorSideTop.Side = asrCenter Left = 91 Height = 23 Top = 2 Width = 47 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( '1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' '12' '13' '14' '15' '16' '17' '18' '19' '20' '21' '22' '23' '24' '25' ) TabOrder = 2 Text = '1' end end object btnHightlight: TSpeedButton Left = 398 Height = 46 Hint = 'Highlight' Top = 1 Width = 32 Align = alLeft BorderSpacing.Left = 6 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 200000000000000900006400000064000000000000000000000000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A00AEAE AEFF949494FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A00AEAEAEFF949494FF00769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00AEAEAEFF949494FF00769A0000769A00AEAE AEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFAEAEAEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFDCC299FFDCC299FFAEAEAEFF949494FF00769A0000769A000076 9A00DCC299FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00C4C4C4FFBBBBBBFFBBBBBBFF929292FFA2A4A5FFADAD ADFF9B9B9BFF9C9C9CFFA5A5A5FFAFAFAFFFB8B8B8FFBBBBBBFFBBBBBBFFBBBB BBFFBBBBBBFFC4C4C4FF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFBFBFBFF303537FFA6B3 B8FFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFE6E6E6FFE1E1E1FFE7E7E7FFF2F2 F2FFFBFBFBFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFC3C6C8FFADC9 D4FF678C98FFFAFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AA4 A9FFB0CBD5FF4793AAFFF4FAFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9EA EBFF488DA3FF354A51FF5AC4E5FFF9FCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A00AEAE AEFF949494FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFCBE3EAFF3FA1C0FF395760FF69CBE9FFFDFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00AEAEAEFF949494FF00769A0000769A00AEAE AEFF949494FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBCDBE4FF3793AFFF3E636FFF7BD1EDFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00AEAEAEFF949494FF00769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFACD2DEFF34768BFF467280FF8EDDF4FFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF98C7D5FF336C7EFF4A8A9DFF9EE4F9FFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85C0D2FF356474FF5097AEFFADEA FDFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72CDEAFF395E6AFF51A5 BFFFBBEEFDFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00C4C4C4FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBABBBBFF4CB1D0FF314F 58FF49A5C1FF98C4D1FF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A0011AE DFFF1D3840FF24A7D0FF00769A00DCC299FF00769A0000769A0000769A00AEAE AEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFAEAEAEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFD5C0 99FF51B7CDFF26393DFF49AEC5FF97AFB7FF949494FF00769A0000769A00AEAE AEFF949494FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A00AEAEAEFF949494FF00769A0000769A0000769A0000769A000076 9A0000769A0021B5E4FF1A2E33FF90BDCBFF86979DFF00769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0083B0BEFF424F53FF043D4FFF00769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00093542FF00769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A00 } OnClick = btnPaintHightlight end object gboxView: TGroupBox Left = 214 Height = 47 Top = 1 Width = 178 Align = alLeft BorderSpacing.Left = 5 BorderSpacing.Right = 6 BorderSpacing.Bottom = 1 Caption = 'View' ChildSizing.LeftRightSpacing = 2 ChildSizing.TopBottomSpacing = 2 ChildSizing.ControlsPerLine = 1 ClientHeight = 27 ClientWidth = 174 TabOrder = 2 object btn270: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 72 Height = 20 Top = -1 Width = 32 Action = actRotate270 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00AA555500842F4A00792B430070273E0070273E00792B 4300842F4A00AA555500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0095395500812D4800884258FFB58293FFD1ACB9FFD1ACB9FFB582 93FF884258FF812D480095395500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF008D314E009D586EFFCA9DADFFD6B1BFFFE2C4D0FFE2C4D0FFD6B1 BFFFCA9DADFF9D586EFF8C314E00FF808000FFFFFF00FFFFFF00FFFFFF00FFFF FF00A23C550094405900BF879900C99AAAFFBD7C91FFA04762FFA04762FFBD7C 91FFC99AAAFFBF889AFF94405AFF9C375600FFFFFF00FFFFFF00FFFFFF00FFFF FF00AA405500A75C7400BB849800B36E83008825420081213C0081213C008825 4200B46D84FFBC8497FFA75D75FF9F385A00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00AF608000B77C8F00983B57007C213B00FFFFFF00FFFFFF007B1E 3800973B57FFB87C90FFAB657CFFA4385B00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF009F3050008522450066192D0057102100570F2200741A 320097425BFFC28F9FFFB06D82FFAD3C5F00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF008000800080223E0078283F00B88A99FF5E1024FF731A 3300BD8596FFD1AAB7FFC08699FFB73F6500FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00B83D66009E325200A95E75FFD3AFBBFFDABBC5FF8A4056FFBA84 95FFD6B4BFFFD4B1BCFFB95B78FFC4456C00FFFFFF00FFFFFF00FFFFFF00FFFF FF00C94A7200BA4A6C00C690A1FFDABCC6FFDCBFC8FFDCC0C9FFDCC0C9FFDCBF C8FFDABCC6FFBD798FFFB83D6300FF808000FFFFFF00FFFFFF00FFFFFF00FFFF FF00CB487400C14E7300CD9BAAFFE0C7CFFFE0C7CFFFE1C8D0FFDABCC6FFCDA0 AEFFB05A75FFB13A5E00BD426800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00CA467200BC3F6700BF7089FFE2CAD2FFE8D6DCFFA23254FFA735 5800B13B5D0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00C6557100C0416900BA4D6E00D7AFBCFFB33B60FFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6466E00C4446C00C4446C00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } ShowCaption = False end object btn90: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 104 Height = 20 Top = -1 Width = 32 Action = actRotate90 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00AA555500842F4A00792B430070273E0070273E00792B 4300842F4A00AA555500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0095395500812D4800884258FFB58293FFD1ACB9FFD1ACB9FFB582 93FF884258FF812D480095395500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FF8080008C314E009D586EFFCA9DADFFD6B1BFFFE2C4D0FFE2C4D0FFD6B1 BFFFCA9DADFF9D586EFF8D314E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009C37560094405AFFBF889AFFC99AAAFFBD7C91FFA04762FFA04762FFBD7C 91FFC99AAAFFBF87990094405900A23C5500FFFFFF00FFFFFF00FFFFFF00FFFF FF009F385A00A75D75FFBC8497FFB46D84FF8825420081213C0081213C008825 4200B36E8300BB849800A75C7400AA405500FFFFFF00FFFFFF00FFFFFF00FFFF FF00A4385B00AB657CFFB87C90FF973B57FF7B1E3800FFFFFF00FFFFFF007C21 3B00983B5700B77C8F00AF608000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00AD3C5F00B06D82FFC28F9FFF97425BFF741A320057102200570F21006619 2D00852245009F305000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00B73F6500C08699FFD1AAB7FFBD8596FF731A33005E1024FFB88A99FF7828 3F0080223E0080008000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00C4456C00B95B78FFD4B1BCFFD6B4BFFFBA8495FF8A4056FFDABBC5FFD3AF BBFFA95E75FF9E325200B83D6600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FF808000B83D6300BD798FFFDABCC6FFDCBFC8FFDCC0C9FFDCC0C9FFDCBF C8FFDABCC6FFC690A1FFBA4A6C00C94A7200FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00BD426800B13A5E00B05A75FFCDA0AEFFDABCC6FFE1C8D0FFE0C7 CFFFE0C7CFFFCD9BAAFFC14E7300CC477200FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0080808000B13B5D00A7355800A23254FFE8D6DCFFE2CA D2FFBF7089FFBC3F6700CA467200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B33B60FFD7AFBCFFBA4D 6E00C0416900C6557100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C5446C00C4446C00C646 6E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } ShowCaption = False end object btnMirror: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 136 Height = 20 Top = -1 Width = 35 Action = actMirrorHorz Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 4 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000A4A4A402ACA6 A603AAAAAA02A5A5A501FFFFFF00000000000000000000000000F2813218F17D 2A6C00000000FFFF0000C8916E01CC915D02D3906403CC995D02ACA9A9C8ABA7 A7E4A9A5A5E4B0ADADE7D3D1D1F1E9E8E8F7F3F2F2EEDDCBCB02F2803020F17B 28FFF9C9A6FFF1DECFF6CF9462E4CF9462E4CF9462E4CF9361CCACA8A883C7C5 C5E4EDEDEDEAFEFCFAFEFCDAC2FFF8B98DFFF6A56BFFF38A40C9F282328DF288 3DFFF0741DFFFBDCC6FFF9F7F6F2F2EFEDE4E1C1A7E4CF936186ABA8A81DAEAA AAE1EAEAEAECFDECE0FFF7AA74FFF9C5A0FFFACFB1FFF2893E84F27F2FCFF078 22FFEF6F14FFF0751FFFFDEDE1FFF1EBE7EBD19A6BE2CF93612000000000AAA6 A695CCCACAE6FBFBFBFBFEFCFAFEF7F7F7F4C9C7C7EFA0A0A000F17C2A64F076 20FFF07823FFF8BA8EFFFDF8F5FEE3C8B2EACF9463990000000000000000A9A5 A52DB0ADADE4EBEBEBECEDEDEDECE8E8E8E4B4B0B0E9F1813318F17D2BEFF7B7 8AFFFEF6F0FFF7F5F4F8E8E1DDEAD29E74E4D095643000000000000000000000 0000A8A4A4A8D4D3D3EAEFEFEFEFEAEAEAE9A29D9DE400000000F17C2B0BF0DD CDF4F1EEECF4EEEAE7F2E4CEBEECD09667AC0000000000000000000000000000 0000A7A3A33FB1AEAEE5EEEEEEEFF2F2F2F1A29D9DE40000000000000000D29A 6DE0F2EFEDF5F2EEECF4D8AA86E7D1986A430000000000000000000000000000 0000B3999901A6A2A2BAD1D0D0E6F1F1F1F2A29D9DE30000000000000000D39D 70DFF6F4F2F6EDDED3F1D39B6EBDD59C71010000000000000000000000000000 000000000000A5A1A152B3B0B0E4E2E2E2E6A29D9DE30000000000000000D49F 73DFFAF8F7F9DFBA9BE9D49D7156000000000000000000000000000000000000 000000000000A8A1A104A49F9FC9D2D1D1E4A29D9DE20000000000000000D6A1 77DFF6EEE7F6D5A176CCD4A17405000000000000000000000000000000000000 00000000000000000000A39F9F65B6B3B3E4A29D9DE20000000000000000D7A4 7ADEE6C7AEECD6A3786800000000000000000000000000000000000000000000 00000000000000000000A49F9F0BA39E9ED5A29D9DE10000000000000000D8A7 7FDED8A881D7D8A57C0D00000000000000000000000000000000000000000000 0000000000000000000000000000A29D9D78A29D9DE10000000000000000D9AB 84DDD9AA837B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000A19D9D16A29D9DC00000000000000000DBAE 88BFDBAD86180000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnZoomIn: TSpeedButton Left = 4 Height = 20 Top = -1 Width = 28 Action = actZoomIn Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3E171B1B1B00000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000848484439B9B9BEF8C8C8C6C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000F0F0F0076767654939393F6B4B4B4FFC7C7C7AF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000222222006767676A858585FBBEBEBDFFCBCBCB9C65656506000000000000 0000000000000000000000000000000000000000000000000000000000002121 21015B5B5B7E7C7C7CFDCAC9C8FEC8C8C8834F4F4F0200000000000000000000 0000000000001716161B6F6D6D5A7F7D7C726F6D6C5A1716161B1D1D1D035252 528B7E7E7DFED2D2D0FAC0C0C0683A3A3A000000000000000000000000000000 00067A79787DBAB1AAECD2BA9BDAD9BE92CAD4BC9AD9BDB2A8EC717070C08787 86FFD7D6D5F3B4B4B44E1D1D1D00000000000000000000000000000000017877 7788BCA490EBD6A54999F3D35F71F9E07869F4D5616FDAAB4994C2A68DE7BEBD BCF2A2A2A23900000000000000000000000000000000000000004342422DA392 8AF5C8903BA4F3D25973FAE38265A16F30FFFAE38364F5D55D71CF9B3E9CA692 85F24443432D00000000000000000000000000000000000000007171717CA57C 5DE5DFB0458DF6D76474F9E1816CA25718FFF8DF806CF6D86672E3B74788A97C 57DD7473737C000000000000000000000000000000000000000078787898A36F 49DEDFAF4992A05215FFC86619FFA75616FF7B4011FF63340EFFE2B54B8EA56D 3FD77C7C7C9800000000000000000000000000000000000000007A7A7A809667 4BEED29E46A3ECC86294F8E088A89E652DFFF8E085A9EECB6592D5A2449C9764 42E87C7C7C8000000000000000000000000000000000000000006C6C6B31957E 73FAAD7341DCE5C480C8F5E1A5D39B713DFFF5E0A0CEE8C781BFB37C48D49478 69F96D6D6D310000000000000000000000000000000000000000000000019D9C 9B97956D59FBB07B50EEDFC08FF0E6C88CECE0C28FEBB58256E990644DFA9997 9797000000010000000000000000000000000000000000000000000000005D5C 5C05B5B4B391A58F84FB956B53FD96694AFC93684FFC9E8579FBADACAB915B5A 5A05000000000000000000000000000000000000000000000000000000000000 000005050500B4B3B224CCCACA6FCECDCC88CBCAC96FB3B2B224000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnZoomOut: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 34 Height = 20 Top = -1 Width = 28 Action = actZoomOut Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3E171B1B1B00000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000848484439B9B9BEF8C8C8C6C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000F0F0F0076767654939393F6B4B4B4FFC7C7C7AF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000222222006767676A858585FBBEBEBDFFCBCBCB9C65656506000000000000 0000000000000000000000000000000000000000000000000000000000002121 21015B5B5B7E7C7C7CFDCAC9C8FEC8C8C8834F4F4F0200000000000000000000 0000000000001716161B6F6D6D5A7F7D7C726F6D6C5A1716161B1D1D1D035252 528B7E7E7DFED2D2D0FAC0C0C0683A3A3A000000000000000000000000000000 00067A79787DBAB1AAECD2BA9BDAD9BE92CAD4BC9AD9BDB2A8EC717070C08787 86FFD7D6D5F3B4B4B44E1D1D1D00000000000000000000000000000000017877 7788BCA490EBD6A54999F3D35F71F9E07463F4D5616FDAAB4994C2A68DE7BEBD BCF2A2A2A23900000000000000000000000000000000000000004342422DA392 8AF5C8903BA4F3D25973FAE47E60FCED9355FAE5805FF5D55D71CF9B3E9CA692 85F24443432D00000000000000000000000000000000000000007171717CA57C 5DE5DFB0458DF0CD5E7AF6D7756FF4DA7E6AEFD5756EEBCB6078E3B74788A97C 57DD7473737C000000000000000000000000000000000000000078787898A36F 49DEDEAE4892A55A1CFCCC7022FEAF6523FE864E1CFE693B13FEDEB14A91A56D 3FD77C7C7C9800000000000000000000000000000000000000007A7A7A809667 4BEED29E46A3ECC86193F8E185A5F9E076A6F8E183A6EECB6491D5A2449C9764 42E87C7C7C8000000000000000000000000000000000000000006C6C6B31957E 73FAAD7341DCE5C480C8F5E1A4D2F4DB81C3F5E19FCCE8C781BFB37C48D49478 69F96D6D6D310000000000000000000000000000000000000000000000019D9C 9B97956D59FBB07B50EEDFC08FF0E6C88BEBE0C28FEBB58256E990644DFA9997 9797000000010000000000000000000000000000000000000000000000005D5C 5C05B5B4B391A58F84FB956B53FD96694AFC93684FFC9E8579FBADACAB915B5A 5A05000000000000000000000000000000000000000000000000000000000000 000005050500B4B3B224CCCACA6FCECDCC88CBCAC96FB3B2B224000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnGifMove: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 4 Height = 20 Top = -1 Width = 32 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = '||' OnClick = btnGifMoveClick end object btnGifToBmp: TSpeedButton Left = 139 Height = 21 Top = 0 Width = 32 Caption = 'S' OnClick = btnGifToBmpClick end object btnNextGifFrame: TSpeedButton Left = 96 Height = 22 Top = -1 Width = 31 Caption = '||>' OnClick = btnNextGifFrameClick end object btnPrevGifFrame: TSpeedButton Left = 48 Height = 22 Top = -1 Width = 28 Caption = '<||' OnClick = btnPrevGifFrameClick end end object btnResize: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 444 Height = 46 Hint = 'Resize' Top = 1 Width = 28 Align = alRight AutoSize = True BorderSpacing.Left = 5 BorderSpacing.Right = 3 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000001D00000054000000540000005400000054000000540000 0054000000540000005400000054000000540000003800000001000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFDFDFFE8E8E8FFAAABABEF23232355000000010000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF9F9F9FFFAFAFAFFFAF1EBFFFCFCFCFFFCFC FCFFFDFDFDFFFEFEFEFFFCFCFCFFE4E4E4FFEEEFEFFFA2A3A3EF1C1C1C570000 0001000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFFAF7F4FFF1863BFFFBF5F0FFFCFC FCFFFDFDFDFFFEFEFEFFFCFCFCFFE4E4E4FFFDFDFDFFEEEFEFFF999A9AEF1919 1957000000020000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFF7D3BAFFF18438FFF8CFB2FFFCFC FCFFFDFDFDFFFEFEFEFFFDFDFDFFE1E1E1FFFEFEFEFFFDFDFDFFEEEFEFFF999A 9AF01C1C1C590000000200000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFF9F9F9FFF3A46DFFFBFBFBFFFCFC FCFFFDFDFDFFFDFDFDFFFEFEFEFFDADBDBFFFEFEFEFFFEFEFEFFFDFDFDFFEEEF EFFFA2A3A2F02121215A00000002000000000000000000000000000000000000 00000000000000000049FBFBFBFFF7F7F7FFF9F9F9FFF3A771FFFBFBFBFFFCFC FCFFFCFCFCFFFDFDFDFFFEFEFEFFD1D2D2FFFEFEFEFFFEFEFEFFFEFEFEFFFDFD FDFFEEEFEFFFA9AAAAF000000038000000000000000000000000000000000000 00000000000000000049FBFBFBFFF7F7F6FFF8F8F8FFF4AD7BFFFAFAFAFFFBFB FBFFFCFCFCFFFDFDFDFFFDFDFDFFEDEEEDFFD0D0D0FFD9D9D9FFE0E0E0FFE4E4 E4FFE4E4E4FFE8E8E8FF0101014E000000000000000000000000000000000000 00000000000000000049FBFBFBFFF6F6F6FFF7F7F7FFF4B384FFFAFAFAFFFBFB FBFFFBFBFBFFFCFCFCFFFDFDFDFFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFD FDFFFCFCFCFFFDFDFDFF0000004E000000000000000000000000000000000000 00000000000000000049FBFBFBFFF5F5F5FFF6F6F6FFF5B98EFFFAFAFAFFFAFA FAFFFBFBFBFFFCFCFCFFFCFCFCFFFDFDFDFFFDFDFDFFFDFDFDFFFEFEFEFFFEFE FEFFFEFEFEFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF4F4F4FFF5F5F5FFF5BE97FFF8F8F8FFFAFA FAFFFAFAFAFFFBFBFBFFFBFBFBFFFCFCFCFFFCFCFCFFFDFDFDFFFDFDFDFFFDFD FDFFFDFDFDFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF3F3F2FFF4F4F4FFF6C4A0FFF7F7F7FFF9F9 F9FFFAFAFAFFFAFAFAFFFBFBFBFFFBFBFBFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF2F2F1FFF3F3F2FFF6CAA9FFF6F6F6FFF7F7 F7FFF8F8F8FFFAFAFAFFFAFAFAFFFAFAFAFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF0F0F0FFF2F2F1FFF6CFB2FFF4F4F4FFF6F6 F6FFF7F7F7FFF8F8F8FFF9F9F9FFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFA FAFFFAFAFAFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFB8B8B7FF9B9B9BFF9D938BFF9C9C9CFFB8B8 B8FFF5F5F5FFF6F6F6FFF7F7F7FFF8F8F8FFF9F9F9FFF9F9F9FFFAFAFAFFFAFA FAFFFAFAFAFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA1A1A1FFEFEFEEFFF0F0F0FFF2F2F1FF9F9F 9FFFF4F4F3FFF5F5F4FFF6F6F5FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF6CD B0FFF8F3F0FFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA0A0A0FFEEEEEDFFEFEFEEFFF0F0EFFFA096 8EFFF6D1B6FFF5CBACFFF5C4A1FFF4BE96FFF4B78CFFF3B081FFF2A976FFF083 35FFF1883EFFFDF6F0FF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA0A09FFFECECEBFFEDEDECFFEEEEEEFF9E9E 9EFFF0F0F0FFF1F1F1FFF2F2F1FFF3F3F2FFF3F3F3FFF4F4F3FFF4F4F4FFF2CD B3FFF4F1EFFFFDFDFDFF0000004E000000000000000000000000000000000000 0000000000000000004BFBFBFBFFBBBBBAFFA3A3A3FFA4A4A3FFA4A4A4FFBBBB BBFFEFEFEEFFEFEFEFFFF0F0EFFFF1F1F0FFF1F1F1FFF2F2F1FFF2F2F2FFF2F2 F2FFF2F2F2FFFDFDFDFF0000004E000000000000000000000000000000000000 0000000000000000004BF0F0F0FEF4F4F4FEF4F4F4FEF4F4F4FEF3F3F3FEF3F3 F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3 F2FEF2F2F2FEF4F4F4FE0000004E000000000000000000000000000000000000 000000000000000000160000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000003E00000017000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnResizeClick end object btnReload: TSpeedButton Left = 1 Height = 46 Top = 1 Width = 48 Action = actReload Align = alLeft BorderSpacing.Bottom = 2 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 end object btnPaint: TSpeedButton Left = 473 Height = 46 Hint = 'Paint' Top = 1 Width = 32 Align = alLeft BorderSpacing.Left = 5 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000082E4D5933284A5765183B467C092027690105074D000000480000 004600000043000000410000003B000000340000002D00000027000000200000 001B00000015000000100000000A00000004000000010000000000000000689D B416689DB4AF679CB3FF5C8FA3FF4D8598FF2C6578FF134555D9134555370000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000689DB408689DB47378A7BCF88EBBCBFF7FBBCDFF5794A7FF205263D70000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000689DB43E6EA1B6F1ADCCD7FFA9CDDAFF6992A1FF1035 414A000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000689DB43082AEC1E9C4D8E0FF85949BFF344A 53A9555555030000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000689DB413698E9FCA717A7EFFA2A5 A6E48F8F8F8B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000078899103A2A5A6C2B0B0 B0C3A9A9A9E65555558F00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AFAFAF369898 98EA545454FF202020FB1D1D1DA0000000050000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000002A2A 2A99151515FF080808FF0E0E0EFF1C1C1CB20000000300000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000404 0426030303F0141414FF161616FF161616FF191919A800000002000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000A1191919FF252525FF222222FF1A1A1AFF1313138F000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000220D0D0DE62E2E2EFF333333FF292929FF171717ED080808370000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000084242424FF424242FF3A3A3AFF2C2C2CFF111111BA0000 0001000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000006020202BB333333FF4A4A4AFF3B3B3BFF292929FE0B0B 0B71000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000111D1D1DCA424242FF414141FF353535FF1D1D 1DDE0404041B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000015151520555555DC4A4A4AFF343434FF3333 33FF212121AB0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000020202031606060E7424242FF2626 26FF323232F91515155600000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000303030456B6B6BEF3434 34FF191919FF232323D300000008000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000003D3D3D5B7878 78F5202020FF414141FF6B6B6BB8000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000004B4B 4B73969696FC6B6B6BFF030303EB000000320000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000737373A37B7B7BFC060606FF0707079D0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000006A6A6AA1909090DE2F2F2F670000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnPaintHightlight end object btnFullScreen: TSpeedButton AnchorSideRight.Control = btnResize Left = 441 Height = 45 Hint = 'Full Screen' Top = 1 Width = 28 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Bottom = 3 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF4343CBFF6262D4FFA0A0E5FFDEDEF6FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDE F6FFA0A0E5FF6262D4FF4343CBFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF6262D4FF0505BAFF0505BAFF4B4BCDFFF3F3FCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FCFF4B4B CDFF0505BAFF0505BAFF6262D4FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFA0A0E5FF0505BAFF0505BAFF8787DEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787 DEFF0505BAFF0505BAFFA0A0E5FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFDEDEF6FF4B4BCDFF8787DEFF0505BAFF8A8ADEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8ADEFF0505 BAFF8787DEFF4B4BCDFFDEDEF6FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFF3F3FCFFFFFFFFFF8A8ADEFF9C9CE4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9CE4FF8A8A DEFFFFFFFFFFF3F3FCFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFF3F3FCFFFFFFFFFF8A8ADEFF9C9CE4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9CE4FF8A8A DEFFFFFFFFFFF3F3FCFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFDEDEF6FF4B4BCDFF8787DEFF0505BAFF8A8ADEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8ADEFF0505 BAFF8787DEFF4B4BCDFFDEDEF6FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFA0A0E5FF0505BAFF0505BAFF8787DEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787 DEFF0505BAFF0505BAFFA0A0E5FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF6262D4FF0505BAFF0505BAFF4B4BCDFFF3F3FCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FCFF4B4B CDFF0505BAFF0505BAFF6262D4FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF4343CBFF6262D4FFA0A0E5FFDEDEF6FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDE F6FFA0A0E5FF6262D4FF4343CBFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000DCDBDBFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CF CFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CF CFFFD1CFCFFFD1CFCFFFD1CFCFFFDCDBDBFF0000000000000000000000000000 0000E1E0E0FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5 D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5 D5FFD7D5D5FFD7D5D5FFD7D5D5FFE1E0E0FF0000000000000000000000000000 0000E5E4E4FFCAC9C9FFCAC9C9FFDCDADAFFDCDADAFFDCDADAFFDCDADAFFDCDA DAFFDCDADAFFDCDADAFFDCDADAFFCAC9C9FFCAC9C9FFDCDADAFFCAC9C9FFCAC9 C9FFDCDADAFFCAC9C9FFCAC9C9FFE5E4E4FF0000000000000000000000000000 0000E9E8E8FFEEEEEEFFEEEEEEFFE2E0E0FFE2E0E0FFE2E0E0FFE2E0E0FFE2E0 E0FFE2E0E0FFE2E0E0FFE2E0E0FFEEEEEEFFEEEEEEFFE2E0E0FFEEEEEEFFEEEE EEFFE2E0E0FFEEEEEEFFEEEEEEFFE9E8E8FF0000000000000000000000000000 0000F6F6F6FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4 F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4 F4FFF5F4F4FFF5F4F4FFF5F4F4FFF6F6F6FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnFullScreenClick end object gboxSlideShow: TGroupBox AnchorSideRight.Control = btnFullScreen Left = 326 Height = 48 Top = 1 Width = 140 Align = alRight AutoSize = True BorderSpacing.Right = 6 Caption = 'Slide Show' ChildSizing.LeftRightSpacing = 6 ClientHeight = 28 ClientWidth = 136 TabOrder = 3 Visible = False object seTimeShow: TSpinEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxSlideShow AnchorSideRight.Control = gboxSlideShow AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 87 Height = 23 Top = 0 Width = 43 Anchors = [akTop, akRight] BorderSpacing.Right = 4 BorderSpacing.Bottom = 10 MinValue = 1 TabOrder = 0 Value = 1 end object cbSlideShow: TCheckBox AnchorSideTop.Control = seTimeShow AnchorSideTop.Side = asrCenter AnchorSideRight.Control = seTimeShow AnchorSideBottom.Side = asrBottom Left = 6 Height = 19 Top = 2 Width = 77 Anchors = [akTop, akRight] BorderSpacing.Top = 10 BorderSpacing.Right = 4 Caption = 'Slide Show' TabOrder = 1 end end object btnPrev: TSpeedButton Left = 49 Height = 48 Top = 1 Width = 32 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 end object btnNext: TSpeedButton Left = 81 Height = 48 Top = 1 Width = 32 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 end object btnCopyFile: TSpeedButton Left = 113 Height = 48 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 end object btnMoveFile: TSpeedButton Left = 145 Height = 48 Top = 1 Width = 32 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 end object btnDeleteFile: TSpeedButton Left = 177 Height = 48 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 end end end object Splitter: TSplitter Left = 170 Height = 435 Top = 0 Width = 9 AutoSnap = False MinSize = 160 OnChangeBounds = SplitterChangeBounds Visible = False end object pnlPreview: TPanel Left = 0 Height = 435 Top = 0 Width = 170 Align = alLeft BevelOuter = bvNone ClientHeight = 435 ClientWidth = 170 TabOrder = 5 Visible = False object pnlEditFile: TPanel Left = 0 Height = 30 Top = 0 Width = 170 Align = alTop Alignment = taLeftJustify ClientHeight = 30 ClientWidth = 170 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 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 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 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 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 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 end end object DrawPreview: TDrawGrid Left = 0 Height = 405 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 TitleFont.Style = [fsItalic] TitleStyle = tsNative OnDrawCell = DrawPreviewDrawCell 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 Caption = 'Print...' Enabled = False ShortCut = 16464 end object miReload: TMenuItem Action = actReload 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 end object miView: TMenuItem Caption = '&View' object miPreview: TMenuItem Action = actPreview end object miDiv4: TMenuItem Caption = '-' end object miText: TMenuItem Action = actShowAsText RadioItem = True end object miBin: TMenuItem Action = actShowAsBin RadioItem = True end object miHex: TMenuItem Action = actShowAsHex RadioItem = True end object miDec: TMenuItem Action = actShowAsDec RadioItem = True end object miWrapText: TMenuItem Action = actShowAsWrapText RadioItem = True end object miLookBook: TMenuItem Action = actShowAsBook RadioItem = True end object miDiv2: TMenuItem Caption = '-' end object miGraphics: TMenuItem Action = actShowGraphics RadioItem = True end object miDiv1: TMenuItem Caption = '-' end object miPlugins: TMenuItem Action = actShowPlugins RadioItem = True end 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 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 Caption = 'Select All' end end object SavePictureDialog: TSavePictureDialog left = 304 top = 64 end object TimerViewer: TTimer Enabled = False Interval = 10 OnTimer = TimerViewerTimer left = 224 top = 64 end object actionList: TActionList left = 384 top = 64 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' OnExecute = actExecute end object actLoadNextFile: TAction Category = 'File' Caption = '&Next' Hint = 'Load Next File' OnExecute = actExecute end object actLoadPrevFile: TAction Category = 'File' Caption = '&Previous' Hint = 'Load Previous File' OnExecute = actExecute end object actMoveFile: TAction Category = 'File' Caption = 'Move File' Hint = 'Move File' OnExecute = actExecute end object actCopyFile: TAction Category = 'File' Caption = 'Copy File' Hint = 'Copy File' OnExecute = actExecute end object actDeleteFile: TAction Category = 'File' Caption = 'Delete File' Hint = 'Delete File' 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' 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' OnExecute = actExecute end object actMirrorHorz: TAction Category = 'Image' Caption = 'Mirror Horizontally' Hint = 'Mirror' OnExecute = actExecute end object actPreview: TAction Category = 'View' Caption = 'Preview' OnExecute = actExecute end object actShowAsText: TAction Category = 'View' Caption = 'Show as &Text' OnExecute = actExecute end object actShowAsBin: TAction Category = 'View' Caption = 'Show as &Bin' OnExecute = actExecute end object actShowAsHex: TAction Category = 'View' Caption = 'Show as &Hex' 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' OnExecute = actExecute end object actZoomOut: TAction Category = 'Image' Caption = 'Zoom Out' OnExecute = actExecute end object actFullscreen: TAction Category = 'Image' Caption = 'Full Screen' 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' OnExecute = actExecute end object actShowAsWrapText: TAction Category = 'View' Caption = 'Show as &Wrap text' OnExecute = actExecute end object actShowAsBook: TAction Category = 'View' Caption = 'Show as B&ook' OnExecute = actExecute end object actShowGraphics: TAction Category = 'View' Caption = 'Graphics' OnExecute = actExecute end object actShowPlugins: TAction Category = 'View' Caption = 'Plugins' 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 actChangeEncoding: TAction Caption = 'Change encoding' OnExecute = actExecute end end object TimerScreenshot: TTimer Enabled = False OnTimer = TimerScreenshotTimer left = 196 top = 165 end end doublecmd-0.9.8/src/ftweakplugin.pas0000644000175000001440000003231013367401147016527 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; 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]:= 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 FWCXPlugins := nil; iPrevIndex := -1; inherited; 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-0.9.8/src/ftweakplugin.lrj0000644000175000001440000001123713367401147016540 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-0.9.8/src/ftweakplugin.lfm0000644000175000001440000004705113367401147016532 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 = '1.8.4.0' object nbTweakAll: TNotebook Left = 0 Height = 664 Top = 0 Width = 533 PageIndex = 0 Align = alClient 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 = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 648 ClientWidth = 517 TabOrder = 0 object lblFlagsValue: TLabel AnchorSideLeft.Control = lblFlags AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblFlags AnchorSideTop.Side = asrBottom Left = 21 Height = 1 Top = 86 Width = 1 ParentColor = False end object lblPlugin: TLabel AnchorSideLeft.Control = pnlTweak AnchorSideTop.Control = pnlTweak Left = 6 Height = 15 Top = 12 Width = 37 BorderSpacing.Top = 12 Caption = '&Plugin:' ParentColor = False end object lblExtension: TLabel AnchorSideLeft.Control = lblPlugin AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 43 Width = 53 BorderSpacing.Top = 12 Caption = '&Extension:' FocusControl = cbExt ParentColor = False end object lblFlags: TLabel AnchorSideLeft.Control = lblExtension AnchorSideTop.Control = pnlPackerExtsButtons AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 71 Width = 30 BorderSpacing.Top = 8 Caption = 'Flags:' ParentColor = False end object pnlPackerExtsButtons: TPanel AnchorSideLeft.Control = lblExtension AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExtension AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTweak AnchorSideRight.Side = asrBottom Left = 71 Height = 25 Top = 38 Width = 440 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 25 ClientWidth = 440 TabOrder = 0 object cbExt: TComboBox Left = 0 Height = 23 Top = 0 Width = 129 Constraints.MinWidth = 80 ItemHeight = 15 OnChange = cbExtChange Style = csDropDownList TabOrder = 0 end object btnRemove: TButton Left = 129 Height = 25 Top = 0 Width = 104 AutoSize = True Caption = '&Remove' Constraints.MinWidth = 80 OnClick = btnRemoveClick TabOrder = 1 end object btnAdd: TButton Left = 233 Height = 25 Top = 0 Width = 104 AutoSize = True Caption = 'A&dd new' Constraints.MinWidth = 80 OnClick = btnAddClick TabOrder = 2 end object btnChange: TButton Left = 337 Height = 25 Top = 0 Width = 103 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 = 71 Height = 221 Top = 71 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 = lblPlugin AnchorSideTop.Side = asrCenter 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] 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 = 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 = 652 ClientWidth = 521 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.Side = asrBottom Left = 10 Height = 23 Top = 81 Width = 493 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 1 end object edtDetectStr: TEdit AnchorSideTop.Control = lblDetectStr AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 133 Width = 493 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 2 end object edtDescription: TEdit AnchorSideTop.Control = lblDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 185 Width = 493 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-0.9.8/src/ftreeviewmenu.pas0000644000175000001440000014665513123614001016717 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Menu offered to user via a Tree View look where user might type sequence of letters 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., 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, //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 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; 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; TreeViewMenuGenericRoutineAndVarHolder := TTreeViewMenuGenericRoutineAndVarHolder.Create; TreeViewMenuGenericRoutineAndVarHolder.BackgroundColor := gTVMBackgroundColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutColor := gTVMShortcutColor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextColor := gTVMNormalTextColor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextColor := gTVMSecondaryTextColor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextColor := gTVMFoundTextColor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableTextColor := gTVMUnselectableTextColor; TreeViewMenuGenericRoutineAndVarHolder.CursorColor := gTVMCursorColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutUnderCursor := gTVMShortcutUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextUnderCursor := gTVMNormalTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextUnderCursor := gTVMSecondaryTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextUnderCursor := gTVMFoundTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableUnderCursor := gTVMUnselectableUnderCursor; tvMainMenu.BackgroundColor := gTVMBackgroundColor; tvMainMenu.Color := gTVMBackgroundColor; 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.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; 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; end; { TfrmTreeViewMenu.SetContextMode } procedure TfrmTreeViewMenu.SetContextMode(WantedContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0); var pmiToSwitchTo: TMenuItem = nil; 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 Left := WantedPosX; Top := WantedPosY; if WantedHeight <> 0 then Height := WantedHeight; if (WantedWidth <> 0) and (WantedHeight <> 0) then begin bTargetFixedWidth := True; Width := WantedWidth; 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 UTF8Pos('&', sMenuCaption) = 0 then begin Result := sMenuCaption; end else begin Result := ''; iChar := 1; while iChar <= UTF8Length(sMenuCaption) do begin if copy(sMenuCaption, iChar, 1) <> '&' then Result := Result + copy(sMenuCaption, iChar, 1) else begin if iChar < UTF8Length(sMenuCaption) then begin if copy(sMenuCaption, iChar + 1, 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-0.9.8/src/ftreeviewmenu.lrt0000644000175000001440000000206412725676567016756 0ustar alexxusersTFRMTREEVIEWMENU.CAPTION=Tree View Menu TFRMTREEVIEWMENU.LBLSEARCHINGENTRY.CAPTION=Select your hot directory: TFRMTREEVIEWMENU.TBCANCELANDQUIT.HINT=Close Tree View Menu TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT=Configuration of Tree View Menu TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT=Configuration of Tree View Menu Colors TFRMTREEVIEWMENU.PMINOTCASESENSITIVE.CAPTION=Search is not case sensitive TFRMTREEVIEWMENU.PMICASESENSITIVE.CAPTION=Search is case sensitive TFRMTREEVIEWMENU.PMISHOWWHOLEBRANCHIFMATCH.CAPTION=If searched string is found in a branch name, show the whole branch even if elements don't match TFRMTREEVIEWMENU.PMINOTSHOWWHOLEBRANCHIFMATCH.CAPTION=Don't show the branch content "just" because the searched string is found in the branche name TFRMTREEVIEWMENU.PMIIGNOREACCENTS.CAPTION=Search ignore accents and ligatures TFRMTREEVIEWMENU.PMINOTIGNOREACCENTS.CAPTION=Search is strict regarding accents and ligatures TFRMTREEVIEWMENU.PMIFULLEXPAND.CAPTION=Full expand TFRMTREEVIEWMENU.PMIFULLCOLLAPSE.CAPTION=Full collapse doublecmd-0.9.8/src/ftreeviewmenu.lfm0000644000175000001440000015231012725676707016727 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.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 OnSelectionChanged = tvMainMenuSelectionChanged Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, 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-0.9.8/src/fsyncdirsperformdlg.pas0000644000175000001440000000125212546157411020116 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; 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-0.9.8/src/fsyncdirsperformdlg.lrt0000644000175000001440000000016412250542615020131 0ustar alexxusersTFRMSYNCDIRSPERFORMDLG.CAPTION=Synchronize TFRMSYNCDIRSPERFORMDLG.CHKCONFIRMOVERWRITES.CAPTION=Confirm overwrites doublecmd-0.9.8/src/fsyncdirsperformdlg.lfm0000644000175000001440000000627412546157411020122 0ustar alexxusersobject frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg Left = 234 Height = 200 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 = 121 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 = 133 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 = 158 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 chkDeleteRight: TCheckBox AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = edLeftPath AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 99 Width = 20 BorderSpacing.Top = 6 TabOrder = 4 end end doublecmd-0.9.8/src/fsyncdirsdlg.pas0000644000175000001440000013414313532467044016533 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Directories synchronization utility (specially for DC) Copyright (C) 2013 Anton Panferov (ast.a_s@mail.ru) Copyright (C) 2014-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 fSyncDirsDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, Menus, ActnList, LazUTF8Classes, uFileView, uFileSource, uFileSourceCopyOperation, uFile, uFileSourceOperation, uFileSourceOperationMessageBoxesUI, uFormCommands, uHotkeyManager, uClassesEx; const HotkeysCategory = 'Synchronize Directories'; type TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteRight, srsDoNothing); { TDrawGrid } TDrawGrid = class(Grids.TDrawGrid) protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; { TfrmSyncDirsDlg } TfrmSyncDirsDlg = class(TForm, IFormCommands) actSelectDeleteRight: TAction; actSelectCopyReverse: TAction; actSelectClear: TAction; actSelectCopyLeftToRight: TAction; actSelectCopyRightToLeft: TAction; actSelectCopyDefault: TAction; ActionList: TActionList; btnAbort: TBitBtn; btnSelDir1: TButton; btnSelDir2: TButton; btnCompare: TButton; btnSynchronize: TButton; btnClose: TButton; chkAsymmetric: TCheckBox; chkSubDirs: TCheckBox; chkByContent: TCheckBox; chkIgnoreDate: TCheckBox; chkOnlySelected: TCheckBox; cbExtFilter: TComboBox; HeaderDG: TDrawGrid; lblProgress: TLabel; MainDrawGrid: TDrawGrid; edPath1: TEdit; edPath2: TEdit; GroupBox1: TGroupBox; ImageList1: TImageList; Label1: TLabel; LeftPanel1: TPanel; LeftPanel2: TPanel; miSelectDeleteRight: TMenuItem; miSeparator2: TMenuItem; miSelectCopyReverse: TMenuItem; miSeparator1: TMenuItem; miSelectCopyLeftToRight: TMenuItem; miSelectCopyRightToLeft: TMenuItem; miSelectCopyDefault: TMenuItem; miSelectClear: TMenuItem; MenuItemCompare: TMenuItem; MenuItemViewRight: TMenuItem; MenuItemViewLeft: TMenuItem; pnlProgress: TPanel; pmGridMenu: TPopupMenu; ProgressBar: TProgressBar; sbCopyRight: TSpeedButton; sbEqual: TSpeedButton; sbNotEqual: TSpeedButton; sbCopyLeft: TSpeedButton; sbDuplicates: TSpeedButton; sbSingles: TSpeedButton; StatusBar1: TStatusBar; TopPanel: TPanel; procedure actExecute(Sender: TObject); procedure btnAbortClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnSelDir1Click(Sender: TObject); procedure btnCompareClick(Sender: TObject); procedure btnSynchronizeClick(Sender: TObject); 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); private FCommands: TFormCommands; FIniPropStorage: TIniPropStorageEx; private { private declarations } FCancel: Boolean; FScanning: Boolean; FFoundItems: TStringListUtf8; FVisibleItems: TStringListUtf8; FSortIndex: Integer; FSortDesc: Boolean; FNtfsShift: Boolean; FFileExists: TSyncRecState; FSelectedItems: TStringListUtf8; 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; 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); property SortIndex: Integer read FSortIndex write SetSortIndex; property Commands: TFormCommands read FCommands implements IFormCommands; public { public declarations } constructor Create(AOwner: TComponent; FileView1, FileView2: TFileView); reintroduce; destructor Destroy; override; published procedure cm_SelectClear(const {%H-}Params:array of string); procedure cm_SelectDeleteRight(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); end; resourcestring rsComparingPercent = 'Comparing... %d%% (ESC to cancel)'; rsLeftToRightCopy = 'Left to Right: Copy %d files, total size: %d bytes'; rsRightToLeftCopy = 'Right to Left: Copy %d files, total size: %d bytes'; 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, DCClassesUtf8, uFileSystemFileSource, uFileSourceOperationOptions, DCDateTimeUtils, uDCUtils, uFileSourceUtil, uFileSourceOperationTypes, uShowForm, uFileSourceDeleteOperation, uOSUtils, uLng, uMasks; {$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 FOwner: TfrmSyncDirsDlg; FDone: Boolean; 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.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 i, j: Integer; r: TFileSyncRec; begin with FOwner do for i := 0 to FFoundItems.Count - 1 do 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 if CompareFiles(r.FFileL.FullPath, r.FFileR.FullPath, r.FFileL.Size) then begin Inc(Fequal); 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; FDone := True; Synchronize(@ReapplyFilter); 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.btnAbortClick(Sender: TObject); begin if Assigned(FOperation) then FOperation.Stop else begin pnlProgress.Hide; end; end; procedure TfrmSyncDirsDlg.btnSelDir1Click(Sender: TObject); var w: TEdit; begin w := nil; case TComponent(Sender).Tag of 0: w := edPath1; 1: w := edPath2; end; if w = nil then Exit; with TSelectDirectoryDialog.Create(Self) do try InitialDir := w.Text; if Execute then begin w.Text := FileName; case TComponent(Sender).Tag of 0: begin FFileSourceL := TFileSystemFileSource.GetFileSource; FAddressL := ''; end; 1: begin FFileSourceR := TFileSystemFileSource.GetFileSource; FAddressR := ''; end; end; end; finally Free end; end; procedure TfrmSyncDirsDlg.btnCompareClick(Sender: TObject); begin 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; 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(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; TFileSourceCopyOperation(FOperation).FileExistsOption := FileExistsOption; FOperation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try FOperation.Execute; Result := FOperation.Result = fsorFinished; FileExistsOption := TFileSourceCopyOperation(FOperation).FileExistsOption; finally FreeAndNil(FOperation); end; end; end; function DeleteFiles(FileSource: IFileSource; 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; FOperation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try FOperation.Execute; Result := FOperation.Result = fsorFinished; finally FreeAndNil(FOperation); end; end; var i, DeleteRightCount, CopyLeftCount, CopyRightCount: Integer; CopyLeftSize, CopyRightSize: Int64; fsr: TFileSyncRec; DeleteRight, CopyLeft, CopyRight: Boolean; DeleteRightFiles, CopyLeftFiles, CopyRightFiles: TFiles; Dest: string; begin 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; srsDeleteRight: begin Inc(DeleteRightCount); end; end; end; 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; chkDeleteRight.Enabled := DeleteRightCount > 0; chkDeleteRight.Checked := chkDeleteRight.Enabled; chkDeleteRight.Caption := Format(rsDeleteRight, [DeleteRightCount]); chkLeftToRight.Caption := Format(rsLeftToRightCopy, [CopyRightCount, CopyRightSize]); chkRightToLeft.Caption := Format(rsRightToLeftCopy, [CopyLeftCount, 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; DeleteRight := chkDeleteRight.Checked; i := 0; while i < FVisibleItems.Count do begin CopyLeftFiles := TFiles.Create(''); CopyRightFiles := 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); 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 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.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; gSyncDirsShowFilterCopyLeft := sbCopyLeft.Down; gSyncDirsShowFilterDuplicates := sbDuplicates.Down; gSyncDirsShowFilterSingles := sbSingles.Down; gSyncDirsFileMask := cbExtFilter.Text; 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; 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; lblProgress.Caption := rsOperWorking; { 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; sbCopyLeft.Down := gSyncDirsShowFilterCopyLeft; sbDuplicates.Down := gSyncDirsShowFilterDuplicates; sbSingles.Down := gSyncDirsShowFilterSingles; 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; 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; TextOut(aRect.Left + 2, aRect.Top + 2, FVisibleItems[aRow]); end else begin case r.FState of srsNotEq: Font.Color := clRed; srsCopyLeft: Font.Color := clBlue; srsCopyRight: Font.Color := clGreen; srsDeleteRight: Font.Color := clBlue; else Font.Color := clWindowText; end; if Assigned(r.FFileL) then begin TextOut(aRect.Left + 2, aRect.Top + 2, FVisibleItems[aRow]); s := IntToStr(r.FFileL.Size); x := hCols[1].Left + hCols[1].Width - 2 - TextWidth(s); TextOut(x, aRect.Top + 2, s); s := DateTimeToStr(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 := IntToStr(r.FFileR.Size); x := hCols[5].Left + hCols[5].Width - 2 - TextWidth(s); TextOut(x, aRect.Top + 2, s); s := DateTimeToStr(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; 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 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 miSeparator2.Visible := chkAsymmetric.Checked; miSelectDeleteRight.Visible := chkAsymmetric.Checked; 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; FillFoundItemsDG; MainDrawGrid.SetFocus; finally TopPanel.Enabled := True; 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); 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; filter: record copyLeft, copyRight, eq, neq: Boolean; dup, single: Boolean; end; r: TFileSyncRec; begin if Assigned(FVisibleItems) then FVisibleItems.Clear else begin FVisibleItems := TStringListUtf8.Create; FVisibleItems.CaseSensitive := FileNameCaseSensitive; end; { init filter } with filter do begin copyLeft := sbCopyLeft.Down; copyRight := sbCopyRight.Down; eq := sbEqual.Down; neq := sbNotEqual.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 filter.single or (Assigned(r.FFileL) = Assigned(r.FFileR)) and filter.dup) and ((r.FState = srsCopyLeft) and filter.copyLeft or (r.FState = srsCopyRight) and filter.copyRight or (r.FState = srsDeleteRight) and filter.copyLeft or (r.FState = srsEqual) and filter.eq or (r.FState = srsNotEq) and filter.neq or (r.FState = srsUnknown)) 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; 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 not f.IsDirectory and 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 else if (f.NameNoExt <> '.') and (f.NameNoExt <> '..') then dirs.Add(f.Name); end; finally fs.Free; end; end; var i, j, tot: Integer; it: TStringList; dirsLeft, dirsRight: TStringListUtf8; d: string; begin i := FFoundItems.IndexOf(dir); if i < 0 then begin it := TStringListUtf8.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 := TStringListUtf8.Create; dirsLeft.CaseSensitive := FileNameCaseSensitive; dirsLeft.Sorted := True; dirsRight := TStringListUtf8.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); MaskList := TMaskList.Create(cbExtFilter.Text); 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; if FCancel then Exit; if (FFoundItems.Count > 0) and chkByContent.Checked then CheckContentThread := TCheckContentThread.Create(Self); 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 r1 := TFileSyncRec(sl.Objects[i]); r2 := TFileSyncRec(sl.Objects[j]); case FSortIndex of 0: if Assigned(r1.FFileL) <> Assigned(r2.FFileL) then Result := Ord(Assigned(r1.FFileL)) - Ord(Assigned(r2.FFileL)) else if Assigned(r1.FFileL) then Result := UTF8CompareStr(r1.FFileL.Name, r2.FFileL.Name) else Result := 0; 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: if Assigned(r1.FFileR) <> Assigned(r2.FFileR) then Result := Ord(Assigned(r1.FFileR)) - Ord(Assigned(r2.FFileR)) else if Assigned(r1.FFileR) then Result := UTF8CompareStr(r1.FFileR.Name, r2.FFileR.Name) else Result := 0; 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: ca := srsDoNothing; 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; btnSelDir1.Enabled:= AEnabled; btnSelDir2.Enabled:= AEnabled; cbExtFilter.Enabled:= AEnabled; MainDrawGrid.Enabled:= AEnabled; pnlProgress.Visible:= 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; srsDeleteRight: begin if not Assigned(SyncRec.FFileR) then NewAction:= srsDoNothing; 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; constructor TfrmSyncDirsDlg.Create(AOwner: TComponent; FileView1, FileView2: TFileView); var Index: Integer; AFiles: TFiles; begin inherited Create(AOwner); FFoundItems := TStringListUtf8.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 := TStringListUtf8.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; 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.cm_SelectClear(const Params: array of string); begin SetSyncRecState(srsDoNothing); end; procedure TfrmSyncDirsDlg.cm_SelectDeleteRight(const Params: array of string); begin SetSyncRecState(srsDeleteRight); 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; initialization TFormCommands.RegisterCommandsForm(TfrmSyncDirsDlg, HotkeysCategory, @rsHotkeyCategorySyncDirs); end. doublecmd-0.9.8/src/fsyncdirsdlg.lrt0000644000175000001440000000270112460214671016536 0ustar alexxusersTFRMSYNCDIRSDLG.CAPTION=Synchronize directories TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT=*.* TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION=>> TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION=>> TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION=Compare TFRMSYNCDIRSDLG.CHKONLYSELECTED.CAPTION=only selected TFRMSYNCDIRSDLG.LABEL1.CAPTION=(in main window) TFRMSYNCDIRSDLG.CHKASYMMETRIC.CAPTION=asymmetric TFRMSYNCDIRSDLG.CHKSUBDIRS.CAPTION=Subdirs TFRMSYNCDIRSDLG.CHKBYCONTENT.CAPTION=by content TFRMSYNCDIRSDLG.CHKIGNOREDATE.CAPTION=ignore date TFRMSYNCDIRSDLG.GROUPBOX1.CAPTION=Show: TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION=> TFRMSYNCDIRSDLG.SBEQUAL.CAPTION== TFRMSYNCDIRSDLG.SBNOTEQUAL.CAPTION=!= TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION=< TFRMSYNCDIRSDLG.SBDUPLICATES.CAPTION=duplicates TFRMSYNCDIRSDLG.SBSINGLES.CAPTION=singles TFRMSYNCDIRSDLG.BTNSYNCHRONIZE.CAPTION=Synchronize TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION=Close TFRMSYNCDIRSDLG.STATUSBAR1.PANELS[0].TEXT=Please press "Compare" to start TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION=Name TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION=Size TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION=Date TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[3].TITLE.CAPTION=<=> TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION=Date TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION=Size TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION=Name TFRMSYNCDIRSDLG.MENUITEMVIEWLEFT.CAPTION=View left TFRMSYNCDIRSDLG.MENUITEMVIEWRIGHT.CAPTION=View right TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION=Compare doublecmd-0.9.8/src/fsyncdirsdlg.lfm0000644000175000001440000007617013573164006016530 0ustar alexxusersobject frmSyncDirsDlg: TfrmSyncDirsDlg Left = 562 Height = 438 Top = 162 Width = 691 Caption = 'Synchronize directories' ClientHeight = 438 ClientWidth = 691 KeyPreview = True OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnKeyDown = FormKeyDown OnResize = FormResize Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '1.8.2.0' object edPath1: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir1 Left = 3 Height = 26 Top = 3 Width = 249 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 3 TabOrder = 1 end object edPath2: TEdit AnchorSideLeft.Control = cbExtFilter AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir2 Left = 407 Height = 26 Top = 3 Width = 246 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Around = 3 TabOrder = 4 end object cbExtFilter: TComboBox AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = Owner Left = 290 Height = 26 Top = 3 Width = 111 BorderSpacing.Top = 3 ItemHeight = 18 ItemIndex = 0 Items.Strings = ( '*.*' ) TabOrder = 3 Text = '*.*' end object btnSelDir1: TButton AnchorSideTop.Control = edPath1 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExtFilter Left = 255 Height = 28 Top = 2 Width = 29 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Around = 3 Caption = '>>' OnClick = btnSelDir1Click TabOrder = 2 end object btnSelDir2: TButton Tag = 1 AnchorSideTop.Control = edPath2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 656 Height = 28 Top = 2 Width = 29 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Around = 3 Caption = '>>' OnClick = btnSelDir1Click TabOrder = 5 end object TopPanel: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnSelDir1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 98 Top = 33 Width = 691 Anchors = [akTop, akLeft, akRight] AutoSize = True ClientHeight = 98 ClientWidth = 691 TabOrder = 0 object LeftPanel1: TPanel AnchorSideLeft.Control = TopPanel AnchorSideTop.Control = TopPanel Left = 1 Height = 79 Top = 1 Width = 111 AutoSize = True BevelOuter = bvNone ClientHeight = 79 ClientWidth = 111 TabOrder = 0 object btnCompare: TButton AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = LeftPanel1 Left = 3 Height = 28 Top = 3 Width = 70 AutoSize = True BorderSpacing.Around = 3 Caption = 'Compare' Default = True OnClick = btnCompareClick TabOrder = 0 end object chkOnlySelected: TCheckBox AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = btnCompare AnchorSideTop.Side = asrBottom Left = 3 Height = 24 Top = 34 Width = 105 BorderSpacing.Around = 3 Caption = 'only selected' Enabled = False TabOrder = 1 end object Label1: TLabel AnchorSideLeft.Control = chkOnlySelected AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = chkOnlySelected AnchorSideTop.Side = asrBottom Left = 3 Height = 18 Top = 61 Width = 105 Caption = '(in main window)' Enabled = False ParentColor = False end end object LeftPanel2: TPanel AnchorSideLeft.Control = LeftPanel1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 117 Height = 96 Top = 1 Width = 97 AutoSize = True BorderSpacing.Left = 5 BevelOuter = bvNone ClientHeight = 96 ClientWidth = 97 TabOrder = 1 object chkAsymmetric: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = LeftPanel2 Left = 0 Height = 24 Top = 0 Width = 97 Caption = 'asymmetric' Enabled = False TabOrder = 0 end object chkSubDirs: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkAsymmetric AnchorSideTop.Side = asrBottom Left = 0 Height = 24 Top = 24 Width = 72 Caption = 'Subdirs' TabOrder = 1 end object chkByContent: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkSubDirs AnchorSideTop.Side = asrBottom Left = 0 Height = 24 Top = 48 Width = 90 Caption = 'by content' TabOrder = 2 end object chkIgnoreDate: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkByContent AnchorSideTop.Side = asrBottom Left = 0 Height = 24 Top = 72 Width = 96 Caption = 'ignore date' TabOrder = 3 end end object GroupBox1: TGroupBox AnchorSideLeft.Control = LeftPanel2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 219 Height = 81 Top = 1 Width = 204 AutoSize = True BorderSpacing.Left = 5 Caption = 'Show:' ClientHeight = 54 ClientWidth = 198 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 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 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 end object sbCopyLeft: 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 end object sbDuplicates: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = GroupBox1 Left = 112 Height = 18 Top = 0 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Right = 6 Caption = 'duplicates' Down = True GroupIndex = 5 OnClick = FilterSpeedButtonClick end object sbSingles: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbDuplicates AnchorSideTop.Side = asrBottom Left = 112 Height = 18 Top = 21 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Top = 3 BorderSpacing.Bottom = 6 Caption = 'singles' Down = True GroupIndex = 6 OnClick = FilterSpeedButtonClick end end object btnSynchronize: TButton AnchorSideTop.Control = TopPanel AnchorSideRight.Control = TopPanel AnchorSideRight.Side = asrBottom Left = 596 Height = 28 Top = 7 Width = 88 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Synchronize' Enabled = False OnClick = btnSynchronizeClick TabOrder = 3 end object btnClose: TButton AnchorSideLeft.Control = btnSynchronize AnchorSideTop.Control = btnSynchronize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSynchronize AnchorSideRight.Side = asrBottom Left = 596 Height = 28 Top = 41 Width = 88 Anchors = [akTop, akLeft, akRight] AutoSize = True Cancel = True Caption = 'Close' OnClick = btnCloseClick TabOrder = 4 end end object StatusBar1: TStatusBar Left = 0 Height = 23 Top = 415 Width = 691 Panels = < item Text = 'Please press "Compare" to start' Width = 50 end> 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 = 131 Width = 691 Anchors = [akTop, akLeft, akRight] AutoFillColumns = True BorderStyle = bsNone ColCount = 7 Columns = < item SizePriority = 0 Title.Caption = 'Name' Width = 250 end item SizePriority = 0 Title.Caption = 'Size' Width = 150 end item SizePriority = 0 Title.Caption = 'Date' Width = 170 end item SizePriority = 0 Title.Caption = '<=>' Width = 30 end item SizePriority = 0 Title.Caption = 'Date' Width = 170 end item SizePriority = 0 Title.Caption = 'Size' Width = 120 end item Title.Caption = 'Name' Width = 0 end> ExtendedSelect = False FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goSmoothScroll, goHeaderPushedLook] RowCount = 1 ScrollBars = ssNone TabOrder = 7 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 = 264 Top = 151 Width = 691 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True ColCount = 0 ExtendedSelect = False FixedCols = 0 FixedRows = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSelect, goSmoothScroll, goHeaderPushedLook, goDontScrollPartCell, goRowHighlight] PopupMenu = pmGridMenu RangeSelectMode = rsmMulti RowCount = 0 ScrollBars = ssAutoVertical TabOrder = 8 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 = 225 Height = 81 Top = 179 Width = 240 AutoSize = True ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 8 ClientHeight = 81 ClientWidth = 240 Constraints.MinWidth = 240 ParentBackground = False ParentColor = False ParentFont = False TabOrder = 9 Visible = False object lblProgress: TLabel AnchorSideLeft.Control = pnlProgress AnchorSideTop.Control = pnlProgress AnchorSideRight.Control = pnlProgress AnchorSideRight.Side = asrBottom Left = 9 Height = 1 Top = 9 Width = 222 Alignment = taCenter Anchors = [akTop, akLeft, akRight] ParentColor = False end object ProgressBar: TProgressBar AnchorSideLeft.Control = pnlProgress AnchorSideTop.Control = lblProgress AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlProgress AnchorSideRight.Side = asrBottom Left = 9 Height = 22 Top = 18 Width = 222 Style = pbstMarquee TabOrder = 0 end object btnAbort: TBitBtn AnchorSideLeft.Control = ProgressBar AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = ProgressBar AnchorSideTop.Side = asrBottom Left = 71 Height = 26 Top = 46 Width = 98 AutoSize = True DefaultCaption = True Kind = bkAbort ModalResult = 3 OnClick = btnAbortClick TabOrder = 1 end end object ImageList1: TImageList left = 56 top = 152 Bitmap = { 4C69070000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF150088FF150088FF150088FF150088FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF150088FF150088FFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF1500 88FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF1500 88FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000 EBFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000EBFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000EBFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000EBFF0000EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48 3FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D 1BFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FF } 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 miSelectDeleteRight: TMenuItem Action = actSelectDeleteRight end end object ActionList: TActionList left = 376 top = 208 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 actSelectDeleteRight: TAction Caption = 'Select for deleting -> (right)' OnExecute = actExecute end end end doublecmd-0.9.8/src/fsymlink.pas0000644000175000001440000000462713174436400015671 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(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, uOSUtils, DCStrUtils, DCOSUtils; function ShowSymLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmSymLink.Create(Application, 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; 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; if CreateSymLink(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; end; procedure TfrmSymLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. doublecmd-0.9.8/src/fsymlink.lrt0000644000175000001440000000046113174436400015677 0ustar alexxusersTFRMSYMLINK.CAPTION=Create symbolic link TFRMSYMLINK.LBLEXISTINGFILE.CAPTION=&Destination that the link will point to TFRMSYMLINK.LBLLINKTOCREATE.CAPTION=&Link name TFRMSYMLINK.BTNOK.CAPTION=&OK TFRMSYMLINK.BTNCANCEL.CAPTION=&Cancel TFRMSYMLINK.CHKUSERELATIVEPATH.CAPTION=Use &relative path when possible doublecmd-0.9.8/src/fsymlink.lfm0000644000175000001440000000636713405433461015670 0ustar alexxusersobject frmSymLink: TfrmSymLink Left = 318 Height = 193 Top = 251 Width = 602 HorzScrollBar.Page = 399 HorzScrollBar.Range = 344 VertScrollBar.Page = 151 VertScrollBar.Range = 128 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create symbolic link' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 193 ClientWidth = 602 KeyPreview = True OnShow = FormShow Position = poScreenCenter LCLVersion = '1.8.4.0' object lblExistingFile: TLabel AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtLinkToCreate AnchorSideTop.Side = asrBottom Left = 6 Height = 18 Top = 62 Width = 222 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 = 18 Top = 6 Width = 64 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 26 Top = 86 Width = 590 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 26 Top = 30 Width = 590 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 0 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 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 end doublecmd-0.9.8/src/fstartingsplash.pas0000644000175000001440000000263713206563062017251 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; lblFreePascalVer: TLabel; lblLazarusVer: TLabel; lblOperatingSystem: TLabel; lblPlatform: TLabel; lblRevision: TLabel; lblTitle: TLabel; lblVersion: TLabel; lblWidgetsetVer: TLabel; pnlVersionInfos: TPanel; pnlInfo: TPanel; procedure FormCreate(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; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + GetLazarusVersion; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; end; end. doublecmd-0.9.8/src/fstartingsplash.lrt0000644000175000001440000000100312660757644017267 0ustar alexxusersTFRMSTARTINGSPLASH.CAPTION=Double Commander TFRMSTARTINGSPLASH.LBLTITLE.CAPTION=Double Commander TFRMSTARTINGSPLASH.LBLVERSION.CAPTION=Version TFRMSTARTINGSPLASH.LBLREVISION.CAPTION=Revision TFRMSTARTINGSPLASH.LBLBUILD.CAPTION=Build TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION=Lazarus TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION=Free Pascal TFRMSTARTINGSPLASH.LBLPLATFORM.CAPTION=Platform TFRMSTARTINGSPLASH.LBLOPERATINGSYSTEM.CAPTION=Operating System TFRMSTARTINGSPLASH.LBLWIDGETSETVER.CAPTION=WidgetsetVer doublecmd-0.9.8/src/fstartingsplash.lfm0000644000175000001440000025126012763602172017245 0ustar alexxusersobject frmStartingSplash: TfrmStartingSplash Left = 120 Height = 314 Top = 207 Width = 256 Anchors = [] AutoSize = True BorderIcons = [] BorderStyle = bsNone Caption = 'Double Commander' ClientHeight = 314 ClientWidth = 256 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 = '1.4.4.0' object pnlInfo: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 11 Height = 283 Top = 11 Width = 196 AutoSize = True BorderSpacing.Around = 11 BevelInner = bvRaised BevelOuter = bvLowered BevelWidth = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 283 ClientWidth = 196 Color = clForm ParentColor = 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 = 168 Top = 111 Width = 104 AutoSize = True BorderSpacing.Left = 20 BorderSpacing.Right = 20 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 10 ClientHeight = 168 ClientWidth = 104 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 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 end object lblBuild: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblRevision AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 48 Width = 27 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False end object lblLazarusVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblBuild AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 67 Width = 39 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False end object lblFreePascalVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblLazarusVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 86 Width = 58 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False end object lblPlatform: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblFreePascalVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 105 Width = 46 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Platform' ParentColor = False end object lblOperatingSystem: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblPlatform AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 124 Width = 94 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Operating System' ParentColor = False end object lblWidgetsetVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblOperatingSystem AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 143 Width = 69 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'WidgetsetVer' ParentColor = 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 = { 1754506F727461626C654E6574776F726B47726170686963F511000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000B1300000B1301009A9C180000000774494D4507DA021112343B F8979BBE000011754944415478DADD9B79905D559DC73FE7DC7BDFD24BBAD39D 3D241D9640020414102C4046CA5229401C71199771CA1A7416D19A9A19A79CC2 3F8471299491C1D1D2A15C81128D5A52AC53208B16191C9180C8960D1224E94E 27E974F7DBEF727EBFF9E3DED7FD3A74BFEEA483C0DCAA5B6F3BEFDCF3FB9EDF FEFB1D6873A92AFF5FAE996831330D36C6B4FED1BCDEE937C64CA16B5600000F 08803C901751CF5AA3AFB75D37C6C44023BBDDA14098E90857D5A231A60758B8 77F0C08A91DD7B97D66A8DE2C3BF7A6231869941505EF6A379F9903F05E166F1 92858D0DA79F38BAEAA48191C58B7B770383C0412032667223CD21C4FBC04260 0038EE1F2EF9E415FD94CE59B36E4D61755F1038455140D31724FB22235C9B00 A8A06A50145533051955455BDF4F3C3F7D159D44B229B72AA046419AD31826A7 555426E748D7A324899A3D2315F7DC737B4ACBCF3CF3A1AFDE74F50F45E4596B ED2010021863A600605575A13166DD2DDFFAD97B5F7AE0BE2B3F70C986DC9A1E 341CDA6DA2F238A2922E42155130B9226A6DBAC08C46D17401A293C4AAA68B97 560054106D8ECFFEAF9344A828922172E85C2E8E496AF50C7445267E4B3F7BC5 4EFC8E4E3A962CA5B864098F6D19E67F9FDEFBD4B5777CEBEAAE62F028306C8C 8955750A0005E0B8DB7E72FFFB776CBCF9EA2B3F7601D1738FA1C68282A84C2E 36DB0991960793EEBAA8A0A228267B4D7728DD451091740745D3B16A5A884BE7 C4804AF3790691942B9C4EEEB6A4AC82A84ECCD91C27D926A1E0C4915BD0A3C9 CAB5E6D6BB9E7CEEBB8F6EFC7BCF9ADF1B63C68D31D8A6CC00C5F1B1CAEA5F7E E3C68F5FF9A1B388B76E56635FF7CA1F632D61A964823DDBF5ED672C5BBFE917 F79F6B8C599429F814804C17148777ED5EF9E7672F5E69CA073198D73BF553AE FAD898E94F4AFCE26BDFFD04D00714547502000572BFBFFBA1F5EBD7AF32EEC0 E084401A32017F1DBA029ACA29886054F1C23AF9FAC163A37AB26C4209DE70C3 0DC50B2EB860477F7F7F978BE3BC7571DEF33D5CE220AC93D42AB8B103C8C161 BCE15D2C2CED070CCED84CD65E233A40158962B4A3133D6680DCC0B1E417F651 5CB49862FFA25439FA3EA28A09821AC6C443434357F9F57ADD747676F6E6F3F9 0ECDE526D0F301E8A5600CD6AEC3F7031255F68D1C441E7F88DE179FC536AA18 15F4D5E40E154C90C35BB21CFFBC3FA377DD29F47477E15B9B01ABD3B9C11D00 BEEF17FC294ECB0C62EF9CC3390740FF822EB8F032709730B6FB45F4819FB2A0 3A8EBE1A0A338E70679DCBB20BDF4EEFD265586B271C0AE7DCA4B7370D5D4D50 FCB93CE76513A8A2C6D0B7E6781A1FFB2C639B1F26F8DD031424CE7485BEA29A 9D3846561F4FEFA5EF61F989EB9038CECC9ECEBA99875E7E2B22871BFD254982 0FF49FF516AAEBDE48E317DF215FDAFFCABABBD6D2F8B38B38E5DD9723714C12 86F38A5EEDA13B7D24B788D0D1D949E1C39FE6C09AD3B04D4D7594AFC47AE43F 7405A75CF61E3449E6B5E609005A3FB42A8DC3B99BFFF5AD65F9BB3FCAC1B567 A2224795ED136BE9FAD015ACDE703A9224539E7BA46B9E108136DAF2B02F1387 2C7EC7E5ECC3B070CB63B8A3A01C9DE7D3F9D79F66D9EA01E2383EAA5CE58B88 F13CAF03C0063E82A7C66002CFC7B918750E1599369930B3985AFADF7939FBC7 46E81DDE354F4023F4D20FB274D5EA299A7D2ED91F630C412E87F53CD41892D4 92A9C69111278848CE6CDAB4C90E0F0FBFE1A4D34E5DF7C2CDB75D79C6A29173 EB62A9E73AA167116EF9712C5CB90AAF73019EE7CF59C3AB2A61AD4A74F3F578 61E3081CA1F4F7D28673D8F0171F250EC359896F6E92029AC48C0C0EB26FDB56 AA2FEE42460E62460F52E8E961F771E77C79C5DAFEFF2E97CB5BFCF3CE3B4F80 2D406E308A2BBD12D29324485442CB83E8EE27897FE71316BB195A7B0ECBCE38 0F5C3CABA931C650E8EA66FF85EFA3FF9E1FA273B3B853E45E8B5DAC7AC7BB48 A2684EC4FB41C081B1315EFAD98F31DBB7A1F53A8890270554150AF900EB7243 175F7CF173C088DF120C99FDCE4E666D4C6ACF552DBE0AB63ACA9ACD77B27FFB E3D8F3DF45F7CA01C4256D17A622AC39F534869E594FC78BDB0E2B9E50111A17 7F80EEAECE39E92607ECBAE74E2AF7DE85278A1A8B41119B725BF3D18A215FC8 4993E62966B024A6ED129DF5E92B0FD37DCFF7D8FBCC13F841D07671C6189238 2677FE45187187B5FFB5E5AB597BEA8659895755C439B6FCC75768DC7737BEB5 60BD36C02A6B4F5C559BD60F98EBE5A9B0F4E19F33F4DB5FE3FBFEAC20F4AC58 C5E8CA13A6786A6D159F4BC8BFF9ADB35A2655A55A6FB0F5BA2F100CED066BE7 AA9FCCBC00500CD65AFA1EBF9FBD2FEE4C7DF07656411CC1F917A173D0E00608 7BFAE93E615D5BCBA39A263B76DFFA03BCD19194F823B0E2763E262A5061C12F 7F44AD566BBB5322C2E2E52B483ABAE714DD554F7F33FDDDDD6DF58BE7FB6C79 F8D778DB9E9997EB3D2F0014C84575CACF3E91C6DA22D3DEAA8A18835BB21233 8B18489063C1C0713897CC389F8850191BC3BBF776F0BCF9394247C39BCA3FFE 10E3A79C49CEB40D2929AF389EC2F63FA0DECCB8BB7C919EFE45842D41CE748E D681271FC73897E522F4D504C0D01355D9B3F5297AD79EDC5ED1AD5883710978 C18C392CEDEE41B24873C627FA0195C71F25DF525778553940AC47D71FB790AC 59DB9E53F2391A0B971054CB33CABF5BB4141521690364BD56A330F847D47A73 B62CAF2800184BA1B49F4A1CD32E99EC594354E83C04009DB42DAA84411ED74C 36CE6056E37D7BD318C5D879275F8E0E008036EA181562D7C61A00B19F4BC359 E790895B5282C2107A1692B489F88C31D477EE40CA65D40FC09A1488EC566B53 636A4CB34E97BDD75716005471CE913899D17C19CFC3292423C3B824233E71A9 A57082346A18CF6FCB01188346118D7D4368904B95A0B12836F505AC07D6C378 1EF801C6F3534B619AC0BC52001883384792CC1CB2AA7368A3463C368A388713 C93841D33478BD8688A40AB00D0061B54A343E0E418064142936DD706B338EF0 52403C1F633DF0739820C02B16302D8EDB3C0150D4254814E2A2104CEA21CE04 40248ADB3784AB551027290788A63546716818D3D8F62C9D03C7B575820A2B8E A15229A1F9425AB7C4A46175C6F54A260E4DD1C8B802CFC3063E7D2DBEC36101 6068C6EE0E091B4818E2C206124548771F4EB5AD5B6CACC19447D3FFBAB4F0A1 2E739444D124A4806067516E1D1BDE806BD453229B79846639BE09064D4052D6 579B7245AEA32B158F2301409308693490B03149781C236148BC7A7D2A7B6DB4 77A31E523C308826719A656AEEBE6B569D159EDF9289EACC1C902F1691638EC5 0C0F4D94D155D2DE82664F82D0AC5899C9DB18A25A6D6A52742E6C2E7184544A 486914298F219571A45A46EB15A45E85D2412AA79EDF369456559228C40EBE98 EA02972A3E9AAEB2086A2CC9CEADD85982266934E8BEE83254252DC989A0EA52 CE1487B8044D92543C9338BDE3080943246E4CC902D8765A5D5D8256CB687914 ADA6444BAD8234AA6858471A0D340A29AF389EDC09A7CC1ABB7BCF6ECE185B5F E60334DF6B691CC27AFBF4781CD377FE5B5385A79A02A16912455D5A88D44CC1 AA7399D94D1097207132C555B1D3C5A3AA9212582921D512522F23F52A1AD6D0 A891DAEB3844E3084D62920BDF8749A2B679783586FCE65FA5B6BBD94FD32CE1 B6DCA63C4EEDC07E3CCF6B3B5F71D500C1056F87A6CFD09208553D24D3AD69C7 491310DA8A804BA056416A25B45E411B55B4D140C30634094F22344E3049447D F971D853CF4145DA174FEA35ECAEADD3D4AF5B3301293794EED8885FEC680F68 92B0E6AA2F60962C9F0AE6840FA1531E937289BECCBCDA431724B50A52AF40A3 86366A681442DC8038425D9C56649C0371D4BB16A29FFA4A0A5A3BD6F73C4677 EEC0AB8CCFC9ADB60FDC4EA334FB582F89597ECD7568239AE2274C4A550B7761 A6345ECD08006115C23A12A54413479942895197803890847AA183EADF7E39DD F9594A54A1F5E9BAEB87734F89F93EB55FDE411004B396B7166F78030337DE32 4B44903536CD9A105145C354B199388224CA884EC00946047509F5FE95C49FBB 897CFF524CE6FCB4BBC3271E21B7FDA939E7ECB01EA53B7F425028CC3A771285 F49DF64606FEEB16BC053D6D4A7266AAEE995E07282431B838DB7197B2B713AC 8B8815062FFF47DC3F7D738A3BD97E3703B8E3A654F91D4EE27578905DDFFE77 FC4261160FDC20E2E85FB79E33EE7C908EF77D18899239B7F5F859EB681D68B8 3811AB554CA3868D631227943BFA48161D43E584337067BF93EE7C0E49662F8C A4A5B61CC3B7DD44CF0B4FE3FCFC61C6A901C9EDB7125EF25E724B576415A5F6 7E8603CEFEFC9738F05757B0EFE73FE6C06F1EA1B6631B321EA66D7D808411D6 78215037C6A8B9F9E69B0B2B56ACB8B7A3A3A3AF323276CC325BE945A09CEF26 E85B42B158C40222EEB08AA7D65A6A2FEEC07EF99369A4279AF51666BD449239 3F5939ACD9DBD73A4E4449D69CC4FAEFFC94A85A3DACE77B9E47B1B31327C2D8 F838E5A79FA251AEE0E5028A6B4FDA8161AC5C2E5FEF8F8C8CD80D1B36BC2997 CB157B7B7B9B4DADA627435CC5212DEC36E7C246A5827EFDB3A9DE9847B8E56D 7F86E7AFFE0C277FF1064A6363735E8388502DA789978E5C8ECEB3DE34C92C22 27349374D6A6DE944EB8A322A655911C6EE381F53C3C6B31D75E49502DCDBFBB CE0F881EBC8767BF7D3D9D3DBD47B4AE66F528BB4D935611517FBAB2F2BC6AF9 5184FBD2DF111C18E468B54818DF27FAD177D852AD72FABF5EC3D8C18347ED30 87DFACBE98793686068502B55DDB906F7E8E60642FD2260D75A40997C6C61FF0 44699C933EF72554E4A8344BF887B2D4E165C1D2F8DFF33C0EFEFA1EBA6FB916 C164C473F4AF5C9EC67D77B2F9F78FB1EEEBDFA773C54A92AC43EC48D60E60E7 C301F98E4EC68776137EF1132CB8F5AB737774E69981F68687D8FAE14B79EEDA 6BB07E404767E71130544AF39C1A259B20D92CE91839811D7FA0BCE96EFA7F77 2F0E9BC9FB2BDD23D8E2EF8BA37AFB4FD8FCF083F4BFFF23AC7CD7E514571C03 71441C4573E60AFF50E2D3EEDC34B1636DAAD573BE4FB55CA65C29C353FFC3C2 077F8C19DD8F6011EB672EA6F027BD34F53275EC20FB6FFC3AC3FF791D85B3CF 65E9DF7C8AFE934EA66BC1021211DCCB2B4C0A98894ED18E8E8EA8542A7D5EA1 9703074ECF0D3E776971740F188B28D8A19D24A5118A95125DE307208A70D643 3D0FDC6BE70C95C9E5A93FF65B9EFFCD23BCD0D58DE95B44D0D74F61E531E4FA FA09A308CF0F745F1898B3FEF99377C5B5DAF65AADF670EB89919EFD3B5EB870 FC6B9FDAB878412E48F63C6F347138254D604A56C0902CE426B3A54EB3A32F4D 0F4F264E92A4AF9A75AC1F9927D89C5315DCB4E3B465CED6F9B235389706B00E 8ACB97B04906F67C7FF0D1CB80678C31A16DD188C982D5ABF7FCFCE978B0B8A8 DFE0E750CFCF2A2E66EA3D21E7E6357E8C40B3DA80C1F8505F7A2CEFBFFEDFBE 075452B275D20A00613EE70F5DFA8D1BAFF9C6DD2F49EEF4F3D2AA8A01632D86 26107A88AEB31908AF45240C9208413E50F7A6B7B1A9BAF0C9B7BDE76D8FA8EA 28904C9C1A6BF1AA3A513DF1BEDB7E75C9DDD75C73D527FEF22DC5BE3D4FE097 4690B0813A87CB8A186931A37960213B5425D9692F6DF6F9B58EC958B2E5BB66 5A7CEA7720B4FE3639D7D4CF2DA230B186C9FF193FD0C8A929AC3D991D1D03FA CCEEEA533F7DE6F6AB80A78121634C34E5D458068455D51E63CCC0F667779E71 C3BF5C77857B69C7590B6C985BB9BC9BBC6F303A29BBDACCE5A3538EBC35534F D27A3E509838E6D63C77A8ADC7E1267215538FC071E8B896A4C644AE0F404DCB 7B78693422ACC72C583DB0EDF2CF7C7CE3C51FB9649331662BE991B9B0797872 BA93A31628AAEA6263CCF29D8363AB6EDF78FFCAD20B7F5C58E8ECE8A854EBFD BDBD5DA3D552AD1A27499C2E6B9A63A86D4CF8DC98F7E5838DC1E6F3B99CF1BD FE5A2DECF7BC433D2FD5247671B198DF7BEC9A657BDEF2C18B77AEEC2BEE0646 5575D418330EC4D39E1C6D7578B236321F28909E1DB6A467893BB3EF22A00AC4 7F1ACF674A062B007A80E234952DC9D6546A595F98AD3731C6C8B440CF00C274 E3BC6C114ADA9C29AF82F66B6E8E9DE1D90A24D9FAB4D5D19BCE3BFC3F18A85F E1469E4F0B0000000049454E44AE426082 } Proportional = True end end end doublecmd-0.9.8/src/fsplitter.pas0000644000175000001440000003111513424361073016042 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-0.9.8/src/fsplitter.lrj0000644000175000001440000000363213424361073016051 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-0.9.8/src/fsplitter.lfm0000644000175000001440000002135513424361073016042 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-0.9.8/src/fsetfileproperties.pas0000644000175000001440000004213513121454503017743 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-0.9.8/src/fsetfileproperties.lrt0000644000175000001440000000275612577065770020010 0ustar alexxusersTFRMSETFILEPROPERTIES.CAPTION=Change attributes TFRMSETFILEPROPERTIES.BTNOK.CAPTION=&OK TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION=&Cancel TFRMSETFILEPROPERTIES.CHKRECURSIVE.CAPTION=Including subfolders TFRMSETFILEPROPERTIES.GBTIMESAMP.CAPTION=Timestamp properties TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION=Created: TFRMSETFILEPROPERTIES.CHKLASTWRITETIME.CAPTION=Modified: TFRMSETFILEPROPERTIES.CHKLASTACCESSTIME.CAPTION=Accessed: TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION=Attributes TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION=System TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION=Hidden TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION=Archive TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION=Read only TFRMSETFILEPROPERTIES.LBLATTRINFO.CAPTION=(gray field means unchanged value) TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION=Attributes TFRMSETFILEPROPERTIES.LBLREAD.CAPTION=Read TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION=Write TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION=Execute TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION=Owner TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION=Group TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION=Other TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION=Sticky TFRMSETFILEPROPERTIES.CBSGID.CAPTION=SGID TFRMSETFILEPROPERTIES.CBSUID.CAPTION=SUID TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION=Bits: TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION=Octal: TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION=Text: TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION=----------- TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION=(gray field means unchanged value) doublecmd-0.9.8/src/fsetfileproperties.lfm0000644000175000001440000006536612723432445017761 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 = '-----------' Font.Color = clBlack 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-0.9.8/src/fselecttextrange.pas0000644000175000001440000000341412612505011017364 0ustar alexxusersunit fSelectTextRange; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, Buttons, uOSForms; type { TfrmSelectTextRange } TfrmSelectTextRange = class(TModalForm) btpPanel: TButtonPanel; edtSelectText: TEdit; lblSelectText: TLabel; procedure edtSelectTextKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private FSelStart, FSelFinish: LongInt; public { public declarations } end; function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText: String; out ASelection: TPoint): Boolean; implementation {$R *.lfm} function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText: String; out ASelection: TPoint): Boolean; begin with TfrmSelectTextRange.Create(TheOwner) do try Caption:= ACaption; edtSelectText.Text:= AText; Result:= (ShowModal = mrOK); if Result then begin ASelection.X:= FSelStart; ASelection.Y:= FSelFinish; Result:= (FSelFinish >= FSelStart); end; finally Free; end; end; { TfrmSelectTextRange } procedure TfrmSelectTextRange.edtSelectTextKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FSelStart:= edtSelectText.SelStart + 1; FSelFinish:= edtSelectText.SelStart + edtSelectText.SelLength; end; procedure TfrmSelectTextRange.edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FSelStart:= edtSelectText.SelStart + 1; FSelFinish:= edtSelectText.SelStart + edtSelectText.SelLength; end; end. doublecmd-0.9.8/src/fselecttextrange.lrt0000644000175000001440000000044512023046500017402 0ustar alexxusersTFRMSELECTTEXTRANGE.LBLSELECTTEXT.CAPTION=&Select the characters to insert: TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION=&OK TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION=&Help TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION=&Close TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION=Cancel doublecmd-0.9.8/src/fselecttextrange.lfm0000644000175000001440000000316512310641605017367 0ustar alexxusersobject frmSelectTextRange: TfrmSelectTextRange Left = 323 Height = 112 Top = 214 Width = 320 BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 10 ClientHeight = 112 ClientWidth = 320 Position = poOwnerFormCenter LCLVersion = '1.0.12.0' object edtSelectText: TEdit AnchorSideLeft.Control = lblSelectText AnchorSideTop.Control = lblSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 24 Top = 31 Width = 300 AutoSelect = False BorderSpacing.Top = 6 Constraints.MinWidth = 300 OnKeyUp = edtSelectTextKeyUp OnMouseUp = edtSelectTextMouseUp TabOrder = 0 end object lblSelectText: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 10 Width = 188 BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 Caption = '&Select the characters to insert:' FocusControl = edtSelectText ParentColor = False end object btpPanel: TButtonPanel Left = 10 Height = 36 Top = 70 Width = 300 OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False HelpButton.Name = 'HelpButton' HelpButton.Caption = '&Help' HelpButton.DefaultCaption = False CloseButton.Name = 'CloseButton' CloseButton.Caption = '&Close' CloseButton.DefaultCaption = False CancelButton.Name = 'CancelButton' CancelButton.Caption = 'Cancel' CancelButton.DefaultCaption = False TabOrder = 1 ShowButtons = [pbOK, pbCancel] end end doublecmd-0.9.8/src/frames/0000755000175000001440000000000013615241422014572 5ustar alexxusersdoublecmd-0.9.8/src/frames/ucomponentssignature.pas0000644000175000001440000001376013367401147021610 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Compute signature of a form, frame, etc. based on current options set 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, 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': 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-0.9.8/src/frames/fsearchplugin.pas0000644000175000001440000001063313377400214020135 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; rbAnd.Checked:= SearchTemplate.ContentPluginCombine; 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-0.9.8/src/frames/fsearchplugin.lrj0000644000175000001440000000260113377400214020135 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-0.9.8/src/frames/fsearchplugin.lfm0000644000175000001440000000630413377400214020130 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-0.9.8/src/frames/fquicksearch.pas0000644000175000001440000005056513506103211017752 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); private Options: TQuickSearchOptions; Mode: TQuickSearchMode; Active: Boolean; FilterOptions: TQuickSearchOptions; FilterText: String; Finalizing: Boolean; FUpdateCount: Integer; FNeedsChangeSearch: 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 ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String); public OnChangeSearch: TOnChangeSearch; OnChangeFilter: TOnChangeFilter; OnExecute: TOnExecute; OnHide: TOnHide; constructor Create(TheOwner: TWinControl); reintroduce; destructor Destroy; override; procedure Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0); 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)} , 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.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; if Char = #0 then edtSearch.SelectAll; end; if Char <> #0 then edtSearch.SelText := Char; Self.Active := True; ProcessParams(SearchMode, Params); end; procedure TfrmQuickSearch.Finalize; begin PopFilter; Self.Visible := False; Options.LastSearchMode := qsNone; Options.Direction := qsdNone; Options.CancelSearchMode:=qscmNode; 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.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 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; 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); begin {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} // 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 (Mode = qsFilter) and (edtSearch.Text <> EmptyStr) then Self.Visible := not gQuickFilterAutoHide else Finalize; 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; 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; 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; 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; 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; DoOnChangeSearch; end; end. doublecmd-0.9.8/src/frames/fquicksearch.lrt0000644000175000001440000000126711740433676020006 0ustar alexxusersTFRMQUICKSEARCH.EDTSEARCH.HINT=Enter text to search for or filter by TFRMQUICKSEARCH.TGLFILTER.HINT=Toggle between search or filter TFRMQUICKSEARCH.TGLFILTER.CAPTION=Filter TFRMQUICKSEARCH.BTNCANCEL.HINT=Close filter panel TFRMQUICKSEARCH.BTNCANCEL.CAPTION=X TFRMQUICKSEARCH.SBMATCHBEGINNING.HINT=Match Beginning TFRMQUICKSEARCH.SBMATCHBEGINNING.CAPTION={ TFRMQUICKSEARCH.SBMATCHENDING.HINT=Match Ending TFRMQUICKSEARCH.SBMATCHENDING.CAPTION=} TFRMQUICKSEARCH.SBCASESENSITIVE.HINT=Case Sensitive TFRMQUICKSEARCH.SBCASESENSITIVE.CAPTION=Aa TFRMQUICKSEARCH.SBFILES.HINT=Files TFRMQUICKSEARCH.SBFILES.CAPTION=F TFRMQUICKSEARCH.SBDIRECTORIES.HINT=Directories TFRMQUICKSEARCH.SBDIRECTORIES.CAPTION=D doublecmd-0.9.8/src/frames/fquicksearch.lfm0000644000175000001440000001150212470100066017735 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] 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 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 Cancel = True Caption = 'X' OnClick = btnCancelClick 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-0.9.8/src/frames/foptionstreeviewmenucolor.pas0000644000175000001440000003137112731662527022657 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of Tree View Menu Color and Layout. 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 fOptionsTreeViewMenuColor; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, ColorBox, //DC fOptionsFrame, fTreeViewMenu; type { TfrmOptionsTreeViewMenuColor } TfrmOptionsTreeViewMenuColor = class(TOptionsEditor) gbLayoutAndColors: TGroupBox; cbkUsageKeyboardShortcut: TCheckBox; lblBackgroundColor: TLabel; cbBackgroundColor: TColorBox; btnBackgroundColor: TButton; lblShortcutColor: TLabel; cbShortcutColor: TColorBox; btnShortcutColor: TButton; lblNormalTextColor: TLabel; cbNormalTextColor: TColorBox; btnNormalTextColor: TButton; lblSecondaryTextColor: TLabel; cbSecondaryTextColor: TColorBox; btnSecondaryTextColor: TButton; lblFoundTextColor: TLabel; cbFoundTextColor: TColorBox; btnFoundTextColor: TButton; lblUnselectableTextColor: TLabel; cbUnselectableTextColor: TColorBox; btnUnselectableTextColor: TButton; lblCursorColor: TLabel; cbCursorColor: TColorBox; btnCursorColor: TButton; lblShortcutUnderCursor: TLabel; cbShortcutUnderCursor: TColorBox; btnShortcutUnderCursor: TButton; lblNormalTextUnderCursor: TLabel; cbNormalTextUnderCursor: TColorBox; btnNormalTextUnderCursor: TButton; lblSecondaryTextUnderCursor: TLabel; cbSecondaryTextUnderCursor: TColorBox; btnSecondaryTextUnderCursor: TButton; lblFoundTextUnderCursor: TLabel; cbFoundTextUnderCursor: TColorBox; btnFoundTextUnderCursor: TButton; lblUnselectableUnderCursor: TLabel; cbUnselectableUnderCursor: TColorBox; btnUnselectableUnderCursor: TButton; lblPreview: TLabel; TreeViewMenuSample: TTreeView; optColorDialog: TColorDialog; procedure btnChooseColorClick(Sender: TObject); procedure RefreshColorOfOurSampleClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private { Private declarations } TreeViewMenuGenericRoutineAndVarHolder: TTreeViewMenuGenericRoutineAndVarHolder; ColorBoxPointer: array[1..12] of TColorBox; 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, 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; ColorBoxPointer[1] := cbBackgroundColor; ColorBoxPointer[2] := cbShortcutColor; ColorBoxPointer[3] := cbNormalTextColor; ColorBoxPointer[4] := cbSecondaryTextColor; ColorBoxPointer[5] := cbFoundTextColor; ColorBoxPointer[6] := cbUnselectableTextColor; ColorBoxPointer[7] := cbCursorColor; ColorBoxPointer[8] := cbShortcutUnderCursor; ColorBoxPointer[9] := cbNormalTextUnderCursor; ColorBoxPointer[10] := cbSecondaryTextUnderCursor; ColorBoxPointer[11] := cbFoundTextUnderCursor; ColorBoxPointer[12] := cbUnselectableUnderCursor; TreeViewMenuGenericRoutineAndVarHolder := TTreeViewMenuGenericRoutineAndVarHolder.Create; TreeViewMenuGenericRoutineAndVarHolder.SearchingText := rsStrPreviewSearchingLetters; TreeViewMenuGenericRoutineAndVarHolder.CaseSensitive := False; TreeViewMenuGenericRoutineAndVarHolder.IgnoreAccents := True; TreeViewMenuGenericRoutineAndVarHolder.ShowWholeBranchIfMatch := True; TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode := False; TreeViewMenuGenericRoutineAndVarHolder.ShowShortcut := gTreeViewMenuUseKeyboardShortcut; TreeViewMenuGenericRoutineAndVarHolder.BackgroundColor := gTVMBackgroundColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutColor := gTVMShortcutColor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextColor := gTVMNormalTextColor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextColor := gTVMSecondaryTextColor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextColor := gTVMFoundTextColor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableTextColor := gTVMUnselectableTextColor; TreeViewMenuGenericRoutineAndVarHolder.CursorColor := gTVMCursorColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutUnderCursor := gTVMShortcutUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextUnderCursor := gTVMNormalTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextUnderCursor := gTVMSecondaryTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextUnderCursor := gTVMFoundTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableUnderCursor := gTVMUnselectableUnderCursor; 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; SetColorInColorBox(cbBackgroundColor, gTVMBackgroundColor); SetColorInColorBox(cbShortcutColor, gTVMShortcutColor); SetColorInColorBox(cbNormalTextColor, gTVMNormalTextColor); SetColorInColorBox(cbSecondaryTextColor, gTVMSecondaryTextColor); SetColorInColorBox(cbFoundTextColor, gTVMFoundTextColor); SetColorInColorBox(cbUnselectableTextColor, gTVMUnselectableTextColor); SetColorInColorBox(cbCursorColor, gTVMCursorColor); SetColorInColorBox(cbShortcutUnderCursor, gTVMShortcutUnderCursor); SetColorInColorBox(cbNormalTextUnderCursor, gTVMNormalTextUnderCursor); SetColorInColorBox(cbSecondaryTextUnderCursor, gTVMSecondaryTextUnderCursor); SetColorInColorBox(cbFoundTextUnderCursor, gTVMFoundTextUnderCursor); SetColorInColorBox(cbUnselectableUnderCursor, gTVMUnselectableUnderCursor); end; { TfrmOptionsTreeViewMenuColor.Save } function TfrmOptionsTreeViewMenuColor.Save: TOptionsEditorSaveFlags; begin Result := []; gTreeViewMenuUseKeyboardShortcut := cbkUsageKeyboardShortcut.Checked; gTVMBackgroundColor := cbBackgroundColor.Selected; gTVMShortcutColor := cbShortcutColor.Selected; gTVMNormalTextColor := cbNormalTextColor.Selected; gTVMSecondaryTextColor := cbSecondaryTextColor.Selected; gTVMFoundTextColor := cbFoundTextColor.Selected; gTVMUnselectableTextColor := cbUnselectableTextColor.Selected; gTVMCursorColor := cbCursorColor.Selected; gTVMShortcutUnderCursor := cbShortcutUnderCursor.Selected; gTVMNormalTextUnderCursor := cbNormalTextUnderCursor.Selected; gTVMSecondaryTextUnderCursor := cbSecondaryTextUnderCursor.Selected; gTVMFoundTextUnderCursor := cbFoundTextUnderCursor.Selected; gTVMUnselectableUnderCursor := cbUnselectableUnderCursor.Selected; 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.btnChooseColorClick } procedure TfrmOptionsTreeViewMenuColor.btnChooseColorClick(Sender: TObject); begin with Sender as TButton do begin optColorDialog.Color := ColorBoxPointer[tag].Selected; if optColorDialog.Execute then begin SetColorInColorBox(ColorBoxPointer[tag], optColorDialog.Color); RefreshColorOfOurSampleClick(ColorBoxPointer[tag]); end; end; end; end. doublecmd-0.9.8/src/frames/foptionstreeviewmenucolor.lrt0000644000175000001440000000417612705015424022665 0ustar alexxusersTFRMOPTIONSTREEVIEWMENUCOLOR.GBLAYOUTANDCOLORS.CAPTION=Layout and colors options: TFRMOPTIONSTREEVIEWMENUCOLOR.CBKUSAGEKEYBOARDSHORTCUT.CAPTION=Use and display keyboard shortcut for choosing items TFRMOPTIONSTREEVIEWMENUCOLOR.LBLBACKGROUNDCOLOR.CAPTION=Background color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLSHORTCUTCOLOR.CAPTION=Shortcut color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLNORMALTEXTCOLOR.CAPTION=Normal text color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLSECONDARYTEXTCOLOR.CAPTION=Secondary text color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLFOUNDTEXTCOLOR.CAPTION=Found text color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLUNSELECTABLETEXTCOLOR.CAPTION=Unselectable text color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLCURSORCOLOR.CAPTION=Cursor color: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLSHORTCUTUNDERCURSOR.CAPTION=Shortcut under cursor: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLNORMALTEXTUNDERCURSOR.CAPTION=Normal text under cursor: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLSECONDARYTEXTUNDERCURSOR.CAPTION=Secondary text under cursor: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLFOUNDTEXTUNDERCURSOR.CAPTION=Found text under cursor: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLUNSELECTABLEUNDERCURSOR.CAPTION=Unselectable under cursor: TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.CAPTION=>> TFRMOPTIONSTREEVIEWMENUCOLOR.LBLPREVIEW.CAPTION=Tree View Menu Preview: TFRMOPTIONSTREEVIEWMENUCOLOR.TREEVIEWMENUSAMPLE.HINT=Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample. doublecmd-0.9.8/src/frames/foptionstreeviewmenucolor.lfm0000644000175000001440000005466712705015424022654 0ustar alexxusersinherited frmOptionsTreeViewMenuColor: TfrmOptionsTreeViewMenuColor Height = 402 Width = 577 AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 402 ClientWidth = 577 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 = 371 Top = 10 Width = 565 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 10 Caption = 'Layout and colors options:' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 351 ClientWidth = 561 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 = 33 Width = 97 Anchors = [akTop, akRight] Caption = 'Background color:' FocusControl = cbBackgroundColor ParentColor = False end object cbBackgroundColor: TColorBox Tag = 1 AnchorSideLeft.Control = gbLayoutAndColors AnchorSideTop.Control = cbkUsageKeyboardShortcut AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 29 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] BorderSpacing.Left = 160 BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 1 end object btnBackgroundColor: TButton Tag = 1 AnchorSideLeft.Control = btnNormalTextColor AnchorSideTop.Control = cbBackgroundColor AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 29 Width = 28 BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 2 end object lblShortcutColor: TLabel Tag = 2 AnchorSideTop.Control = cbShortcutColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbShortcutColor Left = 78 Height = 15 Top = 61 Width = 78 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Shortcut color:' FocusControl = cbShortcutColor ParentColor = False end object cbShortcutColor: TColorBox Tag = 2 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbBackgroundColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 57 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 3 end object btnShortcutColor: TButton Tag = 2 AnchorSideLeft.Control = btnNormalTextColor AnchorSideTop.Control = cbShortcutColor AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 57 Width = 28 BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 4 end object lblNormalTextColor: TLabel Tag = 3 AnchorSideTop.Control = cbNormalTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 61 Height = 15 Top = 89 Width = 95 Anchors = [akTop, akRight] Caption = 'Normal text color:' FocusControl = cbNormalTextColor ParentColor = False end object cbNormalTextColor: TColorBox Tag = 3 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbShortcutColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 85 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Constraints.MinWidth = 100 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 5 end object btnNormalTextColor: TButton Tag = 3 AnchorSideLeft.Control = cbNormalTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbNormalTextColor AnchorSideBottom.Control = cbNormalTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 85 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 6 end object lblSecondaryTextColor: TLabel Tag = 4 AnchorSideTop.Control = cbSecondaryTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 46 Height = 15 Top = 117 Width = 110 Anchors = [akTop, akRight] Caption = 'Secondary text color:' FocusControl = cbSecondaryTextColor ParentColor = False end object cbSecondaryTextColor: TColorBox Tag = 4 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbNormalTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 113 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Constraints.MinWidth = 100 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 7 end object btnSecondaryTextColor: TButton Tag = 4 AnchorSideLeft.Control = cbSecondaryTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSecondaryTextColor AnchorSideBottom.Control = cbSecondaryTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 113 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 8 end object lblFoundTextColor: TLabel Tag = 5 AnchorSideTop.Control = cbFoundTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 67 Height = 15 Top = 143 Width = 89 Anchors = [akTop, akRight] Caption = 'Found text color:' FocusControl = cbFoundTextColor ParentColor = False end object cbFoundTextColor: TColorBox Tag = 5 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbSecondaryTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 139 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 9 end object btnFoundTextColor: TButton Tag = 5 AnchorSideLeft.Control = btnNormalTextColor AnchorSideTop.Control = cbFoundTextColor AnchorSideBottom.Control = cbFoundTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 139 Width = 28 Anchors = [akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 10 end object lblUnselectableTextColor: TLabel Tag = 6 AnchorSideTop.Control = cbUnselectableTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 34 Height = 15 Top = 169 Width = 122 Anchors = [akTop, akRight] Caption = 'Unselectable text color:' FocusControl = cbUnselectableTextColor ParentColor = False end object cbUnselectableTextColor: TColorBox Tag = 6 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbFoundTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 165 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 11 end object btnUnselectableTextColor: TButton Tag = 6 AnchorSideLeft.Control = btnNormalTextColor AnchorSideTop.Control = cbUnselectableTextColor AnchorSideBottom.Control = cbUnselectableTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 165 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 12 end object lblCursorColor: TLabel Tag = 7 AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 88 Height = 15 Top = 195 Width = 68 Anchors = [akTop, akRight] Caption = 'Cursor color:' FocusControl = cbCursorColor ParentColor = False end object cbCursorColor: TColorBox Tag = 7 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbUnselectableTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 191 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 13 end object btnCursorColor: TButton Tag = 7 AnchorSideLeft.Control = btnNormalTextColor AnchorSideTop.Control = cbCursorColor AnchorSideBottom.Control = cbCursorColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 191 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 14 end object lblShortcutUnderCursor: TLabel Tag = 8 AnchorSideTop.Control = cbShortcutUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 38 Height = 15 Top = 221 Width = 118 Anchors = [akTop, akRight] Caption = 'Shortcut under cursor:' FocusControl = cbShortcutUnderCursor ParentColor = False end object cbShortcutUnderCursor: TColorBox Tag = 8 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 217 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 15 end object btnShortcutUnderCursor: TButton Tag = 8 AnchorSideLeft.Control = cbShortcutUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbShortcutUnderCursor AnchorSideBottom.Control = cbShortcutUnderCursor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 217 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 16 end object lblNormalTextUnderCursor: TLabel Tag = 9 AnchorSideTop.Control = cbNormalTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 21 Height = 15 Top = 247 Width = 135 Anchors = [akTop, akRight] Caption = 'Normal text under cursor:' FocusControl = cbNormalTextUnderCursor ParentColor = False end object cbNormalTextUnderCursor: TColorBox Tag = 9 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbShortcutUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 243 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 17 end object btnNormalTextUnderCursor: TButton Tag = 9 AnchorSideLeft.Control = cbNormalTextUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbNormalTextUnderCursor AnchorSideBottom.Control = cbNormalTextUnderCursor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 243 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 18 end object lblSecondaryTextUnderCursor: TLabel Tag = 10 AnchorSideTop.Control = cbSecondaryTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 275 Width = 150 Anchors = [akTop, akRight] Caption = 'Secondary text under cursor:' FocusControl = cbSecondaryTextUnderCursor ParentColor = False end object cbSecondaryTextUnderCursor: TColorBox Tag = 10 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbNormalTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 271 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Constraints.MinWidth = 100 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 19 end object btnSecondaryTextUnderCursor: TButton Tag = 10 AnchorSideLeft.Control = cbSecondaryTextUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSecondaryTextUnderCursor AnchorSideBottom.Control = cbSecondaryTextUnderCursor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 271 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 20 end object lblFoundTextUnderCursor: TLabel Tag = 11 AnchorSideTop.Control = cbFoundTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 27 Height = 15 Top = 301 Width = 129 Anchors = [akTop, akRight] Caption = 'Found text under cursor:' FocusControl = cbFoundTextUnderCursor ParentColor = False end object cbFoundTextUnderCursor: TColorBox Tag = 11 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbSecondaryTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 297 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 21 end object btnFoundTextUnderCursor: TButton Tag = 11 AnchorSideLeft.Control = cbFoundTextUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFoundTextUnderCursor AnchorSideBottom.Control = cbFoundTextUnderCursor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 297 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 22 end object lblUnselectableUnderCursor: TLabel Tag = 12 AnchorSideTop.Control = cbUnselectableUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 16 Height = 15 Top = 327 Width = 140 Anchors = [akTop, akRight] Caption = 'Unselectable under cursor:' FocusControl = cbUnselectableUnderCursor ParentColor = False end object cbUnselectableUnderCursor: TColorBox Tag = 12 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbFoundTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 323 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = RefreshColorOfOurSampleClick TabOrder = 23 end object btnUnselectableUnderCursor: TButton Tag = 12 AnchorSideLeft.Control = cbUnselectableUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbUnselectableUnderCursor AnchorSideBottom.Control = cbUnselectableUnderCursor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 323 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnChooseColorClick TabOrder = 24 end object lblPreview: TLabel AnchorSideLeft.Control = TreeViewMenuSample AnchorSideTop.Control = cbkUsageKeyboardShortcut AnchorSideTop.Side = asrCenter AnchorSideRight.Control = TreeViewMenuSample AnchorSideRight.Side = asrBottom Left = 404 Height = 15 Top = 8 Width = 147 Alignment = taCenter Anchors = [akTop, akLeft, akRight] Caption = 'Tree View Menu Preview:' Color = clInactiveCaption ParentColor = False Transparent = False end object TreeViewMenuSample: TTreeView AnchorSideLeft.Control = btnNormalTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPreview AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbLayoutAndColors AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbLayoutAndColors AnchorSideBottom.Side = asrBottom Left = 404 Height = 322 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 = 147 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 10 BackgroundColor = clBtnFace Color = clBtnFace DefaultItemHeight = 18 ReadOnly = True ScrollBars = ssNone TabOrder = 25 Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end object optColorDialog: TColorDialog[1] 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 end doublecmd-0.9.8/src/frames/foptionstreeviewmenu.pas0000644000175000001440000001146712731662527021624 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-0.9.8/src/frames/foptionstreeviewmenu.lrt0000644000175000001440000000332512705015424021621 0ustar alexxusersTFRMOPTIONSTREEVIEWMENU.GBTREEVIEWMENUSETTINGS.CAPTION=Tree View Menus related options: TFRMOPTIONSTREEVIEWMENU.GBWHERETOUSETREEVIEWMENU.CAPTION=Where to use Tree View Menus: TFRMOPTIONSTREEVIEWMENU.LBLUSEINDIRECTORYHOTLIST.CAPTION=With Directory Hotlist: TFRMOPTIONSTREEVIEWMENU.CKBDIRECTORYHOTLISTFROMMENUCOMMAND.CAPTION=With the menu and internal command TFRMOPTIONSTREEVIEWMENU.CKBDIRECTORYHOTLISTFROMDOUBLECLICK.CAPTION=With double-click on the bar on top of a file panel TFRMOPTIONSTREEVIEWMENU.LBLUSEWITHFAVORITETABS.CAPTION=With Favorite Tabs: TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION=With the menu and internal command TFRMOPTIONSTREEVIEWMENU.CKBFAVORITETABSFROMDOUBLECLICK.CAPTION=With double-click on a tab (if configured for it) TFRMOPTIONSTREEVIEWMENU.LBLUSEWITHHISTORY.CAPTION=With History: TFRMOPTIONSTREEVIEWMENU.CKBUSEFORDIRHISTORY.CAPTION=Use it for the Dir History TFRMOPTIONSTREEVIEWMENU.CKBUSEFORVIEWHISTORY.CAPTION=Use it for the View History (Visited paths for active view) TFRMOPTIONSTREEVIEWMENU.CKBUSEFORCOMMANDLINEHISTORY.CAPTION=Use it for Command Line History TFRMOPTIONSTREEVIEWMENU.GBBEHAVIOR.CAPTION=Behavior regarding selection: TFRMOPTIONSTREEVIEWMENU.CKBSHORTCUTSELECTANDCLOSE.CAPTION=When using the keyboard shortcut, it will exit the window returning the current choice TFRMOPTIONSTREEVIEWMENU.CKBSINGLECLICKSELECT.CAPTION=Single mouse click in tree select and exit TFRMOPTIONSTREEVIEWMENU.CKBDOUBLECLICKSELECT.CAPTION=Double click in tree select and exit TFRMOPTIONSTREEVIEWMENU.LBLNOTE.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. doublecmd-0.9.8/src/frames/foptionstreeviewmenu.lfm0000644000175000001440000001754112705015424021603 0ustar alexxusersinherited frmOptionsTreeViewMenu: TfrmOptionsTreeViewMenu Height = 415 Width = 590 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-0.9.8/src/frames/foptionstooltips.pas0000644000175000001440000006270513404102631020742 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tooltips options page Copyright (C) 2011-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 fOptionsToolTips; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, DividerBevel, Forms, Controls, StdCtrls, Buttons, Menus, ExtCtrls, Dialogs, fOptionsFrame, uInfoToolTip; type { TfrmOptionsToolTips } TfrmOptionsToolTips = class(TOptionsEditor) 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, '*.*']); 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; FreeThenNil(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; if lsbCustomFields.ItemIndex <> -1 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; lsbCustomFieldsSelectionChange(lsbCustomFields, False); end else begin ClearData; end; 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.Caption + '{}]'; 2: sMask := '[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}]'; 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-0.9.8/src/frames/foptionstooltips.lrj0000644000175000001440000000702713340371272020752 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-0.9.8/src/frames/foptionstooltips.lfm0000644000175000001440000003643713340371272020750 0ustar alexxusersinherited frmOptionsToolTips: TfrmOptionsToolTips Height = 480 Width = 826 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 ParentColor = False 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 Cancel = True 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 Left = 0 Height = 407 Top = 34 Width = 696 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 407 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 ParentColor = False 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 ParentColor = False 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 object bvlToolTips2: TDividerBevel AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = btnFieldsList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 281 Width = 681 Caption = 'General options about tooltips:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 10 ParentFont = False end object lblTooltipShowingMode: TLabel AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = cbTooltipShowingMode AnchorSideTop.Side = asrCenter Left = 5 Height = 15 Top = 305 Width = 122 Caption = 'Tooltip showing mode:' FocusControl = cbTooltipShowingMode ParentColor = False end object cbTooltipShowingMode: TComboBox AnchorSideLeft.Control = lblTooltipShowingMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = bvlToolTips2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom Left = 132 Height = 23 Top = 301 Width = 554 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 5 ItemHeight = 15 Style = csDropDownList TabOrder = 4 end object lblTooltipHidingDelay: TLabel AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = cbToolTipHideTimeOut AnchorSideTop.Side = asrCenter Left = 5 Height = 15 Top = 333 Width = 108 Caption = 'Tooltip hiding delay:' FocusControl = cbToolTipHideTimeOut ParentColor = False end object cbToolTipHideTimeOut: TComboBox AnchorSideLeft.Control = lblTooltipHidingDelay AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTooltipShowingMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom Left = 118 Height = 23 Top = 329 Width = 568 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 5 ItemHeight = 15 Style = csDropDownList TabOrder = 5 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-0.9.8/src/frames/foptionstoolseditor.pas0000644000175000001440000000760113340612022021425 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tools options page for the editor tool 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsToolsEditor; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, Dialogs, Buttons, EditBtn, Menus, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsEditor } TfrmOptionsEditor = class(TfrmOptionsToolBase) gbInternalEditor: TGroupBox; pnlBooleanOptions: TPanel; chkAutoIndent: TCheckBox; chkTrimTrailingSpaces: TCheckBox; chkScrollPastEndLine: TCheckBox; chkShowSpecialChars: TCheckBox; chkTabsToSpaces: TCheckBox; chkTabIndent: TCheckBox; lblTabWidth: TLabel; edTabWidth: TEdit; chkSmartTabs: TCheckBox; 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 SynEdit, 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; edTabWidth.Text := IntToStr(gEditorSynEditTabWidth); 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(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); edTabWidth.Text := IntToStr(StrToIntDef(edTabWidth.Text,8)); gEditorSynEditTabWidth := StrToIntDef(edTabWidth.Text,8); 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-0.9.8/src/frames/foptionstoolseditor.lrj0000644000175000001440000001367213340613042021441 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":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:"} ]} doublecmd-0.9.8/src/frames/foptionstoolseditor.lfm0000644000175000001440000001060113340613042021415 0ustar alexxusersinherited frmOptionsEditor: TfrmOptionsEditor Height = 513 Width = 586 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 = 146 Top = 200 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 = 126 ClientWidth = 567 TabOrder = 5 object pnlBooleanOptions: TPanel Left = 6 Height = 88 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 = 88 ClientWidth = 555 TabOrder = 0 object chkAutoIndent: TCheckBox Left = 6 Height = 19 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 = 305 Caption = 'Auto Indent' TabOrder = 0 end object chkTrimTrailingSpaces: TCheckBox Left = 323 Height = 19 Hint = 'Auto delete trailing spaces, this applies only to edited lines' Top = 6 Width = 226 Caption = 'Delete trailing spaces' TabOrder = 1 end object chkScrollPastEndLine: TCheckBox AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Hint = 'Allows caret to go into empty space beyond end-of-line position' Top = 25 Width = 305 BorderSpacing.Left = 6 Caption = 'Caret past end of line' TabOrder = 2 end object chkShowSpecialChars: TCheckBox Left = 323 Height = 19 Hint = 'Shows special characters for spaces and tabulations' Top = 25 Width = 226 Caption = 'Show special characters' TabOrder = 3 end object chkTabsToSpaces: TCheckBox Left = 6 Height = 19 Hint = 'Converts tab characters to a specified number of space characters (when entering)' Top = 44 Width = 305 Caption = 'Use spaces instead tab characters' TabOrder = 4 end object chkTabIndent: TCheckBox Left = 323 Height = 19 Hint = 'When active and act as block indent, unindent when text is selected' Top = 44 Width = 226 Caption = 'Tab indents blocks' TabOrder = 5 end object chkSmartTabs: TCheckBox Left = 6 Height = 19 Hint = 'When using key, caret will go to the next non-space character of the previous line' Top = 63 Width = 305 Caption = 'Smart Tabs' TabOrder = 6 end end object edTabWidth: TEdit AnchorSideLeft.Control = lblTabWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlBooleanOptions AnchorSideTop.Side = asrBottom Left = 64 Height = 23 Hint = 'Please note that the "Smart Tabs" option takes precedence over the tabulation to be performed' Top = 97 Width = 80 BorderSpacing.Top = 3 TabOrder = 1 end object lblTabWidth: TLabel AnchorSideLeft.Control = pnlBooleanOptions AnchorSideTop.Control = edTabWidth AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Hint = 'Please note that the "Smart Tabs" option takes precedence over the tabulation to be performed' Top = 101 Width = 55 Caption = 'Tab width:' FocusControl = edTabWidth ParentColor = False end end inherited pmPathHelper: TPopupMenu[9] left = 424 top = 8 end end doublecmd-0.9.8/src/frames/foptionstoolsdiffer.pas0000644000175000001440000000434212724572670021420 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-0.9.8/src/frames/foptionstoolsdiffer.lrt0000644000175000001440000000015512645167345021435 0ustar alexxusersTFRMOPTIONSDIFFER.RGRESULTINGFRAMEPOSITIONAFTERCOMPARE.CAPTION=Position of frame panel after the comparison: doublecmd-0.9.8/src/frames/foptionstoolsdiffer.lfm0000644000175000001440000000257412724572670021420 0ustar alexxusersinherited frmOptionsDiffer: TfrmOptionsDiffer Height = 478 Width = 586 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-0.9.8/src/frames/foptionstools.pas0000644000175000001440000001177412650521504020233 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tools options page Copyright (C) 2006-2014 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) btnBackViewerColor: TButton; btnFontViewerColor: TButton; cbBackgroundColorViewerBook: TColorBox; cbFontColorViewerBook: TColorBox; gbViewerBookMode: TGroupBox; gbViewerExample: TGroupBox; lblBackgroundColorViewerBook: TLabel; lblFontColorViewerBook: TLabel; lblNumberColumnsViewer: TLabel; optColorDialog: TColorDialog; pbViewerBook: TPaintBox; seNumberColumnsViewer: TSpinEdit; procedure btnBackViewerColorClick(Sender: TObject); procedure btnFontViewerColorClick(Sender: TObject); procedure cbColorBoxChange(Sender: TObject); procedure seNumberColumnsViewerChange(Sender: TObject); procedure pbViewerBookPaint(Sender: TObject); private FPreviewTextSize: TSize; procedure UseExternalProgramChanged(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 uDCUtils, uGlobs, uLng; const ViewerBookPreviewText = 'Text'; { TfrmOptionsViewer } procedure TfrmOptionsViewer.btnBackViewerColorClick(Sender: TObject); begin optColorDialog.Color:= cbBackgroundColorViewerBook.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackgroundColorViewerBook, optColorDialog.Color); end; end; procedure TfrmOptionsViewer.btnFontViewerColorClick(Sender: TObject); begin optColorDialog.Color:= cbFontColorViewerBook.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbFontColorViewerBook, optColorDialog.Color); end; end; procedure TfrmOptionsViewer.cbColorBoxChange(Sender: TObject); begin pbViewerBook.Repaint; end; procedure TfrmOptionsViewer.seNumberColumnsViewerChange(Sender: TObject); begin pbViewerBook.Repaint; end; procedure TfrmOptionsViewer.pbViewerBookPaint(Sender: TObject); var i, numb: integer; begin with pbViewerBook.Canvas do begin Brush.Color := cbBackgroundColorViewerBook.Selected; Font.Color := cbFontColorViewerBook.Selected; FillRect(0, 0, pbViewerBook.Width, pbViewerBook.Height); for i:= 0 to seNumberColumnsViewer.Value - 1 do begin for numb:= 0 to 1 do TextOut(i * (FPreviewTextSize.cx + 5) + 5, FPreviewTextSize.cy * numb + 4, ViewerBookPreviewText); end; end; end; procedure TfrmOptionsViewer.UseExternalProgramChanged(Sender: TObject); begin gbViewerBookMode.Enabled := not (cbToolsUseExternalProgram.Checked); lblBackgroundColorViewerBook.Enabled := not (cbToolsUseExternalProgram.Checked); lblNumberColumnsViewer.Enabled := not (cbToolsUseExternalProgram.Checked); lblFontColorViewerBook.Enabled := not (cbToolsUseExternalProgram.Checked); end; class function TfrmOptionsViewer.GetIconIndex: Integer; begin Result := 22; end; class function TfrmOptionsViewer.GetTitle: String; begin Result := rsToolViewer; end; procedure TfrmOptionsViewer.Init; begin ExternalTool := etViewer; OnUseExternalProgramChange := @UseExternalProgramChanged; gbViewerBookMode.Enabled := not (cbToolsUseExternalProgram.Checked); pbViewerBook.Font.Name := gFonts[dcfViewerBook].Name; pbViewerBook.Font.Size := gFonts[dcfViewerBook].Size; pbViewerBook.Font.Style := gFonts[dcfViewerBook].Style; inherited Init; FPreviewTextSize := pbViewerBook.Canvas.TextExtent(ViewerBookPreviewText); end; procedure TfrmOptionsViewer.Load; begin inherited; seNumberColumnsViewer.Value := gColCount; SetColorInColorBox(cbBackgroundColorViewerBook,gBookBackgroundColor); SetColorInColorBox(cbFontColorViewerBook,gBookFontColor); end; function TfrmOptionsViewer.Save: TOptionsEditorSaveFlags; begin Result := inherited; gColCount := seNumberColumnsViewer.Value; gBookBackgroundColor := cbBackgroundColorViewerBook.Selected; gBookFontColor := cbFontColorViewerBook.Selected; end; end. doublecmd-0.9.8/src/frames/foptionstools.lrt0000644000175000001440000000070512020403374020234 0ustar alexxusersTFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION=Viewer Book Mode TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION=&Background color in book viewer TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION=&Number of columns in book viewer TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION=Example TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION=>> TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION=>> TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION=&Font color in book viewer doublecmd-0.9.8/src/frames/foptionstools.lfm0000644000175000001440000001451412650237762020233 0ustar alexxusersinherited frmOptionsViewer: TfrmOptionsViewer Height = 513 Width = 586 ClientHeight = 513 ClientWidth = 586 DesignLeft = 384 DesignTop = 288 inherited edtToolsParameters: TEdit Top = 113 end inherited fneToolsPath: TFileNameEdit Top = 61 end inherited lblToolsPath: TLabel Height = 15 Width = 144 end inherited lblToolsParameters: TLabel Height = 15 Top = 94 Width = 117 end inherited cbToolsKeepTerminalOpen: TCheckBox Top = 169 end inherited cbToolsRunInTerminal: TCheckBox Top = 148 end inherited btnRelativeToolPath: TSpeedButton Top = 61 end object gbViewerBookMode: TGroupBox[8] AnchorSideLeft.Control = fneToolsPath AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = fneToolsPath AnchorSideRight.Side = asrBottom Left = 8 Height = 250 Top = 200 Width = 525 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 10 Caption = 'Viewer Book Mode' ChildSizing.TopBottomSpacing = 6 ClientHeight = 230 ClientWidth = 521 TabOrder = 5 object lblBackgroundColorViewerBook: TLabel AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbBackgroundColorViewerBook Left = 8 Height = 15 Top = 12 Width = 174 Caption = '&Background color in book viewer' FocusControl = cbBackgroundColorViewerBook ParentColor = False end object seNumberColumnsViewer: TSpinEdit AnchorSideLeft.Control = cbFontColorViewerBook AnchorSideTop.Control = cbFontColorViewerBook AnchorSideTop.Side = asrBottom Left = 202 Height = 23 Top = 62 Width = 36 BorderSpacing.Top = 5 MaxValue = 3 MinValue = 1 OnChange = seNumberColumnsViewerChange TabOrder = 5 Value = 1 end object lblNumberColumnsViewer: TLabel AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideTop.Control = seNumberColumnsViewer AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 66 Width = 187 Caption = '&Number of columns in book viewer' FocusControl = seNumberColumnsViewer ParentColor = False end object gbViewerExample: TGroupBox AnchorSideLeft.Control = gbViewerBookMode AnchorSideTop.Control = lblNumberColumnsViewer AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbViewerBookMode AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = seNumberColumnsViewer AnchorSideBottom.Side = asrBottom Left = 8 Height = 135 Top = 89 Width = 505 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 8 Caption = 'Example' ClientHeight = 115 ClientWidth = 501 TabOrder = 4 object pbViewerBook: TPaintBox Left = 5 Height = 105 Top = 5 Width = 491 Align = alClient BorderSpacing.Around = 5 OnPaint = pbViewerBookPaint end end object btnFontViewerColor: TButton AnchorSideLeft.Control = cbFontColorViewerBook AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFontColorViewerBook AnchorSideRight.Control = btnBackViewerColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbFontColorViewerBook AnchorSideBottom.Side = asrBottom Left = 481 Height = 22 Top = 35 Width = 24 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 Caption = '>>' OnClick = btnFontViewerColorClick TabOrder = 3 end object btnBackViewerColor: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideBottom.Control = cbBackgroundColorViewerBook AnchorSideBottom.Side = asrBottom Left = 481 Height = 22 Top = 8 Width = 24 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 5 Caption = '>>' OnClick = btnBackViewerColorClick TabOrder = 1 end object cbFontColorViewerBook: TColorBox AnchorSideLeft.Control = cbBackgroundColorViewerBook AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColorViewerBook AnchorSideRight.Side = asrBottom Left = 202 Height = 22 Top = 35 Width = 275 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 5 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 2 end object lblFontColorViewerBook: TLabel AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideTop.Control = cbFontColorViewerBook AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 39 Width = 134 BorderSpacing.Top = 10 Caption = '&Font color in book viewer' FocusControl = cbFontColorViewerBook ParentColor = False end object cbBackgroundColorViewerBook: TColorBox AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = btnBackViewerColor Left = 202 Height = 22 Top = 8 Width = 275 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 0 end end inherited pmPathHelper: TPopupMenu[9] left = 528 top = 168 end object optColorDialog: TColorDialog[10] 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 = 16 top = 128 end end doublecmd-0.9.8/src/frames/foptionstoolbase.pas0000644000175000001440000001302512453544105020675 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-0.9.8/src/frames/foptionstoolbase.lrt0000644000175000001440000000073312365151656020724 0ustar alexxusersTFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION=&Path to program to execute TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION=A&dditional parameters TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION=&Keep terminal window open after executing program TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION=&Execute in terminal TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION=&Use external program TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT=Some functions to select appropriate path doublecmd-0.9.8/src/frames/foptionstoolbase.lfm0000644000175000001440000001340412724572670020702 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-0.9.8/src/frames/foptionstoolbar.pas0000644000175000001440000020360513467737150020546 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Toolbar configuration options page Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) 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 fOptionsToolbar; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus, fOptionsFrame, KASToolBar, KASToolItems, uFormCommands, uHotkeyManager, DCBasicTypes, fOptionsHotkeysEditHotkey, DCXmlConfig; type { TfrmOptionsToolbar } TfrmOptionsToolbar = class(TOptionsEditor) btnInsertButton: TButton; btnCloneButton: TButton; btnDeleteButton: TButton; btnParametersHelper: TSpeedButton; btnSuggestionTooltip: TButton; btnOpenFile: TButton; btnEditHotkey: TButton; btnOpenCmdDlg: TButton; btnRelativeStartPath: TSpeedButton; btnStartPath: TButton; btnRelativeIconFileName: TSpeedButton; btnRemoveHotkey: TButton; cbInternalCommand: TComboBox; cbFlatButtons: TCheckBox; edtExternalParameters: TEdit; edtExternalCommand: TEdit; 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; pmparameteresHelper: TPopupMenu; 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 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(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); private 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); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; class function GetTitle: String; override; function IsSignatureComputedFromAllWindowComponents: Boolean; override; function ExtraOptionsSignature(CurrentSignature:dword):dword; override; procedure SelectButton(ButtonNumber: Integer); end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. crc, LazUTF8, LCLVersion, Toolwin, //DC {$IFDEF MSWINDOWS} uTotalCommander, {$ENDIF} uComponentsSignature, fEditSearch, fMainCommandsDlg, uFileProcs, uDebug, DCOSUtils, uShowMsg, DCStrUtils, uGlobs, 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; { TfrmOptionsToolbar } class function TfrmOptionsToolbar.GetIconIndex: Integer; begin Result := 32; end; class function TfrmOptionsToolbar.GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; var Hotkey: THotkey; begin Hotkey := FindHotkey(NormalItem); if Assigned(Hotkey) then Result := Hotkey.Shortcuts else Result := nil; end; class function TfrmOptionsToolbar.GetTitle: String; begin Result := rsOptionsEditorToolbar; end; { TfrmOptionsToolbar.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsToolbar.IsSignatureComputedFromAllWindowComponents: Boolean; begin Result := False; end; { TfrmOptionsToolbar.ExtraOptionsSignature } function TfrmOptionsToolbar.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 TfrmOptionsToolbar.GetTopToolbar: TKASToolBar; begin if pnToolbars.ControlCount > 0 then Result := pnToolbars.Controls[0] as TKASToolBar else Result := nil; end; procedure TfrmOptionsToolbar.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, '*.*']); SaveDialog.Filter := ParseLineToFileFilter([rsFilterToolbarFiles, '*.toolbar', rsFilterTCToolbarFiles, '*.BAR', rsFilterAnyFiles, '*.*']); 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; end; procedure TfrmOptionsToolbar.Load; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin {$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} trbBarSize.Position := gToolBarButtonSize div 2; trbIconSize.Position := gToolBarIconSize div 2; cbFlatButtons.Checked := gToolBarFlat; 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, 'Toolbars/MainToolbar', False); LoadToolbar(ToolBar, gConfig, ToolBarNode, tocl_FlushCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmparameteresHelper,edtExternalParameters); FUpdateHotKey := False; end; procedure TfrmOptionsToolbar.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 ButtonTypeIndex := 0; 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 TfrmOptionsToolbar.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; 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); end; procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.PressButtonDown(Button: TKASToolButton); begin FUpdatingButtonType := True; Button.Click; FUpdatingButtonType := False; end; procedure TfrmOptionsToolbar.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; function TfrmOptionsToolbar.Save: TOptionsEditorSaveFlags; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin ApplyEditControls; gToolBarFlat := cbFlatButtons.Checked; gToolbarReportErrorWithCommands := cbReportErrorWithCommands.Checked; gToolBarButtonSize := trbBarSize.Position * 2; gToolBarIconSize := trbIconSize.Position * 2; ToolBar := GetTopToolbar; if Assigned(ToolBar) then begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True); gConfig.ClearNode(ToolBarNode); Toolbar.SaveConfiguration(gConfig, ToolBarNode); end; if FUpdateHotKey then begin FUpdateHotKey := False; HotMan.Save(gpCfgDir + gNameSCFile); end; Result := []; end; procedure TfrmOptionsToolbar.btnOpenIconClick(Sender: TObject); var sFileName: String; begin sFileName := GetCmdDirFromEnvVar(edtIconFileName.Text); if ShowOpenIconDialog(Self, sFileName) then edtIconFileName.Text := sFileName; end; function TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.ApplyEditControls; var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; begin if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; 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 TfrmOptionsToolbar.btnInsertButtonClick(Sender: TObject); begin pmInsertButtonMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbar.btnOpenCmdDlgClick } procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.btnParametersHelperClick(Sender: TObject); begin pmparameteresHelper.PopUp; end; procedure TfrmOptionsToolbar.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; { TfrmOptionsToolbar.miSrcRplClick } procedure TfrmOptionsToolbar.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 := StringReplace(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 = []; 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; {$IFDEF MSWINDOWS} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveUnchecked]; {$ELSE} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveChecked]; {$ENDIF} 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 TfrmOptionsToolbar.btnRelativeExternalCommandClick(Sender: TObject); begin edtExternalCommand.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtExternalCommand,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.btnRelativeIconFileNameClick(Sender: TObject); begin edtIconFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtIconFileName,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.btnRelativeStartPathClick(Sender: TObject); begin edtStartPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtStartPath,pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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, '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 TfrmOptionsToolbar.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 := OpenDialog.FileName; edtStartPath.Text := ExtractFilePath(OpenDialog.FileName); edtIconFileName.Text := OpenDialog.FileName; edtToolTip.Text := ExtractOnlyFileName(OpenDialog.FileName); end; end; procedure TfrmOptionsToolbar.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:=MaybeResultingOutputPath; end; { TfrmOptionsToolbar.btnSuggestionTooltipClick } procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.cbInternalCommandSelect(Sender: TObject); var Command: String; begin Command := cbInternalCommand.Items[cbInternalCommand.ItemIndex]; edtToolTip.Text := FFormCommands.GetCommandCaption(Command, cctLong); edtIconFileName.Text := UTF8LowerCase(Command); end; procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.CloseToolbar(Index: Integer); begin if Index > 0 then pnToolbars.Controls[Index].Free; end; procedure TfrmOptionsToolbar.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 TfrmOptionsToolbar.edtIconFileNameChange(Sender: TObject); begin if not FUpdatingIconText then UpdateIcon(edtIconFileName.Text); end; procedure TfrmOptionsToolbar.lblHelpOnInternalCommandClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/cmds.html#' + cbInternalCommand.Text); end; class function TfrmOptionsToolbar.FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey; var i: Integer; ToolItemID: String; begin for i := 0 to Hotkeys.Count - 1 do begin Result := Hotkeys.Items[i]; if (Result.Command = cHotKeyCommand) and (GetParamValue(Result.Params, 'ToolItemID', ToolItemID)) and (ToolItemID = NormalItem.ID) then Exit; end; Result := nil; end; class function TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 TfrmOptionsToolbar.ToolbarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FToolDragButtonNumber := -1; end; function TfrmOptionsToolbar.ToolbarToolItemShortcutsHint(ToolItem: TKASNormalItem): String; begin Result := ShortcutsToText(GetShortcuts(ToolItem)); end; procedure TfrmOptionsToolbar.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; { TfrmOptionsToolbar.FrameEnter } procedure TfrmOptionsToolbar.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; { TfrmOptionsToolbar.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 TfrmOptionsToolbar.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 Result := crc32(Result, @CONSTFORTOOLITEM[1], 1); 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; { TfrmOptionsToolbar.btnExportClick } procedure TfrmOptionsToolbar.btnOtherClick(Sender: TObject); begin pmOtherClickToolbar.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbar.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 TfrmOptionsToolbar.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, 'Toolbars/MainToolbar', 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, 'Toolbars/MainToolbar', 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; { TfrmOptionsToolbar.miExportToAnythingClick } procedure TfrmOptionsToolbar.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, 'Toolbars/MainToolbar', 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; { TfrmOptionsToolbar.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 TfrmOptionsToolbar.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, 'Toolbars/MainToolbar', 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, 'Toolbars/MainToolbar', 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; end. doublecmd-0.9.8/src/frames/foptionstoolbar.lrt0000644000175000001440000001637012731662527020563 0ustar alexxusersTFRMOPTIONSTOOLBAR.GBGROUPBOX.CAPTION=Appearance TFRMOPTIONSTOOLBAR.LBLBARSIZE.CAPTION=&Bar size: TFRMOPTIONSTOOLBAR.LBLICONSIZE.CAPTION=Icon si&ze: TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION=&Flat buttons TFRMOPTIONSTOOLBAR.CBREPORTERRORWITHCOMMANDS.CAPTION=Report errors with commands TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION=&Insert new button TFRMOPTIONSTOOLBAR.BTNCLONEBUTTON.CAPTION=C&lone button TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION=&Delete TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION=Other... TFRMOPTIONSTOOLBAR.RGTOOLITEMTYPE.CAPTION=Button type TFRMOPTIONSTOOLBAR.LBLICONFILE.CAPTION=Ico&n: TFRMOPTIONSTOOLBAR.LBLTOOLTIP.CAPTION=&Tooltip: TFRMOPTIONSTOOLBAR.LBLINTERNALCOMMAND.CAPTION=Co&mmand: TFRMOPTIONSTOOLBAR.LBLINTERNALPARAMETERS.CAPTION=&Parameters: TFRMOPTIONSTOOLBAR.EDTINTERNALPARAMETERS.HINT=Enter command parameters, each in a separate line. Press F1 to see help on parameters. TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION=Comman&d: TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION=>> TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION=Parameter&s: TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION=Start pat&h: TFRMOPTIONSTOOLBAR.LBLHOTKEY.CAPTION=Hot key: TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION=Edit hot&key TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION=Remove hotke&y TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION=>> TFRMOPTIONSTOOLBAR.BTNOPENCMDDLG.CAPTION=Select TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION=Help TFRMOPTIONSTOOLBAR.BTNSUGGESTIONTOOLTIP.HINT=Have DC suggest the tooltip based on button type, command and parameters TFRMOPTIONSTOOLBAR.BTNSUGGESTIONTOOLTIP.CAPTION=Suggest TFRMOPTIONSTOOLBAR.MIADDSEPARATORSUBMENU.CAPTION=for a separator TFRMOPTIONSTOOLBAR.MISEPARATORFIRSTITEM.CAPTION=as first element TFRMOPTIONSTOOLBAR.MISEPARATORPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MISEPARATORAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MISEPARATORLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDINTERNALCOMMANDSUBMENU.CAPTION=for an internal command TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDEXTERNALCOMMANDSUBMENU.CAPTION=for an external command TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDSUBTOOLBARSUBMENU.CAPTION=for a sub-tool bar TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDALLCMDS.CAPTION=Add toolbar with ALL DC commands TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION=Search and replace... TFRMOPTIONSTOOLBAR.MISRCRPLICONNAMES.CAPTION=in all icon names... TFRMOPTIONSTOOLBAR.MISRCRPLCOMMANDS.CAPTION=in all commands... TFRMOPTIONSTOOLBAR.MISRCRPLPARAMETERS.CAPTION=in all parameters... TFRMOPTIONSTOOLBAR.MISRCRPLSTARTPATH.CAPTION=in all start path... TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION=- TFRMOPTIONSTOOLBAR.MISRCRPLALLOFALL.CAPTION=in all of all the above... TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION=Export... TFRMOPTIONSTOOLBAR.MIEXPORTTOP.CAPTION=Top toolbar... TFRMOPTIONSTOOLBAR.MIEXPORTTOPTODCBAR.CAPTION=to a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION=to a "wincmd.ini" of TC (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION=to a "wincmd.ini" of TC (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCBARKEEP.CAPTION=to a TC .BAR file (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCBARNOKEEP.CAPTION=to a TC .BAR file (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENT.CAPTION=Current toolbar... TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION=to a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION=to a "wincmd.ini" of TC (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION=to a "wincmd.ini" of TC (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION=to a TC .BAR file (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION=to a TC .BAR file (erase existing) TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION=Import... TFRMOPTIONSTOOLBAR.MIIMPORTDCBAR.CAPTION=from a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIIMPORTDCBARREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINI.CAPTION=from "wincmd.ini" of TC... TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBAR.CAPTION=from a single TC .BAR file TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION=- TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION=Backup... TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOBACKUP.CAPTION=Save a backup of Toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUP.CAPTION=Restore a backup of Toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar doublecmd-0.9.8/src/frames/foptionstoolbar.lfm0000644000175000001440000013331712731662527020541 0ustar alexxusersinherited frmOptionsToolbar: TfrmOptionsToolbar Height = 573 Width = 850 ClientHeight = 573 ClientWidth = 850 OnEnter = FrameEnter DesignLeft = 79 DesignTop = 199 object gbGroupBox: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 101 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 = 81 ClientWidth = 834 TabOrder = 0 object lblBarSize: TLabel AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 20 Width = 42 Caption = '&Bar size:' FocusControl = trbBarSize ParentColor = False end object lblBarSizeValue: TLabel AnchorSideLeft.Control = lblBarSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 52 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 = 56 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 = 221 Height = 15 Top = 20 Width = 48 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 = 271 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 = 275 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 = 19 Top = 58 Width = 83 BorderSpacing.Top = 8 Caption = '&Flat buttons' Checked = True OnChange = cbFlatButtonsChange State = cbChecked TabOrder = 2 end object cbReportErrorWithCommands: TCheckBox AnchorSideLeft.Control = cbFlatButtons AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFlatButtons Left = 103 Height = 19 Top = 58 Width = 177 BorderSpacing.Left = 12 Caption = 'Report errors with commands' TabOrder = 3 end end object pnlFullToolbarButtons: TPanel[1] AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEditToolbar Left = 6 Height = 25 Top = 248 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 2 BorderSpacing.Bottom = 2 BevelOuter = bvNone ClientHeight = 25 ClientWidth = 838 TabOrder = 1 object pnlToolbarButtons: TPanel AnchorSideLeft.Control = pnlFullToolbarButtons AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlFullToolbarButtons AnchorSideBottom.Side = asrBottom Left = 209 Height = 25 Top = 0 Width = 420 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 = 25 ClientWidth = 420 TabOrder = 0 object btnInsertButton: TButton Left = 0 Height = 25 Top = 0 Width = 119 AutoSize = True Caption = '&Insert new button' OnClick = btnInsertButtonClick TabOrder = 0 end object btnCloneButton: TButton Left = 127 Height = 25 Top = 0 Width = 96 AutoSize = True Caption = 'C&lone button' OnClick = btnCloneButtonClick TabOrder = 1 end object btnDeleteButton: TButton Left = 231 Height = 25 Top = 0 Width = 59 AutoSize = True Caption = '&Delete' OnClick = btnDeleteButtonClick TabOrder = 2 end object btnOther: TButton Left = 355 Height = 25 Top = 0 Width = 65 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 = 292 Top = 275 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 BevelOuter = bvNone ClientHeight = 292 ClientWidth = 838 TabOrder = 2 object rgToolItemType: TRadioGroup AnchorSideLeft.Control = pnlEditToolbar AnchorSideTop.Control = pnlEditToolbar AnchorSideBottom.Control = pnlEditToolbar AnchorSideBottom.Side = asrBottom Left = 0 Height = 292 Top = 0 Width = 81 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 = 87 Height = 292 Top = 0 Width = 745 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 = 292 ClientWidth = 745 TabOrder = 1 object lblIconFile: TLabel Left = 0 Height = 15 Top = 6 Width = 62 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 = 64 Height = 23 Top = 2 Width = 617 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 = 681 Height = 23 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 = 15 Top = 31 Width = 62 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 = 64 Height = 23 Top = 27 Width = 602 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 1 Visible = False end object lblInternalCommand: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 56 Width = 62 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 = 64 Height = 23 Top = 52 Width = 585 HelpType = htKeyword Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 DropDownCount = 20 ItemHeight = 15 OnSelect = cbInternalCommandSelect Style = csDropDownList TabOrder = 2 Visible = False end object lblInternalParameters: TLabel Left = 0 Height = 100 Top = 81 Width = 62 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 AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblInternalParameters AnchorSideBottom.Side = asrBottom Left = 64 Height = 100 Hint = 'Enter command parameters, each in a separate line. Press F1 to see help on parameters.' Top = 81 Width = 681 HelpType = htKeyword Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 2 ParentShowHint = False ScrollBars = ssAutoBoth ShowHint = True TabOrder = 3 Visible = False WordWrap = False end object lblExternalCommand: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 191 Width = 62 Alignment = taRightJustify Caption = 'Comman&d:' 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 = 64 Height = 23 Top = 187 Width = 617 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 = 681 Height = 23 Top = 187 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 = 15 Top = 216 Width = 62 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 = 64 Height = 23 Top = 212 Width = 649 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 6 Visible = False end object lblStartPath: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 241 Width = 62 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 = 64 Height = 23 Top = 237 Width = 617 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 7 Visible = False end object lblHotkey: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 266 Width = 62 Alignment = taRightJustify Caption = 'Hot key:' ParentColor = False Visible = False end object lblHotkeyValue: TLabel AnchorSideLeft.Control = lblHotkey AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey Left = 64 Height = 1 Top = 266 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 = 75 Height = 25 Top = 261 Width = 85 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 = 162 Height = 25 Top = 261 Width = 108 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 = 713 Height = 23 Top = 187 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 = 713 Height = 23 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 = 681 Height = 23 Top = 237 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 = 713 Height = 23 Top = 237 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 = 652 Height = 23 Top = 52 Width = 65 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 = 720 Height = 15 Top = 56 Width = 25 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 = 669 Height = 23 Hint = 'Have DC suggest the tooltip based on button type, command and parameters' Top = 27 Width = 76 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 = 713 Height = 23 Top = 212 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 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 = 143 Top = 103 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 object pmparameteresHelper: TPopupMenu[10] left = 687 top = 483 end end doublecmd-0.9.8/src/frames/foptionsterminal.pas0000644000175000001440000000543512732120253020700 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-0.9.8/src/frames/foptionsterminal.lrt0000644000175000001440000000203312732120253020705 0ustar alexxusersTFRMOPTIONSTERMINAL.GBRUNINTERMINALSTAYOPEN.CAPTION=Command for running a command in terminal and stay open: TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION=Command: TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION=Parameters: TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal TFRMOPTIONSTERMINAL.GBRUNINTERMINALCLOSE.CAPTION=Command for running a command in terminal and close after: TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION=Command: TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION=Parameters: TFRMOPTIONSTERMINAL.GBJUSTRUNTERMINAL.CAPTION=Command for just running terminal: TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION=Command: TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION=Parameters: TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal doublecmd-0.9.8/src/frames/foptionsterminal.lfm0000644000175000001440000001506312732120253020671 0ustar alexxusersinherited frmOptionsTerminal: TfrmOptionsTerminal Height = 324 Width = 519 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 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 end doublecmd-0.9.8/src/frames/foptionstabsextra.pas0000644000175000001440000001272012731662527021073 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-0.9.8/src/frames/foptionstabsextra.lrt0000644000175000001440000000237612656270711021113 0ustar alexxusersTFRMOPTIONSTABSEXTRA.GBTABS.CAPTION=Folder tabs headers extra TFRMOPTIONSTABSEXTRA.CBUSEFAVORITETABSEXTRAOPTIONS.CAPTION=Enable Favorite Tabs extra options (select target side when restore, etc.) TFRMOPTIONSTABSEXTRA.GBDEFAULTTABSAVEDRESTORATION.CAPTION=Default extra settings when saving new Favorite Tabs: TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT=Left TFRMOPTIONSTABSEXTRA.LBLDEFAULTTARGETPANELLEFTSAVED.CAPTION=Tabs saved on left will be restored to: TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT=Right TFRMOPTIONSTABSEXTRA.LBLDEFAULTTARGETPANELRIGHTSAVED.CAPTION=Tabs saved on right will be restored to: TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT=None TFRMOPTIONSTABSEXTRA.LBLDEFAULTEXISTINGTABSTOKEEP.CAPTION=When restoring tab, existing tabs to keep: TFRMOPTIONSTABSEXTRA.CBGOTOCONFIGAFTERSAVE.CAPTION=Goto to Favorite Tabs Configuration after saving a new one TFRMOPTIONSTABSEXTRA.CBGOTOCONFIGAFTERRESAVE.CAPTION=Goto to Favorite Tabs Configuration after resaving TFRMOPTIONSTABSEXTRA.RGWHERETOADD.CAPTION=Default position in menu when saving a new Favorite Tabs: TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT=No TFRMOPTIONSTABSEXTRA.LBLFAVORITETABSSAVEDIRHISTORY.CAPTION=Keep saving dir history with Favorite Tabs: doublecmd-0.9.8/src/frames/foptionstabsextra.lfm0000644000175000001440000002010013506103211021032 0ustar alexxusersinherited frmOptionsTabsExtra: TfrmOptionsTabsExtra Height = 418 Width = 720 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-0.9.8/src/frames/foptionstabs.pas0000644000175000001440000001531012731662527020025 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-0.9.8/src/frames/foptionstabs.lrt0000644000175000001440000000255512660124702020037 0ustar alexxusersTFRMOPTIONSTABS.GBTABS.CAPTION=Folder tabs headers TFRMOPTIONSTABS.LBLCHAR.CAPTION=characters TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION=Ta&bs position TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION=&Show tab header also when there is only one tab TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION=&Tabs on multiple lines TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION=&Limit tab title length to TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION=Ctrl+&Up opens new tab in foreground TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION=Con&firm close all tabs TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION=Show locked tabs &with an asterisk * TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION=Activate target &panel when clicking on one of its Tabs TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION=Show ta&b close button TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION=Open &new tabs near current tab TFRMOPTIONSTABS.CBTABSCLOSEDUPLICATEWHENCLOSING.CAPTION=Close duplicate tabs when closing application TFRMOPTIONSTABS.CBTABSSHOWDRIVELETTER.CAPTION=Always show drive letter in tab title TFRMOPTIONSTABS.CBTABSREUSETABWHENPOSSIBLE.CAPTION=Reuse existing tab when possible TFRMOPTIONSTABS.CBTABSCONFIRMCLOSELOCKED.CAPTION=Confirm close locked tabs TFRMOPTIONSTABS.CBKEEPRENAMEDNAMEBACKTONORMAL.CAPTION=Keep renamed name when unlocking a tab TFRMOPTIONSTABS.LBLTABSACTIONONDOUBLECLICK.CAPTION=Action to do when double click on a tab: doublecmd-0.9.8/src/frames/foptionstabs.lfm0000644000175000001440000002027612660124702020014 0ustar alexxusersinherited frmOptionsTabs: TfrmOptionsTabs Height = 492 Width = 731 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-0.9.8/src/frames/foptionsquicksearchfilter.pas0000644000175000001440000000660712470100066022576 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-0.9.8/src/frames/foptionsquicksearchfilter.lrt0000644000175000001440000000074311740433676022626 0ustar alexxusersTFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION=Exact name match TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION=&Beginning (name must start with first typed character) TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION=En&ding (last character before a typed dot . must match) TFRMOPTIONSQUICKSEARCHFILTER.RGPSEARCHITEMS.CAPTION=Search for these items TFRMOPTIONSQUICKSEARCHFILTER.RGPSEARCHCASE.CAPTION=Search case TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION=Options doublecmd-0.9.8/src/frames/foptionsquicksearchfilter.lfm0000644000175000001440000001056712470100066022571 0ustar alexxusersinherited frmOptionsQuickSearchFilter: TfrmOptionsQuickSearchFilter Height = 354 Width = 702 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-0.9.8/src/frames/foptionspluginswlx.pas0000644000175000001440000001624713434543064021315 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WLX 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } 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 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 FreeThenNil(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; { TfrmOptionsPluginsWLX.btnAddPluginClick } procedure TfrmOptionsPluginsWLX.btnAddPluginClick(Sender: TObject); const cNextLine = LineEnding + LineEnding; var I, J: integer; sFileName, sPluginName: string; begin dmComData.OpenDialog.Filter := Format('Viewer plugins (%s)|%s', [WlxMask, WlxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I := tmpWLXPlugins.Add(sPluginName, GetPluginFilenameToSave(sFileName), 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; 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-0.9.8/src/frames/foptionspluginswlx.lrj0000644000175000001440000000123313367401147021306 0ustar alexxusers{"version":1,"strings":[ {"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-0.9.8/src/frames/foptionspluginswlx.lfm0000644000175000001440000000142613367667107021313 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-0.9.8/src/frames/foptionspluginswfx.pas0000644000175000001440000001715613367401147021307 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WFX 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } 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 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 FreeThenNil(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); var I, J: integer; WfxModule: TWFXmodule; sFileName, sPluginName, sRootName: string; begin dmComData.OpenDialog.Filter := Format('File system plugins (%s)|%s', [WfxMask, WfxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sFileName := GetPluginFilenameToSave(sFileName); WfxModule := gWFXPlugins.LoadModule(sFileName); 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(sFileName); end; sPluginName := sRootName + '=' + sFileName; 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; 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-0.9.8/src/frames/foptionspluginswfx.lrj0000644000175000001440000000126013367401147021300 0ustar alexxusers{"version":1,"strings":[ {"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-0.9.8/src/frames/foptionspluginswfx.lfm0000644000175000001440000000156113367667107021305 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-0.9.8/src/frames/foptionspluginswdx.pas0000644000175000001440000001533213367401147021277 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WDX 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } 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 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 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 FreeThenNil(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); var I, J: integer; sFileName, sPluginName: string; begin dmComData.OpenDialog.Filter := Format('Content plugins (%s;*.lua)|%s;*.lua', [WdxMask, WdxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not (StrEnds(sFileName, '.lua') or CheckPlugin(sFileName)) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I := tmpWDXPlugins.Add(sPluginName, GetPluginFilenameToSave(sFileName), EmptyStr); if not tmpWDXPlugins.LoadModule(pred(tmpWDXPlugins.Count)) then begin 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; 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-0.9.8/src/frames/foptionspluginswdx.lrj0000644000175000001440000000152613367401147021303 0ustar alexxusers{"version":1,"strings":[ {"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-0.9.8/src/frames/foptionspluginswdx.lfm0000644000175000001440000000134513367667107021303 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-0.9.8/src/frames/foptionspluginswcx.pas0000644000175000001440000003216413367401147021300 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WCX 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } unit fOptionsPluginsWCX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, 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; 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 uDCUtils, 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 FreeThenNil(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); var J, iPluginIndex, iFlags, iNbItemOnStart: integer; sExt: string; sExts: string; sExtsTemp: string; sFileName: string; sPluginName: string; sAlreadyAssignedExts: string; WCXmodule: TWCXmodule; begin iNbItemOnStart := tmpWCXPlugins.Count; dmComData.OpenDialog.Filter := Format('Archive plugins (%s)|%s', [WcxMask, WcxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sFileName := GetPluginFilenameToSave(sFileName); WCXmodule := gWCXPlugins.LoadModule(sFileName); if not Assigned(WCXmodule) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); Exit; end; iFlags := WCXmodule.GetPluginCapabilities; sPluginName := sFileName; sExts := ''; if InputQuery(rsOptEnterExt, Format(rsOptAssocPluginWith, [sFileName]), 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, [sFileName]) + 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(sFileName); 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; 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-0.9.8/src/frames/foptionspluginswcx.lrj0000644000175000001440000000171713367401147021304 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-0.9.8/src/frames/foptionspluginswcx.lfm0000644000175000001440000000334513367401147021272 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-0.9.8/src/frames/foptionspluginsgroup.pas0000644000175000001440000001746213367401147021637 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options Plugins group 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } 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; procedure cbPluginFilenameStyleChange(Sender: TObject); procedure btnPathToBeRelativeToHelperClick(Sender: TObject); procedure btnPathToBeRelativeToAllClick(Sender: TObject); procedure FrameExit(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 //Lazarus, Free-Pascal, etc. Controls, Forms, //DC uGlobs, uDCUtils, uSpecialDir, uLng, uDefaultPlugins, fOptions, fOptionsPluginsDSX, fOptionsPluginsWCX, fOptionsPluginsWDX, fOptionsPluginsWFX, fOptionsPluginsWLX; { TOptionsPluginsGroup } { TfrmOptionsPluginsGroup.Init } procedure TfrmOptionsPluginsGroup.Init; begin ParseLineToList(rsPluginFilenameStyleList, cbPluginFilenameStyle.Items); end; { TfrmOptionsPluginsGroup.Load } procedure TfrmOptionsPluginsGroup.Load; begin ckbAutoTweak.Checked := gPluginInAutoTweak; cbPluginFilenameStyle.ItemIndex := integer(gPluginFilenameStyle); cbPluginFilenameStyleChange(cbPluginFilenameStyle); dePathToBeRelativeTo.Text := gPluginPathToBeRelativeTo; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; { TfrmOptionsPluginsGroup.Save } function TfrmOptionsPluginsGroup.Save: TOptionsEditorSaveFlags; begin gPluginInAutoTweak := ckbAutoTweak.Checked; gPluginFilenameStyle := TPluginFilenameStyle(cbPluginFilenameStyle.ItemIndex); gPluginPathToBeRelativeTo := dePathToBeRelativeTo.Text; Result := []; 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 := (TPluginFilenameStyle(cbPluginFilenameStyle.ItemIndex) = TPluginFilenameStyle.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 := TfrmOptionsPluginsDSX(Editor).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] := TfrmOptionsPluginsWCX(Editor).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 := TfrmOptionsPluginsWDX(Editor).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] := TfrmOptionsPluginsWFX(Editor).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 := TfrmOptionsPluginsWLX(Editor).GetPluginFilenameToSave(mbExpandFileName(tmpWLXPlugins.GetWlxModule(iIndexPlugin).FileName)); TfrmOptionsPluginsWLX(Editor).ShowPluginsTable; //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; end. doublecmd-0.9.8/src/frames/foptionspluginsgroup.lrj0000644000175000001440000000273713367401147021642 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"} ]} doublecmd-0.9.8/src/frames/foptionspluginsgroup.lfm0000644000175000001440000001447113367401147021627 0ustar alexxusersinherited frmOptionsPluginsGroup: TfrmOptionsPluginsGroup Height = 244 Width = 622 ClientHeight = 244 ClientWidth = 622 OnExit = FrameExit DesignLeft = 349 DesignTop = 294 object gbConfiguration: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 140 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 = 120 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 end object pmPathToBeRelativeToHelper: TPopupMenu[1] left = 432 top = 168 end end doublecmd-0.9.8/src/frames/foptionspluginsdsx.pas0000644000175000001440000001433013367401147021270 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins DSX 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } unit fOptionsPluginsDSX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, 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 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 FreeThenNil(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); var I, J: integer; sFileName, sPluginName: string; begin dmComData.OpenDialog.Filter := 'Search plugins (*.dsx)|*.dsx'; if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I := tmpDSXPlugins.Add(sPluginName, GetPluginFilenameToSave(sFileName), 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. end; end; end. doublecmd-0.9.8/src/frames/foptionspluginsdsx.lrj0000644000175000001440000000114713367401147021276 0ustar alexxusers{"version":1,"strings":[ {"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-0.9.8/src/frames/foptionspluginsdsx.lfm0000644000175000001440000000133213367401147021261 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-0.9.8/src/frames/foptionspluginsbase.pas0000644000175000001440000002036313367401147021407 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } 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); function GetPluginFilenameToSave(const Filename: string): string; 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; 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.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 TfrmOptionsPluginsBase.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-0.9.8/src/frames/foptionspluginsbase.lrj0000644000175000001440000000271713367401147021416 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-0.9.8/src/frames/foptionspluginsbase.lfm0000644000175000001440000007436213367667107021424 0ustar alexxusersinherited frmOptionsPluginsBase: TfrmOptionsPluginsBase Height = 376 Width = 705 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-0.9.8/src/frames/foptionsmouse.pas0000644000175000001440000001111213333640707020213 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-0.9.8/src/frames/foptionsmouse.lrj0000644000175000001440000000512713334347575020240 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-0.9.8/src/frames/foptionsmouse.lfm0000644000175000001440000001343013333641037020210 0ustar alexxusersinherited frmOptionsMouse: TfrmOptionsMouse Height = 385 Width = 488 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 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-0.9.8/src/frames/foptionsmisc.pas0000644000175000001440000001743413404102631020017 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Miscellaneous 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 fOptionsMisc; {$mode objfpc}{$H+} interface uses EditBtn, Buttons, Menus, Classes, SysUtils, StdCtrls, Spin, ExtCtrls, DividerBevel, fOptionsFrame; type { TfrmOptionsMisc } TfrmOptionsMisc = class(TOptionsEditor) btnThumbCompactCache: TButton; chkDescCreateUnicode: TCheckBox; chkGoToRoot: TCheckBox; chkThumbSave: TCheckBox; chkShowWarningMessages: TCheckBox; cmbDescDefaultEncoding: TComboBox; cmbDescCreateEncoding: TComboBox; dblThumbnails: TDividerBevel; gbExtended: TGroupBox; gbFileComments: TGroupBox; 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); 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 fOptions, Forms, Dialogs, fMain, Controls, DCStrUtils, uDCUtils, uSpecialDir, uShowForm, uGlobs, uLng, uThumbnails, uConvEncoding; { 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; begin fneTCExecutableFilename.Filter := ParseLineToFileFilter([rsFilterExecutableFiles, '*.exe', rsFilterAnyFiles, '*.*']); fneTCConfigFilename.Filter := ParseLineToFileFilter([rsFilterIniConfigFiles, '*.ini', rsFilterAnyFiles, '*.*']); end; procedure TfrmOptionsMisc.Load; begin chkShowWarningMessages.Checked := gShowWarningMessages; chkThumbSave.Checked := gThumbSave; speThumbWidth.Value := gThumbSize.cx; speThumbHeight.Value := gThumbSize.cy; chkGoToRoot.Checked := gGoToRoot; {$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 := []; gShowWarningMessages := chkShowWarningMessages.Checked; gThumbSave := chkThumbSave.Checked; gThumbSize.cx := speThumbWidth.Value; gThumbSize.cy := speThumbHeight.Value; gGoToRoot := chkGoToRoot.Checked; {$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; 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-0.9.8/src/frames/foptionsmisc.lrj0000644000175000001440000001045113377402532020027 0ustar alexxusers{"version":1,"strings":[ {"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":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-0.9.8/src/frames/foptionsmisc.lfm0000644000175000001440000005111713377402532020022 0ustar alexxusersinherited frmOptionsMisc: TfrmOptionsMisc Height = 572 Width = 719 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 = 184 Top = 6 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 164 ClientWidth = 703 TabOrder = 0 object chkShowWarningMessages: TCheckBox Left = 12 Height = 19 Top = 6 Width = 251 Caption = 'Show &warning messages ("OK" button only)' TabOrder = 0 end object chkThumbSave: TCheckBox AnchorSideTop.Control = dblThumbnails AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 79 Width = 154 BorderSpacing.Top = 4 Caption = '&Save thumbnails in cache' TabOrder = 2 end object lblThumbSize: TLabel AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 108 Width = 83 Caption = '&Thumbnail size:' FocusControl = speThumbWidth ParentColor = False end object dblThumbnails: TDividerBevel AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = chkGoToRoot AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 12 Height = 15 Top = 60 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 = 101 Height = 23 Top = 104 Width = 50 BorderSpacing.Left = 6 BorderSpacing.Top = 6 MaxValue = 512 MinValue = 16 TabOrder = 3 Value = 16 end object speThumbHeight: TSpinEdit AnchorSideLeft.Control = lblThumbSeparator AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth Left = 170 Height = 23 Top = 104 Width = 50 BorderSpacing.Left = 6 MaxValue = 512 MinValue = 16 TabOrder = 4 Value = 16 end object lblThumbSeparator: TLabel AnchorSideLeft.Control = speThumbWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 157 Height = 15 Top = 108 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 = 226 Height = 15 Top = 108 Width = 29 BorderSpacing.Left = 6 Caption = 'pixels' ParentColor = False end object btnThumbCompactCache: TButton AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrBottom Left = 12 Height = 25 Top = 133 Width = 271 AutoSize = True BorderSpacing.Top = 6 Caption = '&Remove thumbnails for no longer existing files' OnClick = btnThumbCompactCacheClick TabOrder = 5 end object chkGoToRoot: TCheckBox AnchorSideTop.Control = chkShowWarningMessages AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 29 Width = 304 BorderSpacing.Top = 4 Caption = 'Always &go to the root of a drive when changing drives' TabOrder = 1 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 = 269 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 = 109 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 = 202 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-0.9.8/src/frames/foptionslog.pas0000644000175000001440000001110612731662527017654 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, 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; fneLogFileName: TFileNameEdit; gbLogFile: TGroupBox; gbLogFileOp: TGroupBox; gbLogFileStatus: TGroupBox; btnRelativeLogFile: TSpeedButton; pmPathHelper: TPopupMenu; btnViewLogFile: TSpeedButton; procedure btnRelativeLogFileClick(Sender: TObject); procedure cbLogFileChange(Sender: TObject); procedure btnViewLogFileClick(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; end; procedure TfrmOptionsLog.btnViewLogFileClick(Sender: TObject); begin frmMain.Commands.cm_ViewLogFile([]); end; procedure TfrmOptionsLog.btnRelativeLogFileClick(Sender: TObject); begin fneLogFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneLogFileName, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsLog.Load; begin 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; 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-0.9.8/src/frames/foptionslog.lrt0000644000175000001440000000176212532643273017675 0ustar alexxusersTFRMOPTIONSLOG.GBLOGFILE.CAPTION=File operation log file TFRMOPTIONSLOG.CBLOGFILE.CAPTION=C&reate a log file: TFRMOPTIONSLOG.CBINCLUDEDATEINLOGFILENAME.CAPTION=Include date in log filename TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT=Some functions to select appropriate path TFRMOPTIONSLOG.BTNVIEWLOGFILE.HINT=View log file content TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION=Log operations TFRMOPTIONSLOG.CBLOGSTARTSHUTDOWN.CAPTION=Start/shutdown TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION=Cop&y/Move/Create link/symlink TFRMOPTIONSLOG.CBLOGDELETE.CAPTION=&Delete TFRMOPTIONSLOG.CBLOGDIROP.CAPTION=Crea&te/Delete directories TFRMOPTIONSLOG.CBLOGARCOP.CAPTION=&Pack/Unpack TFRMOPTIONSLOG.CBLOGVFS.CAPTION=&File system plugins TFRMOPTIONSLOG.CBLOGCOMMANDLINEEXECUTION.CAPTION=External command line execution TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION=Operation status TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION=Log &successful operations TFRMOPTIONSLOG.CBLOGERRORS.CAPTION=Log &errors TFRMOPTIONSLOG.CBLOGINFO.CAPTION=Log &information messages doublecmd-0.9.8/src/frames/foptionslog.lfm0000644000175000001440000002551712724572670017663 0ustar alexxusersinherited frmOptionsLog: TfrmOptionsLog Height = 369 Width = 394 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 369 ClientWidth = 394 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 = 74 Top = 6 Width = 382 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'File operation log file' ChildSizing.LeftRightSpacing = 10 ClientHeight = 54 ClientWidth = 378 TabOrder = 0 object cbLogFile: TCheckBox AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrCenter Left = 10 Height = 19 Top = 6 Width = 105 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 = 119 Height = 23 Top = 4 Width = 201 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 = 19 Top = 31 Width = 167 BorderSpacing.Bottom = 4 Caption = 'Include date in log filename' TabOrder = 2 end object btnRelativeLogFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneLogFileName AnchorSideRight.Control = btnViewLogFile AnchorSideBottom.Control = fneLogFileName AnchorSideBottom.Side = asrBottom Left = 320 Height = 23 Hint = 'Some functions to select appropriate path' Top = 4 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 = 344 Height = 23 Hint = 'View log file content' Top = 4 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 end object gbLogFileOp: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLogFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 172 Top = 84 Width = 382 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 = 152 ClientWidth = 378 TabOrder = 1 object cbLogStartShutdown: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogVFS AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 109 Width = 102 Caption = 'Start/shutdown' TabOrder = 5 end object cbLogCpMvLn: TCheckBox AnchorSideTop.Control = gbLogFileOp Left = 10 Height = 19 Top = 4 Width = 190 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 = 19 Top = 25 Width = 53 Caption = '&Delete' TabOrder = 1 end object cbLogDirOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDelete AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 46 Width = 150 Caption = 'Crea&te/Delete directories' TabOrder = 2 end object cbLogArcOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDirOp AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 67 Width = 90 Caption = '&Pack/Unpack' TabOrder = 3 end object cbLogVFS: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogArcOp AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 88 Width = 120 Caption = '&File system plugins' TabOrder = 4 end object cbLogCommandLineExecution: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogStartShutdown AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 130 Width = 195 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 = 89 Top = 260 Width = 382 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 = 69 ClientWidth = 378 TabOrder = 2 object cbLogSuccess: TCheckBox Left = 10 Height = 19 Top = 4 Width = 160 Caption = 'Log &successful operations' TabOrder = 0 end object cbLogErrors: TCheckBox Left = 10 Height = 19 Top = 25 Width = 160 Caption = 'Log &errors' TabOrder = 1 end object cbLogInfo: TCheckBox Left = 10 Height = 19 Top = 46 Width = 160 Caption = 'Log &information messages' TabOrder = 2 end end object pmPathHelper: TPopupMenu[3] left = 344 top = 56 end end doublecmd-0.9.8/src/frames/foptionslayout.pas0000644000175000001440000001151112751615041020377 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; cbFlatToolBar: 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; gbScreenLayout: TGroupBox; procedure cbShowDiskPanelChange(Sender: TObject); procedure cbShowDriveFreeSpaceChange(Sender: TObject); procedure cbShowMainToolBarChange(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; procedure TfrmOptionsLayout.cbShowMainToolBarChange(Sender: TObject); begin cbFlatToolBar.Enabled := cbShowMainToolBar.Checked; 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; cbFlatToolBar.Checked := gToolBarFlat; 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; gToolBarFlat := cbFlatToolBar.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-0.9.8/src/frames/foptionslayout.lrt0000644000175000001440000000266112665563662020442 0ustar alexxusersTFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION= Screen layout TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION=Show &main menu TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION=Show tool&bar TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION=Show &drive buttons TFRMOPTIONSLAYOUT.CBSHOWDRIVESLISTBUTTON.CAPTION=Show drives list bu&tton TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION=Show current director&y TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION=S&how tabstop header TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION=Show &status bar TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION=Show command l&ine TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION=Show function &key buttons TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION=&Flat buttons TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION=Show two drive button bars (fi&xed width, above file windows) TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION=Sho&w folder tabs TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION=Flat i&nterface TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION=Flat b&uttons TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION=Show lo&g window TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION=Show te&rminal window TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION=Show fr&ee space indicator on drive label TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION=Show common progress in menu bar TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION=Show panel of operation in background TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION=Show free s&pace label TFRMOPTIONSLAYOUT.CBSHOWSHORTDRIVEFREESPACE.CAPTION=Show short free space &label doublecmd-0.9.8/src/frames/foptionslayout.lfm0000644000175000001440000001553712751615041020406 0ustar alexxusersinherited frmOptionsLayout: TfrmOptionsLayout Height = 550 Width = 784 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 = 427 Top = 6 Width = 772 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Screen layout ' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 409 ClientWidth = 768 TabOrder = 0 object cbShowMainMenu: TCheckBox Left = 12 Height = 17 Top = 6 Width = 98 Caption = 'Show &main menu' TabOrder = 0 end object cbShowMainToolBar: TCheckBox AnchorSideTop.Control = cbShowMainMenu AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 25 Width = 98 BorderSpacing.Top = 2 Caption = 'Show tool&bar' OnChange = cbShowMainToolBarChange TabOrder = 1 end object cbShowDiskPanel: TCheckBox AnchorSideTop.Control = cbFlatToolBar AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 63 Width = 111 BorderSpacing.Top = 2 Caption = 'Show &drive buttons' OnChange = cbShowDiskPanelChange TabOrder = 3 end object cbShowDrivesListButton: TCheckBox AnchorSideTop.Control = cbFlatDiskPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 120 Width = 127 BorderSpacing.Top = 2 Caption = 'Show drives list bu&tton' TabOrder = 6 end object cbShowCurDir: TCheckBox AnchorSideTop.Control = cbShowTabs AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 215 Width = 128 BorderSpacing.Top = 2 Caption = 'Show current director&y' TabOrder = 11 end object cbShowTabHeader: TCheckBox AnchorSideTop.Control = cbShowCurDir AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 234 Width = 121 BorderSpacing.Top = 2 Caption = 'S&how tabstop header' TabOrder = 12 end object cbShowStatusBar: TCheckBox AnchorSideTop.Control = cbShowTabHeader AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 253 Width = 96 BorderSpacing.Top = 2 Caption = 'Show &status bar' TabOrder = 13 end object cbShowCmdLine: TCheckBox AnchorSideTop.Control = cbShowStatusBar AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 272 Width = 111 BorderSpacing.Top = 2 Caption = 'Show command l&ine' TabOrder = 14 end object cbShowKeysPanel: TCheckBox AnchorSideTop.Control = cbShowCmdLine AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 291 Width = 146 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 = 17 Top = 101 Width = 76 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 = 17 Top = 82 Width = 313 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 = 17 Top = 196 Width = 99 BorderSpacing.Top = 2 Caption = 'Sho&w folder tabs' TabOrder = 10 end object cbFlatInterface: TCheckBox AnchorSideTop.Control = cbShowKeysPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 310 Width = 82 BorderSpacing.Top = 2 Caption = 'Flat i&nterface' TabOrder = 16 end object cbFlatToolBar: TCheckBox AnchorSideLeft.Control = cbShowMainToolBar AnchorSideTop.Control = cbShowMainToolBar AnchorSideTop.Side = asrBottom Left = 28 Height = 17 Top = 44 Width = 76 BorderSpacing.Left = 16 BorderSpacing.Top = 2 Caption = 'Flat b&uttons' Enabled = False TabOrder = 2 end object cbLogWindow: TCheckBox AnchorSideTop.Control = cbFlatInterface AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 329 Width = 100 BorderSpacing.Top = 2 Caption = 'Show lo&g window' TabOrder = 17 end object cbTermWindow: TCheckBox AnchorSideTop.Control = cbLogWindow AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 348 Width = 124 BorderSpacing.Top = 2 Caption = 'Show te&rminal window' TabOrder = 18 end object cbFreespaceInd: TCheckBox AnchorSideTop.Control = cbShowShortDriveFreeSpace AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 177 Width = 209 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 = 17 Top = 367 Width = 190 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 = 17 Top = 386 Width = 205 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 = 17 Top = 139 Width = 123 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 = 17 Top = 158 Width = 151 BorderSpacing.Top = 2 Caption = 'Show short free space &label' TabOrder = 8 end end end doublecmd-0.9.8/src/frames/foptionslanguage.pas0000644000175000001440000000605513340517105020651 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Language options page Copyright (C) 2006-2014 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 fOptionsLanguage; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsLanguage } TfrmOptionsLanguage = class(TOptionsEditor) lngList: TListBox; private procedure FillLngListBox; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses LazUTF8Classes, uDebug, uFindEx, uGlobs, uGlobsPaths, uLng; { TfrmOptionsLanguage } procedure TfrmOptionsLanguage.FillLngListBox; var iIndex: Integer; fr: TSearchRecEx; sLangName: String; LanguageFileList: TStringListUtf8; begin LanguageFileList:= TStringListUtf8.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; 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-0.9.8/src/frames/foptionslanguage.lfm0000644000175000001440000000031511740433676020651 0ustar alexxusersinherited frmOptionsLanguage: TfrmOptionsLanguage object lngList: TListBox[0] Left = 0 Height = 240 Top = 0 Width = 320 Align = alClient ItemHeight = 0 TabOrder = 0 end end doublecmd-0.9.8/src/frames/foptionskeyboard.pas0000644000175000001440000000677112020403374020667 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-0.9.8/src/frames/foptionskeyboard.lrt0000644000175000001440000000045412731662527020715 0ustar alexxusersTFRMOPTIONSKEYBOARD.GBTYPING.CAPTION=Typing TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION=&Letters: TFRMOPTIONSKEYBOARD.LBLALT.CAPTION=Alt+L&etters: TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION=Ctrl+Alt+Le&tters: TFRMOPTIONSKEYBOARD.CBLYNXLIKE.CAPTION=Le&ft, Right arrows change directory (Lynx-like movement) doublecmd-0.9.8/src/frames/foptionskeyboard.lfm0000644000175000001440000000651012731662527020671 0ustar alexxusersinherited frmOptionsKeyboard: TfrmOptionsKeyboard Height = 223 Width = 429 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-0.9.8/src/frames/foptionsignorelist.pas0000644000175000001440000000760012731662527021256 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-0.9.8/src/frames/foptionsignorelist.lrt0000644000175000001440000000057412365151656021276 0ustar alexxusersTFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION=&Save in: TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION=&Ignore (don't show) the following files and folders: TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION=A&dd selected names TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION=Add selected names with &full path TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT=Some functions to select appropriate path doublecmd-0.9.8/src/frames/foptionsignorelist.lfm0000644000175000001440000001360512724572670021254 0ustar alexxusersinherited frmOptionsIgnoreList: TfrmOptionsIgnoreList Height = 325 Width = 644 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-0.9.8/src/frames/foptionsicons.pas0000644000175000001440000002010013517017054020170 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; { 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-0.9.8/src/frames/foptionsicons.lrt0000644000175000001440000000174013101610721020204 0ustar alexxusersTFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION= Show icons to the left of the filename TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION=A&ll TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION=Only &standard icons TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION=&No icons TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION=All associated + &EXE/LNK (slow) TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION=Show o&verlay icons, e.g. for links TFRMOPTIONSICONS.GBDISABLESPECIALICONS.CAPTION=Disable special icons TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION=For the following &paths and their subdirectories: TFRMOPTIONSICONS.GBSHOWICONS.CAPTION=Show icons TFRMOPTIONSICONS.CBICONSONBUTTONS.CAPTION=Show icons on buttons TFRMOPTIONSICONS.CBICONSINMENUS.CAPTION=Show icons for actions in &menus TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT=16x16 TFRMOPTIONSICONS.GBICONSSIZE.CAPTION= Icon size TFRMOPTIONSICONS.LBLFILEPANEL.CAPTION=File panel: TFRMOPTIONSICONS.LBLDISKPANEL.CAPTION=Disk panel: TFRMOPTIONSICONS.GBICONTHEME.CAPTION=Icon theme doublecmd-0.9.8/src/frames/foptionsicons.lfm0000644000175000001440000002376213325116206020200 0ustar alexxusersinherited frmOptionsIcons: TfrmOptionsIcons Height = 590 Width = 478 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-0.9.8/src/frames/foptionshotkeys.pas0000644000175000001440000014154113340517105020554 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 stgCommandsDrawCell(Sender: TObject; aCol, aRow: integer; aRect: TRect; {%H-}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(UTF8Decode(List.Strings[Index1]), UTF8Decode(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; { TfrmOptionsHotkeys.stgCommandsDrawCell } procedure TfrmOptionsHotkeys.stgCommandsDrawCell(Sender: TObject; aCol, aRow: integer; aRect: TRect; aState: TGridDrawState); var OffsetY: integer; begin if aCol = stgCmdHotkeysIndex then begin if aRow > 0 then begin with Sender as TStringGrid do begin if Cells[aCol, aRow] <> '' then begin OffsetY := (DefaultRowHeight - Canvas.TextHeight(Cells[aCol, aRow])) div 2; if not (gdSelected in aState) then Canvas.Font.Color := clRed else Canvas.Font.Color := clWhite; Canvas.TextOut(aRect.Left + 3, aRect.Top + OffsetY, Cells[aCol, aRow]); 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 slTmp: THotkeys; slAllCommands, slCommandsForGrid, slDescriptionsFroGrid, slHotKeyForGrid: TStringList; lstr: string; 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; slDescriptionsFroGrid := TStringList.Create; slHotKeyForGrid := 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. Remove from our list what doesn't match our filter (if we have filter). if Filter <> '' then begin lstr := UTF8LowerCase(Filter); for i := pred(slAllCommands.Count) downto 0 do //Remove from our list the commands that does not meet our filter... if (UTF8Pos(lstr, UTF8LowerCase(slAllCommands.Strings[i])) = 0) and (UTF8Pos(lstr, UTF8LowerCase(CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong))) = 0) then slAllCommands.Delete(i); end; // 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 slCommandsForGrid.Add(slAllCommands.Strings[i]); slHotKeyForGrid.Add(ShortcutsToText(slTmp[j].Shortcuts)); slDescriptionsFroGrid.Add(CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end else begin slCommandsForGrid.Add(slAllCommands.Strings[i]); slHotKeyForGrid.Add(HotkeysToString(slTmp)); slDescriptionsFroGrid.Add(CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end else begin slCommandsForGrid.Add(slAllCommands.Strings[i]); slHotKeyForGrid.Add(''); slDescriptionsFroGrid.Add(CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end; // 4. Add to list NAMES of columns. slCommandsForGrid.Insert(0, rsOptHotkeysCommand); slHotKeyForGrid.Insert(0, rsOptHotkeysHotkeys); slDescriptionsFroGrid.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(slDescriptionsFroGrid); // 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; slDescriptionsFroGrid.Free; slTmp.Free; if CommandsFormCreated then CommandsForm.Free; 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-0.9.8/src/frames/foptionshotkeys.lrt0000644000175000001440000000240013017451256020565 0ustar alexxusersTFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION=C&ategories: TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION=&Filter TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION=&Shortcut files: TFRMOPTIONSHOTKEYS.LBLSORTORDER.CAPTION=So&rt order: TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION=Co&mmands: TFRMOPTIONSHOTKEYS.ACTSAVENOW.CAPTION=Save now TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION=Rename TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION=Copy TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION=Delete TFRMOPTIONSHOTKEYS.ACTRESTOREDEFAULT.CAPTION=Restore DC default TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION=Add &hotkey TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION=&Edit hotkey TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION=&Delete hotkey TFRMOPTIONSHOTKEYS.ACTPREVIOUSCATEGORY.CAPTION=Previous category TFRMOPTIONSHOTKEYS.ACTNEXTCATEGORY.CAPTION=Next category TFRMOPTIONSHOTKEYS.ACTSORTBYCOMMAND.CAPTION=Sort by command name TFRMOPTIONSHOTKEYS.ACTSORTBYHOTKEYSGROUPED.CAPTION=Sort by hotkeys (grouped) TFRMOPTIONSHOTKEYS.ACTSORTBYHOTKEYSONEPERLINE.CAPTION=Sort by hotkeys (one per row) TFRMOPTIONSHOTKEYS.ACTPOPUPFILERELATEDMENU.CAPTION=Make popup the file related menu TFRMOPTIONSHOTKEYS.MISEPARATOR1.CAPTION=- TFRMOPTIONSHOTKEYS.MICATEGORIES.CAPTION=Categories TFRMOPTIONSHOTKEYS.MISORTORDER.CAPTION=Sort order TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION=Command doublecmd-0.9.8/src/frames/foptionshotkeys.lfm0000644000175000001440000003302313017451256020547 0ustar alexxusersinherited frmOptionsHotkeys: TfrmOptionsHotkeys Height = 513 Width = 808 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 OnChange = lbxCategoriesChange Style = csDropDownList TabOrder = 1 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 OnChange = edtFilterChange TabOrder = 2 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 OnDrawCell = stgCommandsDrawCell OnHeaderClick = stgCommandsHeaderClick 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 OnChange = lbSCFilesListChange Style = csDropDownList TabOrder = 0 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 Left = 299 Height = 23 Top = 65 Width = 208 ItemHeight = 15 OnChange = cbCommandSortOrderChange Style = csDropDownList TabOrder = 3 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' OnExecute = actPreviousCategoryExecute ShortCut = 109 end object actNextCategory: TAction Caption = 'Next category' OnExecute = actNextCategoryExecute ShortCut = 107 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-0.9.8/src/frames/foptionsgroups.pas0000644000175000001440000000401111740433676020407 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options groups 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 fOptionsGroups; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, fOptionsFrame; type { TOptionsGroup } TOptionsGroup = class(TOptionsEditor) public class function IsEmpty: Boolean; override; end; { TOptionsColorsGroup } TOptionsColorsGroup = class(TOptionsGroup) public class function GetIconIndex: Integer; override; class function GetTitle: String; 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; { TOptionsColorsGroup } class function TOptionsColorsGroup.GetIconIndex: Integer; begin Result := 4; end; class function TOptionsColorsGroup.GetTitle: String; begin Result := rsOptionsEditorColors; end; end. doublecmd-0.9.8/src/frames/foptionsframe.pas0000644000175000001440000003055713377666635020213 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options frame 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } 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, 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, fOptionsTools, fOptionsToolsEditor, fOptionsToolsDiffer, fOptionsEditorColors, fOptionsToolTips, fOptionsFileAssoc, fOptionsFileAssocExtra, fOptionsDirectoryHotlist; { 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, FileOperation, FolderTabs, Plugins: 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(TOptionsColorsGroup); 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); Main.Add(TfrmOptionsToolbar); FileOperation := Main.Add(TfrmOptionsFileOperations); FileOperation.Add(TfrmOptionsFileSearch); 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); Main.Add(TfrmOptionsDirectoryHotlist); end; initialization OptionsEditorClassList:= TOptionsEditorClassList.Create; MakeEditorsClassList; finalization if Assigned(OptionsEditorClassList) then FreeAndNil(OptionsEditorClassList); end. doublecmd-0.9.8/src/frames/foptionsframe.lfm0000644000175000001440000000025012656270711020152 0ustar alexxusersobject OptionsEditor: TOptionsEditor Left = 0 Height = 240 Top = 0 Width = 320 LCLVersion = '1.4.4.0' TabOrder = 0 DesignLeft = 181 DesignTop = 138 end doublecmd-0.9.8/src/frames/foptionsfonts.pas0000644000175000001440000002311313315226426020216 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Fonts 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 fOptionsFonts; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, Dialogs, Graphics, fOptionsFrame, uGlobs; type { TfrmOptionsFonts } TfrmOptionsFonts = class(TOptionsEditor) btnSelEditFnt: TButton; btnSelLogFnt: TButton; btnSelConsoleFnt: TButton; btnSelMainFnt: TButton; btnSelViewerBookFnt: TButton; btnSelViewFnt: TButton; btnPathEditFnt: TButton; btnSearchResultsFnt: TButton; dlgFnt: TFontDialog; edtSearchResultsFont: TEdit; edtPathEditFont: TEdit; edtEditorFont: TEdit; edtEditorFontSize: TSpinEdit; edtLogFont: TEdit; edtConsoleFont: TEdit; edtLogFontSize: TSpinEdit; edtConsoleFontSize: TSpinEdit; edtMainFont: TEdit; edtMainFontSize: TSpinEdit; edtViewerBookFont: TEdit; edtViewerBookFontSize: TSpinEdit; edtViewerFont: TEdit; edtViewerFontSize: TSpinEdit; lblSearchResultsFont: TLabel; lblPathEditFont: TLabel; lblEditorFont: TLabel; lblLogFont: TLabel; lblConsoleFont: TLabel; lblMainFont: TLabel; lblViewerBookFont: TLabel; lblViewerFont: TLabel; edtPathEditFontSize: TSpinEdit; edtSearchresultsFontSize: TSpinEdit; procedure btnPathEditFntClick(Sender: TObject); procedure btnSelConsoleFntClick(Sender: TObject); procedure btnSelEditFntClick(Sender: TObject); procedure btnSelMainFntClick(Sender: TObject); procedure btnSelViewFntClick(Sender: TObject); procedure btnSelLogFntClick(Sender: TObject); procedure btnSelViewerBookFntClick(Sender: TObject); procedure edtConsoleFontExit(Sender: TObject); procedure edtConsoleFontSizeChange(Sender: TObject); procedure edtEditorFontExit(Sender: TObject); procedure edtEditorFontSizeChange(Sender: TObject); procedure edtLogFontExit(Sender: TObject); procedure edtMainFontExit(Sender: TObject); procedure edtMainFontSizeChange(Sender: TObject); procedure edtPathEditFontSizeChange(Sender: TObject); procedure edtViewerBookFontExit(Sender: TObject); procedure edtViewerFontExit(Sender: TObject); procedure edtViewerFontSizeChange(Sender: TObject); procedure edtLogFontSizeChange(Sender: TObject); procedure edtViewerBookFontSizeChange(Sender: TObject); private procedure LoadFont(aDCFont:TDCFont); procedure SaveFont(aDCFont:TDCFont); // function GetFont(aDCFont:TDCFont):TFont; procedure SetFont(aDCFont:TDCFont;aFont:TFont); procedure SetFontSize(aDCFont:TDCFont;aFontSize:Integer); procedure SetFontName(aDCFont:TDCFont;aFontName:String); // procedure RunDialogFont(aDCFont:TDCFont); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uLng; { TfrmOptionsFonts } procedure TfrmOptionsFonts.btnSelMainFntClick(Sender: TObject); begin RunDialogFont(dcfMain); end; procedure TfrmOptionsFonts.btnSelEditFntClick(Sender: TObject); begin RunDialogFont(dcfEditor); end; procedure TfrmOptionsFonts.btnSelConsoleFntClick(Sender: TObject); begin RunDialogFont(dcfConsole); end; procedure TfrmOptionsFonts.btnPathEditFntClick(Sender: TObject); begin RunDialogFont(dcfPathEdit); end; procedure TfrmOptionsFonts.btnSelViewFntClick(Sender: TObject); begin RunDialogFont(dcfViewer); end; procedure TfrmOptionsFonts.btnSelViewerBookFntClick(Sender: TObject); begin RunDialogFont(dcfViewerBook); end; procedure TfrmOptionsFonts.edtConsoleFontExit(Sender: TObject); begin SetFontName(dcfConsole, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtConsoleFontSizeChange(Sender: TObject); begin SetFontSize(dcfConsole, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.btnSelLogFntClick(Sender: TObject); begin RunDialogFont(dcfLog); end; procedure TfrmOptionsFonts.edtMainFontExit(Sender: TObject); begin SetFontName(dcfMain, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtEditorFontExit(Sender: TObject); begin SetFontName(dcfEditor, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtViewerFontExit(Sender: TObject); begin SetFontName(dcfViewer, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtViewerBookFontExit(Sender: TObject); begin SetFontName(dcfViewerBook, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtLogFontExit(Sender: TObject); begin SetFontName(dcfLog, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtMainFontSizeChange(Sender: TObject); begin SetFontSize(dcfMain, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtPathEditFontSizeChange(Sender: TObject); begin SetFontSize(dcfPathEdit, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtEditorFontSizeChange(Sender: TObject); begin SetFontSize(dcfEditor, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtViewerFontSizeChange(Sender: TObject); begin SetFontSize(dcfViewer, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtViewerBookFontSizeChange(Sender: TObject); begin SetFontSize(dcfViewerBook, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtLogFontSizeChange(Sender: TObject); begin SetFontSize(dcfLog, TSpinEdit(Sender).Value); end; class function TfrmOptionsFonts.GetIconIndex: Integer; begin Result := 3; end; class function TfrmOptionsFonts.GetTitle: String; begin Result := rsOptionsEditorFonts; end; procedure TfrmOptionsFonts.Load; begin LoadFont(dcfMain); LoadFont(dcfEditor); LoadFont(dcfViewer); LoadFont(dcfLog); LoadFont(dcfViewerBook); LoadFont(dcfConsole); LoadFont(dcfPathEdit); LoadFont(dcfSearchResults); end; function TfrmOptionsFonts.Save: TOptionsEditorSaveFlags; begin Result := []; SaveFont(dcfMain); SaveFont(dcfEditor); SaveFont(dcfViewer); SaveFont(dcfLog); SaveFont(dcfViewerBook); SaveFont(dcfConsole); SaveFont(dcfPathEdit); SaveFont(dcfSearchResults); end; procedure TfrmOptionsFonts.LoadFont(aDCFont: TDCFont); var xFont:TFont; begin xFont:=TFont.Create; try FontOptionsToFont(gFonts[aDCFont], xFont); SetFont(aDCFont, xFont); finally FreeAndNil(xFont); end; end; procedure TfrmOptionsFonts.SaveFont(aDCFont: TDCFont); begin FontToFontOptions(GetFont(aDCFont), gFonts[aDCFont]); end; procedure TfrmOptionsFonts.SetFont(aDCFont: TDCFont; aFont: TFont); begin case aDCFont of dcfMain: begin edtMainFont.Font := aFont; edtMainFont.Text := aFont.Name; edtMainFontSize.Value := aFont.Size; end; dcfEditor: begin edtEditorFont.Font := aFont; edtEditorFont.Text := aFont.Name; edtEditorFontSize.Value := aFont.Size; end; dcfViewer: begin edtViewerFont.Font := aFont; edtViewerFont.Text := aFont.Name; edtViewerFontSize.Value := aFont.Size; end; dcfLog: begin edtLogFont.Font := aFont; edtLogFont.Text := aFont.Name; edtLogFontSize.Value := aFont.Size; end; dcfViewerBook: begin edtViewerBookFont.Font := aFont; edtViewerBookFont.Text := aFont.Name; edtViewerBookFontSize.Value := aFont.Size; end; dcfConsole: begin edtConsoleFont.Font := aFont; edtConsoleFont.Text := aFont.Name; edtConsoleFontSize.Value := aFont.Size; end; dcfSearchResults: begin edtSearchResultsFont.Font := aFont; edtSearchResultsFont.Text := aFont.Name; edtSearchResultsFontSize.Value := aFont.Size; end; dcfPathEdit: begin edtPathEditFont.Font := aFont; edtPathEditFont.Text := aFont.Name; edtPathEditFontSize.Value := aFont.Size; end; end; end; procedure TfrmOptionsFonts.SetFontSize(aDCFont: TDCFont; aFontSize: Integer); begin GetFont(aDCFont).Size:=aFontSize; end; procedure TfrmOptionsFonts.SetFontName(aDCFont: TDCFont; aFontName: String); begin GetFont(aDCFont).Name:=aFontName; end; function TfrmOptionsFonts.GetFont(aDCFont: TDCFont): TFont; begin case aDCFont of dcfMain : Result := edtMainFont.Font; dcfEditor : Result := edtEditorFont.Font; dcfViewer : Result := edtViewerFont.Font; dcfLog : Result := edtLogFont.Font; dcfViewerBook: Result := edtViewerBookFont.Font; dcfConsole : Result := edtConsoleFont.Font; dcfSearchResults: Result := edtSearchResultsFont.Font; dcfPathEdit : Result := edtPathEditFont.Font; else Result := nil; // TODO: show error for programmer end; end; procedure TfrmOptionsFonts.RunDialogFont(aDCFont: TDCFont); const cMonoFonts = [dcfViewer, dcfEditor, dcfLog, dcfConsole]; begin dlgFnt.Font := GetFont(aDCFont); if (aDCFont in cMonoFonts) then begin dlgFnt.Options:= dlgFnt.Options + [fdFixedPitchOnly]; end; if dlgFnt.Execute then SetFont(aDCFont, dlgFnt.Font); dlgFnt.Options:= dlgFnt.Options - [fdFixedPitchOnly]; end; end. doublecmd-0.9.8/src/frames/foptionsfonts.lrt0000644000175000001440000000142412670131210020222 0ustar alexxusersTFRMOPTIONSFONTS.LBLMAINFONT.CAPTION=Main &font TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION=&Editor font TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION=&Viewer font TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION=... TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION=&Log font TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION=... TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION=Viewer&Book Font TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION=... TFRMOPTIONSFONTS.LBLCONSOLEFONT.CAPTION=&Console font TFRMOPTIONSFONTS.LBLPATHEDITFONT.CAPTION=Path font TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION=... TFRMOPTIONSFONTS.LBLSEARCHRESULTSFONT.CAPTION=Search results font TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION=... doublecmd-0.9.8/src/frames/foptionsfonts.lfm0000644000175000001440000003021413130713600020177 0ustar alexxusersinherited frmOptionsFonts: TfrmOptionsFonts Height = 465 Width = 741 ClientHeight = 465 ClientWidth = 741 DesignLeft = 101 DesignTop = 155 object lblMainFont: TLabel[0] Left = 6 Height = 15 Top = 8 Width = 52 Caption = 'Main &font' FocusControl = edtMainFont ParentColor = False end object lblEditorFont: TLabel[1] AnchorSideTop.Control = edtMainFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 62 Width = 56 BorderSpacing.Top = 10 Caption = '&Editor font' FocusControl = edtEditorFont ParentColor = False end object lblViewerFont: TLabel[2] AnchorSideTop.Control = edtEditorFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 116 Width = 60 BorderSpacing.Top = 10 Caption = '&Viewer font' FocusControl = edtViewerFont ParentColor = False end object btnSelMainFnt: TButton[3] AnchorSideTop.Control = edtMainFontSize AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtMainFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 29 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 8 Caption = '...' OnClick = btnSelMainFntClick TabOrder = 2 end object edtMainFontSize: TSpinEdit[4] AnchorSideTop.Control = edtMainFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelMainFnt Left = 634 Height = 23 Top = 29 Width = 55 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtMainFontSizeChange TabOrder = 1 Value = 14 end object edtMainFont: TEdit[5] AnchorSideLeft.Control = lblMainFont AnchorSideTop.Control = lblMainFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtMainFontSize Left = 6 Height = 23 Top = 29 Width = 624 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtMainFontExit TabOrder = 0 end object btnSelEditFnt: TButton[6] AnchorSideTop.Control = edtEditorFontSize AnchorSideRight.Control = btnSelMainFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtEditorFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 83 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelEditFntClick TabOrder = 5 end object edtEditorFont: TEdit[7] AnchorSideLeft.Control = lblEditorFont AnchorSideTop.Control = lblEditorFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtEditorFontSize Left = 6 Height = 23 Top = 83 Width = 624 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtEditorFontExit TabOrder = 3 end object edtEditorFontSize: TSpinEdit[8] AnchorSideTop.Control = edtEditorFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelEditFnt Left = 634 Height = 23 Top = 83 Width = 55 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtEditorFontSizeChange TabOrder = 4 Value = 14 end object btnSelViewFnt: TButton[9] AnchorSideTop.Control = edtViewerFontSize AnchorSideRight.Control = btnSelEditFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtViewerFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 137 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelViewFntClick TabOrder = 8 end object edtViewerFont: TEdit[10] AnchorSideLeft.Control = lblViewerFont AnchorSideTop.Control = lblViewerFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtViewerFontSize Left = 6 Height = 23 Top = 137 Width = 623 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtViewerFontExit TabOrder = 6 end object edtViewerFontSize: TSpinEdit[11] AnchorSideTop.Control = edtViewerFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelViewFnt Left = 633 Height = 23 Top = 137 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtViewerFontSizeChange TabOrder = 7 Value = 14 end object lblLogFont: TLabel[12] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtViewerBookFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 224 Width = 45 BorderSpacing.Top = 10 Caption = '&Log font' FocusControl = edtLogFont ParentColor = False end object edtLogFont: TEdit[13] AnchorSideLeft.Control = lblLogFont AnchorSideTop.Control = lblLogFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtLogFontSize Left = 6 Height = 23 Top = 245 Width = 623 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtLogFontExit TabOrder = 12 end object btnSelLogFnt: TButton[14] AnchorSideTop.Control = edtLogFontSize AnchorSideRight.Control = btnSelViewerBookFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtLogFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 245 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelLogFntClick TabOrder = 14 end object edtLogFontSize: TSpinEdit[15] AnchorSideTop.Control = edtLogFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelLogFnt Left = 633 Height = 23 Top = 245 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtLogFontSizeChange TabOrder = 13 Value = 14 end object lblViewerBookFont: TLabel[16] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtViewerFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 170 Width = 89 BorderSpacing.Top = 10 Caption = 'Viewer&Book Font' FocusControl = edtViewerBookFont ParentColor = False end object edtViewerBookFont: TEdit[17] AnchorSideLeft.Control = lblViewerBookFont AnchorSideTop.Control = lblViewerBookFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtViewerBookFontSize Left = 6 Height = 23 Top = 191 Width = 623 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtViewerBookFontExit TabOrder = 9 end object edtViewerBookFontSize: TSpinEdit[18] AnchorSideTop.Control = edtViewerBookFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelViewerBookFnt Left = 633 Height = 23 Top = 191 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtViewerBookFontSizeChange TabOrder = 10 Value = 18 end object btnSelViewerBookFnt: TButton[19] AnchorSideTop.Control = edtViewerBookFontSize AnchorSideRight.Control = btnSelViewFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtViewerBookFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 191 Width = 40 Anchors = [akTop, akRight, akBottom] Caption = '...' OnClick = btnSelViewerBookFntClick TabOrder = 11 end object btnSelConsoleFnt: TButton[20] AnchorSideTop.Control = edtConsoleFontSize AnchorSideRight.Control = btnSelViewerBookFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtConsoleFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 299 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelConsoleFntClick TabOrder = 17 end object edtConsoleFontSize: TSpinEdit[21] AnchorSideTop.Control = edtConsoleFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelConsoleFnt Left = 633 Height = 23 Top = 299 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtConsoleFontSizeChange TabOrder = 16 Value = 14 end object edtConsoleFont: TEdit[22] AnchorSideLeft.Control = lblConsoleFont AnchorSideTop.Control = lblConsoleFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtConsoleFontSize Left = 6 Height = 23 Top = 299 Width = 623 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtConsoleFontExit TabOrder = 15 end object lblConsoleFont: TLabel[23] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtLogFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 278 Width = 68 BorderSpacing.Top = 10 Caption = '&Console font' FocusControl = edtConsoleFont ParentColor = False end object lblPathEditFont: TLabel[24] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtConsoleFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 332 Width = 49 BorderSpacing.Top = 10 Caption = 'Path font' FocusControl = edtPathEditFont ParentColor = False end object edtPathEditFont: TEdit[25] AnchorSideLeft.Control = lblPathEditFont AnchorSideTop.Control = lblPathEditFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPathEditFontSize Left = 6 Height = 23 Top = 353 Width = 623 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 TabOrder = 18 end object edtPathEditFontSize: TSpinEdit[26] AnchorSideTop.Control = edtPathEditFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelMainFnt Left = 633 Height = 23 Top = 353 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtPathEditFontSizeChange TabOrder = 19 Value = 12 end object btnPathEditFnt: TButton[27] AnchorSideTop.Control = edtPathEditFontSize AnchorSideRight.Control = btnSelViewerBookFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtPathEditFontSize AnchorSideBottom.Side = asrBottom Left = 693 Height = 23 Top = 353 Width = 40 Anchors = [akTop, akRight, akBottom] Caption = '...' OnClick = btnPathEditFntClick TabOrder = 20 end object lblSearchResultsFont: TLabel[28] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtPathEditFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 386 Width = 97 BorderSpacing.Top = 10 Caption = 'Search results font' ParentColor = False Visible = False end object edtSearchResultsFont: TEdit[29] AnchorSideTop.Control = lblSearchResultsFont AnchorSideTop.Side = asrBottom Left = 6 Height = 23 Top = 407 Width = 622 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 TabOrder = 21 Visible = False end object edtSearchresultsFontSize: TSpinEdit[30] AnchorSideTop.Control = edtSearchResultsFont AnchorSideTop.Side = asrCenter Left = 632 Height = 23 Top = 407 Width = 57 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 4 TabOrder = 22 Value = 12 Visible = False end object btnSearchResultsFnt: TButton[31] AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 689 Height = 25 Top = 409 Width = 40 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' TabOrder = 23 Visible = False end object dlgFnt: TFontDialog[32] MinFontSize = 0 MaxFontSize = 0 Options = [fdNoStyleSel] left = 88 top = 8 end end doublecmd-0.9.8/src/frames/foptionsfiletypescolors.pas0000644000175000001440000002312212731662527022322 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File types colors 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 fOptionsFileTypesColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, ColorBox, Dialogs, Buttons, fOptionsFrame; type { TfrmOptionsFileTypesColors } TfrmOptionsFileTypesColors = class(TOptionsEditor) optColorDialog: TColorDialog; btnAddCategory: TBitBtn; btnApplyCategory: TBitBtn; btnDeleteCategory: TBitBtn; btnCategoryColor: TButton; btnSearchTemplate: TBitBtn; cbCategoryColor: TColorBox; edtCategoryAttr: TEdit; edtCategoryMask: TEdit; edtCategoryName: TEdit; gbFileTypesColors: TGroupBox; lbCategories: TListBox; lblCategoryAttr: TLabel; lblCategoryColor: TLabel; lblCategoryMask: TLabel; lblCategoryName: TLabel; procedure lbCategoriesClick(Sender: TObject); procedure btnSearchTemplateClick(Sender: TObject); procedure btnAddCategoryClick(Sender: TObject); procedure btnApplyCategoryClick(Sender: TObject); procedure btnDeleteCategoryClick(Sender: TObject); procedure btnCategoryColorClick(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 Clear; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public destructor Destroy; override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; function IsSignatureComputedFromAllWindowComponents: Boolean; override; end; implementation {$R *.lfm} uses Graphics, uLng, uGlobs, uColorExt, fMaskInputDlg, uSearchTemplate, uDCUtils; { TfrmOptionsFileTypesColors } procedure TfrmOptionsFileTypesColors.lbCategoriesClick(Sender: TObject); var MaskItem : TMaskItem; bEnabled: Boolean; begin if (lbCategories.ItemIndex <> -1) then begin MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); edtCategoryName.Text := MaskItem.sName; edtCategoryMask.Text := MaskItem.sExt; SetColorInColorBox(cbCategoryColor, MaskItem.cColor); bEnabled:= (MaskItem.sExt = '') or (MaskItem.sExt[1] <> '>'); edtCategoryMask.Enabled:= bEnabled; edtCategoryAttr.Enabled:= bEnabled; edtCategoryAttr.Text := MaskItem.sModeStr; end else begin edtCategoryName.Text := ''; edtCategoryMask.Text := ''; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; end; 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 if lbCategories.Count = 0 then begin edtCategoryName.Enabled := True; edtCategoryMask.Enabled := True; edtCategoryAttr.Enabled := True; cbCategoryColor.Enabled := True; btnCategoryColor.Enabled := True; btnDeleteCategory.Enabled := True; btnApplyCategory.Enabled := True; end; MaskItem := TMaskItem.Create; try edtCategoryName.Text := rsOptionsEditorFileNewFileTypes; edtCategoryMask.Text := '*'; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; MaskItem.sName:= edtCategoryName.Text; MaskItem.sExt:= edtCategoryMask.Text; MaskItem.sModeStr:= edtCategoryAttr.Text; MaskItem.cColor:= clBlack; iIndex := lbCategories.Items.AddObject(MaskItem.sName, MaskItem); except FreeAndNil(MaskItem); raise; end; lbCategories.ItemIndex:= iIndex; edtCategoryName.SetFocus; end; procedure TfrmOptionsFileTypesColors.btnApplyCategoryClick(Sender: TObject); var MaskItem : TMaskItem; begin if (lbCategories.ItemIndex <> -1) then begin lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; if edtCategoryMask.Text = '' then edtCategoryMask.Text := '*'; // because we load colors from ini by mask MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); MaskItem.sName := edtCategoryName.Text; MaskItem.cColor := cbCategoryColor.Selected; MaskItem.sExt := edtCategoryMask.Text; MaskItem.sModeStr := edtCategoryAttr.Text; end; 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; lbCategoriesClick(lbCategories); end; end; procedure TfrmOptionsFileTypesColors.btnCategoryColorClick(Sender: TObject); begin optColorDialog.Color:= cbCategoryColor.Selected; if optColorDialog.Execute then SetColorInColorBox(cbCategoryColor, optColorDialog.Color); 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) do begin if (not Selected[Index]) and Assigned(Items.Objects[Index]) then begin Canvas.Brush.Color:= gBackColor; Canvas.Font.Color:= TMaskItem(Items.Objects[Index]).cColor; end else begin Canvas.Brush.Color:= gCursorColor; Canvas.Font.Color:= gCursorText; end; Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left+2,ARect.Top,Items[Index]); end; 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; procedure TfrmOptionsFileTypesColors.Load; var I : Integer; MaskItem: TMaskItem; begin Clear; lbCategories.Color:= gBackColor; { 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 lbCategories.ItemIndex := 0 else begin edtCategoryName.Enabled := False; edtCategoryMask.Enabled := False; edtCategoryAttr.Enabled := False; cbCategoryColor.Enabled := False; btnCategoryColor.Enabled := False; btnDeleteCategory.Enabled := False; btnApplyCategory.Enabled := False; end; lbCategoriesClick(lbCategories); end; function TfrmOptionsFileTypesColors.Save: TOptionsEditorSaveFlags; var i: Integer; MaskItem: TMaskItem; begin Result := []; gColorExt.Clear; for I := 0 to lbCategories.Count - 1 do //write new categories 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; destructor TfrmOptionsFileTypesColors.Destroy; begin Clear; inherited; end; end. doublecmd-0.9.8/src/frames/foptionsfiletypescolors.lrt0000644000175000001440000000122412020403374022317 0ustar alexxusersTFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION=File types colors (sort by drag&&drop) TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION=Category &name: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION=Category &mask: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION=Category co&lor: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION=Category a&ttributes: TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION=A&dd TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION=D&elete TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION=>> TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION=A&pply TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT=Template... doublecmd-0.9.8/src/frames/foptionsfiletypescolors.lfm0000644000175000001440000002275513007703327022317 0ustar alexxusersinherited frmOptionsFileTypesColors: TfrmOptionsFileTypesColors Height = 356 Width = 759 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 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 end object cbCategoryColor: TColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCategoryColor AnchorSideBottom.Control = btnApplyCategory Left = 170 Height = 22 Top = 252 Width = 527 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akLeft, akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 12 ItemHeight = 16 TabOrder = 5 end object btnAddCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnDeleteCategory AnchorSideBottom.Control = btnApplyCategory AnchorSideBottom.Side = asrBottom Left = 389 Height = 32 Top = 286 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'A&dd' OnClick = btnAddCategoryClick TabOrder = 7 end object btnDeleteCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnApplyCategory AnchorSideBottom.Control = btnApplyCategory AnchorSideBottom.Side = asrBottom Left = 505 Height = 32 Top = 286 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'D&elete' OnClick = btnDeleteCategoryClick TabOrder = 8 end object btnCategoryColor: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCategoryColor AnchorSideRight.Control = edtCategoryAttr AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCategoryColor AnchorSideBottom.Side = asrBottom Left = 703 Height = 22 Top = 252 Width = 28 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCategoryColorClick TabOrder = 6 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 OnClick = lbCategoriesClick OnDragDrop = lbCategoriesDragDrop OnDragOver = lbCategoriesDragOver OnDrawItem = lbCategoriesDrawItem Style = lbOwnerDrawFixed TabOrder = 0 end object btnApplyCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFileTypesColors AnchorSideBottom.Side = asrBottom Left = 621 Height = 32 Top = 286 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 8 Caption = 'A&pply' OnClick = btnApplyCategoryClick TabOrder = 9 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 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 object optColorDialog: TColorDialog[1] 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 = 184 top = 288 end end doublecmd-0.9.8/src/frames/foptionsfilesviewscomplement.pas0000644000175000001440000001202613377666635023354 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Files views complement options page 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 fOptionsFilesViewsComplement; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Graphics, ExtCtrls, 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: TPanel; 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(Self); 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-0.9.8/src/frames/foptionsfilesviewscomplement.lrj0000644000175000001440000001125113377666635023357 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-0.9.8/src/frames/foptionsfilesviewscomplement.lfm0000644000175000001440000001463013506103211023314 0ustar alexxusersinherited frmOptionsFilesViewsComplement: TfrmOptionsFilesViewsComplement Height = 550 Width = 640 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: TPanel 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] BevelOuter = bvNone ChildSizing.HorizontalSpacing = 3 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 27 ClientWidth = 600 TabOrder = 1 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.Side = asrBottom AnchorSideRight.Control = btnAddAttribute AnchorSideBottom.Side = asrCenter Left = 189 Height = 27 Top = 0 Width = 304 Anchors = [akTop, akLeft, akRight] AutoSize = False TabOrder = 0 end object btnAttrsHelp: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtDefaultAttribute AnchorSideTop.Side = asrCenter 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' Constraints.MinHeight = 26 OnClick = btnAttrsHelpClick TabOrder = 2 end object btnAddAttribute: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtDefaultAttribute AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAttrsHelp Left = 496 Height = 26 Top = 0 Width = 48 Anchors = [akTop, akRight] AutoSize = True Caption = '&Add' Constraints.MinHeight = 26 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-0.9.8/src/frames/foptionsfilesviews.pas0000644000175000001440000002440613377666635021275 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Files views 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 fOptionsFilesViews; {$mode objfpc}{$H+} interface uses uTypes, Classes, SysUtils, StdCtrls, Graphics, ExtCtrls, Spin, fOptionsFrame; type { TfrmOptionsFilesViews } TfrmOptionsFilesViews = class(TOptionsEditor) btnDefault: TButton; cbDateTimeFormat: TComboBox; cbHeaderFooterSizeFormat: 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; lblHeaderFooterSizeExample: TLabel; lblHeaderFooterSizeFormat: 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; speNumberOfDigitsHeaderFooter: 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); lblHeaderFooterSizeExample.Caption := CnvFormatFileSize(cFileSizeExample, TFileSizeFormat(cbHeaderFooterSizeFormat.ItemIndex), speNumberOfDigitsHeaderFooter.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); cbHeaderFooterSizeFormat.Items.Assign(cbFileSizeFormat.Items); cbOperationSizeFormat.Items.Assign(cbFileSizeFormat.Items); 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 := 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); cbHeaderFooterSizeFormat.ItemIndex := Ord(gHeaderFooterSizeFormat); cbOperationSizeFormat.ItemIndex := Ord(gOperationSizeFormat); speNumberOfDigitsFile.Value := gFileSizeDigits; speNumberOfDigitsHeaderFooter.Value := gHeaderFooterDigits; 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'); lblHeaderFooterSizeExample.Constraints.MinWidth := lblHeaderFooterSizeExample.Canvas.TextWidth(CnvFormatFileSize(cFileSizeExample, fsfKilo, speNumberOfDigitsHeaderFooter.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 = 1); 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); gHeaderFooterSizeFormat := TFileSizeFormat(cbHeaderFooterSizeFormat.ItemIndex); gOperationSizeFormat := TFileSizeFormat(cbOperationSizeFormat.ItemIndex); gFileSizeDigits := speNumberOfDigitsFile.Value; gHeaderFooterDigits := speNumberOfDigitsHeaderFooter.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-0.9.8/src/frames/foptionsfilesviews.lrj0000644000175000001440000000645613377744215021275 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":11339658,"name":"tfrmoptionsfilesviews.lblheaderfootersizeformat.caption","sourcebytes":[38,72,101,97,100,101,114,47,102,111,111,116,101,114,32,102,111,114,109,97,116,58],"value":"&Header/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-0.9.8/src/frames/foptionsfilesviews.lfm0000644000175000001440000004154113377744215021256 0ustar alexxusersinherited frmOptionsFilesViews: TfrmOptionsFilesViews Height = 550 Width = 640 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] AutoSize = False 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 lblHeaderFooterSizeFormat: TLabel Left = 12 Height = 15 Top = 62 Width = 117 Caption = '&Header/footer format:' FocusControl = cbHeaderFooterSizeFormat ParentColor = False end object cbHeaderFooterSizeFormat: TComboBox AnchorSideLeft.Control = lblHeaderFooterSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHeaderFooterSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = speNumberOfDigitsHeaderFooter Left = 139 Height = 23 Top = 58 Width = 379 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 DropDownCount = 12 ItemHeight = 15 OnChange = RefreshOurExamples Style = csDropDownList TabOrder = 3 end object speNumberOfDigitsHeaderFooter: TSpinEdit AnchorSideLeft.Control = cbHeaderFooterSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbHeaderFooterSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblHeaderFooterSizeExample Left = 524 Height = 23 Top = 58 Width = 50 Anchors = [akTop, akRight] MaxValue = 3 OnChange = RefreshOurExamples TabOrder = 4 end object lblHeaderFooterSizeExample: TLabel AnchorSideTop.Control = cbHeaderFooterSizeFormat 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 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 = 6 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 = 5 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] 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 end doublecmd-0.9.8/src/frames/foptionsfilesearch.pas0000644000175000001440000000771413017704640021201 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-0.9.8/src/frames/foptionsfilesearch.lrt0000644000175000001440000000135713017704640021214 0ustar alexxusersTFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION=File search TFRMOPTIONSFILESEARCH.CBPARTIALNAMESEARCH.CAPTION=&Search for part of file name TFRMOPTIONSFILESEARCH.CBINITIALLYCLEARFILEMASK.CAPTION=When launching file search, clear file mask filter TFRMOPTIONSFILESEARCH.LBLNEWSEARCHFILTERS.CAPTION=Current filters with "New search" button: TFRMOPTIONSFILESEARCH.CBSHOWMENUBARINFINDFILES.CAPTION=Show menu bar in "Find files" TFRMOPTIONSFILESEARCH.LBLSEARCHDEFAULTTEMPLATE.CAPTION=Default search template: TFRMOPTIONSFILESEARCH.DBTEXTSEARCH.CAPTION=Text search in files TFRMOPTIONSFILESEARCH.RBUSEMMAPINSEARCH.CAPTION=Use memory mapping for search te&xt in files TFRMOPTIONSFILESEARCH.RBUSESTREAMINSEARCH.CAPTION=&Use stream for search text in files doublecmd-0.9.8/src/frames/foptionsfilesearch.lfm0000644000175000001440000001066613017704640021174 0ustar alexxusersinherited frmOptionsFileSearch: TfrmOptionsFileSearch Height = 649 Width = 734 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-0.9.8/src/frames/foptionsfilepanelscolors.pas0000644000175000001440000004612012731662527022443 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File panels colors 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 fOptionsFilePanelsColors; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Graphics, Classes, SysUtils, ComCtrls, StdCtrls, ColorBox, ExtCtrls, Dialogs, DividerBevel, //DC uColumns, fOptionsFrame {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; type { TfrmOptionsFilePanelsColors } TfrmOptionsFilePanelsColors = class(TOptionsEditor) btnCursorBorderColor: TButton; btnResetToDCDefault: TButton; cbAllowOverColor: TCheckBox; cbUseCursorBorder: TCheckBox; cbCursorBorderColor: TColorBox; lblTextColor: TLabel; cbTextColor: TColorBox; btnForeColor: TButton; lblBackgroundColor: TLabel; cbBackColor: TColorBox; btnBackColor: TButton; lblBackgroundColor2: TLabel; cbBackColor2: TColorBox; btnBackColor2: TButton; lblMarkColor: TLabel; cbMarkColor: TColorBox; btnMarkColor: TButton; lblCursorColor: TLabel; cbCursorColor: TColorBox; btnCursorColor: TButton; lblCursorText: TLabel; cbCursorText: TColorBox; btnCursorText: TButton; lblInactiveCursorColor: TLabel; cbInactiveCursorColor: TColorBox; btnInactiveCursorColor: TButton; lblInactiveMarkColor: TLabel; cbInactiveMarkColor: TColorBox; btnInactiveMarkColor: TButton; dbOptionsVertical: TDividerBevel; cbbUseInvertedSelection: TCheckBox; cbbUseInactiveSelColor: TCheckBox; cbbUseFrameCursor: TCheckBox; lblInactivePanelBrightness: TLabel; spPanelSplitter: TSplitter; tbInactivePanelBrightness: TTrackBar; dbFreeSpaceIndicator: TDividerBevel; cbbUseGradientInd: TCheckBox; pbxFakeDrive: TPaintBox; lblIndColor: TLabel; cbIndColor: TColorBox; btnIndColor: TButton; lblIndBackColor: TLabel; cbIndBackColor: TColorBox; btnIndBackColor: TButton; pnlPreviewCont: TPanel; lblPreview: TLabel; pnlLeftPreview: TPanel; pnlRightPreview: TPanel; optColorDialog: TColorDialog; procedure btnCursorBorderColorClick(Sender: TObject); procedure btnResetToDCDefaultClick(Sender: TObject); procedure cbbUseFrameCursorChange(Sender: TObject); procedure cbColorBoxChange(Sender: TObject); procedure btnForeColorClick(Sender: TObject); procedure btnBackColorClick(Sender: TObject); procedure btnBackColor2Click(Sender: TObject); procedure btnMarkColorClick(Sender: TObject); procedure btnCursorColorClick(Sender: TObject); procedure btnCursorTextClick(Sender: TObject); procedure btnInactiveCursorColorClick(Sender: TObject); procedure btnInactiveMarkColorClick(Sender: TObject); procedure cbbUseInactiveSelColorChange(Sender: TObject); procedure cbUseCursorBorderChange(Sender: TObject); procedure tbInactivePanelBrightnessChange(Sender: TObject); procedure cbbUseGradientIndChange(Sender: TObject); procedure cbIndColorChange(Sender: TObject); procedure btnIndColorClick(Sender: TObject); procedure btnIndBackColorClick(Sender: TObject); procedure RefreshPreviewPanel; procedure pbxFakeDrivePaint(Sender: TObject); 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; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Forms, //DC uSampleForConfigFileSource, uFileFunctions, DCOSUtils, 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 SetColorInColorBox(cbTextColor, gForeColor); SetColorInColorBox(cbBackColor, gBackColor); SetColorInColorBox(cbBackColor2, gBackColor2); SetColorInColorBox(cbMarkColor, gMarkColor); SetColorInColorBox(cbCursorColor, gCursorColor); SetColorInColorBox(cbCursorText, gCursorText); SetColorInColorBox(cbInactiveCursorColor, gInactiveCursorColor); SetColorInColorBox(cbInactiveMarkColor, gInactiveMarkColor); cbAllowOverColor.Checked := gAllowOverColor; cbbUseInvertedSelection.Checked := gUseInvertedSelection; cbbUseInactiveSelColor.Checked := gUseInactiveSelColor; cbbUseFrameCursor.Checked := gUseFrameCursor; cbUseCursorBorder.Checked := gUseCursorBorder; SetColorInColorBox(cbCursorBorderColor, gCursorBorderColor); tbInactivePanelBrightness.Position := gInactivePanelBrightness; SetColorInColorBox(cbIndColor, gIndForeColor); SetColorInColorBox(cbIndBackColor, gIndBackColor); cbbUseGradientInd.Checked := gIndUseGradient; 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; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := True; //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 gForeColor := cbTextColor.Selected; gBackColor := cbBackColor.Selected; gBackColor2 := cbBackColor2.Selected; gMarkColor := cbMarkColor.Selected; gCursorColor := cbCursorColor.Selected; gCursorText := cbCursorText.Selected; gInactiveCursorColor := cbInactiveCursorColor.Selected; gInactiveMarkColor := cbInactiveMarkColor.Selected; gUseInvertedSelection := cbbUseInvertedSelection.Checked; gAllowOverColor := cbAllowOverColor.Checked; gUseInactiveSelColor := cbbUseInactiveSelColor.Checked; gUseFrameCursor := cbbUseFrameCursor.Checked; gUseCursorBorder := cbUseCursorBorder.Checked; gCursorBorderColor := cbCursorBorderColor.Selected; gInactivePanelBrightness := tbInactivePanelBrightness.Position; gIndUseGradient := cbbUseGradientInd.Checked; gIndForeColor := cbIndColor.Selected; gIndBackColor := cbIndBackColor.Selected; Result := []; end; { TfrmOptionsFilePanelsColors.cbColorBoxChange } procedure TfrmOptionsFilePanelsColors.cbColorBoxChange(Sender: TObject); begin if bLoadCompleted then RefreshPreviewPanel; end; procedure TfrmOptionsFilePanelsColors.btnCursorBorderColorClick(Sender: TObject); begin optColorDialog.Color := cbCursorBorderColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorBorderColor, optColorDialog.Color); RefreshPreviewPanel; end; end; procedure TfrmOptionsFilePanelsColors.btnResetToDCDefaultClick(Sender: TObject); begin SetColorInColorBox(cbTextColor, clWindowText); SetColorInColorBox(cbBackColor, clWindow); SetColorInColorBox(cbBackColor2, clWindow); SetColorInColorBox(cbMarkColor, clRed); SetColorInColorBox(cbCursorColor, clHighlight); SetColorInColorBox(cbCursorText, clHighlightText); SetColorInColorBox(cbInactiveCursorColor, clInactiveCaption); SetColorInColorBox(cbInactiveMarkColor, clMaroon); cbAllowOverColor.Checked := True; cbbUseInvertedSelection.Checked := False; cbbUseInactiveSelColor.Checked := False; cbbUseFrameCursor.Checked := False; cbUseCursorBorder.Checked := False; SetColorInColorBox(cbCursorBorderColor, clHighlight); tbInactivePanelBrightness.Position := 100; SetColorInColorBox(cbIndColor, clBlack); SetColorInColorBox(cbIndBackColor, clWhite); cbbUseGradientInd.Checked := True; cbbUseFrameCursorChange(cbbUseFrameCursor); end; procedure TfrmOptionsFilePanelsColors.cbbUseFrameCursorChange(Sender: TObject); begin cbUseCursorBorder.Enabled := not cbbUseFrameCursor.Checked; lblCursorText.Enabled := not cbbUseFrameCursor.Checked; cbCursorText.Enabled := not cbbUseFrameCursor.Checked; btnCursorText.Enabled := not cbbUseFrameCursor.Checked; if not cbbUseFrameCursor.Checked then cbCursorText.Font.Color := clDefault else cbCursorText.Font.Color := clInactiveCaption; cbUseCursorBorderChange(cbUseCursorBorder); end; { TfrmOptionsFilePanelsColors.btnForeColorClick } procedure TfrmOptionsFilePanelsColors.btnForeColorClick(Sender: TObject); begin optColorDialog.Color := cbTextColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbTextColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnBackColorClick } procedure TfrmOptionsFilePanelsColors.btnBackColorClick(Sender: TObject); begin optColorDialog.Color := cbBackColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnBackColor2Click } procedure TfrmOptionsFilePanelsColors.btnBackColor2Click(Sender: TObject); begin optColorDialog.Color := cbBackColor2.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackColor2, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnMarkColorClick } procedure TfrmOptionsFilePanelsColors.btnMarkColorClick(Sender: TObject); begin optColorDialog.Color := cbMarkColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbMarkColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnCursorColorClick } procedure TfrmOptionsFilePanelsColors.btnCursorColorClick(Sender: TObject); begin optColorDialog.Color := cbCursorColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnCursorTextClick } procedure TfrmOptionsFilePanelsColors.btnCursorTextClick(Sender: TObject); begin optColorDialog.Color := cbCursorText.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorText, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnInactiveCursorColorClick } procedure TfrmOptionsFilePanelsColors.btnInactiveCursorColorClick(Sender: TObject); begin optColorDialog.Color := cbInactiveCursorColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbInactiveCursorColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnInactiveMarkColorClick } procedure TfrmOptionsFilePanelsColors.btnInactiveMarkColorClick(Sender: TObject); begin optColorDialog.Color := cbInactiveMarkColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbInactiveMarkColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange } procedure TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange(Sender: TObject); begin lblInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; btnInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; lblInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; btnInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; if bLoadCompleted then begin if cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled then begin cbInactiveCursorColor.Font.Color := clDefault; cbInactiveMarkColor.Font.Color := clDefault; end else begin cbInactiveCursorColor.Font.Color := clInactiveCaption; cbInactiveMarkColor.Font.Color := clInactiveCaption; end; RefreshPreviewPanel; end; end; procedure TfrmOptionsFilePanelsColors.cbUseCursorBorderChange(Sender: TObject); begin cbCursorBorderColor.Enabled := cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled; btnCursorBorderColor.Enabled := cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled; if cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled then cbCursorBorderColor.Font.Color := clDefault else cbCursorBorderColor.Font.Color := clInactiveCaption; if bLoadCompleted then RefreshPreviewPanel; end; { TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange } procedure TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange(Sender: TObject); begin if bLoadCompleted then begin PreviewLeftPanel.UpdateColumnsView; PreviewLeftPanel.Reload; PreviewRightPanel.UpdateColumnsView; PreviewRightPanel.Reload; end; end; { TfrmOptionsFilePanelsColors.cbbUseGradientIndChange } procedure TfrmOptionsFilePanelsColors.cbbUseGradientIndChange(Sender: TObject); begin lblIndColor.Enabled := not (cbbUseGradientInd.Checked); lblIndBackColor.Enabled := not (cbbUseGradientInd.Checked); cbIndColor.Enabled := not (cbbUseGradientInd.Checked); cbIndBackColor.Enabled := not (cbbUseGradientInd.Checked); btnIndColor.Enabled := not (cbbUseGradientInd.Checked); btnIndBackColor.Enabled := not (cbbUseGradientInd.Checked); pbxFakeDrive.Repaint; end; { TfrmOptionsFilePanelsColors.cbIndColorChange } procedure TfrmOptionsFilePanelsColors.cbIndColorChange(Sender: TObject); begin pbxFakeDrive.Repaint; end; { TfrmOptionsFilePanelsColors.btnIndColorClick } procedure TfrmOptionsFilePanelsColors.btnIndColorClick(Sender: TObject); begin optColorDialog.Color := cbIndColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbIndColor, optColorDialog.Color); pbxFakeDrive.Repaint; end; end; { TfrmOptionsFilePanelsColors.btnIndBackColorClick } procedure TfrmOptionsFilePanelsColors.btnIndBackColorClick(Sender: TObject); begin optColorDialog.Color := cbIndBackColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbIndBackColor, optColorDialog.Color); pbxFakeDrive.Repaint; 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.pbxFakeDrivePaint } procedure TfrmOptionsFilePanelsColors.pbxFakeDrivePaint(Sender: TObject); begin frmMain.PaintDriveFreeBar(pbxFakeDrive, cbbUseGradientInd.Checked, cbIndColor.Selected, cbIndBackColor.Selected); 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-0.9.8/src/frames/foptionsfilepanelscolors.lrt0000644000175000001440000000421012534542254022446 0ustar alexxusersTFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION=T&ext Color: TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION=Bac&kground: TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION=Backg&round 2: TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION=&Mark Color: TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION=C&ursor Color: TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION=Cursor Te&xt: TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION=Inactive Cursor Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION=Inactive Mark Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION=U&se Inverted Selection TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINACTIVESELCOLOR.CAPTION=Use Inactive Sel Color TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION=Use &Frame Cursor TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION=&Brightness level of inactive panel TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION=Drive Free Space Indicator TFRMOPTIONSFILEPANELSCOLORS.CBBUSEGRADIENTIND.CAPTION=Use &Gradient Indicator TFRMOPTIONSFILEPANELSCOLORS.LBLINDCOLOR.CAPTION=&Indicator Fore Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINDBACKCOLOR.CAPTION=In&dicator Back Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLPREVIEW.CAPTION=Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings. TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION=Cursor border TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.BTNRESETTODCDEFAULT.CAPTION=Reset to DC default TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION=Allow Overcolor doublecmd-0.9.8/src/frames/foptionsfilepanelscolors.lfm0000644000175000001440000005255413506103211022423 0ustar alexxusersinherited frmOptionsFilePanelsColors: TfrmOptionsFilePanelsColors Height = 521 Width = 854 ClientHeight = 521 ClientWidth = 854 DesignLeft = 143 DesignTop = 160 object lblTextColor: TLabel[0] AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbTextColor Left = 99 Height = 15 Top = 12 Width = 57 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'T&ext Color:' FocusControl = cbTextColor ParentColor = False end object cbTextColor: TColorBox[1] Left = 160 Height = 22 Top = 8 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Constraints.MinWidth = 100 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 0 end object btnForeColor: TButton[2] AnchorSideLeft.Control = cbTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor AnchorSideBottom.Control = cbTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 8 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnForeColorClick TabOrder = 1 end object lblBackgroundColor: TLabel[3] AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 89 Height = 15 Top = 38 Width = 67 Anchors = [akTop, akRight] Caption = 'Bac&kground:' FocusControl = cbBackColor ParentColor = False end object cbBackColor: TColorBox[4] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 34 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 2 end object btnBackColor: TButton[5] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbBackColor AnchorSideBottom.Control = cbBackColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 34 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColorClick TabOrder = 3 end object lblBackgroundColor2: TLabel[6] AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 80 Height = 15 Top = 64 Width = 76 Anchors = [akTop, akRight] Caption = 'Backg&round 2:' FocusControl = cbBackColor2 ParentColor = False end object cbBackColor2: TColorBox[7] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 60 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 4 end object btnBackColor2: TButton[8] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbBackColor2 AnchorSideBottom.Control = cbBackColor2 AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 60 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColor2Click TabOrder = 5 end object lblMarkColor: TLabel[9] AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 94 Height = 15 Top = 90 Width = 62 Anchors = [akTop, akRight] Caption = '&Mark Color:' FocusControl = cbMarkColor ParentColor = False end object cbMarkColor: TColorBox[10] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 86 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 6 end object btnMarkColor: TButton[11] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbMarkColor AnchorSideBottom.Control = cbMarkColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 86 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnMarkColorClick TabOrder = 7 end object lblCursorColor: TLabel[12] AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 86 Height = 15 Top = 116 Width = 70 Anchors = [akTop, akRight] Caption = 'C&ursor Color:' FocusControl = cbCursorColor ParentColor = False end object cbCursorColor: TColorBox[13] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 112 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 8 end object btnCursorColor: TButton[14] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorColor AnchorSideBottom.Control = cbCursorColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 112 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorColorClick TabOrder = 9 end object lblCursorText: TLabel[15] AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 93 Height = 15 Top = 142 Width = 63 Anchors = [akTop, akRight] Caption = 'Cursor Te&xt:' FocusControl = cbCursorText ParentColor = False end object cbCursorText: TColorBox[16] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 138 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 10 end object btnCursorText: TButton[17] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorText AnchorSideBottom.Control = cbCursorText AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 138 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorTextClick TabOrder = 11 end object lblInactiveCursorColor: TLabel[18] AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 42 Height = 15 Top = 168 Width = 114 Anchors = [akTop, akRight] Caption = 'Inactive Cursor Color:' FocusControl = cbInactiveCursorColor ParentColor = False end object cbInactiveCursorColor: TColorBox[19] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 164 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 12 end object btnInactiveCursorColor: TButton[20] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideBottom.Control = cbInactiveCursorColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 164 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveCursorColorClick TabOrder = 13 end object lblInactiveMarkColor: TLabel[21] AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 50 Height = 15 Top = 194 Width = 106 Anchors = [akTop, akRight] Caption = 'Inactive Mark Color:' FocusControl = cbInactiveMarkColor ParentColor = False end object cbInactiveMarkColor: TColorBox[22] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 190 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 14 end object btnInactiveMarkColor: TButton[23] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideBottom.Control = cbInactiveMarkColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 190 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveMarkColorClick TabOrder = 15 end object dbOptionsVertical: TDividerBevel[24] AnchorSideLeft.Control = btnForeColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnForeColor AnchorSideRight.Control = btnCursorText AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 406 Height = 222 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[25] AnchorSideLeft.Control = dbOptionsVertical AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 433 Height = 19 Top = 14 Width = 136 BorderSpacing.Top = 6 Caption = 'U&se Inverted Selection' OnChange = cbColorBoxChange TabOrder = 19 end object cbbUseInactiveSelColor: TCheckBox[26] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 579 Height = 19 Top = 14 Width = 133 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Use Inactive Sel Color' OnChange = cbbUseInactiveSelColorChange TabOrder = 20 end object cbbUseFrameCursor: TCheckBox[27] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbbUseInvertedSelection AnchorSideTop.Side = asrBottom Left = 433 Height = 19 Top = 38 Width = 113 BorderSpacing.Top = 5 Caption = 'Use &Frame Cursor' OnChange = cbbUseFrameCursorChange TabOrder = 21 end object lblInactivePanelBrightness: TLabel[28] AnchorSideLeft.Control = cbbUseFrameCursor AnchorSideTop.Control = btnResetToDCDefault AnchorSideTop.Side = asrBottom Left = 433 Height = 15 Top = 94 Width = 172 BorderSpacing.Top = 6 Caption = '&Brightness level of inactive panel' FocusControl = tbInactivePanelBrightness ParentColor = False end object tbInactivePanelBrightness: TTrackBar[29] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 433 Height = 26 Top = 115 Width = 377 Max = 100 OnChange = tbInactivePanelBrightnessChange PageSize = 10 Position = 0 ScalePos = trRight TickStyle = tsNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 24 end object dbFreeSpaceIndicator: TDividerBevel[30] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbbUseGradientInd Left = 433 Height = 15 Top = 150 Width = 377 Caption = 'Drive Free Space Indicator' Anchors = [akLeft, akRight, akBottom] end object cbbUseGradientInd: TCheckBox[31] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = cbIndColor Left = 433 Height = 19 Top = 171 Width = 137 Anchors = [akLeft, akBottom] BorderSpacing.Top = 6 Caption = 'Use &Gradient Indicator' OnChange = cbbUseGradientIndChange TabOrder = 25 end object pbxFakeDrive: TPaintBox[32] Tag = 83 AnchorSideLeft.Control = cbbUseGradientInd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbbUseGradientInd AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 573 Height = 10 Top = 175 Width = 235 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Right = 2 OnPaint = pbxFakeDrivePaint end object lblIndColor: TLabel[33] AnchorSideTop.Control = cbIndColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbIndColor Left = 464 Height = 15 Top = 194 Width = 108 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = '&Indicator Fore Color:' FocusControl = cbIndColor ParentColor = False end object cbIndColor: TColorBox[34] AnchorSideTop.Control = cbInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 576 Height = 22 Top = 190 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] ItemHeight = 16 OnChange = cbIndColorChange TabOrder = 26 end object btnIndColor: TButton[35] AnchorSideLeft.Control = cbIndColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbIndColor AnchorSideBottom.Side = asrBottom Left = 782 Height = 22 Top = 190 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 Caption = '>>' OnClick = btnIndColorClick TabOrder = 27 end object lblIndBackColor: TLabel[36] AnchorSideLeft.Control = lblIndColor AnchorSideTop.Control = cbIndBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblIndColor AnchorSideRight.Side = asrBottom Left = 462 Height = 15 Top = 220 Width = 110 Anchors = [akTop, akRight] Caption = 'In&dicator Back Color:' FocusControl = cbIndBackColor ParentColor = False end object cbIndBackColor: TColorBox[37] AnchorSideLeft.Control = cbIndColor AnchorSideTop.Control = cbIndColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbIndColor AnchorSideRight.Side = asrBottom Left = 576 Height = 22 Top = 216 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbIndColorChange TabOrder = 28 end object btnIndBackColor: TButton[38] AnchorSideLeft.Control = btnIndColor AnchorSideTop.Control = cbIndBackColor AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbIndBackColor AnchorSideBottom.Side = asrBottom Left = 782 Height = 22 Top = 216 Width = 28 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '>>' OnClick = btnIndBackColorClick TabOrder = 29 end object pnlPreviewCont: TPanel[39] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 272 Top = 249 Width = 854 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 11 BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 272 ClientWidth = 854 Color = clInactiveCaption Constraints.MinHeight = 250 ParentColor = False TabOrder = 30 TabStop = True object lblPreview: TLabel Left = 8 Height = 15 Top = 0 Width = 838 Align = alTop Alignment = taCenter Caption = 'Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings.' Color = clInactiveCaption ParentColor = False Transparent = False end object pnlLeftPreview: TPanel Left = 8 Height = 249 Top = 15 Width = 413 Align = alClient Anchors = [] BorderSpacing.Bottom = 8 ParentColor = False TabOrder = 0 TabStop = True OnEnter = pnlLeftPreviewEnter end object pnlRightPreview: TPanel Left = 431 Height = 249 Top = 15 Width = 415 Align = alRight Anchors = [] BorderSpacing.Bottom = 8 ParentColor = False TabOrder = 1 TabStop = True OnEnter = pnlRightPreviewEnter end object spPanelSplitter: TSplitter Left = 421 Height = 257 Top = 15 Width = 10 Align = alRight Anchors = [akRight] ResizeAnchor = akRight end end object cbUseCursorBorder: TCheckBox[40] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorBorderColor Left = 67 Height = 19 Top = 218 Width = 93 Anchors = [akTop, akRight] Caption = 'Cursor border' OnChange = cbUseCursorBorderChange TabOrder = 16 end object cbCursorBorderColor: TColorBox[41] AnchorSideLeft.Control = cbInactiveMarkColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 216 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 17 end object btnCursorBorderColor: TButton[42] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorBorderColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 367 Height = 22 Top = 216 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorBorderColorClick TabOrder = 18 end object btnResetToDCDefault: TButton[43] AnchorSideTop.Control = cbAllowOverColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 683 Height = 25 Top = 63 Width = 127 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Reset to DC default' OnClick = btnResetToDCDefaultClick TabOrder = 23 end object cbAllowOverColor: TCheckBox[44] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbbUseFrameCursor AnchorSideTop.Side = asrCenter Left = 579 Height = 19 Top = 38 Width = 105 Caption = 'Allow Overcolor' OnChange = cbbUseInactiveSelColorChange TabOrder = 22 end object optColorDialog: TColorDialog[45] 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-0.9.8/src/frames/foptionsfileoperations.pas0000644000175000001440000001416613347422321022115 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File operations 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 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; 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; 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 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-0.9.8/src/frames/foptionsfileoperations.lrt0000644000175000001440000000302113020647235022120 0ustar alexxusersTFRMOPTIONSFILEOPERATIONS.GBUSERINTERFACE.CAPTION=User interface TFRMOPTIONSFILEOPERATIONS.LBLPROGRESSKIND.CAPTION=Show operations progress &initially in TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION=D&rop readonly flag TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION=Select &file name without extension when renaming TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION=Sho&w tab select panel in copy/move dialog TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION=Dele&te to recycle bin (Shift key reverses this setting) TFRMOPTIONSFILEOPERATIONS.CBCOPYCONFIRMATION.CAPTION=Cop&y operation TFRMOPTIONSFILEOPERATIONS.CBMOVECONFIRMATION.CAPTION=&Move operation TFRMOPTIONSFILEOPERATIONS.CBDELETECONFIRMATION.CAPTION=&Delete operation TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASHCONFIRMATION.CAPTION=D&elete to trash operation TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION=Show confirmation window for: TFRMOPTIONSFILEOPERATIONS.GBEXECUTINGOPERATIONS.CAPTION=Executing operations TFRMOPTIONSFILEOPERATIONS.LBLBUFFERSIZE.CAPTION=&Buffer size for file operations (in KB): TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION=&Number of wipe passes: TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION=&Process comments with files/folders TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION=S&kip file operations errors and write them to log window TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION=Duplicated name auto-rename style: TFRMOPTIONSFILEOPERATIONS.LBLHASHBUFFERSIZE.CAPTION=Buffer size for &hash calculation (in KB): doublecmd-0.9.8/src/frames/foptionsfileoperations.lfm0000644000175000001440000002246613347422321022112 0ustar alexxusersinherited frmOptionsFileOperations: TfrmOptionsFileOperations Height = 649 Width = 734 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 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-0.9.8/src/frames/foptionsfileassocextra.pas0000644000175000001440000000662212731662527022116 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Extra File Associations Configuration 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 fOptionsFileAssocExtra; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls; type { TfrmOptionsFileAssocExtra } TfrmOptionsFileAssocExtra = class(TOptionsEditor) cbOfferToAddToFileAssociations: TCheckBox; cbExecuteViaShell: TCheckBox; cbExtendedContextMenu: TCheckBox; cbOpenSystemWithTerminalClose: TCheckBox; cbOpenSystemWithTerminalStayOpen: TCheckBox; cbIncludeConfigFileAssoc: TCheckBox; gbExtendedContextMenuOptions: TGroupBox; procedure cbExtendedContextMenuChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetTitle: string; override; class function GetIconIndex: integer; override; end; implementation {$R *.lfm} uses uGlobs, uLng; {TfrmOptionsFileAssocExtra} { 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; cbExecuteViaShell.Checked := gOpenExecuteViaShell; cbIncludeConfigFileAssoc.Checked := gIncludeFileAssociation; cbExtendedContextMenuChange(cbExtendedContextMenu); end; { TfrmOptionsFileAssocExtra.Save } function TfrmOptionsFileAssocExtra.Save: TOptionsEditorSaveFlags; begin gOfferToAddToFileAssociations := cbOfferToAddToFileAssociations.Checked; gExtendedContextMenu := cbExtendedContextMenu.Checked; gExecuteViaTerminalStayOpen := cbOpenSystemWithTerminalStayOpen.Checked; gExecuteViaTerminalClose := cbOpenSystemWithTerminalClose.Checked; gOpenExecuteViaShell := cbExecuteViaShell.Checked; gIncludeFileAssociation := cbIncludeConfigFileAssoc.Checked; Result := []; end; end. doublecmd-0.9.8/src/frames/foptionsfileassocextra.lrt0000644000175000001440000000175712532643273022134 0ustar alexxusersTFRMOPTIONSFILEASSOCEXTRA.CBOFFERTOADDTOFILEASSOCIATIONS.HINT=When accessing file association, offer to add current selected file if not already included in a configured file type TFRMOPTIONSFILEASSOCEXTRA.CBOFFERTOADDTOFILEASSOCIATIONS.CAPTION=Offer to add selection to file association when not included already TFRMOPTIONSFILEASSOCEXTRA.GBEXTENDEDCONTEXTMENUOPTIONS.CAPTION=Extended options items: TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION=Execute via shell TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION=Execute via terminal and close TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION=Execute via terminal and stay open TFRMOPTIONSFILEASSOCEXTRA.CBINCLUDECONFIGFILEASSOC.CAPTION=File association configuration TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT=When accessing file association, offer to add current selected file if not already included in a configured file type TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.CAPTION=Extended context menu doublecmd-0.9.8/src/frames/foptionsfileassocextra.lfm0000644000175000001440000000604713300617741022101 0ustar alexxusersinherited frmOptionsFileAssocExtra: TfrmOptionsFileAssocExtra Height = 280 Width = 500 AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 280 ClientWidth = 500 ParentShowHint = False ShowHint = True DesignLeft = 141 DesignTop = 288 object cbOfferToAddToFileAssociations: TCheckBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 24 Hint = 'When accessing file association, offer to add current selected file if not already included in a configured file type' Top = 6 Width = 472 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 = 143 Top = 68 Width = 277 AutoSize = True BorderSpacing.Top = 4 Caption = 'Extended options items:' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 124 ClientWidth = 273 TabOrder = 1 object cbExecuteViaShell: TCheckBox AnchorSideLeft.Control = gbExtendedContextMenuOptions AnchorSideTop.Control = gbExtendedContextMenuOptions Left = 8 Height = 24 Top = 8 Width = 135 BorderSpacing.Top = 4 Caption = 'Execute via shell' TabOrder = 0 end object cbOpenSystemWithTerminalClose: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbExecuteViaShell AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 36 Width = 227 BorderSpacing.Top = 4 Caption = 'Execute via terminal and close' TabOrder = 1 end object cbOpenSystemWithTerminalStayOpen: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalClose AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 64 Width = 257 BorderSpacing.Top = 4 Caption = 'Execute via terminal and stay open' TabOrder = 2 end object cbIncludeConfigFileAssoc: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalStayOpen AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 92 Width = 223 BorderSpacing.Top = 4 Caption = 'File association configuration' TabOrder = 3 end end object cbExtendedContextMenu: TCheckBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbOfferToAddToFileAssociations AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Top = 40 Width = 185 BorderSpacing.Top = 10 Caption = 'Extended context menu' OnChange = cbExtendedContextMenuChange TabOrder = 2 end end doublecmd-0.9.8/src/frames/foptionsfileassoc.pas0000644000175000001440000013744713404102631021043 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File associations configuration 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 . } 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 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; pmVariableStartPathHelper: TPopupMenu; pnlBottomSettings: TPanel; pmVariableParamsHelper: TPopupMenu; 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 deStartPathChange(Sender: TObject); procedure edtParamsChange(Sender: TObject); procedure edIconFileNameChange(Sender: TObject); 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; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Math, LCLType, LazUTF8, //DC DCStrUtils, uOSForms, fMain, uFile, uGlobs, 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, '*.*']); // 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); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmVariableParamsHelper, edtParams); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmVariableStartPathHelper, deStartPath); 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 := 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 := 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 := 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 pmVariableParamsHelper.PopUp; 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 pmVariableStartPathHelper.PopUp; end; { TfrmOptionsFileAssoc.edIconFileNameChange } procedure TfrmOptionsFileAssoc.edIconFileNameChange(Sender: TObject); begin if not FUpdatingControls then SetIconFileName(edIconFileName.Text); 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; end. doublecmd-0.9.8/src/frames/foptionsfileassoc.lrj0000644000175000001440000002223013372427344021045 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-0.9.8/src/frames/foptionsfileassoc.lfm0000644000175000001440000012736213372427344021050 0ustar alexxusersinherited frmOptionsFileAssoc: TfrmOptionsFileAssoc Height = 585 Width = 568 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 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 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 pmVariableParamsHelper: TPopupMenu[5] left = 175 top = 193 end object pmPathHelper: TPopupMenu[6] left = 65 top = 187 end object pmVariableStartPathHelper: TPopupMenu[7] left = 165 top = 263 end end doublecmd-0.9.8/src/frames/foptionsfavoritetabs.pas0000644000175000001440000012512713404102631021554 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, '*.*']); 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, 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, 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-0.9.8/src/frames/foptionsfavoritetabs.lrt0000644000175000001440000000771412656270711021610 0ustar alexxusersTFRMOPTIONSFAVORITETABS.GBFAVORITETABS.CAPTION=Favorite Tabs list (reorder by drag && drop) TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION=Insert... TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION=Delete... TFRMOPTIONSFAVORITETABS.BTNIMPORTEXPORT.CAPTION=Import/Export TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION=Add... TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION=Sort... TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION=Rename TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION=Other options TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION=Always expand tree TFRMOPTIONSFAVORITETABS.GPSAVEDTABSRESTORATIONACTION.CAPTION=What to restore where for the selected entry: TFRMOPTIONSFAVORITETABS.LBLTARGETPANELLEFTSAVEDTABS.CAPTION=Tabs saved on left to be restored to: TFRMOPTIONSFAVORITETABS.LBLTARGETPANELRIGHTSAVEDTABS.CAPTION=Tabs saved on right to be restored to: TFRMOPTIONSFAVORITETABS.LBLEXISTINGTABSTOKEEP.CAPTION=Existing tabs to keep: TFRMOPTIONSFAVORITETABS.CBEXISTINGTABSTOKEEP.TEXT=None TFRMOPTIONSFAVORITETABS.CBTARGETPANELRIGHTSAVEDTABS.TEXT=Right TFRMOPTIONSFAVORITETABS.CBTARGETPANELLEFTSAVEDTABS.TEXT=Left TFRMOPTIONSFAVORITETABS.CBSAVEDIRHISTORY.TEXT=No TFRMOPTIONSFAVORITETABS.LBLSAVEDIRHISTORY.CAPTION=Save dir history: TFRMOPTIONSFAVORITETABS.MIFAVORITETABSTESTMENU.CAPTION=FavoriteTabsTestMenu TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION=Rename TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION=- TFRMOPTIONSFAVORITETABS.MIINSERTSEPARATOR.CAPTION=Insert separator TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR2.CAPTION=Add separator TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION=- TFRMOPTIONSFAVORITETABS.MIINSERTSUBMENU.CAPTION=Insert sub-menu TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION=Add sub-menu TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION=Delete selected item TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION=- TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION=Sort single group of item(s) only TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION=- TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION=Cut TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION=Paste TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION=- TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS1.CAPTION=Import legacy .tab file(s) at selected position TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION=a separator TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION=sub-menu TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION=selected item TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION=just sub-menu but keep elements TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION=sub-menu and all its elements TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION=delete all! TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION=Import legacy .tab file(s) at selected position TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESACCSETTING.CAPTION=Import legacy .tab file(s) according to default setting TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESINSUBATPOS.CAPTION=Import legacy .tab file(s) at selected position in a sub menu TFRMOPTIONSFAVORITETABS.MIEXPORTTOLEGACYTABSFILE.CAPTION=Export selection to legacy .tab file(s) TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION=- TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION=Test resulting menu TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION=- TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION=Open all branches TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION=Collapse all TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION=...single group of item(s) only TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION=...current level of item(s) selected only TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION=...content of submenu(s) selected, no sublevel TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION=...content of submenu(s) selected and all sublevels TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION=...everything, from A to Z! doublecmd-0.9.8/src/frames/foptionsfavoritetabs.lfm0000644000175000001440000004560712660124702021561 0ustar alexxusersinherited frmOptionsFavoriteTabs: TfrmOptionsFavoriteTabs Height = 604 Width = 584 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 Color = clForm ParentColor = False 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 Color = clForm ParentColor = False 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-0.9.8/src/frames/foptionseditorcolors.pas0000644000175000001440000006664513057003022021602 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Internal editor highlighters configuration frame Copyright (C) 2012-2017 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, Graphics, SynEditHighlighter, dmHigh; 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; btnSaveMask: TSpeedButton; 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 btnSaveMaskClick(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: TSynHighlighterAttributes; FCurrentHighlighter: TSynCustomHighlighter; FIsEditingDefaults: Boolean; UpdatingColor: Boolean; procedure UpdateCurrentScheme; function SynAttributeSortCompare(Node1, Node2: TTreeNode): Integer; 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; 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.btnSaveMaskClick(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; 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); ColorPreview.Lines.Text:= FHighl.GetSampleSource(FCurrentHighlighter); if ColorPreview.Lines.Text = EmptyStr then try ColorPreview.Lines.Text:= FCurrentHighlighter.SampleSource; except ColorPreview.Lines.Text:= EmptyStr; end; FHighl.SetHighlighter(ColorPreview, FCurrentHighlighter); ColorElementTree.Items.Clear; 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); if ColorElementTree.Items.GetFirstNode <> nil then begin ColorElementTree.Items.GetFirstNode.Selected := True; ColorElementTreeChange(ColorElementTree, nil); end; end; end; procedure TfrmOptionsEditorColors.ForegroundColorBoxChange(Sender: TObject); //+++ var AttrToEdit: TSynHighlighterAttributes; 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; 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: TSynHighlighterAttributes; TextY: Integer; c: TColor; s: String; begin if (ColorElementTree.Items.GetFirstNode = Node) and FIsEditingDefaults then Attri := FDefHighlightElement else Attri := TSynHighlighterAttributes(Node.Data); 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(False); FullAbcWidth := ColorElementTree.Canvas.TextExtent(COLOR_NODE_PREFIX).cx; TextY := (NodeRect.Top + NodeRect.Bottom - ColorElementTree.Canvas.TextHeight(Node.Text)) div 2; ColorElementTree.Canvas.FillRect(NodeRect); ColorElementTree.Canvas.TextOut(NodeRect.Left+FullAbcWidth, TextY, Attri.Name); // 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: TSynHighlighterAttributes absolute Sender; begin ColorPreview.Color:= SynPlainTextHighlighter.Background; ColorPreview.Font.Color:= SynPlainTextHighlighter.Foreground; end; procedure TfrmOptionsEditorColors.ColorElementTreeChange(Sender: TObject; Node: TTreeNode); //+++ var AttrToShow: TSynHighlighterAttributes; IsDefault, CanGlobal: Boolean; begin if UpdatingColor or (ColorElementTree.Selected = nil) or (ColorElementTree.Selected.Data = nil) then Exit; FCurHighlightElement:= TSynHighlighterAttributes(ColorElementTree.Selected.Data); UpdatingColor := True; DisableAlign; try FDefHighlightElement:= FHighl.SynPlainTextHighlighter.Attribute[FHighl.SynPlainTextHighlighter.AttrCount - 1]; IsDefault := SameText(rsSynDefaultText, FCurHighlightElement.Name); CanGlobal := (cmbLanguage.ItemIndex > 0) and IsDefault; 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]; // Forground 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; // 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; // 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 SameText(AttrToShow.Name, rsSynDefaultText) then begin AttrToShow.OnChange:= @SynPlainTextHighlighterChange; end; UpdatingColor := False; finally EnableAlign; end; pnlElementAttributesResize(nil); end; procedure TfrmOptionsEditorColors.GeneralCheckBoxOnChange(Sender: TObject); var TheColorBox: TColorBox; AttrToEdit: TSynHighlighterAttributes; 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; end else begin TheColorBox.Tag := TheColorBox.Selected; TheColorBox.Selected := clDefault; 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: TSynHighlighterAttributes; 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 ColorElementTree.Invalidate; end; procedure TfrmOptionsEditorColors.Init; begin inherited Init; FHighl:= TdmHighl.Create(nil, True); FontOptionsToFont(gFonts[dcfEditor], ColorPreview.Font); end; procedure TfrmOptionsEditorColors.Done; begin FHighl.Free; inherited Done; end; procedure TfrmOptionsEditorColors.Load; var Index: Integer; begin FHighl.Assign(dmHighl); cmbLanguage.Items.Assign(FHighl.SynHighlighterList); for Index:= cmbLanguage.Items.Count - 1 downto 0 do begin if cmbLanguage.Items.Objects[Index] is TSynUniSyn then cmbLanguage.Items.Delete(Index); end; cmbLanguage.ItemIndex:= 0; cmbLanguageChange(nil); end; function TfrmOptionsEditorColors.Save: TOptionsEditorSaveFlags; begin Result:= []; dmHighl.Assign(FHighl); 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-0.9.8/src/frames/foptionseditorcolors.lrt0000644000175000001440000000307712313074207021615 0ustar alexxusersTFRMOPTIONSEDITORCOLORS.BTNRESETMASK.HINT=Reset TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT=Save TFRMOPTIONSEDITORCOLORS.FOREGROUNDLABEL.CAPTION=Fo®round TFRMOPTIONSEDITORCOLORS.BACKGROUNDLABEL.CAPTION=Bac&kground TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION=Fo®round TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION=Bac&kground TFRMOPTIONSEDITORCOLORS.FRAMECOLORUSEDEFAULTCHECKBOX.CAPTION=&Text-mark TFRMOPTIONSEDITORCOLORS.BVLATTRIBUTESECTION.CAPTION=Element Attributes TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINECHECKBOX.CAPTION=&Underline TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTBOLDCHECKBOX.CAPTION=&Bold TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTITALICCHECKBOX.CAPTION=&Italic TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTCHECKBOX.CAPTION=&Strike Out TFRMOPTIONSEDITORCOLORS.TBTNGLOBAL.CAPTION=Use (and edit) &global scheme settings TFRMOPTIONSEDITORCOLORS.TBTNLOCAL.CAPTION=Use &local scheme settings doublecmd-0.9.8/src/frames/foptionseditorcolors.lfm0000644000175000001440000010643713057003022021567 0ustar alexxusersinherited frmOptionsEditorColors: TfrmOptionsEditorColors Height = 357 Width = 680 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 end object btnResetMask: TSpeedButton Left = 328 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 object btnSaveMask: TSpeedButton Left = 305 Height = 23 Hint = 'Save' Top = 0 Width = 23 Align = alRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000BA6A368FB969 35B5B86935EEB76835FFB56835FFB46734FFB26634FFB06533FFAE6433FFAC63 32FFAA6232FFA96132FFA86031FFA76031FEA66031F1A86131C4BA6A35DEEBC6 ADFFEAC5ADFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB F8FFFEFBF8FFFEFBF8FFFEFBF8FFC89A7CFFC79879FFA76031EDBA6B37FEEDCA B3FFE0A27AFFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0 88FF62C088FF62C088FFFDF9F6FFCA8D65FFC99B7CFFA76031FEBB6C38FFEECC B6FFE1A27AFFFEFAF7FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDC C2FFBFDCC2FFBFDCC2FFFDF9F6FFCD9068FFCC9E81FFA86132FFBB6B38FFEFCE B8FFE1A279FFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0 88FF62C088FF62C088FFFDF9F6FFCF936AFFCEA384FFAA6132FFBA6A36FFEFD0 BBFFE2A27AFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB F8FFFEFBF8FFFEFBF8FFFEFBF8FFD3966DFFD2A78AFFAB6232FFBB6A36FFF0D2 BEFFE2A37AFFE2A37AFFE1A37AFFE2A37BFFE1A37BFFE0A178FFDE9F77FFDD9F 76FFDC9D74FFD99B72FFD89971FFD69970FFD5AB8EFFAD6333FFBB6A36FFF2D5 C2FFE3A37AFFE3A37AFFE2A37BFFE2A37BFFE2A47BFFE1A279FFE0A178FFDEA0 77FFDE9E75FFDC9D74FFDA9B73FFD99B73FFDAB095FFAF6433FFBB6A36FFF2D8 C5FFE3A47BFFE3A37AFFE3A47AFFE2A47BFFE2A37BFFE1A37BFFE1A279FFDFA0 77FFDE9F76FFDD9E74FFDB9C72FFDC9D74FFDDB59AFFB16534FFBB6B36FFF4D9 C7FFE6A67DFFC88C64FFC98D65FFC98E67FFCB926CFFCB926DFFCA9069FFC88C 65FFC88C64FFC88C64FFC88C64FFDA9C74FFE1BA9FFFB36634FFBB6B36FEF4DC C9FFE7A77DFFF9ECE1FFF9ECE1FFF9EDE3FFFCF4EEFFFDFAF7FFFDF7F3FFFAED E5FFF7E7DBFFF7E5D9FFF6E5D8FFDEA077FFE4BEA4FFB46734FFBC6B36FAF5DD CCFFE7A87EFFFAF0E8FFFAF0E8FFC98D66FFFAF0E9FFFDF8F3FFFEFAF8FFFCF4 EFFFF9E9DFFFF7E7DBFFF7E5D9FFE0A278FFE7C2A9FFB66835FFBC6B36F0F6DF D0FFE8A87EFFFCF6F1FFFCF6F1FFC88C64FFFAF1E9FFFBF4EEFFFDFAF7FFFDF9 F6FFFAF0E8FFF8E8DDFFF7E6DBFFE1A37AFFEFD5C3FFB76935FEBC6B36D8F6DF D1FFE9AA80FFFEFAF6FFFDFAF6FFC88C64FFFBF3EEFFFBF1EAFFFCF6F2FFFEFB F8FFFCF6F1FFF9ECE2FFF8E7DBFFEED0BAFFECD0BDFFBB703EF8BC6B369BF6E0 D1FFF7E0D1FFFEFBF8FFFEFBF7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9 F6FFFDFAF7FFFBF1EBFFF8E9DFFEECD0BDFBC9895EECB5693563BC6B3671BC6B 3690BC6B36CCBC6B36EEBC6B36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C 39FFBD6E3BFFBB6D3AFFBB6B38EFBB703ECBB6693554FFFFFF00 } OnClick = btnSaveMaskClick 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 = clNone 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 = clWhite MarkupInfo.Foreground = clGray 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 DefaultItemHeight = 18 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-0.9.8/src/frames/foptionsdriveslistbutton.pas0000644000175000001440000000461011740433676022521 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-0.9.8/src/frames/foptionsdriveslistbutton.lrt0000644000175000001440000000040512020403374022515 0ustar alexxusersTFRMOPTIONSDRIVESLISTBUTTON.GBDRIVESLIST.CAPTION=Drives list TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWLABEL.CAPTION=Show &label TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWFILESYSTEM.CAPTION=Show &file system TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWFREESPACE.CAPTION=Show fr&ee space doublecmd-0.9.8/src/frames/foptionsdriveslistbutton.lfm0000644000175000001440000000230112020403374022467 0ustar alexxusersinherited frmOptionsDrivesListButton: TfrmOptionsDrivesListButton 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-0.9.8/src/frames/foptionsdragdrop.pas0000644000175000001440000002252012731662527020677 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-0.9.8/src/frames/foptionsdragdrop.lrt0000644000175000001440000000170212454457622020714 0ustar alexxusersTFRMOPTIONSDRAGDROP.CBSHOWCONFIRMATIONDIALOG.CAPTION=&Show confirmation dialog after drop TFRMOPTIONSDRAGDROP.GBTEXTDRAGANDDROPRELATEDOPTIONS.CAPTION=When drag && dropping text into panels: TFRMOPTIONSDRAGDROP.LBLMOSTDESIREDTEXTFORMAT1.CAPTION=Place the most desired format on top of list (use dag && drop): TFRMOPTIONSDRAGDROP.LBLMOSTDESIREDTEXTFORMAT2.CAPTION=(if the most desired is not present, we'll take second one and so on) TFRMOPTIONSDRAGDROP.CBDRAGANDDROPASKFORMATEACHTIME.CAPTION=From all the supported formats, ask which one to use every time TFRMOPTIONSDRAGDROP.CBDRAGANDDROPTEXTAUTOFILENAME.CAPTION=When dropping text, generate filename automatically (otherwise will prompt the user) TFRMOPTIONSDRAGDROP.CBDRAGANDDROPSAVEUNICODETEXTINUFT8.CAPTION=When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise) TFRMOPTIONSDRAGDROP.LBLWARNINGFORASKFORMAT.CAPTION=(will not work with some source application, so try to uncheck if problem) doublecmd-0.9.8/src/frames/foptionsdragdrop.lfm0000644000175000001440000000720112731662527020671 0ustar alexxusersinherited frmOptionsDragDrop: TfrmOptionsDragDrop Height = 467 Width = 845 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-0.9.8/src/frames/foptionsdirectoryhotlist.pas0000644000175000001440000024355413447634345022526 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of HotDir 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 foptionsDirectoryHotlist; {$mode objfpc}{$H+} interface uses {$IFDEF MSWINDOWS} uTotalCommander, {$ENDIF} ActnList, SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, uHotDir, types, fOptionsFrame, uFile; 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; btnHelp: 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 btnHelpClick(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); end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LazUTF8, LCLIntf, LCLMessageGlue, helpintfs, //DC fEditSearch, fOptionsMisc, DCStrUtils, uGlobs, 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, '*.*']); 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 := StringReplace(sWorkingText, sSearchText, sReplaceText, ReplaceFlags); if Result <> sWorkingText then Inc(NbOfReplacement); end; var Index, ActionDispatcher: integer; EditSearchOptionToOffer: TEditSearchDialogOption; EditSearchOptionReturned: TEditSearchDialogOption = []; 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 := []; {$IFDEF MSWINDOWS} EditSearchOptionToOffer := EditSearchOptionToOffer + [eswoCaseSensitiveUnchecked]; {$ELSE} EditSearchOptionToOffer := EditSearchOptionToOffer + [eswoCaseSensitiveChecked]; {$ENDIF} 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.btnHelpClick } procedure TfrmOptionsDirectoryHotlist.btnHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', '/directoryhotlist.html'); 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; DestinationNode: TTreeNode; begin DestinationNode := tvDirectoryHotlist.GetNodeAt(X, Y); if Assigned(DestinationNode) and (tvDirectoryHotlist.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 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; 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 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 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(sPath); if sTarget <> '' then LocalHotDir.HotDirTarget := IncludeTrailingPathDelimiter(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, 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, 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; RememberCursor: TCursor; 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 RememberCursor := Screen.Cursor; SetNormalIconsInTreeView; try Screen.Cursor := crHourGlass; 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.Cursor := RememberCursor; 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, 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; end. doublecmd-0.9.8/src/frames/foptionsdirectoryhotlist.lrt0000644000175000001440000001663713124335064022530 0ustar alexxusersTFRMOPTIONSDIRECTORYHOTLIST.GBDIRECTORYHOTLIST.CAPTION=Directory Hotlist (reorder by drag && drop) TFRMOPTIONSDIRECTORYHOTLIST.BTNINSERT.CAPTION=&Insert... TFRMOPTIONSDIRECTORYHOTLIST.BTNDELETE.CAPTION=De&lete... TFRMOPTIONSDIRECTORYHOTLIST.BTNEXPORT.CAPTION=E&xport... TFRMOPTIONSDIRECTORYHOTLIST.BTNIMPORT.CAPTION=Impo&rt... TFRMOPTIONSDIRECTORYHOTLIST.BTNBACKUP.CAPTION=Bac&kup... TFRMOPTIONSDIRECTORYHOTLIST.BTNMISCELLANEOUS.CAPTION=&Miscellaneous... TFRMOPTIONSDIRECTORYHOTLIST.BTNADD.CAPTION=A&dd... TFRMOPTIONSDIRECTORYHOTLIST.BTNSORT.CAPTION=&Sort... TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION=&Help TFRMOPTIONSDIRECTORYHOTLIST.RGWHERETOADD.CAPTION=Addition from main panel TFRMOPTIONSDIRECTORYHOTLIST.GBHOTLISTOTHEROPTIONS.CAPTION=Other options TFRMOPTIONSDIRECTORYHOTLIST.CBADDTARGET.CAPTION=&When adding directory, add also target TFRMOPTIONSDIRECTORYHOTLIST.CBFULLEXPANDTREE.CAPTION=Alwa&ys expand tree TFRMOPTIONSDIRECTORYHOTLIST.CBSHOWPATHINPOPUP.CAPTION=In pop&up, show [path also] TFRMOPTIONSDIRECTORYHOTLIST.CBSHOWONLYVALIDENV.CAPTION=Show only &valid environment variables TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION=Name: TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION=Path: TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT=Some functions to select appropriate path TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT=Name, a-z TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION=&Target: TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT=Some functions to select appropriate target TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT=Name, a-z TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTBROWSEDDIR.CAPTION=Insert directory I will bro&wse to TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTTYPEDDIR.CAPTION=Insert directory I will type TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTACTIVEFRAMEDIR.CAPTION=Insert directory of the &active frame TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTBOTHFRAMEDIR.CAPTION=Insert &directories of the active && inactive frames TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTSELECTIONSFROMFRAME.CAPTION=Insert current &selected or active directories of active frame TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTCOPYOFENTRY.CAPTION=Insert a copy of the selected entry TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTSEPARATOR.CAPTION=Insert a separator TFRMOPTIONSDIRECTORYHOTLIST.ACTINSERTSUBMENU.CAPTION=Insert sub menu TFRMOPTIONSDIRECTORYHOTLIST.ACTADDBROWSEDDIR.CAPTION=Add directory I will bro&wse to TFRMOPTIONSDIRECTORYHOTLIST.ACTADDTYPEDDIR.CAPTION=Add directory I will type TFRMOPTIONSDIRECTORYHOTLIST.ACTADDACTIVEFRAMEDIR.CAPTION=Add directory of the &active frame TFRMOPTIONSDIRECTORYHOTLIST.ACTADDBOTHFRAMEDIR.CAPTION=Add &directories of the active && inactive frames TFRMOPTIONSDIRECTORYHOTLIST.ACTADDSELECTIONSFROMFRAME.CAPTION=Add current &selected or active directories of active frame TFRMOPTIONSDIRECTORYHOTLIST.ACTADDCOPYOFENTRY.CAPTION=Add a copy of the selected entry TFRMOPTIONSDIRECTORYHOTLIST.ACTADDSEPARATOR.CAPTION=Add a separator TFRMOPTIONSDIRECTORYHOTLIST.ACTADDSUBMENU.CAPTION=Add a sub menu TFRMOPTIONSDIRECTORYHOTLIST.ACTDELETESELECTEDITEM.CAPTION=Delete selected item TFRMOPTIONSDIRECTORYHOTLIST.ACTDELETESUBMENUKEEPELEM.CAPTION=Delete just sub-menu but keep elements TFRMOPTIONSDIRECTORYHOTLIST.ACTDELETESUBMENUANDELEM.CAPTION=Delete sub-menu and all its elements TFRMOPTIONSDIRECTORYHOTLIST.ACTDELETEALL.CAPTION=Delete all! TFRMOPTIONSDIRECTORYHOTLIST.ACTMOVETOPREVIOUS.CAPTION=Move to previous TFRMOPTIONSDIRECTORYHOTLIST.ACTMOVETONEXT.CAPTION=Move to next TFRMOPTIONSDIRECTORYHOTLIST.ACTPASTE.CAPTION=Paste what was cut TFRMOPTIONSDIRECTORYHOTLIST.ACTCUT.CAPTION=Cut selection of entries TFRMOPTIONSDIRECTORYHOTLIST.ACTSEARCHANDREPLACEINPATH.CAPTION=Search && replace in &path TFRMOPTIONSDIRECTORYHOTLIST.ACTSEARCHANDREPLACEINTARGETPATH.CAPTION=Search && replace in &target path TFRMOPTIONSDIRECTORYHOTLIST.ACTSEARCHANDREPLACEINPATHANDTARGET.CAPTION=Search && replace in both path and target TFRMOPTIONSDIRECTORYHOTLIST.ACTFOCUSTREEWINDOW.CAPTION=Focus tree window TFRMOPTIONSDIRECTORYHOTLIST.ACTGOTOFIRSTITEM.CAPTION=Goto first item TFRMOPTIONSDIRECTORYHOTLIST.ACTGOTOPREVIOUSITEM.CAPTION=Go to previous item TFRMOPTIONSDIRECTORYHOTLIST.ACTGOTONEXTITEM.CAPTION=Go to next item TFRMOPTIONSDIRECTORYHOTLIST.ACTGOTOLASTITEM.CAPTION=Goto last item TFRMOPTIONSDIRECTORYHOTLIST.ACTEXPANDITEM.CAPTION=Expand item TFRMOPTIONSDIRECTORYHOTLIST.ACTOPENALLBRANCHES.CAPTION=Open all branches TFRMOPTIONSDIRECTORYHOTLIST.ACTCOLLAPSEITEM.CAPTION=Collapse item TFRMOPTIONSDIRECTORYHOTLIST.ACTCOLLAPSEALL.CAPTION=Collapse all TFRMOPTIONSDIRECTORYHOTLIST.ACTTWEAKPATH.CAPTION=Tweak path TFRMOPTIONSDIRECTORYHOTLIST.ACTTWEAKTARGETPATH.CAPTION=Tweak target path TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISORTSINGLEGROUP.CAPTION=...single &group of item(s) only TFRMOPTIONSDIRECTORYHOTLIST.MICURRENTLEVELOFITEMONLY.CAPTION=...current le&vel of item(s) selected only TFRMOPTIONSDIRECTORYHOTLIST.MISORTSINGLESUBMENU.CAPTION=...&content of submenu(s) selected, no sublevel TFRMOPTIONSDIRECTORYHOTLIST.MISORTSUBMENUANDSUBLEVEL.CAPTION=...content of submenu(s) selected and &all sublevels TFRMOPTIONSDIRECTORYHOTLIST.MISORTEVERYTHING.CAPTION=...everything, from A to &Z! TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION=Test resultin&g menu TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MINAVIGATE.CAPTION=&Navigate... TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEARCHANDREPLACE.CAPTION=Search and &replace... TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MITWEAKPATH.CAPTION=Tweak &path TFRMOPTIONSDIRECTORYHOTLIST.MITWEAKTARGETPATH.CAPTION=Tweak &target path TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION=Scan all &hotdir's path to validate the ones that actually exist TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION=&Scan all hotdir's path && target to validate the ones that actually exist TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOHOTLISTFILE.CAPTION=to a Directory &Hotlist file (.hotlist) TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOTOTALCOMMANDERK.CAPTION=to a "wincmd.ini" of TC (&keep existing) TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOTOTALCOMMANDERNK.CAPTION=to a "wincmd.ini" of TC (&erase existing) TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO1.CAPTION=Go to &configure TC related info TFRMOPTIONSDIRECTORYHOTLIST.MIIMPORTFROMHOTLISTFILE.CAPTION=from a Directory &Hotlist file (.hotlist) TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR14.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIIMPORTTOTALCOMMANDER.CAPTION=from "&wincmd.ini" of TC TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION=Go to &configure TC related info TFRMOPTIONSDIRECTORYHOTLIST.MISAVEBACKUPHOTLIST.CAPTION=&Save a backup of current Directory Hotlist TFRMOPTIONSDIRECTORYHOTLIST.MIRESTOREBACKUPHOTLIST.CAPTION=&Restore a backup of Directory Hotlist TFRMOPTIONSDIRECTORYHOTLIST.MIHOTDIRTESTMENU.CAPTION=HotDirTestMenu doublecmd-0.9.8/src/frames/foptionsdirectoryhotlist.lfm0000644000175000001440000011332613124335064022476 0ustar alexxusersinherited frmOptionsDirectoryHotlist: TfrmOptionsDirectoryHotlist Height = 658 Width = 730 ClientHeight = 658 ClientWidth = 730 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 Color = clForm Constraints.MinHeight = 460 Constraints.MinWidth = 548 ParentColor = False 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 Color = clForm ParentColor = False 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 = btnHelp 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 object btnHelp: TBitBtn AnchorSideTop.Control = btnMiscellaneous AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 124 Width = 150 Anchors = [akTop, akRight] Caption = '&Help' OnClick = btnHelpClick TabOrder = 8 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-0.9.8/src/frames/foptionscustomcolumns.pas0000644000175000001440000015660213344567060022016 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Custom columns options page Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 fOptionsCustomColumns; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. ComCtrls, Controls, Classes, SysUtils, StdCtrls, ExtCtrls, Forms, ColorBox, Buttons, Spin, Grids, Menus, Dialogs, //DC uColumns, fOptionsFrame {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; 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: TLabel; lblWorkingColumn: TLabel; miAddColumn: TMenuItem; pnlCommon: TPanel; pnlCustomColumnsViewSettings: TPanel; pmFields: TPopupMenu; pmStringGrid: TPopupMenu; pnlActualCont: TPanel; pnlConfigColumns: TPanel; pnlGeneralColumnsViewSettings: TPanel; pnlLeft: TPanel; pnlPreviewCont: TPanel; 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; 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; 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; FillColumnsList; //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 cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(TColumnsFileView(frmMain.ActiveNotebook.ActiveView).ActiveColm); pnlLeft.Width := frmMain.ActiveNotebook.Width; 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; { 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 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; 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 ColSet.DeleteColumnSet(Index); Colset.Insert(Index, ColumnClassForConfig); cbConfigColumnsChange(cbConfigColumns); 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; 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 cbConfigColumns.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; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := 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[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 i, indx: integer; Tit, FuncString: string; Wid: integer; Ali: TAlignment; begin // Save fields ColumnClass.Clear; for i := 1 to stgColumns.RowCount - 1 do begin with stgColumns do begin Tit := Cells[1, i]; Wid := StrToInt(Cells[2, i]); Ali := StrToAlign(Cells[3, i]); FuncString := Cells[4, i]; end; indx := ColumnClass.Add(Tit, FuncString, Wid, Ali); if stgColumns.Objects[6, i] <> nil then ColumnClass.SetColumnPrm(Indx, TColPrm(stgColumns.Objects[6, i])); 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; begin stgColumns.RowCount := stgColumns.RowCount + 1; stgColumns.Cells[1, stgColumns.RowCount - 1] := EmptyStr; stgColumns.Cells[2, stgColumns.RowCount - 1] := '50'; stgColumns.Cells[3, stgColumns.RowCount - 1] := '<-'; stgColumns.Cells[4, stgColumns.RowCount - 1] := ''; stgColumns.Objects[6, stgColumns.RowCount - 1] := TColPrm.Create; 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; 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 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; 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: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[DC().' + MenuItem.Hint + '{}] '; end; 1: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Caption + '{}] '; end; 2: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}] '; end; 3: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[DC().' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}] '; end; 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, gCursorBorderColor); 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, gCursorBorderColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).TextColor := gForeColor; SetColorInColorBox(cbForeColor, gForeColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background := gBackColor; SetColorInColorBox(cbBackColor, gBackColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background2 := gBackColor2; SetColorInColorBox(cbBackColor2, gBackColor2); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).MarkColor := gMarkColor; SetColorInColorBox(cbMarkColor, gMarkColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorColor := gCursorColor; SetColorInColorBox(cbCursorColor, gCursorColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorText := gCursorText; SetColorInColorBox(cbCursorText, gCursorText); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveCursorColor := gInactiveCursorColor; SetColorInColorBox(cbInactiveCursorColor, gInactiveCursorColor); 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 TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveMarkColor := gInactiveMarkColor; SetColorInColorBox(cbInactiveMarkColor, gInactiveMarkColor); 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-0.9.8/src/frames/foptionscustomcolumns.lrt0000644000175000001440000001401312723372520022014 0ustar alexxusersTFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION=Con&figure columns view: TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT=General TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION=Save TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION=Rename TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION=Save as TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION=&Delete TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION=New TFRMOPTIONSCUSTOMCOLUMNS.CHKUSECUSTOMVIEW.CAPTION=Use custom font and color for this view TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.CAPTION=Go to set default TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION=Cursor border TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.CBUSEFRAMECURSOR.CAPTION=Use Frame Cursor TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNPREV.CAPTION=Previous TFRMOPTIONSCUSTOMCOLUMNS.BTNNEXT.CAPTION=Next TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION=Font: TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION=... TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION=Size: TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION=Allow Overcolor TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION=Text Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION=BackGround: TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION=Background 2: TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION=Mark Color: TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.LBLINACTIVEMARKCOLOR.CAPTION=Inactive Mark Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLINACTIVECURSORCOLOR.CAPTION=Inactive Cursor Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION=Cursor Text: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION=Cursor Color: TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.CBUSEINVERTEDSELECTION.CAPTION=Use Inverted Selection TFRMOPTIONSCUSTOMCOLUMNS.CBUSEINACTIVESELCOLOR.CAPTION=Use Inactive Selection Color TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.LBLWORKINGCOLUMN.CAPTION=Settings for column: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURRENTCOLUMN.CAPTION=[Current Column Name] TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.CBAPPLYCHANGEFORALLCOLUMNS.CAPTION=When clicking to change something, change for all columns TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION=Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings. TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION=Add column doublecmd-0.9.8/src/frames/foptionscustomcolumns.lfm0000644000175000001440000012332513253425743022005 0ustar alexxusersinherited frmOptionsCustomColumns: TfrmOptionsCustomColumns Height = 596 Width = 1070 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 'Delete' 1 0 'Caption' 2 0 'Width' 3 0 'Align' 4 0 'Field contents' 5 0 'Move' 6 0 'Config' ) 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: TPanel Left = 1 Height = 188 Top = 368 Width = 1060 Align = alClient BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 188 ClientWidth = 1060 Color = clInactiveCaption Constraints.MinHeight = 125 ParentColor = False TabOrder = 4 object lblPreviewTop: TLabel Left = 8 Height = 15 Top = 0 Width = 1044 Align = alTop Alignment = taCenter Caption = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.' Font.Color = clHighlight ParentColor = False ParentFont = False 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-0.9.8/src/frames/foptionsconfiguration.pas0000644000175000001440000001644613422140570021741 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; { 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; 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-0.9.8/src/frames/foptionsconfiguration.lrj0000644000175000001440000000770713422140570021745 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-0.9.8/src/frames/foptionsconfiguration.lfm0000644000175000001440000002263113506103211021717 0ustar alexxusersinherited frmOptionsConfiguration: TfrmOptionsConfiguration Height = 595 Width = 626 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-0.9.8/src/frames/foptionscolumnsview.pas0000644000175000001440000000644113074652713021451 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; 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; cbCutTextToColWidth.Checked := gCutTextToColWidth; cbExtendCellWidth.Checked := gExtendCellWidth; end; function TfrmOptionsColumnsView.Save: TOptionsEditorSaveFlags; begin gGridVertLine := cbGridVertLine.Checked; gGridHorzLine := cbGridHorzLine.Checked; gAutoFillColumns := chkAutoFillColumns.Checked; gAutoSizeColumn := cmbAutoSizeColumn.ItemIndex; 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-0.9.8/src/frames/foptionscolumnsview.lrt0000644000175000001440000000106313074652713021462 0ustar alexxusersTFRMOPTIONSCOLUMNSVIEW.GRPAUTOSIZECOLUMNS.CAPTION=Auto-size columns TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION=A&uto fill columns TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION=Auto si&ze column: TFRMOPTIONSCOLUMNSVIEW.GBSHOWGRID.CAPTION=Show grid TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION=&Vertical lines TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION=&Horizontal lines TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION=Cut &text to column width TFRMOPTIONSCOLUMNSVIEW.CBEXTENDCELLWIDTH.CAPTION=&Extend cell width if text is not fitting into column doublecmd-0.9.8/src/frames/foptionscolumnsview.lfm0000644000175000001440000001022213074652713021434 0ustar alexxusersinherited frmOptionsColumnsView: TfrmOptionsColumnsView Height = 344 Width = 659 ClientHeight = 344 ClientWidth = 659 DesignTop = 20 object grpAutosizeColumns: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowGrid AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 84 Top = 88 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Auto-size columns' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 64 ClientWidth = 643 TabOrder = 1 object chkAutoFillColumns: TCheckBox AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 6 Width = 111 Caption = 'A&uto fill columns' TabOrder = 0 end object lblAutoSizeColumn: TLabel AnchorSideLeft.Control = chkAutoFillColumns AnchorSideTop.Control = cmbAutoSizeColumn AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 39 Width = 95 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 = 119 Height = 23 Top = 35 Width = 512 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 10 BorderSpacing.Right = 10 ItemHeight = 15 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 = 76 Top = 6 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Show grid' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 56 ClientWidth = 643 TabOrder = 0 object cbGridVertLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = gbShowGrid Left = 12 Height = 19 Top = 6 Width = 86 Caption = '&Vertical lines' OnChange = cbGridVertLineChange TabOrder = 0 end object cbGridHorzLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = cbGridVertLine AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 31 Width = 102 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 = 76 Top = 178 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 56 ClientWidth = 643 TabOrder = 2 object cbCutTextToColWidth: TCheckBox AnchorSideLeft.Control = grpMisc AnchorSideTop.Control = grpMisc Left = 12 Height = 19 Top = 6 Width = 152 Caption = 'Cut &text to column width' TabOrder = 0 end object cbExtendCellWidth: TCheckBox AnchorSideLeft.Control = grpMisc AnchorSideTop.Control = cbCutTextToColWidth AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 31 Width = 276 BorderSpacing.Top = 6 Caption = '&Extend cell width if text is not fitting into column' OnChange = cbExtendCellWidthChange TabOrder = 1 end end end doublecmd-0.9.8/src/frames/foptionsbriefview.pas0000644000175000001440000000542212513013701021037 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-0.9.8/src/frames/foptionsbriefview.lrt0000644000175000001440000000065112513776740021077 0ustar alexxusersTFRMOPTIONSBRIEFVIEW.GBSHOWFILEEXT.CAPTION=Show file extensions TFRMOPTIONSBRIEFVIEW.RBDIRECTLY.CAPTION=di&rectly after filename TFRMOPTIONSBRIEFVIEW.RBALIGNED.CAPTION=ali&gned (with Tab) TFRMOPTIONSBRIEFVIEW.GBCOLUMNS.CAPTION=Columns size TFRMOPTIONSBRIEFVIEW.RBUSEAUTOSIZE.CAPTION=Auto TFRMOPTIONSBRIEFVIEW.RBUSEFIXEDWIDTH.CAPTION=Fixed columns width TFRMOPTIONSBRIEFVIEW.RBUSEFIXEDCOUNT.CAPTION=Fixed columns count doublecmd-0.9.8/src/frames/foptionsbriefview.lfm0000644000175000001440000000564512513776740021064 0ustar alexxusersinherited frmOptionsBriefView: TfrmOptionsBriefView Height = 289 Width = 519 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 = 50 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 = 50 MinValue = 1 TabOrder = 4 Value = 1 end end end doublecmd-0.9.8/src/frames/foptionsbehavior.pas0000644000175000001440000000553211737171117020673 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-0.9.8/src/frames/foptionsbehavior.lrt0000644000175000001440000000077612020403374020703 0ustar alexxusersTFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION=A&llow only one copy of DC at a time TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION=Mo&ve icon to system tray when minimized TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION=Al&ways show tray icon TFRMOPTIONSBEHAVIOR.LBLDRIVESBLACKLIST.CAPTION=Drives &blacklist TFRMOPTIONSBEHAVIOR.EDTDRIVESBLACKLIST.HINT=Here you can enter one or more drives or mount points, separated by ";". TFRMOPTIONSBEHAVIOR.CBBLACKLISTUNMOUNTEDDEVICES.CAPTION=Automatically &hide unmounted devices doublecmd-0.9.8/src/frames/foptionsbehavior.lfm0000644000175000001440000000736212020403374020656 0ustar alexxusersinherited frmOptionsBehavior: TfrmOptionsBehavior Height = 276 Width = 666 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-0.9.8/src/frames/foptionsautorefresh.pas0000644000175000001440000000647512731662527021437 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Auto-refresh 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 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 Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses 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.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-0.9.8/src/frames/foptionsautorefresh.lrt0000644000175000001440000000101512020403374021416 0ustar alexxusersTFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION=Refresh file list TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION=When &files are created, deleted or renamed TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION=When &size, date or attributes change TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION=Disable auto-refresh TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION=When application is in the &background TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION=For the following &paths and their subdirectories: doublecmd-0.9.8/src/frames/foptionsautorefresh.lfm0000644000175000001440000000566212020403374021407 0ustar alexxusersinherited frmOptionsAutoRefresh: TfrmOptionsAutoRefresh Height = 228 Width = 501 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-0.9.8/src/frames/foptionsarchivers.pas0000644000175000001440000010054113404102631021042 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, '*.*']); SaveArchiverDialog.Filter := ParseLineToFileFilter([rsFilterArchiverConfigFiles, '*.ini', rsFilterAnyFiles, '*.*']); 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 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-0.9.8/src/frames/foptionsarchivers.lrj0000644000175000001440000002321313372431370021057 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-0.9.8/src/frames/foptionsarchivers.lfm0000644000175000001440000016637713367370745021105 0ustar alexxusersinherited frmOptionsArchivers: TfrmOptionsArchivers Height = 642 Width = 923 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 HelpType = htKeyword HelpKeyword = '/multiarc.html' 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-0.9.8/src/fpackinfodlg.pas0000644000175000001440000001273111736421532016461 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Packed file information window Copyright (C) 2008-2010 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 fPackInfoDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Forms, StdCtrls, ExtCtrls, Controls, uFile, 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: TLabel; lblPackedCompression: TLabel; lblPackedDate: TLabel; edtPackedFile: TEdit; lblPackedMethod: TLabel; lblPackedOrgSize: TLabel; lblPackedPackedSize: TLabel; lblPackedPacker: TLabel; lblPackedTime: TLabel; 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} 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 sArcType: String; upperInfoControls: array[0..4] of TControl; i: Integer; foundDividingControl: Boolean = False; begin inherited Create(TheOwner); btnUnpackAndExec.Enabled:= (fsoCopyOut in aFileSource.GetOperationsTypes); btnUnpackAllAndExec.Enabled:= ([fsoList, fsoCopyOut] * aFileSource.GetOperationsTypes = [fsoList, fsoCopyOut]); edtPackedFile.Text:= aFile.FullPath; sArcType:= ExtractFileExt(aFileSource.ArchiveFileName); Delete(sArcType, 1, 1); lblPackedPacker.Caption:= sArcType; lblPackedOrgSize.Visible := not aFile.IsDirectory; lblPackedPackedSize.Visible := not aFile.IsDirectory; lblPackedCompression.Visible := False; lblPackedMethod.Visible := False; if not aFile.IsDirectory then begin lblPackedOrgSize.Caption := IntToStr(aFile.Size); lblPackedPackedSize.Caption := IntToStr(aFile.CompressedSize); if aFile.Size > 0 then begin lblPackedCompression.Caption := IntToStr(100 - (aFile.CompressedSize * 100 div aFile.Size)) + '%'; lblPackedCompression.Visible := True; end; end; // DateTime and Attributes lblPackedDate.Caption:= DateToStr(aFile.ModificationTime); lblPackedTime.Caption:= TimeToStr(aFile.ModificationTime); 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; // 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-0.9.8/src/fpackinfodlg.lrt0000644000175000001440000000120212023046500016452 0ustar alexxusersTFRMPACKINFODLG.CAPTION=Properties of packed file TFRMPACKINFODLG.LBLPACKEDFILE.CAPTION=File: TFRMPACKINFODLG.LBLPACKER.CAPTION=Packer: TFRMPACKINFODLG.LBLORIGINALSIZE.CAPTION=Original size: TFRMPACKINFODLG.LBLPACKEDSIZE.CAPTION=Packed size: TFRMPACKINFODLG.LBLCOMPRESSIONRATIO.CAPTION=Compression ratio: TFRMPACKINFODLG.LBLMETHOD.CAPTION=Method: TFRMPACKINFODLG.LBLDATE.CAPTION=Date: TFRMPACKINFODLG.LBLTIME.CAPTION=Time: TFRMPACKINFODLG.LBLATTRIBUTES.CAPTION=Attributes: TFRMPACKINFODLG.BTNCLOSE.CAPTION=&Close TFRMPACKINFODLG.BTNUNPACKANDEXEC.CAPTION=&Unpack and execute TFRMPACKINFODLG.BTNUNPACKALLANDEXEC.CAPTION=Unpack &all and execute doublecmd-0.9.8/src/fpackinfodlg.lfm0000644000175000001440000002052412023046500016437 0ustar alexxusersobject frmPackInfoDlg: TfrmPackInfoDlg Left = 525 Height = 400 Top = 83 Width = 284 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Properties of packed file' ClientHeight = 400 ClientWidth = 284 Position = poScreenCenter LCLVersion = '1.1' 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 = 179 ClientWidth = 254 TabOrder = 0 object lblPacker: TLabel Left = 0 Height = 18 Top = 0 Width = 173 Caption = 'Packer:' ParentColor = False end object lblPackedPacker: TLabel Left = 203 Height = 18 Top = 0 Width = 51 ParentColor = False ShowAccelChar = False end object lblOriginalSize: TLabel Left = 0 Height = 18 Top = 23 Width = 173 Caption = 'Original size:' ParentColor = False end object lblPackedOrgSize: TLabel Left = 203 Height = 18 Top = 23 Width = 51 ParentColor = False ShowAccelChar = False end object lblPackedSize: TLabel Left = 0 Height = 18 Top = 46 Width = 173 Caption = 'Packed size:' ParentColor = False end object lblPackedPackedSize: TLabel Left = 203 Height = 18 Top = 46 Width = 51 ParentColor = False ShowAccelChar = False end object lblCompressionRatio: TLabel Left = 0 Height = 18 Top = 69 Width = 173 Caption = 'Compression ratio:' ParentColor = False end object lblPackedCompression: TLabel Left = 203 Height = 18 Top = 69 Width = 51 ParentColor = False ShowAccelChar = False end object lblMethod: TLabel Left = 0 Height = 18 Top = 92 Width = 173 Caption = 'Method:' ParentColor = False end object lblPackedMethod: TLabel Left = 203 Height = 18 Top = 92 Width = 51 ParentColor = False ShowAccelChar = False end object lblDate: TLabel Left = 0 Height = 18 Top = 115 Width = 173 Caption = 'Date:' ParentColor = False end object lblPackedDate: TLabel Left = 203 Height = 18 Top = 115 Width = 51 ParentColor = False ShowAccelChar = False end object lblTime: TLabel Left = 0 Height = 18 Top = 138 Width = 173 Caption = 'Time:' ParentColor = False end object lblPackedTime: TLabel Left = 203 Height = 18 Top = 138 Width = 51 ParentColor = False ShowAccelChar = False end object lblAttributes: TLabel Left = 0 Height = 18 Top = 161 Width = 173 Caption = 'Attributes:' ParentColor = False end object lblPackedAttr: TLabel Left = 203 Height = 18 Top = 161 Width = 51 ParentColor = False ShowAccelChar = False end object Bevel2: TBevel AnchorSideLeft.Control = pnlInfoProperties AnchorSideRight.Control = pnlInfoProperties AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblDate Left = 0 Height = 4 Top = 106 Width = 254 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 4 Shape = bsBottomLine end end end object pnlButtons: TPanel Left = 0 Height = 72 Top = 328 Width = 284 Align = alBottom AutoSize = True BorderSpacing.Top = 15 BevelOuter = bvNone ClientHeight = 72 ClientWidth = 284 TabOrder = 1 object btnClose: TButton AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlButtons AnchorSideBottom.Control = btnUnpackAndExec AnchorSideBottom.Side = asrBottom Left = 10 Height = 31 Top = 0 Width = 48 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 = 62 Height = 31 Top = 0 Width = 212 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 = 31 Top = 35 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-0.9.8/src/fpackdlg.pas0000644000175000001440000004655213404757254015624 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File packing window Copyright (C) 2007-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 fPackDlg; {$mode objfpc}{$H+} interface uses SysUtils, Forms, Controls, Dialogs, StdCtrls, EditBtn, ExtCtrls, Buttons, Menus, DividerBevel, uWcxArchiveFileSource, uArchiveFileSource, uFile, uFileSource, Classes, fButtonForm; 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 FTarExt, FArchiveExt, FArchiveName, FArchiveType: String; FArchiveTypeCount: Integer; FHasFolder, FExistsArchive : Boolean; FSourceFileSource: IFileSource; FCustomParams: String; procedure SwitchOptions(ArcTypeChange: Boolean); procedure AddArchiveType(const FileExt, ArcType: String); public { public declarations } end; // Frees 'Files'. function ShowPackDlg(TheOwner: TComponent; const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True): Boolean; implementation {$R *.lfm} uses StrUtils, WcxPlugin, uGlobs, uDCUtils, uFileSourceOperation, uLng, uOSUtils, uOperationsManager, uArchiveFileSourceUtil, uMultiArchiveFileSource, uWcxArchiveCopyInOperation, uMultiArchiveCopyInOperation, uMasks, DCStrUtils, uMultiArc; function ShowPackDlg(TheOwner: TComponent; const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True): Boolean; var I: Integer; NewTargetFileSource: IArchiveFileSource = nil; aFlags : PtrInt; Operation: TFileSourceOperation; PackDialog: TfrmPackDlg; aFile: TFile = nil; aFiles: TFiles = nil; procedure Pack(var FilesToPack: TFiles; QueueId: TOperationsManagerQueueIdentifier); var sPassword, sPasswordTmp: String; begin with PackDialog do 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, TargetPathInArchive); if Assigned(Operation) then begin if NewTargetFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyInOperation do begin PackingFlags:= aFlags; CreateNew:= bNewArchive; TarBefore:= cbPutInTarFirst.Checked; end; end else if NewTargetFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyInOperation do begin if cbEncrypt.Checked then 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 Password:= sPassword; until sPassword = sPasswordTmp; if cbMultivolume.Checked then VolumeSize:= InputBox(Caption, rsMsgVolumeSizeEnter, EmptyStr); PackingFlags := aFlags; CreateNew:= bNewArchive; CustomParams:= FCustomParams; TarBefore:= cbPutInTarFirst.Checked; end; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False, True); end; end; end; end; var QueueId: TOperationsManagerQueueIdentifier; 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 FArchiveType:= 'none'; FSourceFileSource:= SourceFileSource; 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; Result:= (ShowModal = mrOK); if Result then begin if Assigned(TargetFileSource) then begin // Already have a target file source. // It must be an archive file source. if not (TargetFileSource.IsClass(TArchiveFileSource)) then raise Exception.Create('Invalid target file source type'); NewTargetFileSource := TargetFileSource; end else // Create a new target file source. begin // 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 + FTarExt + FArchiveExt; NewTargetFileSource := GetArchiveFileSource(SourceFileSource, aFile, FArchiveType, False, True); finally FreeAndNil(aFile); end; except on E: EFileSourceException do begin MessageDlg(E.Message, mtError, [mbOK], 0); Exit; 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: EFileSourceException do begin MessageDlg(E.Message, mtError, [mbOK], 0); Exit; end; end; // Pack files Pack(Files, QueueIdentifier); end; end; // Save last used packer gLastUsedPacker:= FArchiveType; 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) + '*.*' + FTarExt + FArchiveExt else edtPackCmd.Text:= ExtractFilePath(edtPackCmd.Text) + FArchiveName + FTarExt + FArchiveExt; end; procedure TfrmPackDlg.cbCreateSFXClick(Sender: TObject); var State: Boolean; begin if cbCreateSFX.Tag = 0 then begin cbCreateSFX.Tag:= 1; // Save check box state State:= cbCreateSFX.Checked; if State then FArchiveExt:= GetSfxExt else FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); // 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; FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); rgPacker.ItemIndex := -1; end else begin if rgPacker.ItemIndex = -1 then rgPacker.ItemIndex := 0; end; FCustomParams:= EmptyStr; cbPackerList.Enabled := cbOtherPlugins.Checked; SwitchOptions(True); end; procedure TfrmPackDlg.cbPutInTarFirstChange(Sender: TObject); begin if cbPutInTarFirst.Checked then begin FTarExt:= TAR_EXT; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, TAR_EXT + FArchiveExt); end else begin FTarExt:= EmptyStr; edtPackCmd.Text := StringReplace(edtPackCmd.Text, TAR_EXT + FArchiveExt, FArchiveExt, [rfIgnoreCase]); 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]; FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); cbOtherPlugins.Checked := False; end; FCustomParams:= EmptyStr; SwitchOptions(True); end; procedure TfrmPackDlg.SwitchOptions(ArcTypeChange: Boolean); // Ugly but working var I: LongInt; sCmd: String; begin if ArcTypeChange then begin // Reset some options cbCreateSFX.Checked:= False; end; // WCX plugins for I:= 0 to gWCXPlugins.Count - 1 do 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:= True else begin cbPutInTarFirst.Checked:= True; EnableControl(cbPutInTarFirst, False); end; end else begin cbPutInTarFirst.Checked:= False; EnableControl(cbPutInTarFirst, True); cbCreateSeparateArchives.Checked:= False; end; // Options that supported by plugins EnableControl(cbStoreDir, True); // Options that don't supported by plugins EnableControl(cbMultivolume, False); Exit; end; // MultiArc addons for I := 0 to gMultiArcList.Count - 1 do 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:= True else begin cbPutInTarFirst.Checked:= True; EnableControl(cbPutInTarFirst, False); end; end else begin cbPutInTarFirst.Checked:= False; EnableControl(cbPutInTarFirst, True); cbCreateSeparateArchives.Checked:= False; end; // Options that don't supported by addons cbStoreDir.Checked:= True; EnableControl(cbStoreDir, False); Exit; end; 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; end. doublecmd-0.9.8/src/fpackdlg.lrt0000644000175000001440000000121012613175013015604 0ustar alexxusersTFRMPACKDLG.CAPTION=Pack files TFRMPACKDLG.LBLPROMPT.CAPTION=Pack file(s) to the file: TFRMPACKDLG.RGPACKER.CAPTION=Packer TFRMPACKDLG.BTNCONFIG.CAPTION=Con&figure TFRMPACKDLG.CBOTHERPLUGINS.CAPTION==> TFRMPACKDLG.CBSTOREDIR.CAPTION=Also &pack path names (only recursed) TFRMPACKDLG.CBMULTIVOLUME.CAPTION=&Multiple disk archive TFRMPACKDLG.CBMOVETOARCHIVE.CAPTION=Mo&ve to archive TFRMPACKDLG.CBCREATESFX.CAPTION=Create self e&xtracting archive TFRMPACKDLG.CBENCRYPT.CAPTION=Encr&ypt TFRMPACKDLG.CBPUTINTARFIRST.CAPTION=P&ut in the TAR archive first TFRMPACKDLG.CBCREATESEPARATEARCHIVES.CAPTION=C&reate separate archives, one per selected file/dir doublecmd-0.9.8/src/fpackdlg.lfm0000644000175000001440000001533713010144262015572 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-0.9.8/src/foptionshotkeysedithotkey.pas0000644000175000001440000005404213020722001021354 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 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.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; 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 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; // Allow closing the dialog if Escape pressed twice. if (ShortCut <> VK_ESCAPE) or (EditControl.Text <> sShortCut) then begin EditControl.Text := sShortCut; Key := 0; btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; CheckHotKeyConflicts; 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 lblHotKeyConflict.Color := clHighlight; lblHotKeyConflict.Font.Color := clHighlightText; 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-0.9.8/src/foptionshotkeysedithotkey.lrt0000644000175000001440000000075313020722001021372 0ustar alexxusersTFRMEDITHOTKEY.LBLSHORTCUTS.CAPTION=Shortcuts: TFRMEDITHOTKEY.LBLPARAMETERS.CAPTION=&Parameters (each in a separate line): TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION=Only for these controls TFRMEDITHOTKEY.BTNOK.CAPTION=&OK TFRMEDITHOTKEY.BTNCANCEL.CAPTION=&Cancel TFRMEDITHOTKEY.BTNADDSHORTCUT.HINT=Add new shortcut to sequence TFRMEDITHOTKEY.BTNREMOVESHORTCUT.HINT=Remove last shortcut from sequence TFRMEDITHOTKEY.BTNSELECTFROMLIST.HINT=Select shortcut from list of remaining free available keys doublecmd-0.9.8/src/foptionshotkeysedithotkey.lfm0000644000175000001440000002052613020722001021347 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 = '1.6.0.4' 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 ParentColor = 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 OnClick = btnShowCommandHelpClick TabOrder = 2 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-0.9.8/src/foptions.pas0000644000175000001440000003434613400406116015670 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implementing of Options dialog Copyright (C) 2006-2018 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, fgl, uGlobs, fOptionsFrame, uDCUtils; type { TOptionsEditorView } TOptionsEditorView = class EditorClass: TOptionsEditorClass; Instance: TOptionsEditor; TreeNode: TTreeNode; LegacyOrderIndex: integer; end; TOptionsEditorViews = specialize TFPGObjectList; { TfrmOptions } TfrmOptions = class(TForm, IOptionsDialog) lblEmptyEditor: TLabel; OptionsEditorsImageList: TImageList; Panel1: TPanel; Panel3: TPanel; pnlCaption: TPanel; btnOK: TBitBtn; btnApply: TBitBtn; btnCancel: TBitBtn; sboxOptionsEditor: TScrollBox; tvTreeView: TTreeView; splOptionsSplitter: TSplitter; alOptionsActionList: TActionList; actCloseWithEscape: TAction; procedure btnCancelClick(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 tvTreeViewChange(Sender: TObject; Node: TTreeNode); procedure actCloseWithEscapeExecute(Sender: TObject); 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); 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 LCLProc, LCLVersion, uLng, fMain; var LastOpenedEditor: TOptionsEditorClass = nil; frmOptions: TfrmOptions = nil; { 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 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; procedure TfrmOptions.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); 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.btnCancelClick(Sender: TObject); begin // close window Close; 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 FreeThenNil(FOptionsEditorList); 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, 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); end; procedure TfrmOptions.tvTreeViewChange(Sender: TObject; Node: TTreeNode); var SelectedEditorView: TOptionsEditorView; begin 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; 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; end; { TfrmOptions.actCloseWithEscapeExecute } procedure TfrmOptions.actCloseWithEscapeExecute(Sender: TObject); begin // Closing with the "Escape" key this way won't set the modalresult to mrCancel so this way, if an unsaved modification has been made, we'll be able to prompt confirmation from user who attempt to quit by hitting "Escape". close; end; end. doublecmd-0.9.8/src/foptions.lrj0000644000175000001440000000161113367401147015674 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":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-0.9.8/src/foptions.lfm0000644000175000001440000030213013370721207015657 0ustar alexxusersobject frmOptions: TfrmOptions Left = 372 Height = 480 Top = 55 Width = 640 ActiveControl = tvTreeView Caption = 'Options' ClientHeight = 480 ClientWidth = 640 OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState;tvTreeView.Width' ShowInTaskBar = stAlways LCLVersion = '1.8.4.0' object tvTreeView: TTreeView Left = 0 Height = 437 Top = 0 Width = 193 Align = alLeft AutoExpand = True Images = OptionsEditorsImageList ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 OnChange = tvTreeViewChange Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, 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 end object Panel1: TPanel Left = 0 Height = 43 Top = 437 Width = 640 Align = alBottom ClientHeight = 43 ClientWidth = 640 FullRepaint = False TabOrder = 2 object btnOK: TBitBtn AnchorSideRight.Control = btnCancel Left = 321 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] 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] BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&Cancel' Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 1 end object btnApply: TBitBtn AnchorSideRight.Control = Panel1 AnchorSideRight.Side = asrBottom Left = 533 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&Apply' OnClick = btnApplyClick TabOrder = 2 end end object OptionsEditorsImageList: TImageList left = 72 top = 16 Bitmap = { 4C692A0000001000000010000000675647FF565855FF675647FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF5D5F5BFF979B99FF5D5F5BFFCDA47FFFD8B0 89FFCDA177FFC19060FFB47F4AFFAA7138FFAE7339FFB1743AFFB5763BFFBB7E 46FFC28753FFC89160FF874A20FF5F605CFF9CA09EFF5F605CFFCCA47EFFD8B0 89FFCDA177FFC19060FFB47F4AFFAA7138FFAE7339FFB1743AFFB5763BFFBB7E 46FFC28753FFC89160FF874A20FF5F605CFF9CA09EFF5F605CFFCCA47EFFD8B0 89FFCDA177FFC19060FFBE9163FFC0966CFFC89F78FFC29365FFB87B42FFBB7E 46FFC28753FFC89160FF874A20FF5F605CFF9A9E9DFF5F605CFFCCA47EFFD8B0 89FFD3AD88FFD4B392FFCBA681FFC9A581FFCFAD8BFFD2AF8DFFC99B70FFD0A5 7FFFC28753FFC89160FF874A20FF5F605CFF979B9AFF5F605CFFCCA47EFFD8B0 89FFE6D1BFFFD5B594FFCEAB88FFD0B090FFC9A27BFFCDA681FFDCC3AEFFE6D1 BFFFC28753FFC89160FF874A20FF5F605CFF949997FF5F605CFFCCA47EFFD8B0 89FFE5CFBDFFE2CEBCFFCEAB88FFC59E77FFCAA37DFFD0AC89FFDCC1ADFFE5CF BEFFC28753FFC89160FF874A20FF5F605CFF919694FF5F605CFFCCA47EFFD8B0 89FFDFC6B2FFE7D5C5FFD3B394FFC6A07AFFD0AD8BFFCFA985FFDEC5B1FFDEC3 AFFFC28753FFC89160FF874A20FF5F605CFF8F9391FF5F605CFFCCA47EFFD8B0 89FFCDA177FFDEC6B2FFE2CFBEFFD9C1AEFFD8BFABFFDDC5B2FFD1AA85FFBD82 4BFFC28753FFC89160FF874A20FF5F605CFF8C908FFF5F605CFFCCA47EFFD8B0 89FFCDA177FFC19060FFD1B6A1FFD1B7A3FFCFB29EFFBD8A59FFB6783DFFBB7E 46FFC28753FFC89160FF874A20FF5F605CFF888D8BFF5F605CFFCCA47EFFD8B0 89FFCDA177FFC19060FFB47F4AFFAA7138FFAE7339FFB1743AFFB5763BFFBB7E 46FFC28753FFC89160FF874A20FF5F605CFF888D8BFF5F605CFF844B23FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF5F605CFF919694FF5F605CFF666A68B2666B 68AD666B68AD666A68B2666B68AD666B68AD666A68B2666B68AD666B68AD666A 68B2666B68AD666B68AD000000005F605CFF8F9391FF5F605CFF5357550E0000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000005F605CFF8C908FFF5F605CFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000033333300888D8B005F605C00535755050000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000858A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFC5C6C6FFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFC5C6C6FFE3E3E3FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFA8ABAAFFC6C7C7FFE6E6E6FFE6E7E6FFC6C8C7FFA8ABAAFFE5E4E4FFE4E3 E4FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE4E4E4FFE5E6 E6FFA8ABAAFFE9E8E9FFE9E9E9FFE9E9E9FFE9E9EAFFA8ABAAFFE7E7E8FFE6E6 E6FFE4E5E4FFFBFBFBFF858A88FF858A88FFFFFFFFFFE4E4E4FFE6E7E6FFE8E8 E9FFA8ABAAFFEBECEBFFECECECFFECEDEDFFECEDECFFA8ABAAFFEBEBEAFFE9E9 E9FFE6E7E7FFFBFBFBFF858A88FF858A88FFFFFFFFFFE6E6E6FFE9E8E8FFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFEBEC ECFFEAE9E9FFF8F8F8FF858A88FF858A88FFFFFFFFFFE8E8E8FFEBEBEAFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFEEEE EEFFECEBECFFF6F6F6FF858A88FF858A88FFFFFFFFFFE9E9EAFFECECECFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFF0F0 F0FFEDEDEDFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEBEAFFEEEDEDFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFF1F1 F2FFEFEEEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEBFFEEEEEEFFCCCD CDFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFCECFCFFFF3F3 F3FFEFF0EFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEAFFEEEEEEFFF2F1 F2FFF5F5F5FFF8F8F8FFFBFBFBFFFEFEFEFFFCFCFCFFF9F9F9FFF6F6F5FFF3F3 F3FFEFEFEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEAEBFFEDEEEDFFF1F1 F1FFF4F4F4FFF6F6F7FFF9F9F9FFFBFAFBFFF9FAF9FFF8F8F8FFF5F5F4FFF2F2 F2FFEFEFEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFFAFAFAFFF6F6F6FFF6F6 F6FFF6F6F6FFEFEFEFFF858A88FF00000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000858A 88FF000000000000000000000000000000000000000000000000000000000000 0000858A88FF0000000000000000000000000000000000000000858A88FFE9EB ECFF858A88FF000000000000000000000000000000000000000000000000858A 88FFEEEFEFFF858A88FF0000000000000000000000000000000000000000858A 88FFEEF0F0FF858A88FF00000000000000000000000000000000858A88FFF0F0 F0FF858A88FF000000000000000000000000858A88FF0000000000000000858A 88FFFAFAFAFF858A88FF00000000000000000000000000000000858A88FF878C 8AFF000000000000000000000000858A88FFF5F6F6FFA9ACABFF858A88FFF7F7 F7FFE2E3E5FFAAADADFFECEEEEFF0000000000000000858A88FF000000000000 000000000000000000000000000000000000858A88FFF3F3F3FFEFF0F0FFEDEE EEFFEAECECFFB6B9BAFF858A88FF00000000858A88FF00000000000000000000 00000000000000000000000000000000000000000000858A88FF858A88FF858A 88FF858A88FFD0D1D2FFA3A4A4FF858A88FF858A88FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000B5B7B8FF858A88FFB7B8B9FF858A88FF00000000000000000000 0000000000000000000000000000000000000000000000000000874A20FF874A 20FF874A20FF85837DFFAAADADFFC8C9CAFFBDBEBFFF858A88FF000000000000 00000000000000000000000000000000000000000000874A20FFCCBBADFFCCBB ADFFB3937CFF874A20FF858A88FF858A88FFD3D3D4FFBDBEBFFF858A88FF0000 000000000000000000000000000000000000874A20FFD4C8BDFFA48D78FFA48D 78FFBEA592FF874A20FF0000000000000000858A88FFE2E3E4FFC2C4C6FF858A 88FF858A88FF0000000000000000874A20FFCCBBADFFA48D78FFA28A74FFB495 7AFFB3937CFF874A20FF000000000000000000000000858A88FFD2D3D4FFC2C3 C4FF858A88FF0000000000000000874A20FFCCBBADFFA7917DFFB5957AFFAE8B 72FF874A20FF0000000000000000000000000000000000000000858A88FF9EA1 A0FF858A88FF0000000000000000874A20FFBEA592FFB89C86FFB89C86FF874A 20FF000000000000000000000000000000000000000000000000858A88FF858A 88FF858A88FF000000000000000000000000874A20FF874A20FF874A20FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000858A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF858A88FFFFFFFFFFE3E3E3FFA7A7A7FF8282 82FF2F2F2FFF2F2F2FFFE3E3E3FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE2E2E2FFDBDB DBFFCECECEFF2F2F2FFFE3E3E3FFE8E8E8FFE9E9E9FFE8E8E8FFE8E8E8FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFB1B1B1FF2F2F 2FFF747474FF2F2F2FFFE6E6E6FFE6E7E6FFE6E6E6FFE5E6E5FFE5E4E4FFE4E3 E4FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FF2F2F2FFFD3D3 D3FFBFBFBFFF2F2F2FFFE9E9E9FFE9E9E9FFE9E9EAFFE9E9E8FFE7E7E8FFE6E6 E6FFE4E5E4FFFBFBFBFF858A88FF858A88FFFFFFFFFFE4E4E4FF2F2F2FFF2F2F 2FFF2F2F2FFFB8B9B8FF4B4B4BFF2F2F2FFFECEDECFFECEBECFFEBEBEAFFE9E9 E9FFE6E7E7FFFBFBFBFF858A88FF858A88FFFFFFFFFFE6E6E6FFECECECFFEDED EDFFEEEEEEFFEFEFEFFF474747FF2C2C2CFFF0F0F0FFEFEFEFFFEEEEEEFFEBEC ECFFEAE9E9FFF8F8F8FF858A88FF858A88FFFFFFFFFFE8E8E8FFEDEDEDFFEFEF EFFFF0F0F0FFF1F1F1FF484848FF202020FF343434FF000000FF010101FF6262 62FFF2F2F2FFF6F6F6FF858A88FF858A88FFFFFFFFFFE9E9EAFFEFEFEFFFF0F0 F0FFF2F2F2FFF3F3F3FF484848FF000000FF767676FFF2F2F2FF666666FF0000 00FFB1B1B1FFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEBEAFFF0F0F0FFF2F2 F2FFF3F3F3FFF5F5F5FF494949FF050505FFF3F3F3FFF9F9F9FFDBDBDBFF0000 00FF7C7C7CFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEBFFF1F1F1FFF3F3 F3FFF4F4F4FFF6F6F6FF494949FF060606FFF1F1F1FFFBFBFBFFD3D3D3FF0000 00FF767676FFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEAFFF2F2F2FFF4F4 F4FFF6F6F6FFF7F7F7FF4A4A4AFF000000FF797979FFF7F7F7FF5F5F5FFF0000 00FFADADADFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEAEBFFF2F2F2FFF4F4 F4FFF6F6F6FFF8F8F8FF565656FF2E2E2EFF222222FF040404FF000000FF4D4D 4DFFF7F7F7FFEFEFEFFF858A88FF858A88FFFFFFFFFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFFAFAFAFFF6F6F6FFF6F6 F6FFF6F6F6FFEFEFEFFF858A88FF00000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000FFFFFF00FFFFFF00FFFFFF000DD8000004D0 13000CD135FF15D255FF18D474FF18D68CFF13D8A2FF0DDBB9FF06E4D900FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003AD5040020D009FF3AD7 3DFF6AE67CFF88F3AAFF96F9C4FF97FBD3FF87F7DBFF68EFE0FF1AE7E5FF0AD5 EBFF05BBF400FFFFFF00FFFFFF00FFFFFF0065D800004CD50EFF74E158FFA1F6 99FF9EFFA6FF7BFF9EFF70FFAEFF70FFC7FF7CFFE3FFA5FFFAFF98F4FBFF55D8 F5FF0DB7F9FF008DFC00FFFFFF0080DE000077DA09FF94E257FFBBF99DFF8AFF 6EFF79FF76FF82FF97FF89FFB6FF87FFD1FF7EFFECFF6DFBFEFF76E8FFFF9BDF FCFF54BAFBFF0782F6FFFFFFFF0096DF0000A0E138FFCBF697FFAEFF6CFFA4FF 7AFF9DFF8DFF9BFFA3FFA4FFC4FFA2FFDFFF97FFF8FF85EFFFFF6ED3FFFF78C5 FFFF92C5FCFF146EF4FF0052F000B2E608FFC6EB67FFDDFF9BFFC5FF6FFFC3FF 8CFFBEFFA1FFB9FFB3FFBDFFCFFFBDFFEEFFB0F8FFFF99DEFFFF7EC2FFFF63A3 FFFF9EBDFFFF5983F8FF0336E2FFCDEA0EFFE4F582FFE5FF6FFFE0FF79FFE0FF 95FFDFFFAFFFDCFFC7FFDCFFE0FFD9FEFAFFC5E9FFFFA7CAFFFF87AAFFFF698B FFFF788EFFFF7386FBFF0822DDFFEAEC0EFFF9FA92FFFAFD64FFFAFD7BFFF9FD 98FFFAFDB5FFFAFED3FFFAFEEFFFEFF3FFFFD0D5FFFFAFB3FFFF8D91FFFF6C6F FFFF6769FFFF8283FBFF090DD9FFF1DA0EFFFFF290FFFFE962FFFFE876FFFFE7 93FFFFE7B0FFFFE6CAFFFFE5E5FFFCDEFDFFE1C6FFFFC2A6FFFFA184FFFF7E66 FFFF7664FFFF887BF6FF1A08D5FFF5BF09FFFEDD80FFFFD16CFFFFC76BFFFFC7 85FFFFC49EFFFFBDB3FFFFBFD0FFFFBFF1FFF4B0FFFFD696FFFFB679FFFF955E FFFF9977FFFF8265ECFF2A04D0FFFBA600FFFDBE60FFFFD09CFFFFA55BFFFFA2 71FFFF9A84FFFF979BFFFF9FBFFFFF9FE0FFFE92FBFFE77CFFFFC966FFFFA84F FFFFBE95FDFF7240DDFF3600CC00FA820000F87C0BFFFBB98EFFFF976AFFFF79 5BFFFF716BFFFF7689FFFF7CADFFFF7BCDFFFF71EDFFF763FFFFD952FFFFCF7C FFFFB373ECFF5906CCFF4600CC00FFFFFF00F05600FFF07744FFFCA692FFFF7B 6FFFFF5158FFFF5A79FFFF5E9BFFFF5CBCFFFF57DAFFFF4CF7FFF17BFFFFD685 F1FF9734CFFF6100C200FFFFFF00FFFFFF00EB470000E22A00FFE95240FFF885 84FFFF969FFFFF7491FFFF609AFFFF60B7FFFF78D8FFFC92EFFFE871EAFFB632 CCFF8900BDFF6D00CE00FFFFFF00FFFFFF00FFFFFF00E51E0000D30400FFD404 0CFFE14059FFEE6384FFF373A1FFF071B2FFE45AB6FFD236B4FFBE02B4FFAD00 BA009700CC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D000 0700C3001C00BF0031FFBE0144FFBB005AFFB90072FFB8008A00C100AF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 000000000000894D25FF884C23FF884C23FF884C23FF884C23FF884C23FF884C 23FF884C23FF894F26FF00000000000000000000000000000000000000000000 00008B5129FFE2DFDAFFEDEFEEFFF0F2F1FFF4F5F4FFF6F7F7FFF7F8F8FFF5F6 F6FFF3F4F4FFE1DAD4FF894F26FF000000000000000000000000874A20FF874A 20FF8E5630FFE8EBEAFFD6DADAFFD6DADAFFD7DADAFFD8DCDBFFD8DCDBFFD7DC DBFFDADEDEFFEFF0F0FF874A20FF0000000000000000874A20FF874A20FF874A 20FF8E562FFFE6E8E7FFD6DBDBFFDAE0DDFFDCE2DFFFDDE3E0FFDEE4E1FFDCE2 E0FFD8DCDCFFEAECECFF874A20FF00000000874A20FF874A20FF874A20FF0000 00008E562FFFE0E3E2FFDEE2E1FFDDE3E0FFE0E6E3FFE2E7E5FFE3E8E5FFE2E7 E4FFDFE2E2FFE4E7E6FF874A20FF00000000874A20FF874A20FF000000000000 00008D562FFFDBDEDCFFE7E9E9FFE1E6E3FFE4E9E6FFE7EBE9FFE8ECE9FFE6EB E8FFE6E8E8FFDEE0DFFF874A20FF00000000894F27FF874B21FF874B22FF874A 21FF8D552FFFD7DBD9FFEFF2F2FFE4E9E6FFE8ECEAFFEBEFEDFFEDF0EEFFEBEF EDFFEDEFEFFFD7DBD9FF874A20FF895028FFC1B6ABFFD5D9D8FFD6DAD9FFD1D0 CDFF8F5933FFD6DAD8FFEFF1F0FFF8F9F9FFF8F9F9FFF8F9F9FFF8F9F9FFF8F9 F9FFE9EBEBFFD7DBD9FF874A20FF874B22FFD6DAD9FFD7DBDBFFD8DCDCFFD2D3 D0FF8F5933FFD6DAD8FFB7BEBBFFB7BEBBFFB7BEBBFFB7BEBBFFB7BEBBFFB7BE BBFFB9BFBCFFD7DBD9FF874A20FF874B22FFD6DAD9FFE4E6E6FFD0D8D4FFD3D8 D3FF8C542EFFCECBC5FFD7DAD8FFD7DAD8FFD7DAD8FFD7DAD8FFD7DAD8FFD7DA D8FFD7DAD8FFC8C2B9FF884E25FF874B22FFD6DAD9FFEEEFEFFFD3DAD6FFD7DE DBFFB7A18DFF8E5731FF884D24FF884D24FF884D24FF884D24FF884D24FF884D 24FF884D24FF8F5A34FF874D25FF874B22FFD6DAD9FFF8F8F8FFD4DBD8FFD9E0 DDFFDFE4E1FFE3E8E5FFE7ECE9FFEAEEEBFFE8ECEAFFE4E9E6FFE0E5E2FFDBE1 DEFFEDEFEEFFDCDFDFFF884D25FF874B22FFD6DAD9FFFCFCFCFFF5F7F7FFF6F7 F7FFF6F8F8FFF7F8F8FFF7F9F8FFF8F9F9FFF7F9F9FFF7F8F8FFF6F8F8FFF6F8 F7FFFCFCFCFFDEE1E0FF884D25FF874B22FFD6DAD9FFBEC4C1FFC1C7C4FFC1C7 C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7 C4FFC0C6C4FFD6DAD9FF884D24FF895028FFC0B4A8FFD6DAD8FFD6DAD9FFD6DA D9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DA D9FFD6DAD8FFBFB4A7FF895028FF00000000895029FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF895028FF00000000FFFFFF000000000000000000000000000000 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 FF00FFFFFF00FFFFFF00FFFFFF0000000000B6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFF000000000000 0000000000000000000000000000B6BDBAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFEFEFEFF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FFFDFDFDFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFBFCFCFFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFFBFBFBFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFAFBFAFFF9F9F9FFF9F9F9FFE0E3 E2FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFF00000000B6BDBAFFF8F8F8FFF6F6F6FFF6F6F5FFB6BD BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB6BDBAFFB6BDBAFFF7F7F7FFF3F3F4FFF3F3F3FFB6BD BAFFFEFEFEFF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FFFDFDFDFFB6BDBAFFB6BDBAFFF2F2F2FFEEEEEEFFEFEFEFFFB6BD BAFFFBFCFCFFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFFBFBFBFFB6BDBAFFB6BDBAFFF0EFEFFFEAEAEBFFEAEAEAFFB6BD BAFFFAFBFAFFF9F9F9FFF9F9F9FFF9F9F9FFF8F9F8FFF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F9F8FFB6BDBAFFB6BDBAFFEEEFEEFFE6E5E5FFE5E5E5FFB6BD BAFFF8F8F8FFF6F6F6FFF6F6F5FFF6F5F6FFF6F6F6FFF5F5F6FFF5F5F5FFF5F5 F6FFF5F5F6FFF7F7F7FFB6BDBAFFB6BDBAFFF2F2F3FFEFF0EFFFEFEFF0FFB6BD BAFFF7F7F7FFF3F3F4FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F2FFF3F3F3FFF3F2 F2FFF3F2F3FFF6F6F6FFB6BDBAFF00000000B6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFF2F2F2FFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEF EFFFEEEEEEFFF1F2F1FFB6BDBAFF00000000000000000000000000000000B6BD BAFFF0EFEFFFEAEAEBFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9E9FFEAEAEAFFE9E9 EAFFEAE9EAFFEFEFEFFFB6BDBAFF00000000000000000000000000000000B6BD BAFFEEEFEEFFE6E5E5FFE5E5E5FFE5E6E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE5E5E5FFEDEEEEFFB6BDBAFF00000000000000000000000000000000B6BD BAFFF2F2F3FFEFF0EFFFEFEFF0FFEFEFEFFFF0F0EFFFEFEFEFFFEFEFEFFFEFEF F0FFEFEFEFFFEFEFEFFFB6BDBAFF000000000000000000000000000000000000 0000B6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9 F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9 DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7 BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3 E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3 CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0 F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5 D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5 E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3 F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5 F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8 D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5 F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2 FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3 F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2 FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA F8FF3594DAFFFFFFFF00FFFFFF002C86D8D12D88D8F72D87D8F72D88D8F72D88 D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88 D8F72C86D8D1FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B9844448B68140FAB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB9844448000000000000000000000000B9844448BA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B68140FAF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37BFFF2C2 79FFFCDDA8FFC7995DFF0000000000000000B47D3CFFFBE1AEFFC9772FFFCD78 33FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CB88FFF3CB 87FFFADBA5FFC69659FFB88342A8B98444FFCCA26CFFCC7630FFCA974EFFCCA4 70FFD4AF80FFCC833FFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D8 9CFFFBDFA5FFF2D49BFFBD8949FFBA8545FFCD7935FFDAB176FFCC8036FFC992 4BFFCE9B4AFF775429FFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F 3FFFB6803FFFB78242FFB98545FFCA975AFFECD2ACFFCC843EFF000000466B35 1BB1DFA34DFFF1D7B3FF00000033000000330000003300000033000000330000 0033000000330000003300000033CD7731FFCA904CFFE4C394FFC279356A946A 8AFF3A99E2FF4CBCF6FF4A9FE0FF000000000000000000000000000000000000 000000000000000000000000000000000000DDBC8DFFE8B266FFF7DCB5FF298B DFFF41A9EBFFC7721FF656BFF6FF000000000000000000000000000000000000 000000000000000000000000000000000000BD652AEF0000005CF5C279FFCC67 2AFF51C4F9FF45ABEBFF4896D8FF000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005C0000 005C1B3D608A438DD1FF3577BAF1000000000000000000000000000000000000 0000000000000000000000000000FFFFFF00C17D4460C88B4DBBC88C4FEEC88C 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 2EEFB7622CBDB7622E63FFFFFF00C17D4460C88B4DBBC88C4FEEC88C4FFFC88C 4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B3683C06FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F3EDFFF8F3 EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB9465F5B3683B07FFFF FF00FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE2C9FFFBE0 C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8B4FFE1B07DFFDB9264F6B46B 3E07FFFFFF00FFFFFF00FFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3CDFFFBE2 CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6CDFFFAE5C9FFE2B684FFBF79 42A6FFFFFF00FFFFFF00FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFCE4CFFFFCE3 CDFFFAE1CAFFF9DDC4FFF6D9BCFFF4E9DFFFF7F2ECFFFBF7F3FFF5EFE9FFC27E 45FBFFFFFF00FFFFFF00FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFDE7D3FFFCE4 D1FFFBE3CDFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4B5FFF1D2B3FFF8F4F0FFC482 46F7FFFFFF00FFFFFF00FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7D5FFFDE6 D4FFFCE6D2FFD4976EFFD49E7BFFD09871FFD6A482FFCD8E68FFCD9069FFD09A 75FFD19973FFC88B62FFAD5A2036C68849F7F9F4EDFFFEE8D8FFFEE8D7FFFEE7 D6FFFDE5D3FFCC8D65FFF3CDB0FFFFFFFFFFE3C7B3FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEABFA1FFC98960FFC68447F7F9F3ECFFFEE8D6FFFDE7D6FFFDE7 D6FFFDE7D5FFC7865BFFEFC09EFFFFFFFFFFCC936EFFFFFFFFFFFFFFFFFFFFFB F7FFFFF8F1FFE4AF8CFFC78A61FFC58245FFF8F2EBFFFEE7D6FFFDE7D6FFFDE7 D6FFFDE6D5FFC8885DFFEFBFA1FFFDFCFAFFFEFCFBFFFEFDFDFFFEFDFCFFFDFB FAFFFDFCFBFFDDA885FFC17F53FFC47C40F7F7F0E6FFF8B455FFF7B554FFF8B4 53FFF8B253FFCA8D65FFEAB899FFDDA57EFFDDA680FFDBA37CFFD9A07AFFD9A0 79FFD89F78FFD89E78FFBF845DFFC1783CF7F7EDE3FFFDC26EFFFFD79EFFFFD6 9BFFFFD798FFC98B61FFE6B592FFE2A781FFE1A781FFDEA37DFFDCA17BFFDB9F 79FFD99E77FFD49A73FFBB7E57FFBF7138F5F5EBDFFEFDBF68FFFBBE65FFFCBE 64FFFCBE64FFC48154FFEAB697FFF3F3EAFFEDF1E6FFEFF1E6FFEFF0E6FFEDF1 E5FFF3F5EDFFD59C79FFB07044FFBC6933DEF8F1EAF2F7ECDFFDF6EADEFFF6EA DCFFF6EADCFFC37F51FFEFB69AFFEAF3E8FF51BF84FF6FC998FF71C999FF54BF 84FFE4F4E9FFDD9C7BFFAA693AFFBB6A346BBA6530BCBB6631EDBA6630FFBA66 30F7BA6530F7C68355FFEFCEBAFFDDFFFFFF87EEC7FFA2F4D7FFA2F6D7FF8CEE C7FFE0FFFFFFDDA285FFAB6A3EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00BA6833C5C38458FFD38B68FFE18F70FFDC8D6CFFDA8B6DFFD78A 6EFFCD8B6CFFAB6D44FFA65F2EFFFFFFFF00FFFFFF00C17D4460C88B4DBBC88C 4FEEC88C4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C476 3B91B3683C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4 EEFCF8F4EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B2 7DFFDB9465F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0 C7FFFBE1C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8 B4FFE1B07DFFDB9264F6B46B3E07FFFFFF0092877B12776D62FF756D65FFDDC8 B5FF6F665EFF6C6259FFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6 CDFFFAE5C9FFE2B684FFBF7942A6756C630F988C808F9C8F83FF524C47FFCBB7 A7FF544D47FF908579FF9A8C7FFFF5DDC6FFF9DDC4FFF6D9BCFFF4E9DFFFF7F2 ECFFFBF7F3FFF5EFE9FFC27E45FB95897D1D665E56F385786FFF4A413BFF9586 7AFF564A40FF928374FF4F4740FFE4CFBBFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4 B5FFF1D2B3FFF8F4F0FFC48246F73E3934855B544DFFB0A090FF695D51FF8674 65FF63584EFFAA9888FF5A514AFF85796EFFFBE1CCFFFADFC7FFF8DCC2FFF6DA BDFFF6D8BBFFFAF4EFFFC68346F7665E56EF696158FF564F48FF4D4946FF8C80 77FF403B37FF46423CFF3D3833FF2C2825FFFCE4D1FFFBE1CCFFFAE0C7FFF9DD C3FFF8DCC2FFFAF4EDFFC68245F7756C63F8C4B9AFFFA79A8DFF807A73FFD6C3 B4FF6C635CFFBBAFA4FFA6988BFF534D46FFFDE5D3FFFBE4D0FFFBE3CCFFFADF C7FFFADFC6FFFAF2EAFFC68042F771685FFFC1B6ABFF797066FF625C56FFBAA9 9CFF6E665DFFBDB1A5FF7E746AFF332E2BFFFDE5D3FFFCE4D1FFFCE2CDFFFBE1 CBFFFBE1C9FFFBF7F2FFC57C3FF7635B54FFA79A8DFF70675EFF453F3AFFAD9C 91FF5C554EFF968A7FFF665E56FF1B1918FFFCE4D1FFFCE2CEFFFCE2CCFFFBE0 C9FFFBE1C8FFFDFAF7FFC1763BF7423D38D948423CD94B3E31FE58544FFFB686 42FF3D3020FF413524FF372B1BFF3B2C15FFF7B352FFF7B352FFF7B251FFF7B2 4FFFF7B24FFFFCF9F5FFBF6F36F7FFFFFF00FFFFFF00C1783CF7F7EDE3FFFDC2 6EFFFFD8A0FFFFD79EFFFFD69BFFFFD798FFFFD696FFFFD695FFFFD594FFFFD4 93FFFBBE65FFFBF7F4FFBB6731F7FFFFFF00FFFFFF00BF7138F5F5EBDFFEFDBF 68FFFCBD67FFFBBE65FFFCBE64FFFCBE64FFFCBD62FFFBBD63FFFBBC61FFFCBE 60FFFCBC62FFFDFBF8FDB9642DF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7EC DFFDF6EBDEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFFFAF2EAFFFCF7 F3FFFCF8F4FDFEFEFDF0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB66 31EDBA6630F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF7B9652EF7B964 2EF7B9642EEFB7622CBDB7622E63B57B09B2B88217FFB78115FFB68114FFB681 15FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB681 14FFB78115FFB88217FFB57B09B2B88216FFEFD09EFFECCD99FFECCD99FFECCD 9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD 99FFECCD99FFEFD09EFFB88216FFB67F10FFF5DDB7FFDC9D37FFDC9E39FFDC9F 3AFFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDC9E39FFDB9E 39FFDB9D37FFF5DDB7FFB67F10FFB57C0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB57C0BFFB57C09FFFFFFFFFF807E7DFF767372FF7977 76FFAEADACFFDADAD9FFA1A09FFFA1A09FFFDADADAFFA1A1A0FFA2A2A1FFA2A2 A1FF9F9FA0FFFFFFFFFFB57B09FFB57B09FFFFFFFFFFE6E6E5FFEBEAE8FFEAE9 E7FFE5E4E2FFE2E1DFFFE4E3E1FFE4E3E1FFE3E2DFFFE4E3E1FFE6E5E2FFE5E4 E2FFE2E2E1FFFFFFFFFFB57B08FFB57C09FFFFFFFFFF8B8988FF807E7CFF8381 7FFFBABAB7FFE9E8E7FFACABAAFFADACABFFE9E8E7FFADACABFFAFAEADFFAEAD ACFFABABABFFFFFFFFFFB57B08FFB57B08FFFFFFFFFFF2F1F2FFF6F5F5FFF5F4 F4FFF0F0EFFFEEEDECFFEFEEEDFFEFEEEDFFEEEDECFFEFEEEDFFF1F0EFFFF1F0 EFFFEEEEEEFFFFFFFFFFB57B08FFB57B08FFFFFFFFFF92908FFF868381FF8886 84FFC4C1BFFFF3F2F1FFB3B2B2FFB3B2B2FFF4F2F1FFB3B2B2FFB5B4B4FFB5B4 B4FFB2B2B4FFFFFFFFFFB57B08FFB57B08FFFFFFFFFFFCFDFEFFFFFFFFFFFFFF FEFFFAFAF9FFF7F7F6FFF8F8F7FFF8F8F7FFF7F7F6FFF8F9F7FFFAFAF9FFFAFA F9FFF8F9F9FFFFFFFFFFB57B08FFB57B08FFFFFFFFFF999696FF8B8886FF8F8C 8AFFCAC9C8FFFCFCFBFFBBBBBBFFBBBBBBFFFCFCFBFFBBBBBBFFBDBDBDFFBDBD BDFFBBBCBEFFFFFFFFFFB57B08FFB57B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB47B08FFB57C09FFFFFFFFFFA09D9EFF8F8F8FFF9392 91FFD2D1D2FFFFFFFFFFC1C2C3FFC1C2C4FFFFFFFFFFC1C2C4FFC3C4C6FFC3C4 C6FFC2C4C7FFFFFFFFFFB57B09FFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB67E0EFFA77108C1B67E0EFFB57C09FFB57C09FFB57C 09FFB57B08FFB47B08FFB57B08FFB57B08FFB47B08FFB57B08FFB57B08FFB57B 08FFB57C09FFB67E0EFFA77108C1000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000000000000000000000000000000000000000A0 C41B02A1C5A404A2C5EA02A1C4FD02A1C4FD03A2C5EA01A1C49800A0C41B0000 000000000000000000000000000000000000000000000000000000A0C46401A0 C4FBEEF8FAFFF4FBFCFFE4F9FCFFE4F9FCFFC3EDF4FF18AACAFA00A0C4F800A0 C464000000000000000000000000000000000000000000A0C46800A0C4FF83D4 E5FEEFFCFDFFCEF7FCFFAFF4FCFFA9F4FCFF9CF0FAFF4ECCDEFF5ECBDFFA00A0 C4FF00A0C46400000000000000000000000000A0C41B01A0C4FC7DD5E5FFCDF6 FAFFEAFBFDFFB8F4FBFFB5F4FCFFADF3FBFF9CEEF8FF52CFE0FFA7EFF8FF61CD E0FC00A0C4FA00A0C41B000000000000000001A1C49D1AACCBFEC4F3F8FFAEEF F7FFE0F9FCFFBDF3F9FFAEF1F9FFA4EFF8FF8EE6F2FF54D2E1FFC1F4F9FF6FE3 EFFF13A9C9F900A0C48A000000000000000005A3C6EC91DEEBFF93E8F2FFA1EB F4FFCDF4F9FFAEEEF6FFA1ECF5FF96EAF4FF81E2EFFF4ECFDFFF9EEBF4FF59DC EBFF54CDE0FE01A0C4E2000000000000000002A1C4FEA4E8F1FF80E2EDFF8BE5 F0FF90E6F1FF90E7F1FF8BE6F0FF82E4EFFF74DFEDFF6CDEECFF63DCEAFF3BD2 E4FF40D1E3FF01A0C4FD000000000000000003A1C4FF9BE6F0FF66DAE8FF69DB E9FF5CD9E7FF50D6E6FF51D6E7FF4FD6E6FF42D3E3FF32CDE1FF29CCE0FF24CA DEFF1FC8DDFF00A0C4FF000000000000000000A0C4FF79DDE8FF23C7DCFF16C5 DAFF65D9E7FF55D5E5FF47D2E3FF38CEE1FF28C9DDFF13B7CBFF16C5DAFF13C3 D9FF11C2D8FF00A0C4FF000000000000000000A0C4FF8BE1EBFF01BCD3FF04BE D4FF31C9DDFF08BFD5FF09BFD6FF09BFD6FF08BFD5FF05B0C5FF04BED4FF01BC D3FFFFFFFFFF00A0C4FF000000000000000000A0C4FFC9F1F6FF8AE1EBFF00BC D3FF22C5D9FF00BCD3FF00BCD3FF00BCD3FF00BCD3FF00AFC4FF01BCD3FF87DF EAFFFFFFFFFF00A0C4FF000000000000000001A0C4FCE3F4F8FFA3E7EFFFBAED F3FF84DEEAFF75DBE7FF3FCCDEFF0BBFD5FF4CD0E0FF9BE1EAFFC9F0F6FFC9F1 F6FFE3F4F8FF019FC3FC000000000000000000A0C4BB00A0C4FFDDF2F7FF93E3 EDFF9AE5EEFFA0E6EFFFA6E8F0FFABEAF1FFAFEAF1FFB1EAF1FFAFEAF1FFDDF2 F7FF00A0C4FF00A0C4AB00000000000000000000000006A2C4CE00A0C4FF5AC1 D8FFC7EAF2FFF0F9FBFFFDFEFEFFFDFEFEFFF0F9FBFFC7EAF2FF5AC1D8FF00A0 C4FF039FC0C80000000000000000000000000000000000000000009EC150019B BBCD11A4C4F407A2C4FC01A0C4FF01A0C4FF08A1C4FC0EA1C1F3049BBBCF0098 BA4A000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 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 3424FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00884A2086874A20F9884B 21C6874A2025FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5673686A46635F9A668 38C6A4653425FFFFFF00FFFFFF00FFFFFF00874A206B8B4E23F49F6131FF9658 2AFD884B20E1874A200BFFFFFF00FFFFFF00A466356BAA6E3DF4C89669FFBA83 54FDA66736E1A465340BFFFFFF00FFFFFF00884B20ED9F6030FFA46534FFA465 34FF8C4F23F2874A204DFFFFFF00FFFFFF00A56736EDC79567FFCF9F72FFCF9F 72FFAC7040F2A465344DFFFFFF00874A2018884B20F7A46534FFA46534FFA465 34FF945629FC874A2087FFFFFF00A4653418A56736F7CF9F72FFCF9F72FFCF9F 72FFB88050FCA4663587FFFFFF00874A204D8D5024F0A46534FFA46534FFA465 34FF9A5C2DFF894B21C9FFFFFF00A465344DAD7242F0CF9F72FFCF9F72FFCF9F 72FFC18C5EFFA76938C9FFFFFF00874A2082945629FCA46534FFA46534FFA465 34FFA06231FF874A20F6FFFFFF00A4653482B88051FCCF9F72FFCF9F72FFCF9F 72FFCA986BFFA56635F6FFFFFF00874A2079945629FAA46534FFA46534FFA465 34FF9F6030FF884B20EDFFFFFF00A4653479B77F50FACF9F72FFCF9F72FFCF9F 72FFC89568FFA56736EDFFFFFF00874A20518E5025F0A46534FFA46534FFA465 34FF995B2CFF894B21BAFFFFFF00A4653451AF7444F0CF9F72FFCF9F72FFCF9F 72FFBF8A5BFFA76938BAFFFFFF00874A2029894C21F3A46534FFA46534FFA465 34FF935528F9874A207AFFFFFF00A4653429A86A3AF3CF9F72FFCF9F72FFCF9F 72FFB67D4EF9A465347AFFFFFF00874A2006874A20FD874A20FF874A20FF874A 20FF874A20FF874A2044FFFFFF00A4653406A46534FDA46534FFA46534FFA465 34FFA46534FFA4653444FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00874A20E4874A20FF874A20FF874A 20FF874A20FAFFFFFF00FFFFFF00FFFFFF00A56635E4A46534FFA46534FFA465 34FFA46534FAFFFFFF00FFFFFF00FFFFFF00884B21C69A5C2DFFA46534FF9D5F 2FFF884B21E1FFFFFF00FFFFFF00FFFFFF00A66838C6C08B5DFFCF9F72FFC592 64FFA66837E1FFFFFF00FFFFFF00FFFFFF00874A20668C4F24F69E5F2FFF8F51 25F9884B208AFFFFFF00FFFFFF00FFFFFF00A4653466AC7040F6C69365FFB075 45F9A567368AFFFFFF00FFFFFF00FFFFFF00874A2008874A2082874A20F3884B 2096874A2010FFFFFF00FFFFFF00FFFFFF00A4653408A5663582A56635F3A667 3696A4653410FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00874A2002FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C5C5C575CCCCCC99BCBCBC3CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF007373733C72727286979797DAE8E8E8FFF1F1F1FFCFCFCFF77373 738C6C6C6C3CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF007373735C727272DCBABABAFFD8D8D8FFF4F4F4FFFDFDFDFFEAEAEAFFBCBC BCFF6B6B6BDC6A6A6A5CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00757575C6C4C4C4FFDFDFDFFFEBEBEBFFE8E8E8FFF6F6F6FFF0F0F0FFE9E9 E9FFABABABFF6C6C6CC6FFFFFF00FFFFFF00FFFFFF00FFFFFF00B0B0B001ADAD AD01A1A1A1F2EFEFEFFFF0F0F0FFE6E6E6FFEDEDEDFFEEEEEEFFF9F9F9FFDDDD DDFFDEDEDEFF898989F6FFFFFF00FFFFFF00B1B1B103AFAFAF22ACACAC3CA9A9 A942B0B0B0FECBCBCBFFEFEFEFFFEFEFEFFFEDEDEDFFEFEFEFFFEFEFEFFFEFEF EFFFA6A6A6FF898989FFFFFFFF00FFFFFF00AFAFAF2AACACACA6A8A8A8E6A4A4 A4F2A1A1A1FFB9B9B9FFC7C7C7FFBEBEBEFFBFBFBFFFBBBBBBFFC2C2C2FFBABA BAFFC6C6C6FF848484FFFFFFFF00AEAEAE0CABABABB6D7D7D7FFEEEEEEFFF3F3 F3FFE3E3E3FFB6B6B6FFA9A9A9FFCCCCCCFFCDCDCDFFCACACAFFC6C6C6FFB6B6 B6FFB6B6B6FF7E7E7EFFFFFFFF00AAAAAA52C1C1C1FFEFEFEFFFE5E5E5FFEBEB EBFFF1F1F1FFEEEEEEFFB6B6B6FFA9A9A9FFD8D8D8FFCBCBCBFFD0D0D0FF9D9D 9DFFB5B5B5FF797979FFFFFFFF00A5A5A5BBE2E2E2FFDCDCDCFFD8D8D8FFDDDD DDFFE5E5E5FFEFEFEFFFE9E9E9FF868686FFD7D7D7FFCDCDCDFFD3D3D3FF9797 97FFB4B4B4FF747474FFFFFFFF00A0A0A0D0E6E6E6FFBFBFBFFFD0D0D0FFD5D5 D5FFDADADAFFE5E5E5FFF5F5F5FF787878FFC6C6C6FFCDCDCDFFD3D3D3FF9191 91FFB1B1B1FF6F6F6FFFFFFFFF009A9A9AB2DBDBDBFFE8E8E8FFB7B7B7FFA9A9 A9FFCCCCCCFFDADADAFFF5F5F5FF717171FFBFBFBFFFCBCBCBFFD1D1D1FF8C8C 8CFFAFAFAFFF6B6B6BFFFFFFFF009494945AB5B5B5FFF4F4F4FFE5E5E5FFDBDB DBFFDADADAFFDADADAFFF0F0F0FF6E6E6EFFCFCFCFFFC9C9C9FFD0D0D0FF8F8F 8FFFB9B9B9FF666666FFFFFFFF00FFFFFF00888888ACB5B5B5FFF3F3F3FFE9E9 E9FFE3E3E3FFE4E4E4FFB6B6B6FF929292FFE5E5E5FFE4E4E4FFDEDEDEFFD4D4 D4FFA0A0A0FF626262E5FFFFFF00FFFFFF00828282017C7C7CAEA7A7A7FFDADA DAFFD8D8D8FFD3D3D3FF666666FE727272FF707070FF6C6C6CFF686868FF6565 65FA626262E05F5F5F13FFFFFF00FFFFFF00FFFFFF00FFFFFF007171715D6C6C 6CE2686868C9646464BC60606061FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000007AB9FF007AB9FF007A B9FF007AB9FF007AB9FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000007AB9FF9AEFFEFF9AEFFEFF9292 92FF97ECFEFF96ECFEFF0178B6FF000000000000000000000000000000000000 0000000000000000000000000000007AB9FF9DF2FEFF9DF2FEFF929292FFB6B6 B6FF0E0E0EFF99EEFEFF98EEFEFF0373ADFF0471AAFF056EA5FF066AA0FF0767 9BFF086597FF00000000000000000179B7FFC5F8FFFFC1F4FDFF929292FFC5F8 FFFF0E0E0EFFA7E0EEFFA0D9EBFF9BD5E7FF94CFE3FF8DCADFFF87C4DCFF81BF D9FF7ABAD5FF0B5D8AFF000000000277B4FFC3F6FDFF9CF3FEFF929292FFB6B6 B6FF0E0E0EFF92EBFDFF90E9FDFF8DE7FDFF8AE4FDFF88E2FDFF86E0FDFF83DE FDFF76B6D2FF0B5D8AFF000000000175B2FFBEF3FBFF9CF2FEFFB6B6B6FF0000 0000B6B6B6FF91E9FDFF8EE8FDFF8CE5FDFF89E3FDFF87E1FDFF84DEFDFF81DC FCFF72B3CFFF0B5D8AFF000000000374AFFFBAEFF9FF9AF1FEFF000000009292 92FF0000000090E8FDFF8DE6FEFF8BE3FDFF87E1FDFF85DFFDFF82DDFDFF7FDB FDFF6DAFCDFF0B5D8AFF000000000373ADFFB5ECF6FF98F0FEFFB6B6B6FF9292 92FFB6B6B6FF8EE7FDFF8BE4FEFF89E2FDFF85DFFDFF84DEFDFF80DBFDFF7ED9 FCFF69ABCBFF0B5D8AFF000000000471AAFFB1E7F4FF97EFFEFF000000009292 92FF000000008CE5FEFF8AE3FEFF87E1FDFF84DEFDFF81DCFDFF80DAFDFF7CD8 FDFF65A8C8FF0B5D8AFF00000000056FA7FFADE4F2FF95EDFDFFB6B6B6FF9292 92FFB6B6B6FF8AE4FDFF88E2FDFF85DFFDFF83DDFDFF80DBFDFF7DD9FDFF7BD6 FCFF60A4C6FF0B5D8AFF00000000056EA4FFA8E0EFFF94ECFDFF000000009292 92FF0000000089E2FDFF86E0FDFF84DEFCFF81DCFDFF7FD9FDFF7CD7FCFF79D5 FCFF5CA1C3FF0B5D8AFF00000000056CA1FFA4DDEDFF9ED7E8FF97D2E6FF90CD E1FF8AC8DEFF84C2DAFF7EBDD7FF77B8D3FF71B2D0FF6AADCCFF64A7C9FF5DA3 C4FF579DC1FF0B5D8AFF0000000000000000086597FF096496FF086495FF0963 94FF096292FF096291FF0A608FFF0B608FFF0A5E8DFF0B5E8BFF0C5E8AFF0C5C 8AFF0C5C88FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000774B3B86774A3AE1784938FC794A38FD774B3AE3764C3D8D000000000000 000000000000000000000000000000000000000000000000000077493821784C 3BE2C3ADA4FFF4EFEDFFFDFCFCFFFBF9F7FFEFE7E2FFBEA59AFF794E3EE9764D 3D26000000000000000000000000000000000000000000000000784D3CE6E0D5 D0FFFAF8F5D5F4EFE8AAF3EAE2A4EEE3D9A8EBDFD3B2EDE2D8D9D6C4B9FF7B51 41F00000000000000000000000000000000000000000764D3D8EC3ADA4FFFAF8 F5D6F7F3EFA0FAF7F49FF6F0EBA2F2E8DFA6EDE0D4AAE4D3C2A7E5D5C5D3B89C 8DFF775143A2000000000000000000000000000000007A5040EDF4EFEDFFF5EF E8ACFAF7F39FFDFCFA9DF7F1ECA1F2E7DFA4EBDDD0A4E4D2C1A5C49D788AE1D2 C5FF7F5546F600000000000000000000000000000000794A39FDFDFBFAFFF2E9 E0A5F8F3EEB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CCC1C1B988597BE9DB CEFF7A4B39FE716461020000000000000000000000007A4B3AFEFAF7F4FFEDE1 D6A7F1E7DEA7FFFFFFFFF5F0EBC9ECE6E0CCE2DAD2C8CDAE9191B682537DE7D6 C9FF7A4B39FE7164610B0000000000000000000000007E5445F4EDE5E0FFE8D9 CBADE8D7C89EFFFFFFFFE3D0C097E0CAB596D6B99D90BA895C7BBC8E608CDBC7 B5FF835848F9000000000000000000000000000000007A574ABABDA498FFECE0 D4D7D8BEA693FFFFFFFFD8BEA594CCA88787B9895B7AB27E4B80D9C1AAD6B191 7EFF836054D7000000000000000000000000000000007164610A805747F7D5C2 B7FFE4D3C3D3C59D778AFFFFFFFFB581527EBA8D5E8DD9C0A9D6C8AE9BFF8559 49FA7164611B000000000000000000000000000000000000000073584F4D8057 47F9B89B8CFFE0D0C2FFE8D9CCFFE5D6C7FFDAC6B5FFB2907EFF865A4AFB7C62 596A000000000000000000000000000000000000000000000000000000007164 6113836358DD835B4BFC98ACA6FF98ADA7FF98B1ABFF80685EF37164611F0000 0000000000000000000000000000000000000000000000000000000000000000 00004259590C3E5E5EFFC1EDEBFFCAF8F5FFABDFDDFF3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000425959073E5E5EFF5C8080FF84AAA8FF668B8AFF3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000003E5E5EFFBAE6E3FEC9F6F3FFB0D5D3FE3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000003E5E5E4C363939A5464646EC303030A93E5E5E4C000000000000 0000000000000000000000000000699A2FFF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FFFF0000FF412323FFD8E9ECFFD8E9ECFFD8E9ECFFD8E9 ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9 ECFFD8E9ECFFD8E9ECFF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF412323FF412323FF4123 23FF412323FFFFF8F1FFFFF8F1FF412323FFFFF8F1FF412323FF412323FF4123 23FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF0000FFFF0000FFFF0000 FFFF0000FFFFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFF0000FFFF0000FFFF00 00FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFF00FF00FF00FF00FF00 FF00FF00FF00FFF8F1FFFFF8F1FF412323FFFFF8F1FFFFFF00FFFFFF00FFFFFF 00FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF00FF00FF00FF00FF00FF 00FF00FF00FFFFF8F1FFFFF8F1FF412323FFFFF8F1FF00FFFFFF00FFFFFF00FF FFFFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FFFFFFFFFFFFFFFFFF412323FF4123 23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF000000008A8F8DFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8DFF0000000000000000858A88FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF4F5 F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFF5F6 F6FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF6F7F7FFF5F6F6FFF4F5 F5FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF6F7F7FFF5F6F6FFF4F5F5FFF3F4F4FFF3F3 F3FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FF007F 00FF007F00FF007F00FF007F00FF007F00FF007F00FF007F00FF007F00FFF1F2 F2FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF3F4 F4FFF3F4F4FFF2F3F3FFF1F2F2FFF0F1F1FFEFF0F0FFEEEFEFFFEDEEEEFFF0F0 F0FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF6F7F7FFF5F6 F6FFF4F5F5FFF3F4F4FFF2F3F3FFF2F2F2FFF1F1F1FFF0F0F0FFEFF0F0FFEEEF EFFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF4F5F5FF9999 99FF999999FF999999FF999999FF999999FF999999FF999999FF999999FFEDED EDFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF3F4F4FFEFF0 F0FFEEEFEFFFEDEEEEFFEDEDEDFFECECECFFEBEBEBFFEAEAEAFFE9E9E9FFEBEC ECFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFFFFFFFF888D8BFF00000000000000008A8F8DFF888D8BFF888D8BFF888D 8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D 8BFF888D8BFF8A8E8CFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C99B6433C99B6433C99B6433C698 6233C3955F33C0925C33FFFFFF00FFFFFF00B3855033AE804C33A97B4733A376 42339E703D33986B3833FFFFFF00C99B6433C99B64FFD3AE82FFD0AC80FFCEA9 7DFFCBA67BFFC6A074FFB789532DB2844F2DBB956AFFB8946AFFB49066FFAF8B 62FFAB875EFF926432FF996C3933C69963FFC89A63FFFAFAFAFFFAFAFAFFFAFA FAFFF8F8F8FFD9C6B1FFB1834EE6AC7E4AE6D7C4AFFFF9F9F9FFF9F9F9FFF9F9 F9FFF9F9F9FF8B5D2CFF976938FFC69963FFC59760FFFAFAFAFFCDCDCDFFCACA CAFFC6C6C6FFF2F2F2FFDDD8D2FFEBE5DFFFFCFCFCFFCCCCCCFFC9C9C9FFBDBD BDFFF9F9F9FF845726FF916333FFC69963FFC1935CFFFAFAFAFFF2F2F2FFEFEF EFFFEAEAEAFFD5D5D5FFB5B5B5FFDFDFDFFFF5F5F5FFF1F1F1FFECECECFFDEDE DEFFF9F9F9FF7D5020FF8A5E2DFFC69862FFBC8E58FFFAFAFAFFCCCCCCFFCACA CAFFC5C5C5FFD4D4D4FFA7A7A7FFD8D8D8FFF5F5F5FFCBCBCBFFC7C7C7FFBBBB BBFFF8F8F8FF774A1AFF845828FFC29560FFB78953FFFAFAFAFFF1F1F1FFEDED EDFFE9E9E9FFD4D4D4FFA6A6A6FFD8D8D8FFF5F5F5FFEFEFEFFFEBEBEBFFDCDC DCFFF8F8F8FF714415FF7F5323FFBE915CFFB1834EFFF9F9F9FFCCCCCCFFC9C9 C9FFC5C5C5FFD3D3D3FFA6A6A6FFD8D8D8FFF4F4F4FFCACACAFFC6C6C6FFBABA BAFFF8F8F8FF6B3E10FF7A4D1EFFBA8D58FFAB7D49FFF9F9F9FFF1F1F1FFEDED EDFFE7E7E7FFD3D3D3FFA5A5A5FFD7D7D7FFF4F4F4FFEEEEEEFFEAEAEAFFDCDC DCFFF8F8F8FF66390BFF74481AFFB68854FFA57743FFF9F9F9FFF9F9F9FFF9F9 F9FFF8F8F8FFF1F1F1FFE3E3E3FFF3F3F3FFF8F8F8FFF9F9F9FFF8F8F8FFE9E9 E9FFF8F8F8FF623507FF704416FFB0834FFF9E703DFF986B38FF936533FF8D60 2EFF875A29FF825424FFAB9074FFAA8F73FF724516FF6D4011FF693C0DFF6538 0AFF613406FF5E3103FF6C3F12FFAB7E4AFFB38B5DFFB38B5DFFB38B5DFFB38B 5DFFB38B5DFFB38B5DFF7D5121FF794C1DFFB38B5DFFB38B5DFFB38B5DFFB38B 5DFFB38B5DFFB38B5DFF683C0EFFA37642FF9E703DFF986B38FF936533FF8D60 2EFF875A29FF825424FF936839FF906536FF724516FF6D4011FF693C0DFF6538 0AFF613406FF5E3103FF5B2E01FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF008254249F764919E1714415E1825424BAFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CFCFCF48648BC2FF4978BEFF2861 BAFF000000360000003600000036000000360000003600000036000000360000 0036000000360000003600000020CFCFCF2ECCCCCCF4C4C7CAFFC1C7CDFF275F B8FFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFF0000003678787806B1B1B1606787B9FF679AC5FF275E B8FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF5F5F5FFF4F4F4FFF4F4F4FFF4F4 F4FFF2F2F2FFFBFBFBFF00000036CFCFCF2ECCCCCCF4C4C7CAFFC0C7CDFF265B B7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF5F5F5FFF5F5F5FFF5F5 F5FFF3F3F3FFFAFAFAFF0000003678787806B1B1B1606783B7FF6699C4FF2659 B7FFF8F8F8FFF8F8F8FFE1A57AFFE1A378FFE1A377FFE0A276FFE0A076FFE0A0 74FFF4F4F4FFFAFAFAFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C7CDFF2656 B5FFF9F9F9FFF9F9F9FFE1A378FFEAC0A3FFEAC0A2FFEABFA1FFEABEA0FFDF9E 71FFF4F4F4FFF7F7F7FF0000003678787806B1B1B1606682B5FF6596C3FF2555 B4FFFAFAFAFFFAFAFAFFE0A276FFE0A076FFE0A074FFDF9E73FFDC9C72FFDC9B 6FFFF2F2F2FFF6F6F6FD00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C7CDFF2552 B2FFFBFBFBFFFAFAFAFFF8F8F8FFF8F8F8FFF8F8F8FFF7F7F7FFF3F3F3FFF2F2 F2FFF0F0F0FFEEEEEEF40000003378787806B1B1B160657FB5FF6494C2FF2451 B2FFFAFAFAFFF8F8F8FFE09F73FFDD9D71FFDC9A6EFFDA996BFFD9986AFFD493 6AFFEAEAEAFFECECECFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CDFF234E B1FFFAFAFAFFF9F9F9FFF8F8F8FFF7F7F7FFF6F6F6FFFAFAFAFFFAFAFAFFFAFA FAFFF2F2F2FFD1D1D1FF0303033878787806B1B1B160647CB3FF6392C1FF234B AFFFF9F9F9FFF9F9F9FFF9F9F9FFF6F6F6FFF3F3F3FFFAFAFAFFFAFAFAFFF2F2 F2FFC9C9C9FFE8E8E8FF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CCFF2249 AEFFFAFAFAFFFAFAFAFFF8F8F8FFF4F4F4FFF1F1F1FFFBFBFBFFF2F2F2FFCACA CAFFE6E6E6FFFCFCFCFF0000003678787806B1B1B1606379B3FF618FBFFF2246 AEFFFAFAFAFFFAFAFAFFF6F6F6FFF3F3F3FFEEEEEEFFF3F3F3FFCACACAFFE6E6 E6FFFBFBFBFFFCFCFCFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CCFF2143 ACFFFDFDFDFFFBFBFBFFF8F8F8FFF4F4F4FFEDEDEDFFD5D5D5FFE9E9E9FFFFFF FF00FFFFFF00FFFFFF000000003678787806747474212C4BA5FF355DAFFF2142 ABFFDCDCDCFFD8D8D8FFD4D4D4FFD2D2D2FFD1D1D1FFD3D3D3FFD1D1D1FFCBCB CBFFCDCDCDFFC7C7C7FF00000036FFFFFF00FFFFFF001225603F18317E811326 6364000000360000003600000036000000360000003600000036000000360000 0036000000360000003600000020FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00AAA39E99C3BFBBFAC8C4BFFFC8C2BEFFC5C0 BAFFC1BAB5FFBDB6B1FFB9B2ABFFB5ACA5FFB0A79FFFABA098FFA69B92FFA195 8BFF9C8F85FF94877CFA7E736B6EC3BFBBFE4A4FD3FF17ADE2FF3EB042FFE1DB D6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DB D6FFE1DCD7FFEDEAE7FF8B7B6E93C9C3BFFFB8BBF1FF94E4F6FFB2E5B4FFEDE9 E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9 E6FFEDE9E6FFF5F4F2FF86776994C5C0BAFF313131FF323232FF333333FF3434 34FF353535FF363636FF373737FF393939FF3B3B3BFF3C3C3CFF3D3D3DFF3F3F 3FFF414141FF434343FF7F706494C3BEB9FF343434FF202020FF212121FF2222 22FF242424FF252525FF262626FF282828FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F 2FFF313131FF464646FF8F7F7394C1BAB5FF343434FF202020FFCFCFCFFFA8A8 A8FF242424FF252525FF262626FF282828FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F 2FFF313131FF464646FF8B7B6E94BEB7B2FF393939FF252525FF262626FFDEDE DEFF747474FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F2FFF313131FF323232FF3434 34FF353535FF4B4B4BFF85766894BAB2ACFF3D3D3DFF292929FFD1D1D1FFADAD ADFF2E2E2EFF2F2F2FFF313131FF323232FF343434FF363636FF373737FF3838 38FF3A3A3AFF4E4E4EFF7E6F6394B6AEA7FF424242FF2F2F2FFF303030FF3131 31FF333333FF343434FF363636FF363636FF383838FF3A3A3AFF3B3B3BFF3D3D 3DFF3D3D3DFF525252FF786B5F94B2A9A1FF474747FF333333FF343434FF3636 36FF373737FF393939FF3A3A3AFF3B3B3BFF3C3C3CFF3E3E3EFF3F3F3FFF4040 40FF414141FF555555FF73665B94AEA49CFF4B4B4BFF383838FF393939FF3A3A 3AFF3C3C3CFF3D3D3DFF3F3F3FFF3F3F3FFF414141FF424242FF424242FF4444 44FF454545FF575757FF6E615694A99F96FF4E4E4EFF3D3D3DFF3D3D3DFF3E3E 3EFF3F3F3FFF414141FF424242FF434343FF444444FF454545FF464646FF4646 46FF484848FF5A5A5AFF695D53949D938AF2525252FF535353FF545454FF5555 55FF565656FF575757FF575757FF585858FF595959FF5A5A5AFF5B5B5BFF5C5C 5CFF5C5C5CFF5D5D5DFF61564C8C82786F6F91857CD293857CDF8F8276DF8C7E 72DF88796DDF847569DF7F7065DF7A6D61DF76695DDF71645ADF6E6156DF695D 53DF665A51DF61554CD2554C4440FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001C000000330000 0036000000360000003600000036000000360000003600000036000000360000 002000000002FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000033F8F8F8F0FBFB FBFDFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF8F8F8FF9494 94910000002000000002FFFFFF00FFFFFF00FFFFFF0000000036FBFBFBFDF4F4 F4FFF5F5F5FFF5F5F5FFF5F5F5FFF1F1F1FFEFEFEFFFE9E9E9FFFCFCFCFFE7E7 E7FF959595910000002000000002FFFFFF000000000100000036FCFCFCFFF7F7 F7FFF9F9F9FFF7F7F7FFF7F7F7FFF3F3F3FFF0F0F0FFEAEAEAFFFCFCFCFFF6F6 F6FFF4F4F4FF9999999100000020FFFFFF000000000100000036EFF0FBFFF9F9 F9FFF9F9F9FFF9F9F9FFF7F7F7FFF6F6F6FFF2F2F2FFEBEBEBFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFF00000036FFFFFF0000000001070A3642646AF3FF5253 F2FFFCFCFCFF5A57F4FF6568F4FFEBECF7FFF5F5F5FFF1F1F1FFECECECFFEAEA EAFFE6E6E6FFFCFCFCFF00000036FFFFFF001B2DE013343EE3D26366F2FF565F F2FFFCFCFCFF5A5BF4FF6868F3FF636BF3FFE8EAF7FFF5F5F5FFF2F2F2FFEFEF EFFFEDEDEDFFFCFCFCFF000000361B2FEC584A4DF2F76265F1FF5562F2FFE3E7 FAFFFCFCFCFFE4E6FAFF575CF2FF6265F1FF4D53F1FFA9B5F2FFF6F6F6FFF3F3 F3FFF2F2F2FFFCFCFCFF00000036464AF1F16B70F3FF474EEEFCCDD5F7FFFCFC FCFFFCFCFCFFFCFCFCFFCED4F8FF4A51EFFF676EF0FF4A59EFFFF3F5F8FFF6F6 F6FFF6F6F6FFFCFCFCFF000000361334E7584450F0F75B65F0FF5065EDFFE2E8 F9FFFCFCFCFFE3E7FAFF5362EFFF5B65F0FF4755EDFFA8B9F2FFF9F9F9FFF9F9 F9FFF8F8F8FFFCFCFCFF00000036FFFFFF000C36D6132847DAD25565EEFF4E6A EBFFFCFCFCFF5264EFFF5964EFFF5972ECFFEAEEF9FFFAFAFAFFFAFAFAFFF8F8 F8FFF8F8F8FFFCFCFCFF00000036FFFFFF0000000001020E32425773EAFF4662 EAFFFCFCFCFF495CEDFF5972ECFFEDF0F9FFFAFAFAFFFAFAFAFFFAFAFAFFFAFA FAFFFAFAFAFFFCFCFCFF00000036FFFFFF000000000100000036FCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFCFCFCFF00000036FFFFFF000000000100000036FCFCFCFEFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFD00000036FFFFFF00FFFFFF0000000034F9F9F9F5FCFC FCFDFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFDF9F9F9F300000033FFFFFF00FFFFFF000000001D000000340000 0036000000360000003600000036000000360000003600000036000000360000 003600000036000000330000001DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D967D4D4D4F6CFCF CFEFC8C8C8E5C0C0C0D8B7B7B7C3AEAEAE93A4A4A47D9B9B9B6E919191498787 8704FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D0D0D0F8C9C9C9F8C2C2 C267FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C4C4C4FDBCBCBCB4B3B3 B310FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FCDEC1E3FCDEC1FFBBB9B6FFB3B1AEFFFADB BEFFF8D8BBFFF6D5B7FFF3D2B3FFF0CEAEFFEDC9AAFFEAC5A4FFE7C09FFFE3BC 9AFFE0B795FFDDB28FFFD9AE8AE3FCDEC1FFEFE2D8FFEFE2D8FFEFE2D8FFEEE1 D7FFEEE0D6FFEEDFD4FFEDDDD2FFECDCD1FFEBDACEFFEAD8CCFFEAD7CAFFE8D5 C7FFE7D3C5FFE7D1C2FFD5A883FFFCDEC1FFEFE2D8FFFCFCFCFFE4CCBCFFFCFC FCFFE1C9B7FFFCFCFCFFDFC3B0FFFCFCFCFFDCBEA9FFFCFCFCFFD9B8A1FFFCFC FCFFF7F3F0FFE5CEBEFFD1A27DFFFADCBFFFEEE0D6FFE3CBBAFFE2C9B8FFE0C6 B4FFDFC4B1FFDEC2ADFFDCBFAAFFDABCA6FFD9B9A2FFD7B69EFFD6B39AFFE9D6 CAFFFCFCFCFFE3CBBAFFCE9D77FFF8D8BBFFEDDED4FFFCFCFCFFFCFCFCFFDEC2 AEFFFCFCFCFFDBBCA6FFFCFCFCFFD8B69EFFFCFCFCFFD5B097FFFCFCFCFFFCFC FCFFFCFCFCFFE1C8B6FFCA9972FFF5D4B6FFECDCD0FFDEC3AFFFDDBFABFFDBBD A7FFD9BAA3FFD8B79FFFD6B49CFFD5B197FFD3AE94FFD1AB8FFFD0A88CFFCFA6 88FFCDA385FFE0C5B3FFC7956EFFF2D0B1FFEAD8CCFFFCFCFCFFDABAA4FFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFCCA1 82FFFCFCFCFFDFC3B0FFC5926AFFEECBABFFE8D5C8FFE8D4C5FFE7D2C3FFE5D0 C1FFE5CEBEFFE3CCBCFFE3CAB9FFE2C9B7FFE1C7B5FFE0C5B3FFDFC4B1FFDFC4 B0FFDEC2AFFFDEC2AEFFC49068FFEAC5A4EBE7C09FFFE3BC9AFFE0B795FFDDB2 8FFFD9AE8AFFD6A985FFD3A57FFFD0A07BFFCD9C76FFCA9972FFC8966EFFC693 6BFFC49069FFC49068FFC49068EBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000000000000000ACAC AC1DACACAC8FA4A4A4E7A3A3A3F3A3A3A3F2AEB0AF8A00000000000000000000 000000000000AFB1B04CA5A6A6B200000000000000000000000000000000ACAC AC4AA3A4A3ECAFB1B0C100000000AEB0AF519F9F9FD4A4A4A4E8A4A5A4E4AEB0 AF4F00000000AFB1B0D3AFB1B081000000000000000000000000000000008383 8394909191F0818181E5818181A1000000000000000000000000ACACAC1FA6A7 A7D2A6A7A6C8ADAFAEA0000000008083847F828586FF838886FF858A88FF8181 81FFBDBDBDFFA1A4A3FF828382FF858A88FF818685FF7F8283EF818485A40000 0000000000000000000000000000848788FFEDEDEDFEF0F0F0FFFAFAFAFF8383 83FFBABABAFFAAAAAAFF838383FFFAFAFAFFECECECFFD8D9DAFE848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFFAFAFAFF8383 83FFA0A0A0FFA3A3A3FF838383FFFAFAFAFFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFFAFAFAFFFAFA FAFF878787FF878787FFFAFAFAFFFAFAFAFFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFE5E5E5FFFAFA FAFFFAFAFAFFFAFAFAFFFAFAFAFFE5E5E5FFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFD3D3D2FFD3D3 D2FFE0E0DFFFFCFCFCFFD3D3D2FFD3D3D2FFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFDAD9DAFFE6E5E6FFE6E5E6FFE6E5 E6FFE1E1E1FFE6E5E6FFE6E5E6FFE6E5E6FFE6E5E6FFDAD9DAFF848788FF0000 0000000000000000000000000000848788FFE5E5E6FFD1D0D1FFD1D1D1FFD2D1 D2FFD0D0D1FFCECECEFFCCCDCCFFC9CACAFFC7C8C7FFDFDFDFFF848788FF0000 0000000000000000000000000000848788CCE4E4E4FFCECFCEFFCECFCFFFCECE CFFFCDCECEFFCCCCCCFFCACACAFFC8C8C8FFC5C6C6FFDFDFDFFF848788CC0000 0000000000000000000000000000848788A3E1E1E1FFD1D1D1FFCCCBCBFFCBCB CCFFCACACBFFC9CACAFFC8C8C7FFC6C6C6FFCCCBCCFFDFDFDFFF8487889B0000 000000000000000000000000000084878864B9BABAFFDDDDDDFFD4D4D4FFCDCD CDFFC8C8C8FFC7C7C7FFC5C5C5FFD1D1D1FFDBDBDBFFB4B5B5FF848788770000 00000000000000000000000000008487880E8A8D8EC3C0C1C1FFE1E1E1FFE0E0 E0FFE0E0DFFFDFDFDFFFDFDFDFFFDEDEDEFFBDBFBFFF9A9D9DFF848788160000 0000000000000000000000000000848788098487882184878895848788C78487 88FF848788FF848788FF848788FF848788FF848788E08487881B848788070000 0000000000000000000000000000FFFFFF00C17D4460C88B4DBBC88C4FEEC88C 4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B368 3C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F4 EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB94 65F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE1 C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8B4FFE1B0 7DFFDB9264F6B46B3E07FFFFFF00FFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3 CEFFFBE3CDFFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6CDFFFAE5 C9FFE2B684FFBF7942A6FFFFFF00FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFBE4 D0FFFCE4CFFFFCE3CDFFFAE1CAFFF9DDC4FFF6D9BCFFF4E9DFFFF7F2ECFFFBF7 F3FFF5EFE9FFC27E45FBFFFFFF00FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFCE6 D4FFFDE7D3FFFCE4D1FFFBE3CDFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4B5FFF1D2 B3FFF8F4F0FFC48246F7FFFFFF00FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7 D6FFFDE7D5FFFDE6D4FFFCE6D2FFFBE1CCFFFADFC7FFF8DCC2FFF6DABDFFF6D8 BBFFFAF4EFFFC68346F7FFFFFF00FFFFFF00C68849F7F9F4EDFFFEE8D8FFFEE8 D8FFFEE8D7FFFEE7D6FFFDE5D3FFFCE4D1FFFBE1CCFF46A872FF319F65FFF8DC C2FFFAF4EDFFC68245F7FFFFFF00FFFFFF00C68447F7F9F3ECFFFEE8D6FFFEE8 D7FFFDE7D6FFFDE7D6FFFDE7D5FFFDE5D3FFFBE4D0FF41A46BFF5AB381FF2898 57FFFAF2EAFFC68042F7FFFFFF00FFFFFF00C58245F7F8F2EBFFFEE7D6FFFDE7 D6FFFDE7D6FF3DA56FFF3AA46FFF36A269FF329E63FF55AF7CFF91CBAAFF4FAB 74FF1B9148FFC47C3FF7FFFFFF00FFFFFF00C58042F7F8F1E8FFFEE5D5FFFDE5 D3FFFDE5D3FF37A36BFF96CEB0FF94CDADFF91CBAAFF90CBA8FF74BC90FF8AC7 A1FF46A568FF0A8735FF01832D01FFFFFF00C47C40F7F7F0E6FFF8B455FFF7B4 56FFF7B554FF319F63FF94CDADFF6FBA8EFF6BB889FF66B685FF61B380FF67B5 82FF83C298FF3CA05CFF007F25F9FFFFFF00C1783CF7F7EDE3FFFDC26EFFFFD8 A0FFFFD79EFF299B5BFF90CAA9FF8DC8A5FF8AC6A1FF88C59EFF6AB685FF82C2 97FF48A566FF1D7A23FE00791B09FFFFFF00BF7138F5F5EBDFFEFDBF68FFFCBD 67FFFBBE65FF239751FF1D9149FF178F43FF118B3BFF3A9F5EFF80C196FF46A3 62FF2E9446FFB4652CF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7ECDFFDF6EB DEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFF158C3AFF43A15FFF3294 4AFFF8FBF8F0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB6631EDBA66 30F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF70E7B22FE037B1EFFB664 2EEFB7622CBDB7622E63FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00BB89626BE4C2A5F4E3BA95FFD8AF88FFD6AB 86FFD4A981FFCFAD90F4B8845FA9E2BD9FF4E1B48DFFE1B28AFFD1A27CFFCE9F 77FFC9A284F4AF78566BFFFFFF00E4BE9FFDEDC8A9FFEDC7A8FFEDC7A8FFECC6 A7FFECC5A5FFECC4A4FFE2B897FFEBC3A1FFEBC19FFFEAC09DFFEABF9CFFEABE 9AFFE9BD98FFC39473FDFFFFFF00E3B995FFE3B994FFE3B893FFE2B791FFE2B6 90FFE2B58EFFE1B38CFFE0B28AFFE0B189FFDFAF87FFDFAE85FFDEAC82FFDDAB 80FFDDA97EFFC08C67FFFFFFFF00E2B692FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDFAD86FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBB8461FFFFFFFF00E0B48FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDCAA82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB67F5BFFFFFFFF00DEB18CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDAA67EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB17756FFFFFFFF00DBAD86FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFD6A178FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFAD7052FFFFFFFF00D9A982FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFD39D73FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA86B4EFFFFFFFF00D5A47CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCF986EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4674AFFFFFFFF00CF9D75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC89067FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9D6045FFFFFFFF00CB9771FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC58963FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF995D43FFFFFFFF00C8916BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC1845EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF975A40FFFFFFFF00A66D4EA9C08862FFBC835FFFA66C4FFFA269 4BFF9F6549FF9D6246FF9C6045E2B97C57FFB57654FFB27251FF9A5E43FF975B 42FF975940FF975940A9FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000A971516BDDB18DF4DCA77BFFDCA67AFFDAA4 7AFFD8A279FFD5A076FFD49E75FFD29D73FFCF9A72FFCE9970FFCB966FFFC994 6CFFC49A7AF4A971516B00000000DDAC85FDE8B992FFE8B992FFE8B992FFE8B9 92FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B9 92FFE8B992FFC1906FFD00000000DCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA7 7BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA7 7BFFDCA77BFFC08B66FF00000000DBA47AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBD8763FF00000000D9A379FFFFFFFFFFCCCCCCFFCACACAFFC6C6 C6FFFEFAF7FFBDBDBDFFBBBBBBFFB7B7B7FFFEFAF7FFB1B1B1FFB0B0B0FFADAD ADFFFFFFFFFFBA8560FF00000000D8A279FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB7815EFF00000000D5A076FFFFFFFFFFC8C8C8FFC6C6C6FFC0C0 C0FFFEFAF7FFBABABAFFB8B8B8FFB2B2B2FFFEFAF7FFA9A9A9FFA7A7A7FFA5A5 A5FFFFFFFFFFB57E5CFF00000000D49E75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFD4EAF6FF808691FF309ED33ED19C73FFFFFFFFFFC2C2C2FFC0C0C0FFB9B9 B9FFFEFAF7FFB5B5B5FFB3B3B3FFABABABFFFEFAF7FFA2A2A2FF9E9E9EFF7FA2 ADFF8AC1E7FFCBE3F8FF64A3D4EACC976FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAEDF8FF9AE2 F4FF7BCEEFFF86BAE5FF75ABD9BDCA946EFFFFFFFFFFBEBEBEFFBABABAFFB2B2 B2FFFEFAF7FFB2B2B2FFAEAEAEFFA5A5A5FFFEFAF7FF7DA0ABFF9AE2F4FF6EE1 F7FF6FDAF4FF5F90BAFF00000000C8926CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8E1EDFF97D6E9FF6EE1F7FF6FDA F4FF74B4E5FFA97251FF00000000A97151A9C38E68FFC08B66FFBE8864FFBB85 61FFB9835FFFB47E5CFFB27C5AFF877668FF9CC7E2FF4BA7CDFF62C9E6FF5D8D B5FFA97151FFA97151A900000000000000000000000000000000000000000000 0000000000000000000000000000185876808CBEECFF5296D6FF256FB1BF0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000134058401D567D80327EB66B000000000000 000000000000000000000000000000000000D8D8D847D6D6D6B3D1D1D1BFCBCB CBBFC5C5C5BFBEBEBEBFB6B6B6BFAFAFAFBFA5A5A5B3A0A0A047000000000000 0000000000000000000000000000D6D6D618DEDEDEAFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FFE3E3E3FFDDDDDDFFADADADB08E8E8E180000 0000000000000000000000000000D6D6D64FE1E1E1EFE0E0E0FFDCDCDCFFD8D8 D8FFD5D5D5FFD4D4D4FFD5D5D5FFCCCCCCFFD9D9D9FFBCBCBCEE8E8E8E500000 0000000000000000000000000000D7D7D7B6E6E6E6FFE2E2E2FFDEDEDEFFDBDB DBFFDADADAFFD8D8D8FFD8D8D8FFD9D9D9FFDDDDDDFFD2D2D2FF909090B60000 0000000000000000000000000000CECECEDAD2D2D2FFC2C2C2FFB4B4B4FFB2B2 B2FFB0B0B0FFAEAEAEFFACACACFFA9A9A9FFB0B0B0FFBBBBBBFF948D87FFE8B9 92FFE8B992FFE8B992FFC1906FFDC6C6C6FFCECECEFFBDBDBDFF909090FF9191 91FF929292FF919191FF909090FF8E8E8EFFABABABFFBCBCBCFF808080FFDCA7 7BFFDCA77BFFDCA77BFFC08B66FFBFBFBFFFC9C9C9FFBABABAFFACACACFFAAAA AAFFA9A9A9FFA6A6A6FFA4A4A4FFA2A2A2FFA8A8A8FFB8B8B8FF7A7A7AFFFFFF FFFFFFFFFFFFFFFFFFFFBD8763FFB8B8B8F1CECECEFFC3C3C3FFBFBFBFFFBCBC BCFFB9B9B9FFB6B6B6FFB3B3B3FFB1B1B1FFAFAFAFFFB7B7B7FF797979FFB9B9 B9FFB9B9B9FFFFFFFFFFBA8560FFA4A4A4649D9D9D80959595808B8B8B80AD92 7EFFBDBDBDFFB8B8B8FFB5B5B5FFB2B2B2FFAFAFAFFFADADADFFBDBDBDFFFDFD FDFFFDFDFDFFFFFFFFFFB7815EFF00000000000000000000000000000000D5A0 76FFFFFFFFFFC1C1C1FFBEBEBEFFBABABAFFB7B7B7FFB5B5B5FFB2B2B2FFAEAE AEFFADADADFFFFFFFFFFB57E5CFF00000000000000000000000000000000D49E 75FFFFFFFFFFFFFFFFFFFEFEFEFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFDFD FDFFFCFCFCFFFFFFFFFFB27C5AFF00000000000000000000000000000000D19C 73FFFFFFFFFFB9B9B9FFB5B5B5FFB1B1B1FFADADADFFA9A9A9FFA6A6A6FFA2A2 A2FFA1A1A1FFFFFFFFFFB07A58FF00000000000000000000000000000000CC97 6FFFFFFFFFFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFFFFFFFFAC7554FF00000000000000000000000000000000CA94 6EFFFFFFFFFFB2B2B2FFADADADFFA8A8A8FFA4A4A4FF9F9F9FFF9D9D9DFF9999 99FF999999FFFFFFFFFFAA7353FF00000000000000000000000000000000C892 6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFA97251FF00000000000000000000000000000000A971 51A9C38E68FFBB8561FFB9835FFFB47E5CFFB27C5AFFB17B58FFAE7957FFAB75 54FFA97353FFA97151FFA97151A90000000000000000888D8B48888D8BEC9095 93D500000000000000000000000000000000888D8B978C918FEE000000000000 0000000000000000000000A0C45D00000000000000008B908EF6F7F7F7FD888D 8BB79297957D00000000000000008D9190E6D0D3D2FE8C918FBF000000000000 00000000000000A0C43D00A0C4FA0000000000000000888D8BFED0D4D2FFEFF0 EFFD8F9492AC00000000878C8A3FA7ACAAFFC3C8C6FF8A8F8DF7000000000000 000000A0C42403A2C5F203A1C5FF00000000000000008A8F8DF3B0B5B3FFF6F7 F7FE888D8BD79297957D8B908EFAC9CECCFFABAFAEFD888D8BD40000000000A0 C41103A3C6E375DAEBFE10A6C8FC0000000000000000878C8A39888D8BFFD9DC DBFFEFF0EFFE8A8F8DE5B3B8B6FFCBCECDFF888D8BFD888D8B7D00A0C40503A3 C6C857CEE3FABCF6FDFF10A6C8FC0000000000000000000000008A8F8DE1B2B6 B5FFF7F7F7FF9B9F9EFFB3B6B5FFB5BAB8FD888D8BB20000000003A3C6A53ABE D9F7ADF4FDFFB1F5FDFF0FA5C7FC000000000000000000000000888D8B33888D 8BFEDFE1E1FF979C9AFFA5A9A8FF888D8BF7888D8B3302A2C57B22B3D0F5A7F1 FBFF62E8F9FFA4F1FBFF0EA5C7FC000000000000000000000000000000008A8F 8DA1B7BBBAFDA7ACAAFF8B908EFE878C8A9700A0C45310A8CAF69BEBF7FF6BE6 F7FF44DFF4FF9CEEF9FF0DA4C7FC0000000000000000000000001818AE8D1717 AAF70606A6FF0202A6FF191AC7FF1719ACF50F57B8FB88E3F2FF74E5F6FF37D2 EAFF3FDAF1FF94EAF7FF0CA4C7FC000000001919AE7D0707A9FD2020D2FD1E1E CEFE0E0FB7FD0204A7FE1A1AC9FF1F21D0FF1F20CBFF0A0BA9FF2C8ED4FF08A7 CAFF3AD6EDFF8BE6F4FF0BA3C7FC1A1AAF5C0606A8FE1F1FD0FB0303A8B81415 C0F80101A6FF004FB01A1B1ECCFF1419C0FF2742BDFF1D20CDFF0606A7FF0C5E B9FF34D0E8FF84E2F2FF0AA3C6FC1414ABE62323D5FD0303A87A000000001D1D CEF50A0AA9FC02A2C6BF0304A8FF1F25CCFF3CD1E8FF095CBCFB1F20D0FE1221 ADFF2FCBE5FF7ADEEEFF09A2C6FC0D0DABF91D1DCFFA000000000B0BB5902121 D3FD0A1BACEE26B3D0F62134B8FF2324D6FF1052C3FF00A0C4FF1E21D0FF1013 ABFF29C5E1FF70D9EBFF08A2C6FC1313ABDF2727DBFD1F1FD0F91D1DCEFD060D A9F1158CC4F87ADCECFF3BAADBFF0A18AEFF2223D4FF1D20CFFF1D1ECEFF1421 AFFF25C3DEFF66D4E8FF08A2C6FC1A1AAF5C0E0EAAE71010ABF41517ABF90B86 C2F86BD4E8FF77DAECFF6DD7EAFF4D91D3FF223BB8FF1118AEFF1421AFFF52AC DAFF5DD0E5FF62D1E5FF07A2C6FC000000000000000000A0C42D00A0C4F404A1 C5FC0EA5C8F60DA5C8F60CA4C8F60CA4C8F60BA4C8F60BA4C8F60BA4C8F60AA4 C7F60AA4C7F609A3C7F601A0C4FF4398D2EF3D94D0FF3A92CFFF3A92CFFF3D94 D0FF4197D1E44398D22B4498D2324498D2334498D2334498D2334499D2334499 D3370000000000000000000000003D94D0FFDCFCFFFFD8F7FFFFD8F7FFFFDBFA FFFF358ECDFF3991CEFF3A92CFFF3A92CFFF3A92CFFF3A92CFFF3A92CFFF3D94 D0FF4298D2EA00000000000000003B92CFFFD5F7FFFF60D1F9FF61D0F8FFB4EB FDFFD9F6FFFFDAF8FFFFDAF8FFFFDAF9FFFFDBF9FFFFDAF9FFFFDAFAFFFFDFFE FFFF3D94D0FF4599D335000000003B92CFFFCAF6FFFF69D5F9FF6CD5F9FF6AD4 F9FF69D4F9FF69D5F9FF6AD6FAFF6BD8FBFF6BD9FCFF6BDAFDFF69DAFDFFDAFD FFFF3C93D0FF367BAA2F000000003C92CFFFC0F3FFFF70D9FBFF73DAFBFF74DA FBFF74DAFBFF74DBFBFF76DEFDFF4FA9DCFF368BCAFF358BCBFF348BCBFF338C CCFF3790CEFF3D94D0FF4398D2AE3D92CFFFB8F3FFFF77DFFEFF7BE0FEFF7CE1 FEFF7CE1FFFF7DE2FFFF52ABDDFF56B9E8FFDAF8FFFFD8F7FFFFCCF1FFFFD6F7 FFFFD6F7FFFFDBFCFFFF3E94D0FF3E93CFFFB2F6FFFF51ACDEFF358ACAFF358A CAFF358ACAFF368ACAFF5BBDE9FF6ED9FBFF6BD7FAFF67D2F9FF2E9BEAFF64D2 F9FF83DFFCFFAAE1F6FF3A8AC1C84095D0FF90DDF8FF44A0D8FFDDFCFFFFDAFA FFFFDBF9FFFFDEFAFFFF74DCFCFF77DCFBFF78DDFBFF4EB8F1FF92E9FEFF48B4 F0FFA3EBFFFF7DC0E6FF3275A3704296D1FF8DA49CFF869D98FFD7B78AFF8BB1 A6FF90B2A5FF7ADFFDFF7FE2FDFF82E4FEFF70D5F9FF6AC2F2FFEEFFFFFF68C2 F3FF8EDCFBFF4D9CD2FF000000126F878BFFD9B98DFFD8B88FFFC99240FFD8B8 8FFFDBBA8EFF9AB8A8FF54BAF2FF329BE9FF2D99E9FFB7EEFEFFABEDFDFFB7EE FEFF2D9BEAFF329CEAFD38A1ED996A7F80FFC59555FFCB964FFF9A9A79FFCC97 4EFFCE9A56FF9BAA8CFF5AC1F5FFAFE8FCFFBFF4FFFF86E2FAFF5FD7FAFF85E3 FBFFC9F8FFFFB0E8FBFF3B9FE2BBDDB680FFE4B874FF787C71FF3E92CFFF707C 7EFFBAA786FFB5A389FF3F8ECFFF399CE1FF54C5F5FF7EDEFAFF5CD4F8FF7EDE FAFF4CC0F3FF2E8BD0B500000024714E259FCF974AFFDFBF92FFA17D51B5679D C4FF32C0FFFE3BC1FFFF3A86BFD028628D6A71CAF6FF76DAF8FF54CBF5FF7BDC F8FF69C8F3FF0000002000000000B079366FE4BD85FFD7A45DFFFFD78CFF15A6 FCFEA1A79FFF778683DC49B9EFFF47A3E59777D5F8FF3EAAEDFF318BCFAD3EAA EDFF7CD6F7FF39A0EB9700000000000000008A5F2C8F97683381EEB15EFF638B A5FF42C1F9FF45BAEDFF3C8BC8C44AA9EDFF389DE7F0173E5A490000001F163E 5A493FA0E7F045A7ECFF3CA3EB06000000000000000000000003000000050837 6F36295A8B5A275989521D426D45000000330000002F00000006000000000000 00060000002F00000033000000015A5857B1595756FF595857A95A5959005959 59005958590059585900595858005A585800595857A9595756FF5A5857B15C5A 59005C5A59005C5A59005C5A5900595756FFC5C6C7FF555657FF4F545AFF4C52 5AFF4B5158FF4B5056FF4C5055FF4F5155FF555455FFC5C6C7FF595756FF5C5A 59005D5B5A005D5B5A005D5B5A005C5A59FF575656FF50555BFFFFA022FFFFAD 46FFFFB860FFFFC274FFFFCC85FFFFD892FF505256FF575555FF5C5A59FF5F5D 5C005F5D5C005F5D5C005F5D5C005C5A59FFC2C4C6FF4D535BFFFFA73BFFFFB2 61FFFCBF7DFFFCC88EFFFFC88AFFFFCD84FF4D5157FFC2C4C5FF5C5A59FF5F5D 5C00605E5D005E5C5B005D5B5A005F5D5CFF5A5959FF50555DFFFFB150FFFCBB 74FFF6BA75FFF3B368FFF9AC56FFFFA740FF50555CFF5A5959FF5F5D5CFF615F 5E00605E5D005D5B5B008C8A8800615D5CFFC2C4C5FF54585DFFFFB553FFFFB5 5FFFFBBE76FFFAC17CFFFFB764FFFFB048FF55585DFFC2C3C5FF605D5CFF625F 5E005F5C5B008D8B890088868400625F5FFF5E5C5CFF5A5B60FF4F5764FF4954 63FF485260FF48515FFF49525FFF4E5560FF595A5EFF5D5B5CFF605D5DFF605D 5D008E8C8A008A8886008684820064615FFFC1C3C4FF5A5C61FFFFA01DFFFFAD 40FFFFBB5CFFFFC671FFFFCE84FFFFD891FF58595CFFBEBFC1FF5E5B5AFF8C8A 87008A8886008886840086848200656261FF605E5DFF5D5F60FFA88C70FF787E 85FF72777CFF6C7075FF8F8579FFFFCC83FF5A5B5EFF787675FF848280FF8381 7FFF83817FFF858381D485838100676462FFBFBFC0FF7D7C7AFFB7B8B8FFFDFE FFFFE7E6E7FFE4E4E5FFAAABADFF8C7154FF727272FFB8B6B6FFFFFFFFFFF4F1 F1FFE9E7E6FFB0AEACFF7C7A78D4686564FF625F5EFF807E7CFFFFFFFFFF817F 7DFF666462FF7C7A79FF7D7B7AFF7D7C7BFF7F7D7CFF7F7D7BFF7F7C7AFF6866 65FF575553FFDBD9D8FF807E7CFF6A6766FFBEBFBFFF787674FFEBE9EAFF7E7C 7AFF6B6767FF6B6966FFFFFFFFFFECEAEAFFE4E2E1FFC3C1BFFF7D7B7AFF4746 4569535150FFB2B0AFFF817F7EFF63605FBF696665FF747270FFE8E6E5FF8482 80FF6C6A68FF555352FF838180FF7A7877FF787675FF716F6EFF5C5A59FF6B69 67FF545251FFABA9A6FF716F6DFF00000023000000336C6A67D7AEACABFFD7D5 D4FFC2C0BFFF8E8C8BFF3F3D3CFF302E2DEE353433CD565453FF817F7DFFB0AE ACFFAAA8A6FF92908DFF5B5958FD6E6B6A006F6D6B00000000295F5D5BDD6B69 68FF757370FF696766FF312F2EEB17161644000000263A3838DC383635FF6A68 67FF62605FFF504E4DEC2726254D0000000000000000000000000000002A0000 003300000033000000330000002E00000005000000000000002A000000330000 0033000000330000002E00000007B57B09B2B88217FFB78115FFB68114FFB681 15FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB681 14FFB78115FFB88217FFB57B09B2B88216FFEFD09EFFECCD99FFECCD99FFECCD 9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD 99FFECCD99FFEFD09EFFB88216FFB67F10FFF6DDB7FFDC9D37FFDC9E39FFDC9E 39FFDB9E39FFDC9E39FFDC9F3AFFDC9E39FFDB9E39FFDC9E39FFDC9F3AFFDB9E 39FFDB9D37FFF5DDB6FFB67F10FFB57C0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB57C0AFFB57C09FFFFFFFFFF7D7D7CFF747270FFADAC ABFFDCDCDBFF7F7E7CFF747371FFADACABFFDCDCDBFF7F7E7CFF747371FFACAB AAFFD7D7D7FFFFFFFFFFB57B08FFB57B09FFFFFFFFFFE5E6E5FFE9E8E6FFE5E5 E2FFE4E3E1FFE8E7E5FFE9E8E6FFE5E5E2FFE4E3E1FFE8E7E5FFE9E8E6FFE5E4 E1FFDEDEDEFFFFFFFFFFB57B08FFB57C09FFFFFFFFFF888785FF7E7C79FFB9B9 B6FFEBEAE9FF8A8885FF7E7C7AFFB9B9B6FFEBEAE9FF8A8885FF7E7C7AFFB9B8 B5FFE5E5E5FFFFFFFFFFB47B08FFB57B08FFFFFFFFFFF2F1F2FFF4F3F2FFF1F0 EFFFEFEEEDFFF3F2F1FFF4F3F3FFF1F0EFFFEFEEEDFFF3F2F1FFF4F3F3FFF0EF EEFFEAEAEAFFFFFFFFFFB47B08FFB57B08FFFFFFFFFF8E8D8CFF83817EFFC1C0 BFFFF5F4F3FF908D8BFF83817FFFC1C0BFFFF5F4F3FF908D8BFF83817FFFC0BF BEFFF0F0F0FFFFFFFFFFB47A08FFB57B08FFFFFFFFFFFCFDFEFFFDFEFDFFFAFA F9FFF8F8F7FFFCFDFCFFFEFEFDFFFAFAF9FFF8F8F7FFFCFDFCFFFEFEFDFFF9F9 F8FFF4F5F6FFFFFFFFFFB47A07FFB57B08FFFFFFFFFF969394FF888684FFCAC8 C7FFFEFFFDFF969291FF888684FFCAC8C7FFFEFFFDFF969291FF888684FFCAC7 C6FFFAFBFBFFFFFFFFFFB47A07FFB57B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB47A07FFB57C09FFFFFFFFFF9C9A9BFF8D8D8CFFD1D0 D1FFFFFFFFFF9B9998FF8D8D8CFFD1D0D1FFFFFFFFFF9B9998FF8D8D8CFFD0D0 D0FFFFFFFFFFFFFFFFFFB47B09FFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB67E0EFFA77108C1B67E0EFFB57C09FFB57C09FFB57B 08FFB57B08FFB57B09FFB57C09FFB57B08FFB57B08FFB57B09FFB57C09FFB57B 08FFB57B09FFB67E0EFFA77108C1000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000005A5857B1595756FF595857A9000000000000 000000000000000000000000000000000000B3A293FAB5A292FFB4A08FFFB39F 8FFFB4A090FFB5A393FFB8A697EF595756FFC5C6C7FF555657FF4F545AFF4C52 5AFF4B5158FF4B5056FF4C5055FF4F5155FFB5A292FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB7A596FF5C5A59FF575656FF50555BFFFFA022FFFFAD 46FFFFB860FFFFC274FFFFCC85FFFFD892FFB4A191FFFCFBF9FFFFFFFFFFFFFF FFFFFFFFFFFFB27223FFB9A799FF5C5A59FFC2C4C6FF4D535BFFFFA73BFFFFB2 61FFFCBF7DFFFCC88EFFFFC88AFFFFCD84FFB5A293FFF4F1ECFFAD6C1CFFFEFF FFFFAE6F21FFE6D7C1FFBAA899FF5F5D5CFF5A5959FF50555DFFFFB150FFFCBB 74FFF6BA75FFF3B368FFF9AC56FFFFA740FFB6A394FFEBE4DCFFF7F3EFFFB070 22FFF7F4F0FFECE6DFFFB8A596FF615D5CFFC2C4C5FF54585DFFFFB553FFFFB5 5FFFFBBE76FFFAC17CFFFFB764FFFFB048FFB7A595FFE4D9CDFFE2D8CCFFE3D9 CEFFE2D8CCFFE4D9CDFFB8A596FF625F5FFF5E5C5CFF5A5B60FF4F5764FF4954 63FF485260FF48515FFF49525FFF4E5560FF94887EFFB7A596FFB6A495FFB6A4 95FFB6A495FFB7A596FFA9998BBD64615FFFC1C3C4FF5A5C61FFFFA01DFFFFAD 40FFFFBB5CFFFFC671FFFFCE84FFFFD891FF4B4C4FFF98989AFF4B4848FF0000 0033000000330000003300000023656261FF605E5DFF5D5F60FFA88C70FF787E 85FF72777CFF6C7075FF8F8579FFFFCC83FF5A5B5EFF787675FF848280FF8381 7FFF83817FFF858381D400000000676462FFBFBFC0FF7D7C7AFFB7B8B8FFFDFE FFFFE7E6E7FFE4E4E5FFAAABADFF8C7154FF727272FFB8B6B6FFFFFFFFFFF4F1 F1FFE9E7E6FFB0AEACFF7C7A78D4686564FF625F5EFF807E7CFFFFFFFFFF817F 7DFF666462FF7C7A79FF7D7B7AFF7D7C7BFF7F7D7CFF7F7D7BFF7F7C7AFF6866 65FF575553FFDBD9D8FF807E7CFF6A6766FFBEBFBFFF787674FFEBE9EAFF7E7C 7AFF6B6767FF6B6966FFFFFFFFFFECEAEAFFE4E2E1FFC3C1BFFF7D7B7AFF4746 4569535150FFB2B0AFFF817F7EFF63605FBF696665FF747270FFE8E6E5FF8482 80FF6C6A68FF555352FF838180FF7A7877FF787675FF716F6EFF5C5A59FF6B69 67FF545251FFABA9A6FF716F6DFF00000023000000336C6A67D7AEACABFFD7D5 D4FFC2C0BFFF8E8C8BFF3F3D3CFF302E2DEE353433CD565453FF817F7DFFB0AE ACFFAAA8A6FF92908DFF5B5958FD0000000000000000000000295F5D5BDD6B69 68FF757370FF696766FF312F2EEB17161644000000263A3838DC383635FF6A68 67FF62605FFF504E4DEC2726254D0000000000000000000000000000002A0000 003300000033000000330000002E00000005000000000000002A000000330000 0033000000330000002E00000007000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B9844448B68140FAB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB9844448000000000000000000000000B9844448BA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B68140FAF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFF389FEAFFF2C2 79FFFCDDA8FFC7995DFF00000000B98544A8B47D3CFFFBE1AEFFF4CB87FFF3CB 88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FF88B5C2FF9AF0FFFF88B4 C1FFFADBA5FFC69659FFB88342A8B98444FFE4C186FFFCE1A8FFF8D89CFFF8D8 9CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFF6FC7F4FFF1FFFFFF6FC7 F4FFFBDFA5FFF2D49BFFBD8949FFBA8545FFB88342FFB68040FFB57F3FFFB57F 3FFFB57F3FFFB57F3FFF6694ACFF359EEAFF329EEAFFB9F0FEFFACEDFDFFB9F0 FEFF329EEAFF359EEAFF6896AEFF000000330000003300000033000000330000 003300000033000000333793D2CAB3EBFCFFC1F5FFFF86E3FBFF5FD8FAFF86E3 FBFFCAF8FFFFB1E8FBFF3793D2CA000000000000000000000000000000000000 00000000000000000000000000243291D1B554C5F4FF7EDEFAFF5CD4F8FF7EDE FAFF4CC0F3FF2E8BD0B500000024000000000000000000000000000000000000 00000000000000000000000000000000002071CAF5FF76DAF8FF54CBF5FF7BDC F8FF69C8F3FF0000002000000000000000000000000000000000000000000000 00000000000000000000000000004AA8EC9777D4F7FF3EAAEDFF318BCFAD3EAA EDFF7CD6F7FF39A0EA9700000000000000000000000000000000000000000000 00000000000000000000000000004AA9ECFF389DE7F1173E5A490000001F163E 5A493FA0E7F145A7ECFF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000309163FF009C61FF0099 5DFF00985DFF00995DFF00A77BFF000000000000000000000000000000000000 000000000000008A47FF008A47FF0000000000000000008945FF84E5DFFF7EE0 D7FF7EDFD5FF82E2D9FF00995DFF000000000000000000000000000000000000 0000008642FF74E7DAFF74E7DAFF008641FF0000000000000000008037FF6EDF D2FF00B597FF6EE0D3FF00985DFF000000000000000000000000000000000086 42FF64E7D7FF00C09BFF00BF9BFF63E7D6FF00833DFF00823BFF62E5D3FF00BC 9AFF00BA9AFF5EE4D2FF00995EFF000000000000000000000000008642FF52E9 D4FF00C59DFF00C69EFF00C49EFF00C39DFF50E6CFFF50E6CFFF00C39CFF00C4 9EFF007E34FF49E6D3FF009B61FF0000000000000000008642FF40EBD0FF00C9 9DFF00CB9FFF008037FF008037FF00CA9EFF00C79CFF00C79CFF00C99EFF007D 32FF00000000008238FF007D3FB900000000008642FF30EECEFF00CE9CFF00CF 9DFF007C32FF0000000000000000007D32FF00CE9EFF00CE9EFF007C31FF0000 0000000000000000000000000000008947FF1EF0CCFF34BB83FFB28241FFB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB98444480000000000000000008946FF39D4A3FFBA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B2813FFFF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37BFFF2C2 79FFFCDDA8FFC7995DFF00000000B98544A8B47D3CFFFBE1AEFFF4CB87FFF3CB 88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CB88FFF3CB 87FFFADBA5FFC69659FFB88342A8B98444FFE4C186FFFCE1A8FFF8D89CFFF8D8 9CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D8 9CFFFBDFA5FFF2D49BFFBD8949FFBA8545FFB88342FFB68040FFB57F3FFFB57F 3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F 3FFFB6803FFFB78242FFB98545FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000929292EF8E8F8FFF8D8D8EFF8D8D8EFF8D8E 8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8C 8DFF8C8D8DFF8E8E8EFF929292EF8E8F8FFFFFFFFFFFC8BBB1FFB7A394FFB6A3 94FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A3 94FFC7BAAEFFFFFFFFFF8E8E8EFF8C8D8DFFFFFFFFFFB6A394FFF5EFEAFF3333 33FFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EF EAFFB6A394FFFFFEFEFF8C8C8CFF8C8D8DFFFFFFFFFFB4A191FFF5EFEAFF3333 33FFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EF EAFFB4A191FFFCFDFBFF8C8C8CFF8C8C8DFFFFFFFFFFB5A393B4B7A394FFB6A3 94FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A3 94FFB5A393B4FCFBFBFF8C8C8CFF8C8C8CFFFEFEFFFFFEFEFFFFFEFEFFFFFEFE FFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFE FFFFFEFEFFFFFCFBFBFF8C8C8CFF8C8C8CFFFDFCFCFFEA7251FFEA7251FFC83D 17FFC83D17FFC83D17FFC83D17FFC83D17FFC83D17FFEA7453FFDCDAD9FFDCDA D9FFDCDAD9FFFDFCFCFF8C8C8CFF8B8C8CFFFEFDFDFFAB3514FFAB3514FFEF93 7AFFEF937AFFEF937AFFEF937AFFEF937AFFEF937AFFAB3514FFE0DDDCFFE0DD DCFFE0DDDCFFFFFEFEFF8C8C8CFF8B8B8BFFFFFEFEFFE86541FFE86541FFB136 14FFB13614FFB13614FFB13614FFB13614FFB13614FFE86743FFE3E1E1FFE3E1 E1FFE3E1E1FFFFFEFEFF8C8C8CFF8B8B8BFFFFFFFFFFEFEFF2FF858A8EFFF1F4 FAFFEDF1F7FFECEFF4FFEBEDF2FFEAEAEDFFE8E7E8FFE8E6E6FFE8E5E6FFE7E5 E5FFE7E5E5FFFFFEFEFF8B8B8BFF8B8B8BFFFFFFFFFFF1F1F0FF868788FFF7FA FCFFAAAAAAFF777777FF767676FF787878FF787878FF787878FF787878FF7878 78FFA3A3A3FFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFF5F4F3FF878788FF878B 8FFF6B6B6BFFD6D6D6FFB8B8B8FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9 B9FF696969FFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFF8F7F6FFFFFFFFFFFFFF FFFFA1A1A1FF696969FF696969FF6C6C6CFF6C6C6CFF6C6C6CFF6C6C6CFF6C6C 6CFF9B9B9BFFFFFFFFFF8B8B8BFF8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF8D8D8DFF868686C08D8D8DFF8A8A8AFF8A8A8AFF8A8A 8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A8BFF8A8A8AFF8A8A8AFF8A8A 8AFF8A8A8AFF8D8D8DFF868686C0000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000000929292EF8E8F8FFF8D8D8EFF8D8D8EFF8D8E 8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8C 8DFF8C8D8DFF8E8E8EFF929292EF8E8F8FFFFFFFFFFFC8BBB1FFB7A394FFB6A3 94FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A3 94FFC7BAAEFFFFFFFFFF8E8E8EFF8C8D8DFFFFFFFFFFB6A394FFF5EFEAFF3333 33FFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EF EAFFB6A394FFFFFEFEFF8C8C8CFF8C8D8DFFFFFFFFFFB4A191FFF5EFEAFF3333 33FFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EFEAFFF5EF EAFFB4A191FFFCFDFBFF8C8C8CFF8C8C8DFFFFFFFFFFB5A393B4B7A394FFB6A3 94FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A394FFB6A3 94FFB5A393B4FCFBFBFF8C8C8CFF8C8C8CFFFEFEFFFFFEFEFFFFFEFEFFFFFEFE FFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFEFFFFFEFE FFFFFEFEFFFFFCFBFBFF8C8C8CFF8C8C8CFFFDFCFCFFEA7251FFEA7251FFC83D 17FFC83D17FFC83D17FFC83D17FFC83D17FFC83D17FFEA7453FFDCDAD9FFDCDA D9FFDCDAD9FFFDFCFCFF8C8C8CFF8B8C8CFFFEFDFDFFAB3514FFAB3514FFEF93 7AFFEF937AFFEF937AFFEF937AFFEF937AFFEF937AFFAB3514FFE0DDDCFFE0DD DCFFE0DDDCFFFFFEFEFF8C8C8CFF8B8B8BFFFFFEFEFFE86541FFE86541FFB136 14FFB13614FFB13614FFB13614FFB13614FFB13614FF36B666FFEDFEF6FFFEFF FFFF08D0D7FFFFFEFEFF8C8C8CFF8B8B8BFFFFFFFFFFEFEFF2FF858A8EFFF1F4 FAFFEDF1F7FFECEFF4FFEBEDF2FFEAEAEDFFA5EC73FF84FF22FF49FFABFF50F8 FFFF43E2FFFFDBFBFFFF8B8B8BFF8B8B8BFFFFFFFFFFF1F1F0FF868788FFF7FA FCFFAAAAAAFF777777FF767676FF73756CFFC3FF21FF99FF55FF79FFC4FF81FB FFFF6BE3FFFF42D6FFFF008BD7FF8B8B8BFFFFFFFFFFF5F4F3FF878788FF878B 8FFF6B6B6BFFD6D6D6FFB8B8B8FF9DD700FFCDFF36FFDAFF6DFFCBFFA1FFB7F1 FFFF7CD0FEFF47BFFFFF97DAFDFF8B8B8BFFFFFFFFFFF8F7F6FFFFFFFFFFFFFF FFFFA1A1A1FF696969FF696969FFD06916FFF9994FFFFEB57DFFE3B283FFE0AA F1FF8EAFF8FF658DF5FF87A3F0FF8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4FF9F5316FFBC763FFFFF6AA8FFFE72 D5FF5A60FFFF3736FFFF3758AFFF868686C08D8D8DFF8A8A8AFF8A8A8AFF8A8A 8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF7D3A0AFF9F5F12FFFF3682FFFF39 C3FFFF2CB8FF2224E2FF838383C1000000000000003300000033000000330000 003300000033000000330000003300000033000000330000005DD60052FFD600 95FF14000E6F00000035000000007B7977007B7977007B7977FF73716FFF6D6B 69FF696665FF625F5EFF615E5D007E7C7A007B7977FF73716FFF6D6B69FF6966 65FF63605FFF64616000646160007B7977007B7977007A7976FF908D8CFF908E 8CFF656461FF615E5DFF615E5D007D7B7900797775FF8E8B8AFF918F8DFF6866 64FF63605FFF64616000646160007B7977007B79770000000033787574FFCBCA C7FF9B9A99FF625E5DFF625F5E007D7A7900787574FFCAC8C6FF989796FF605D 5CFF0000003364616000646160007B797700797875AE716E6DFF696665FF6460 5FFF625E5DFF545251AA7B7A7700656361006A6967AA6F6C6BFF696665FF6764 63FF656261FF63605FAE646160007C797800787574FFBDBBB9FFCECCCBFFA5A3 A2FF7E7C7BFF5E5B5AFF7B7977FF646260FF797675FFBCBBB8FFCECCCBFFA6A4 A3FF807E7DFF605D5CFF63605F007B787700777473FFB9B7B5FFC9C7C6FFA2A0 9FFF7D7B7AFF5C5858FF777472FF615F5DFF777473FFB9B8B5FFC9C7C6FFA2A0 9FFF7E7C7BFF605D5CFF63605F007B797700777473FFBCBAB8FFCDCBCAFFA5A3 A2FF7E7C7BFF595655FFD6D5D3FF8C8C89FF767372FFBCBAB7FFCCCAC9FFA4A2 A1FF7E7C7BFF5F5C5BFF625F5E007A7876FF6F6D6BFF666261FF605D5CFF5E5C 5AFF5E5A5AFF4946469BD3D2D0FF8A8987FF62615F9B6C6A68FF646160FF625F 5EFF615F5DFF615E5DFF615E5DA8777472FFDEDDDDFFEBEBE9FFDBDAD9FFCAC9 C8FFBBBAB9FF575453FFD6D5D3FF8C8B89FF757371FFDEDDDCFFEBEBE9FFDBDA D9FFCAC9C8FFBCBCBBFF5E5B5AFF767472FFB3B0AEFFCAC9C7FFB0ADADFF9190 8EFF757472FF5B5857FF767472FF615F5DFF767472FFB3B1AFFFCAC9C7FFB0AD ADFF91908EFF757573FF5F5C5BFF767472FFB3B1AFFFCAC9C7FFB1AEAEFF9392 90FF777674FF5E5A59FF7A7876FF646260FF777573FFB3B1AFFFCAC9C7FFB1AE AEFF939290FF777674FF605D5CFF767472FFB3B1AFFFCAC9C7FFB0AEADFF9190 8EFF757472FF5E5A59FF0000003300000033777573FFB3B1AFFFCAC9C7FFB0AE ADFF91908EFF757572FF5F5C5BFF777573FFCFCFCFFFD9D7D6FFD0CFCEFFC8C8 C7FFC3C1C1FF5E5A59FF5F5C5B007E7C7A00777573FFD0CFCFFFD9D7D6FFD0CF CEFFC8C8C7FFC3C1C1FF5E5B5AFF7A7876FF817E7DFF9C9996FF898583FF716F 6CFF595756FF605D5CFF605D5C007F7D7B007A7876FF817E7DFF9C9996FF8985 83FF716F6CFF595756FF615E5DFF716F6DC0767472FF706D6CFF6D6A69FF6967 65FF666362FF5A5756C0605D5C007E7C7A00716F6DC0767472FF706D6CFF6D6A 69FF696765FF666362FF5A5756C0000000000000003300000033000000330000 0033000000330000000000000000000000000000000000000033000000330000 0033000000330000003300000000 } end object alOptionsActionList: TActionList left = 72 top = 80 object actCloseWithEscape: TAction OnExecute = actCloseWithEscapeExecute ShortCut = 27 end end end doublecmd-0.9.8/src/fopenwith.pas0000755000175000001440000002503413462617634016050 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 I, J, K: Integer; TreeNode: TTreeNode; Index, Count: Integer; Applications: TStringList; DesktopFile: PDesktopFileEntry; Folders, DataDirs: TStringArray; 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 // $XDG_DATA_HOME AddString(Folders, IncludeTrailingBackslash(GetUserDataDir) + APPS); // $XDG_DATA_DIRS DataDirs:= GetSystemDataDirs; for I:= Low(DataDirs) to High(DataDirs) do begin AddString(Folders, IncludeTrailingBackslash(DataDirs[I]) + APPS); end; for I:= Low(Folders) to High(Folders) 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; // 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-0.9.8/src/fopenwith.lrt0000755000175000001440000000117312054100376016046 0ustar alexxusersTFRMOPENWITH.CAPTION=Choose an application TFRMOPENWITH.LBLMIMETYPE.CAPTION=File type to be opened: %s TFRMOPENWITH.CHKUSEASDEFAULT.CAPTION=Set selected application as default action TFRMOPENWITH.CHKCUSTOMCOMMAND.CAPTION=Custom command TFRMOPENWITH.CHKSAVEASSOCIATION.CAPTION=Save association TFRMOPENWITH.MISINGLEFILENAME.CAPTION=Single file name TFRMOPENWITH.MISINGLEFILENAME.HINT=%f TFRMOPENWITH.MILISTOFFILES.CAPTION=Multiple file names TFRMOPENWITH.MILISTOFFILES.HINT=%F TFRMOPENWITH.MISINGLEURL.CAPTION=Single URI TFRMOPENWITH.MISINGLEURL.HINT=%u TFRMOPENWITH.MILISTOFURLS.CAPTION=Multiple URIs TFRMOPENWITH.MILISTOFURLS.HINT=%U doublecmd-0.9.8/src/fopenwith.lfm0000755000175000001440000001720213276635757016052 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-0.9.8/src/fmultirenamewait.pas0000644000175000001440000000175012733027267017413 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-0.9.8/src/fmultirenamewait.lrt0000644000175000001440000000023212733022624017413 0ustar alexxusersTFRMMULTIRENAMEWAIT.CAPTION=Double Commander TFRMMULTIRENAMEWAIT.LBLMESSAGE.CAPTION=Click OK when you have closed the editor to load the changed names! doublecmd-0.9.8/src/fmultirenamewait.lfm0000644000175000001440000000260012733027267017401 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-0.9.8/src/fmultirename.pas0000644000175000001440000011171513335335257016531 0ustar alexxusers{ 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 LazUtf8, SysUtils, Classes, Graphics, Forms, StdCtrls, Menus, Controls, LCLType, DCClassesUtf8, uClassesEx, uFile, uFileSource, StringHashList, Grids, ExtCtrls, Buttons, DCXmlConfig, uOSForms, uRegExprW, uFileProperty, uFileSourceSetFilePropertyOperation; type PMultiRenamePreset = ^TMultiRenamePreset; TMultiRenamePreset = record FileName: String; Extension: String; FileNameStyle: Integer; ExtensionStyle: Integer; Find: String; Replace: String; RegExp: Boolean; UseSubs: Boolean; Counter: String; Interval: String; Width: Integer; Log: Boolean; LogFile: String; end; { TfrmMultiRename } TfrmMultiRename = class(TAloneForm) btnEdit: TButton; btnLoadPreset: TButton; btnSavePreset: TButton; btnDeletePreset: TButton; cbRegExp: TCheckBox; cbUseSubs: TCheckBox; cmbExtensionStyle: TComboBox; cbPresets: TComboBox; mnuEditNames: TMenuItem; mnuLoadFromFile: TMenuItem; miDay2: TMenuItem; miHour1: TMenuItem; miMinute1: TMenuItem; miSecond1: TMenuItem; pnlOptions: TPanel; pmEditDirect: TPopupMenu; StringGrid: TStringGrid; gbPresets: TGroupBox; gbMaska: TGroupBox; lbName: TLabel; lbExt: TLabel; edName: TEdit; edExt: TEdit; btnNameMenu: TButton; btnExtMenu: TButton; gbFindReplace: TGroupBox; lbFind: TLabel; lbReplace: TLabel; edFind: TEdit; edReplace: TEdit; cmbNameStyle: TComboBox; gbCounter: TGroupBox; lbStNb: TLabel; lbInterval: TLabel; lbWidth: TLabel; edPoc: TEdit; edInterval: TEdit; cmbxWidth: TComboBox; btnRename: TButton; btnClose: TButton; gbLog: TGroupBox; edFile: TEdit; cbLog: TCheckBox; btnRestore: TButton; miPlugin: TMenuItem; N5: TMenuItem; miDay3: TMenuItem; miDay1: TMenuItem; miMonth3: TMenuItem; miMonth2: TMenuItem; miMonth1: TMenuItem; miYear1: TMenuItem; ppNameMenu: TPopupMenu; miNextName: TMenuItem; miName: TMenuItem; miNameX: TMenuItem; miNameXX: TMenuItem; N1: TMenuItem; miNextExtension: TMenuItem; Extension: TMenuItem; miExtensionX: TMenuItem; miExtensionXX: TMenuItem; N2: TMenuItem; miCounter: TMenuItem; N3: TMenuItem; miNext: TMenuItem; miYear: TMenuItem; miMonth: TMenuItem; miDay: TMenuItem; N4: TMenuItem; miHour: TMenuItem; miMinute: TMenuItem; miSecond: TMenuItem; procedure btnEditClick(Sender: TObject); procedure btnLoadPresetClick(Sender: TObject); procedure btnSavePresetClick(Sender: TObject); procedure btnDeletePresetClick(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure cmbNameStyleChange(Sender: TObject); procedure edFindChange(Sender: TObject); procedure mnuEditNamesClick(Sender: TObject); procedure mnuLoadFromFileClick(Sender: TObject); procedure StringGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure StringGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGridSelection(Sender: TObject; aCol, aRow: Integer); procedure StringGridTopLeftChanged(Sender: TObject); procedure edPocChange(Sender: TObject); procedure edIntervalChange(Sender: TObject); procedure btnRenameClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnRestoreClick(Sender: TObject); procedure btnNameMenuClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RestoreProperties(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure miDay1Click(Sender: TObject); procedure miDay2Click(Sender: TObject); procedure miDay3Click(Sender: TObject); procedure miDayClick(Sender: TObject); procedure miHour1Click(Sender: TObject); procedure miHourClick(Sender: TObject); procedure miMinute1Click(Sender: TObject); procedure miMinuteClick(Sender: TObject); procedure miMonth1Click(Sender: TObject); procedure miMonth2Click(Sender: TObject); procedure miMonth3Click(Sender: TObject); procedure miMonthClick(Sender: TObject); procedure miSecond1Click(Sender: TObject); procedure miSecondClick(Sender: TObject); procedure miYear1Click(Sender: TObject); procedure miYearClick(Sender: TObject); procedure miPluginClick(Sender: TObject); procedure NameClick(Sender: TObject); procedure NameXClick(Sender: TObject); procedure NameXXClick(Sender: TObject); procedure ExtensionClick(Sender: TObject); procedure CounterClick(Sender: TObject); procedure btnExtMenuClick(Sender: TObject); procedure cbLogClick(Sender: TObject); procedure ExtensionXClick(Sender: TObject); procedure ExtensionXXClick(Sender: TObject); private IniPropStorage: TIniPropStorageEx; FLastPreset: String; FFileSource: IFileSource; FFiles: TFiles; FPresets: TStringHashList; // of PMultiRenamePreset FNewNames: TStringHashList; FSourceRow: Integer; FMoveRow : Boolean; FNames: TStringList; FLog: TStringListEx; FRegExp: TRegExprW; {Handles a single formatting string} function sHandleFormatString(const sFormatStr: string; ItemNr: Integer): string; {Function sReplace call sReplaceXX with parametres} function sReplace(sMask: string; ItemNr: Integer): string; {sReplaceXX doing N, Nx, Nx:y and E, Ex, Ex:y} function sReplaceXX(const sFormatStr, sOrig: string): string; {InsertMask is for write key symbols from buttons} procedure InsertMask(const Mask:string;edChoose:Tedit); procedure InsertMask(const Mask:string;editNr:PtrInt); {Get new file name for file with ItemIndex} function FreshText(ItemIndex: Integer): String; {Executes the main operation of renaming files} procedure RenameFiles; {Changes first char to uppercase and the rest to lowercase} function FirstCharToUppercaseUTF8(InputString: String): String; {Changes first char of first word to uppercase and the rest to lowercase} function FirstCharOfFirstWordToUppercaseUTF8(InputString: String): String; {Changes first char of every word to uppercase and the rest to lowercase} function FirstCharOfEveryWordToUppercaseUTF8(InputString: String): String; {Returns true if a byte represents a letter.} function IsLetter(AChar: AnsiChar): Boolean; {Applies style (uppercase, lowercase, etc.) to a string} function ApplyStyle(InputString: String; Style: Integer): String; {Load preset configuration} procedure LoadPresets; procedure LoadPresetsXml(AConfig: TXmlConfig); {Save preset configuration} procedure SavePresets; procedure SavePresetsXml(AConfig: TXmlConfig); {Loads specified preset from the configuration} procedure LoadPreset(PresetName: String); {Saves specified preset to the configuration} procedure SavePreset(PresetName: String); {Delete specified preset from configuration} procedure DeletePreset(PresetName: String); {Fills presets list with preset from configuration} procedure FillPresetsList; {Removes all presets from the presets list} procedure ClearPresetsList; {Load names from file} procedure LoadNamesFromFile(const AFileName: String); procedure SetFilePropertyResult(Index: Integer; aFile: TFile; aTemplate: TFileProperty; Result: TSetFilePropertyResult); public { Public declarations } constructor Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles); reintroduce; destructor Destroy; override; end; {initialization function} function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles):Boolean; implementation {$R *.lfm} uses uDebug, uLng, uGlobs, uFileProcs, DCOSUtils, DCStrUtils, fSelectTextRange, uShowMsg, uFileSourceUtil, uFileFunctions, dmCommonData, fMultiRenameWait, uOSUtils, uFileSourceOperation, uOperationsManager, Dialogs; const sPresetsSection = 'MultiRenamePresets'; function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles):Boolean; begin Result:= True; try with TfrmMultiRename.Create(Application, aFileSource, aFiles) do begin Show; end; except Result:= False; end; end; constructor TfrmMultiRename.Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles); begin FRegExp := TRegExprW.Create; FNames := TStringList.Create; FPresets := TStringHashList.Create(False); FNewNames:= TStringHashList.Create(FileNameCaseSensitive); FFileSource := aFileSource; FFiles := aFiles; aFiles := nil; FSourceRow := -1; FMoveRow := False; inherited Create(TheOwner); end; destructor TfrmMultiRename.Destroy; begin inherited Destroy; ClearPresetsList; FreeAndNil(FPresets); FreeAndNil(FNewNames); FreeAndNil(FFiles); FreeAndNil(FNames); FreeAndNil(FRegExp); end; procedure TfrmMultiRename.FormCreate(Sender: TObject); begin // Localize File name style ComboBox ParseLineToList(rsMulRenFileNameStyleList, cmbNameStyle.Items); ParseLineToList(rsMulRenFileNameStyleList, cmbExtensionStyle.Items); // 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'; // Set default values for controls. btnRestoreClick(nil); // Initialize presets. LoadPresets; FillPresetsList; cbPresets.Text := FLastPreset; LoadPreset(FLastPreset); end; 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; procedure TfrmMultiRename.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin SavePresets; 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.miDay1Click(Sender: TObject); begin InsertMask('[DD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDay2Click(Sender: TObject); begin InsertMask('[DDD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDay3Click(Sender: TObject); begin InsertMask('[DDDD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDayClick(Sender: TObject); begin InsertMask('[D]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miHour1Click(Sender: TObject); begin InsertMask('[hh]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miHourClick(Sender: TObject); begin InsertMask('[h]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMinute1Click(Sender: TObject); begin InsertMask('[nn]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMinuteClick(Sender: TObject); begin InsertMask('[n]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth1Click(Sender: TObject); begin InsertMask('[MM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth2Click(Sender: TObject); begin InsertMask('[MMM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth3Click(Sender: TObject); begin InsertMask('[MMMM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonthClick(Sender: TObject); begin InsertMask('[M]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miSecond1Click(Sender: TObject); begin InsertMask('[ss]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miSecondClick(Sender: TObject); begin InsertMask('[s]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miYear1Click(Sender: TObject); begin InsertMask('[YYYY]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miYearClick(Sender: TObject); begin InsertMask('[Y]',ppNameMenu.Tag); end; function TfrmMultiRename.FreshText(ItemIndex: Integer): String; var bError: Boolean; sTmpName, sTmpExt: String; begin bError:= False; if FNames.Count > 0 then Result:= FNames[ItemIndex] else begin // Use mask sTmpName:=sReplace(edName.Text, ItemIndex); sTmpExt:=sReplace(edExt.Text, ItemIndex); // Join Result := sTmpName; if sTmpExt <> '' then Result := Result + '.' + sTmpExt; end; // Find and replace if cbRegExp.Checked and (edFind.Text <> '') then try Result:= UTF16ToUTF8(FRegExp.Replace(UTF8Decode(Result), UTF8Decode(edReplace.Text), cbUseSubs.Checked)); except Result:= rsMsgErrRegExpSyntax; bError:= True; end else Result:=StringReplace(Result,edFind.Text,edReplace.Text,[rfReplaceAll,rfIgnoreCase]); // File name style sTmpExt := ExtractFileExt(Result); sTmpName := Copy(Result, 1, Length(Result) - Length(sTmpExt)); sTmpName := ApplyStyle(sTmpName, cmbNameStyle.ItemIndex); sTmpExt := ApplyStyle(sTmpExt, cmbExtensionStyle.ItemIndex); Result := sTmpName + sTmpExt; btnRename.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; procedure TfrmMultiRename.cmbNameStyleChange(Sender: TObject); begin StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.edFindChange(Sender: TObject); begin if cbRegExp.Checked then begin FRegExp.Expression:= UTF8Decode(edFind.Text); end; StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.LoadNamesFromFile(const AFileName: String); var AFileList: TStringListEx; begin AFileList:= TStringListEx.Create; try AFileList.LoadFromFile(AFileName); 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; except on E: Exception do msgError(E.Message); end; AFileList.Free; end; procedure TfrmMultiRename.mnuEditNamesClick(Sender: TObject); 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; procedure TfrmMultiRename.mnuLoadFromFileClick(Sender: TObject); begin dmComData.OpenDialog.FileName:= EmptyStr; dmComData.OpenDialog.Filter:= AllFilesMask; if dmComData.OpenDialog.Execute then LoadNamesFromFile(dmComData.OpenDialog.FileName); end; procedure TfrmMultiRename.StringGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var tmpFile: TFile; DestRow: Integer; begin DestRow := StringGrid.Row; 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; procedure TfrmMultiRename.StringGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var SourceCol: Integer; begin if(Button = mbLeft) then begin StringGrid.MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then begin FMoveRow := True; end; end; end; procedure TfrmMultiRename.StringGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin FMoveRow := False; end; end; 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; 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; 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); end; procedure TfrmMultiRename.btnLoadPresetClick(Sender: TObject); begin LoadPreset(cbPresets.Text); end; procedure TfrmMultiRename.btnEditClick(Sender: TObject); begin pmEditDirect.PopUp; end; procedure TfrmMultiRename.btnSavePresetClick(Sender: TObject); begin if cbPresets.Text <> '' then begin if FPresets.Find(cbPresets.Text) <> -1 then begin if msgYesNo(Format(rsMsgPresetAlreadyExists, [cbPresets.Text])) = False then Exit; end; SavePreset(cbPresets.Text); if cbPresets.Items.IndexOf(cbPresets.Text) = -1 then cbPresets.Items.Add(cbPresets.Text); end; end; procedure TfrmMultiRename.btnDeletePresetClick(Sender: TObject); var Index: Integer; begin if cbPresets.Text <> '' then begin DeletePreset(cbPresets.Text); Index := cbPresets.Items.IndexOf(cbPresets.Text); if Index <> -1 then cbPresets.Items.Delete(Index); cbPresets.Text := ''; end; end; 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; StringGridTopLeftChanged(StringGrid); end; 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; StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.InsertMask(const Mask:string;edChoose:Tedit); var sTmp: String; I: Integer; begin 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; end; procedure TfrmMultiRename.InsertMask(const Mask:string;editNr:PtrInt); begin if editNr = 0 then InsertMask(Mask, edName) else InsertMask(Mask, edExt); end; procedure TfrmMultiRename.btnRestoreClick(Sender: TObject); begin edName.Text:='[N]'; edName.SelStart:= UTF8Length(edName.Text); edExt.Text:='[E]'; edExt.SelStart:= UTF8Length(edExt.Text); edFind.Text:=''; edReplace.Text:=''; cbRegExp.Checked:=False; cbUseSubs.Checked:=False; cmbNameStyle.ItemIndex:=0; cmbExtensionStyle.ItemIndex:=0; edPoc.Text:='1'; edInterval.Text:='1'; cmbxWidth.ItemIndex:=0; cbLog.Checked:=False; edFile.Enabled:=cbLog.Checked; if (FFiles.Count > 0) then edFile.Text:= FFiles[0].Path + 'default.log' else edFile.Text:= 'default.log'; edFile.SelStart:= UTF8Length(edFile.Text); cbPresets.Text:=''; FLastPreset:=''; FNames.Clear; gbMaska.Enabled:= True; gbPresets.Enabled:= True; gbCounter.Enabled:= True; StringGridTopLeftChanged(StringGrid); end; function TfrmMultiRename.sHandleFormatString(const sFormatStr: string; ItemNr: Integer): string; var aFile: TFile; Index: Integer; Counter: Int64; 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; 'C': begin Counter := StrToInt64Def(edPoc.Text, 1) + StrToInt64Def(edInterval.Text, 1) * ItemNr; Result := Format('%.' + cmbxWidth.Items[cmbxWidth.ItemIndex] + 'd', [Counter]); end; '=': begin Result := FormatFileFunction(UTF8Copy(sFormatStr, 2, UTF8Length(sFormatStr) - 1), FFiles.Items[ItemNr], FFileSource, True); for Index := 1 to Length(Result) - 1 do begin if Result[Index] in ['\', '/', ':', '*', '?', '"', '<', '>', '|'] then Result[Index] := '.'; end; 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; 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); 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; function TfrmMultiRename.sReplaceXX(const sFormatStr, sOrig: string): string; var iFrom, iTo, iSemiColon: Integer; begin if Length(sFormatStr) = 1 then Result := sOrig else begin iSemiColon := Pos(':', sFormatStr); if iSemiColon = 0 then begin iFrom := StrToIntDef(Copy(sFormatStr, 2, MaxInt), 1); iTo := iFrom; end else begin iFrom := StrToIntDef(Copy(sFormatStr, 2, iSemiColon - 2), 1); iTo := StrToIntDef(Copy(sFormatStr, iSemiColon + 1, MaxInt), MaxInt); end; Result := UTF8Copy(sOrig, iFrom, iTo - iFrom + 1); end; end; procedure TfrmMultiRename.btnNameMenuClick(Sender: TObject); begin ppNameMenu.AutoPopup:= False; FillContentFieldMenu(miPlugin, @miPluginClick); btnNameMenu.PopupMenu.PopUp; ppNameMenu.Tag:= 0; end; procedure TfrmMultiRename.btnExtMenuClick(Sender: TObject); begin ppNameMenu.AutoPopup:= False; FillContentFieldMenu(miPlugin, @miPluginClick); btnExtMenu.PopupMenu.PopUp; ppNameMenu.Tag:= 1; end; procedure TfrmMultiRename.NameClick(Sender: TObject); begin InsertMask('[N]',ppNameMenu.Tag); end; procedure TfrmMultiRename.NameXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].NameNoExt, ASelection) then begin InsertMask('[N' + IntToStr(ASelection.X) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.NameXXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].NameNoExt, ASelection) then begin InsertMask('[N' + IntToStr(ASelection.X) + ':' + IntToStr(ASelection.Y) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.ExtensionClick(Sender: TObject); begin InsertMask('[E]',ppNameMenu.Tag); end; procedure TfrmMultiRename.ExtensionXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].Extension, ASelection) then begin InsertMask('[E' + IntToStr(ASelection.X) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.ExtensionXXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].Extension, ASelection) then begin InsertMask('[E' + IntToStr(ASelection.X) + ':' + IntToStr(ASelection.Y) + ']', ppNameMenu.Tag); end; end; 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.Caption + '{}]'; end; 2: begin sMask := '[=Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}]'; end; 3: begin sMask := '[=DC().' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'; end; end; InsertMask(sMask, ppNameMenu.Tag); end; procedure TfrmMultiRename.CounterClick(Sender: TObject); begin InsertMask('[C]',ppNameMenu.Tag); end; procedure TfrmMultiRename.cbLogClick(Sender: TObject); begin edFile.Enabled:=not edFile.Enabled; end; procedure TfrmMultiRename.btnRenameClick(Sender: TObject); begin RenameFiles; end; procedure TfrmMultiRename.btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmMultiRename.SetFilePropertyResult(Index: Integer; aFile: TFile; aTemplate: TFileProperty; Result: TSetFilePropertyResult); var S: String; begin with TFileNameProperty(aTemplate) do begin case Result of sfprSuccess: begin S:= 'OK ' + aFile.Name + ' -> ' + Value; FFiles[Index].Name := Value; // Write new name to the file object end; sfprError: S:= 'FAILED ' + aFile.Name + ' -> ' + Value; sfprSkipped: S:= 'SKIPPED ' + aFile.Name + ' -> ' + Value; end; end; if cbLog.Checked then FLog.Add(S); end; procedure TfrmMultiRename.RenameFiles; var AFile: TFile; NewName: String; I, J, K: Integer; OldFiles, NewFiles: TFiles; AutoRename: Boolean = False; Operation: TFileSourceOperation; theNewProperties: TFileProperties; begin if cbLog.Checked then begin if edFile.Text = EmptyStr then edFile.Text:= FFiles[0].Path + 'default.log'; mbForceDirectory(ExtractFileDir(edFile.Text)); FLog:= TStringListEx.Create; end; OldFiles:= FFiles.Clone; NewFiles:= TFiles.Create(EmptyStr); try FNewNames.Clear; for I:= 0 to FFiles.Count - 1 do begin AFile:= TFile.Create(EmptyStr); AFile.Name:= FreshText(I); // 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; NewFiles.Add(AFile); end; 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; finally if cbLog.Checked then begin try FLog.SaveToFile(edFile.Text); except on E: Exception do msgError(E.Message); end; FLog.Free; end; OldFiles.Free; NewFiles.Free; end; StringGridTopLeftChanged(StringGrid); end; 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; 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; 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; 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; 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; procedure TfrmMultiRename.LoadPresets; begin LoadPresetsXml(gConfig); end; procedure TfrmMultiRename.LoadPresetsXml(AConfig: TXmlConfig); var PresetName: String; APreset: PMultiRenamePreset; ANode: TXmlNode; begin ClearPresetsList; ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection); FLastPreset := AConfig.GetValue(ANode, 'LastPreset', ''); 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 APreset := New(PMultiRenamePreset); FPresets.Add(PresetName, APreset); with APreset^ do begin FileName := AConfig.GetValue(ANode, 'Filename', '[N]'); Extension := AConfig.GetValue(ANode, 'Extension', '[E]'); FileNameStyle := AConfig.GetValue(ANode, 'FilenameStyle', 0); ExtensionStyle := AConfig.GetValue(ANode, 'ExtensionStyle', 0); Find := AConfig.GetValue(ANode, 'Find', ''); Replace := AConfig.GetValue(ANode, 'Replace', ''); RegExp := AConfig.GetValue(ANode, 'RegExp', False); UseSubs := AConfig.GetValue(ANode, 'UseSubs', False); Counter := AConfig.GetValue(ANode, 'Counter', '1'); Interval := AConfig.GetValue(ANode, 'Interval', '1'); Width := AConfig.GetValue(ANode, 'Width', 0); Log := AConfig.GetValue(ANode, 'Log/Enabled', False); LogFile := AConfig.GetValue(ANode, 'Log/File', ''); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TfrmMultiRename.SavePresets; begin SavePresetsXml(gConfig); gConfig.Save; end; procedure TfrmMultiRename.SavePresetsXml(AConfig: TXmlConfig); var i: Integer; ANode, SubNode: TXmlNode; begin ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection, True); AConfig.ClearNode(ANode); AConfig.SetValue(ANode, 'LastPreset', FLastPreset); ANode := AConfig.FindNode(ANode, 'Presets', True); for i := 0 to FPresets.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'Preset'); with PMultiRenamePreset(FPresets.List[i]^.Data)^ do begin AConfig.AddValue(SubNode, 'Name', FPresets.List[i]^.Key); AConfig.AddValue(SubNode, 'Filename', FileName); AConfig.AddValue(SubNode, 'Extension', Extension); AConfig.AddValue(SubNode, 'FilenameStyle', FileNameStyle); AConfig.AddValue(SubNode, 'ExtensionStyle', ExtensionStyle); AConfig.AddValue(SubNode, 'Find', Find); AConfig.AddValue(SubNode, 'Replace', Replace); AConfig.AddValue(SubNode, 'RegExp', RegExp); AConfig.AddValue(SubNode, 'UseSubs', UseSubs); AConfig.AddValue(SubNode, 'Counter', Counter); AConfig.AddValue(SubNode, 'Interval', Interval); AConfig.AddValue(SubNode, 'Width', Width); AConfig.SetValue(SubNode, 'Log/Enabled', Log); AConfig.SetValue(SubNode, 'Log/File', LogFile); end; end; end; procedure TfrmMultiRename.LoadPreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex = -1 then PresetIndex := FPresets.Add(PresetName, New(PMultiRenamePreset)); with PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)^ do begin edName.Text := FileName; edExt.Text := Extension; cmbNameStyle.ItemIndex := FileNameStyle; cmbExtensionStyle.ItemIndex := ExtensionStyle; edFind.Text := Find; edReplace.Text := Replace; cbRegExp.Checked := RegExp; cbUseSubs.Checked := UseSubs; edPoc.Text := Counter; edInterval.Text := Interval; cmbxWidth.ItemIndex := Width; cbLog.Checked := Log; edFile.Text := LogFile; end; FLastPreset := PresetName; edFindChange(edFind); end; end; procedure TfrmMultiRename.SavePreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex = -1 then PresetIndex := FPresets.Add(PresetName, New(PMultiRenamePreset)); with PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)^ do begin FileName := edName.Text; Extension := edExt.Text; FileNameStyle := cmbNameStyle.ItemIndex; ExtensionStyle := cmbExtensionStyle.ItemIndex; Find := edFind.Text; Replace := edReplace.Text; RegExp := cbRegExp.Checked; UseSubs := cbUseSubs.Checked; Counter := edPoc.Text; Interval := edInterval.Text; Width := cmbxWidth.ItemIndex; Log := cbLog.Checked; LogFile := edFile.Text; end; FLastPreset := PresetName; SavePresets; end; end; procedure TfrmMultiRename.DeletePreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex <> -1 then begin Dispose(PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)); FPresets.Remove(PresetName); FLastPreset := ''; SavePresets; end; end; end; procedure TfrmMultiRename.FillPresetsList; var i: Integer; PresetName: String; begin cbPresets.Clear; for i := 0 to FPresets.Count - 1 do begin PresetName := FPresets.List[i]^.Key; if cbPresets.Items.IndexOf(PresetName) = -1 then cbPresets.Items.Add(PresetName); end; end; procedure TfrmMultiRename.ClearPresetsList; var i: Integer; begin for i := 0 to FPresets.Count - 1 do Dispose(PMultiRenamePreset(FPresets.List[i]^.Data)); FPresets.Clear; end; end. doublecmd-0.9.8/src/fmultirename.lrt0000644000175000001440000000602712733022624016536 0ustar alexxusersTFRMMULTIRENAME.CAPTION=MultiRename TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION=Old File Name TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION=New File Name TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION=File Path TFRMMULTIRENAME.GBMASKA.CAPTION=Mask TFRMMULTIRENAME.LBNAME.CAPTION=File &Name TFRMMULTIRENAME.LBEXT.CAPTION=&Extension TFRMMULTIRENAME.BTNNAMEMENU.CAPTION=... TFRMMULTIRENAME.BTNEXTMENU.CAPTION=... TFRMMULTIRENAME.GBFINDREPLACE.CAPTION=Find && Replace TFRMMULTIRENAME.LBFIND.CAPTION=&Find... TFRMMULTIRENAME.LBREPLACE.CAPTION=Re&place... TFRMMULTIRENAME.CBREGEXP.CAPTION=Regular e&xpressions TFRMMULTIRENAME.CBUSESUBS.CAPTION=&Use substitution TFRMMULTIRENAME.GBCOUNTER.CAPTION=Counter TFRMMULTIRENAME.LBSTNB.CAPTION=S&tart Number TFRMMULTIRENAME.EDPOC.TEXT=1 TFRMMULTIRENAME.LBINTERVAL.CAPTION=&Interval TFRMMULTIRENAME.EDINTERVAL.TEXT=1 TFRMMULTIRENAME.LBWIDTH.CAPTION=&Width TFRMMULTIRENAME.CMBXWIDTH.TEXT=01 TFRMMULTIRENAME.BTNRENAME.CAPTION=&Rename TFRMMULTIRENAME.BTNCLOSE.CAPTION=&Close TFRMMULTIRENAME.GBLOG.CAPTION=Log Result TFRMMULTIRENAME.CBLOG.CAPTION=Ena&ble TFRMMULTIRENAME.BTNRESTORE.CAPTION=Reset &all TFRMMULTIRENAME.GBPRESETS.CAPTION=Presets TFRMMULTIRENAME.BTNLOADPRESET.CAPTION=&Load TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION=&Save TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION=&Delete TFRMMULTIRENAME.BTNEDIT.CAPTION=&Edit TFRMMULTIRENAME.MINEXTNAME.CAPTION=Name... TFRMMULTIRENAME.MINAME.CAPTION=[N] Name TFRMMULTIRENAME.MINAMEX.CAPTION=[Nx] Character at position x TFRMMULTIRENAME.MINAMEXX.CAPTION=[Nx:y] Characters from position x to y TFRMMULTIRENAME.N1.CAPTION=- TFRMMULTIRENAME.MINEXTEXTENSION.CAPTION=Extension... TFRMMULTIRENAME.EXTENSION.CAPTION=[E] Extension TFRMMULTIRENAME.MIEXTENSIONX.CAPTION=[Ex] Character at position x TFRMMULTIRENAME.MIEXTENSIONXX.CAPTION=[Ex:y] Characters from position x to y TFRMMULTIRENAME.N2.CAPTION=- TFRMMULTIRENAME.MICOUNTER.CAPTION=[C] Counter TFRMMULTIRENAME.N3.CAPTION=- TFRMMULTIRENAME.MINEXT.CAPTION=Time... TFRMMULTIRENAME.MIYEAR.CAPTION=[Y] Year (2 digits) TFRMMULTIRENAME.MIYEAR1.CAPTION=[YYYY] Year (4 digits) TFRMMULTIRENAME.MIMONTH.CAPTION=[M] Month TFRMMULTIRENAME.MIMONTH1.CAPTION=[MM] Month (2 digits) TFRMMULTIRENAME.MIMONTH2.CAPTION=[MMM] Month name (short, e.g., "jan") TFRMMULTIRENAME.MIMONTH3.CAPTION=[MMMM] Month name (long, e.g., "january") TFRMMULTIRENAME.MIDAY.CAPTION=[D] Day TFRMMULTIRENAME.MIDAY1.CAPTION=[DD] Day (2 digits) TFRMMULTIRENAME.MIDAY2.CAPTION=[DDD] Day of the week (short, e.g., "mon") TFRMMULTIRENAME.MIDAY3.CAPTION=[DDDD] Day of the week (long, e.g., "monday") TFRMMULTIRENAME.N4.CAPTION=- TFRMMULTIRENAME.MIHOUR.CAPTION=[h] Hour TFRMMULTIRENAME.MIHOUR1.CAPTION=[hh] Hour (2 digits) TFRMMULTIRENAME.MIMINUTE.CAPTION=[n] Minute TFRMMULTIRENAME.MIMINUTE1.CAPTION=[nn] Minute (2 digits) TFRMMULTIRENAME.MISECOND.CAPTION=[s] Second TFRMMULTIRENAME.MISECOND1.CAPTION=[ss] Second (2 digits) TFRMMULTIRENAME.N5.CAPTION=- TFRMMULTIRENAME.MIPLUGIN.CAPTION=Plugin TFRMMULTIRENAME.MNULOADFROMFILE.CAPTION=Load names from file... TFRMMULTIRENAME.MNUEDITNAMES.CAPTION=Edit names... doublecmd-0.9.8/src/fmultirename.lfm0000644000175000001440000005022313335335257016520 0ustar alexxusersobject frmMultiRename: TfrmMultiRename Left = 299 Height = 465 Top = 143 Width = 803 ActiveControl = edName Caption = 'MultiRename' ClientHeight = 465 ClientWidth = 803 OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width;WindowState;Left;Top' ShowInTaskBar = stAlways LCLVersion = '1.8.4.0' object StringGrid: TStringGrid Left = 6 Height = 244 Top = 6 Width = 791 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 = 290 end> ExtendedSelect = False FixedCols = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goSmoothScroll] RowCount = 1 TabOrder = 0 TitleStyle = tsNative OnKeyDown = StringGridKeyDown OnMouseDown = StringGridMouseDown OnMouseUp = StringGridMouseUp OnResize = StringGridTopLeftChanged OnSelection = StringGridSelection OnTopLeftChanged = StringGridTopLeftChanged ColWidths = ( 248 249 290 ) end object pnlOptions: TPanel Left = 6 Height = 203 Top = 256 Width = 791 Align = alBottom AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 203 ClientWidth = 791 TabOrder = 1 object gbMaska: TGroupBox AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 111 Top = 0 Width = 342 AutoSize = True Caption = 'Mask' ClientHeight = 91 ClientWidth = 338 TabOrder = 0 object lbName: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = gbMaska Left = 6 Height = 15 Top = 1 Width = 53 BorderSpacing.Left = 6 BorderSpacing.Top = 1 Caption = 'File &Name' FocusControl = edName ParentColor = False end object lbExt: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = cmbNameStyle AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 51 Width = 50 BorderSpacing.Left = 6 BorderSpacing.Top = 10 Caption = '&Extension' FocusControl = edExt ParentColor = False end object edName: TEdit AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbName AnchorSideTop.Side = asrBottom Left = 6 Height = 23 Top = 18 Width = 136 BorderSpacing.Left = 6 BorderSpacing.Top = 2 OnChange = cmbNameStyleChange TabOrder = 0 end object edExt: TEdit Tag = 25 AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbExt AnchorSideTop.Side = asrBottom Left = 6 Height = 23 Top = 68 Width = 136 BorderSpacing.Left = 6 BorderSpacing.Top = 2 OnChange = cmbNameStyleChange TabOrder = 3 end object btnNameMenu: TButton AnchorSideLeft.Control = edName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edName AnchorSideBottom.Control = edName AnchorSideBottom.Side = asrBottom Left = 146 Height = 23 Top = 18 Width = 20 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnNameMenuClick PopupMenu = ppNameMenu TabOrder = 1 end object btnExtMenu: TButton AnchorSideLeft.Control = edExt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edExt AnchorSideBottom.Control = edExt AnchorSideBottom.Side = asrBottom Left = 146 Height = 23 Top = 68 Width = 20 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnExtMenuClick PopupMenu = ppNameMenu TabOrder = 4 end object cmbNameStyle: TComboBox AnchorSideLeft.Control = btnNameMenu AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnNameMenu AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 170 Height = 23 Top = 18 Width = 164 BorderSpacing.Left = 4 BorderSpacing.Right = 4 ItemHeight = 15 OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 2 end object cmbExtensionStyle: TComboBox AnchorSideLeft.Control = btnExtMenu AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnExtMenu AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 170 Height = 23 Top = 68 Width = 164 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Right = 4 ItemHeight = 15 OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 5 end end object gbFindReplace: TGroupBox AnchorSideLeft.Control = gbMaska AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbMaska AnchorSideRight.Control = gbCounter AnchorSideBottom.Side = asrBottom Left = 348 Height = 172 Top = 0 Width = 245 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = 'Find && Replace' ChildSizing.TopBottomSpacing = 2 ClientHeight = 152 ClientWidth = 241 TabOrder = 2 object lbFind: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = gbFindReplace Left = 6 Height = 15 Top = 6 Width = 32 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '&Find...' FocusControl = edFind ParentColor = False end object lbReplace: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = edFind AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 52 Width = 50 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Re&place...' FocusControl = edReplace ParentColor = False end object edFind: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbFind AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 23 Top = 23 Width = 233 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 2 BorderSpacing.Right = 4 OnChange = edFindChange TabOrder = 0 end object edReplace: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbReplace AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 23 Top = 69 Width = 233 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 2 BorderSpacing.Right = 4 OnChange = cmbNameStyleChange TabOrder = 1 end object cbRegExp: TCheckBox AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = edReplace AnchorSideTop.Side = asrBottom Left = 4 Height = 19 Top = 102 Width = 123 BorderSpacing.Left = 4 BorderSpacing.Top = 10 Caption = 'Regular e&xpressions' OnChange = cbRegExpChange TabOrder = 2 end object cbUseSubs: TCheckBox AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = cbRegExp AnchorSideTop.Side = asrBottom Left = 4 Height = 19 Top = 131 Width = 105 BorderSpacing.Left = 4 BorderSpacing.Top = 10 Caption = '&Use substitution' Enabled = False OnChange = cmbNameStyleChange TabOrder = 3 end end object gbCounter: TGroupBox AnchorSideLeft.Control = gbFindReplace AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindReplace AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 599 Height = 93 Top = 0 Width = 192 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = 'Counter' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 2 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.EnlargeVertical = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 73 ClientWidth = 188 TabOrder = 3 object lbStNb: TLabel Left = 6 Height = 15 Top = 4 Width = 71 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'S&tart Number' FocusControl = edPoc ParentColor = False end object edPoc: TEdit Left = 82 Height = 23 Top = 0 Width = 100 MaxLength = 10 OnChange = edPocChange TabOrder = 0 Text = '1' end object lbInterval: TLabel Left = 6 Height = 15 Top = 29 Width = 71 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Interval' FocusControl = edInterval ParentColor = False end object edInterval: TEdit Left = 82 Height = 23 Top = 25 Width = 100 MaxLength = 10 OnChange = edIntervalChange TabOrder = 2 Text = '1' end object lbWidth: TLabel Left = 6 Height = 15 Top = 54 Width = 71 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Width' FocusControl = cmbxWidth ParentColor = False end object cmbxWidth: TComboBox Left = 82 Height = 23 Top = 50 Width = 100 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( '01' '02' '03' '04' '05' '06' '07' '08' '09' '10' ) OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 1 Text = '01' end end object btnRename: TButton AnchorSideLeft.Control = btnRestore AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnRestore AnchorSideRight.Control = btnClose Left = 506 Height = 25 Top = 178 Width = 179 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = '&Rename' Constraints.MinWidth = 100 Default = True OnClick = btnRenameClick TabOrder = 6 end object btnClose: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnRename AnchorSideRight.Control = gbCounter AnchorSideRight.Side = asrBottom Left = 691 Height = 25 Top = 178 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 Cancel = True Caption = '&Close' Constraints.MinWidth = 100 OnClick = btnCloseClick TabOrder = 7 end object gbLog: TGroupBox AnchorSideLeft.Control = gbCounter AnchorSideTop.Control = gbCounter AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbCounter AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFindReplace AnchorSideBottom.Side = asrBottom Left = 599 Height = 79 Top = 93 Width = 192 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True Caption = 'Log Result' ClientHeight = 59 ClientWidth = 188 TabOrder = 4 object edFile: TEdit AnchorSideLeft.Control = gbLog AnchorSideTop.Control = cbLog AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbLog AnchorSideRight.Side = asrBottom Left = 4 Height = 23 Top = 25 Width = 180 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 4 BorderSpacing.Right = 4 TabOrder = 1 end object cbLog: TCheckBox AnchorSideLeft.Control = gbLog AnchorSideTop.Control = gbLog Left = 4 Height = 19 Top = 2 Width = 55 BorderSpacing.Left = 4 BorderSpacing.Top = 2 Caption = 'Ena&ble' OnClick = cbLogClick TabOrder = 0 end end object btnRestore: TButton AnchorSideLeft.Control = btnEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindReplace AnchorSideTop.Side = asrBottom Left = 400 Height = 25 Top = 178 Width = 100 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Reset &all' Constraints.MinWidth = 100 OnClick = btnRestoreClick TabOrder = 5 end object gbPresets: TGroupBox AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = gbMaska AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 0 Height = 88 Top = 111 Width = 342 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Presets' ClientHeight = 68 ClientWidth = 338 TabOrder = 1 object cbPresets: TComboBox AnchorSideLeft.Control = gbPresets AnchorSideTop.Control = gbPresets AnchorSideRight.Control = gbPresets AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 6 Width = 326 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 ItemHeight = 15 TabOrder = 0 end object btnLoadPreset: TButton AnchorSideLeft.Control = cbPresets AnchorSideTop.Control = cbPresets AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 37 Width = 100 AutoSize = True BorderSpacing.Top = 8 BorderSpacing.Bottom = 6 Caption = '&Load' Constraints.MinWidth = 100 OnClick = btnLoadPresetClick TabOrder = 1 end object btnSavePreset: TButton AnchorSideLeft.Control = cbPresets AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = btnLoadPreset Left = 119 Height = 25 Top = 37 Width = 100 AutoSize = True BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Save' Constraints.MinWidth = 100 OnClick = btnSavePresetClick TabOrder = 2 end object btnDeletePreset: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnSavePreset AnchorSideRight.Control = cbPresets AnchorSideRight.Side = asrBottom Left = 232 Height = 25 Top = 37 Width = 100 Anchors = [akTop, akRight] AutoSize = True Caption = '&Delete' Constraints.MinWidth = 100 OnClick = btnDeletePresetClick TabOrder = 3 end end object btnEdit: TButton AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = gbFindReplace AnchorSideTop.Side = asrBottom Left = 348 Height = 25 Top = 178 Width = 46 AutoSize = True BorderSpacing.Top = 6 Caption = '&Edit' OnClick = btnEditClick PopupMenu = pmEditDirect TabOrder = 8 end end object ppNameMenu: TPopupMenu AutoPopup = False left = 688 top = 88 object miNextName: TMenuItem Caption = 'Name...' object miName: TMenuItem Caption = '[N] Name' OnClick = NameClick end object miNameX: TMenuItem Caption = '[Nx] Character at position x' OnClick = NameXClick end object miNameXX: TMenuItem Caption = '[Nx:y] Characters from position x to y' OnClick = NameXXClick end end object N1: TMenuItem Caption = '-' end object miNextExtension: TMenuItem Caption = 'Extension...' object Extension: TMenuItem Caption = '[E] Extension' OnClick = ExtensionClick end object miExtensionX: TMenuItem Caption = '[Ex] Character at position x' OnClick = ExtensionXClick end object miExtensionXX: TMenuItem Caption = '[Ex:y] Characters from position x to y' OnClick = ExtensionXXClick end end object N2: TMenuItem Caption = '-' end object miCounter: TMenuItem Caption = '[C] Counter' OnClick = CounterClick end object N3: TMenuItem Caption = '-' end object miNext: TMenuItem Caption = 'Time...' object miYear: TMenuItem Caption = '[Y] Year (2 digits)' OnClick = miYearClick end object miYear1: TMenuItem Caption = '[YYYY] Year (4 digits)' OnClick = miYear1Click end object miMonth: TMenuItem Caption = '[M] Month' OnClick = miMonthClick end object miMonth1: TMenuItem Caption = '[MM] Month (2 digits)' OnClick = miMonth1Click end object miMonth2: TMenuItem Caption = '[MMM] Month name (short, e.g., "jan")' OnClick = miMonth2Click end object miMonth3: TMenuItem Caption = '[MMMM] Month name (long, e.g., "january")' OnClick = miMonth3Click end object miDay: TMenuItem Caption = '[D] Day' OnClick = miDayClick end object miDay1: TMenuItem Caption = '[DD] Day (2 digits)' OnClick = miDay1Click end object miDay2: TMenuItem Caption = '[DDD] Day of the week (short, e.g., "mon")' OnClick = miDay2Click end object miDay3: TMenuItem Caption = '[DDDD] Day of the week (long, e.g., "monday")' OnClick = miDay3Click end object N4: TMenuItem Caption = '-' end object miHour: TMenuItem Caption = '[h] Hour' OnClick = miHourClick end object miHour1: TMenuItem Caption = '[hh] Hour (2 digits)' OnClick = miHour1Click end object miMinute: TMenuItem Caption = '[n] Minute' OnClick = miMinuteClick end object miMinute1: TMenuItem Caption = '[nn] Minute (2 digits)' OnClick = miMinute1Click end object miSecond: TMenuItem Caption = '[s] Second' OnClick = miSecondClick end object miSecond1: TMenuItem Caption = '[ss] Second (2 digits)' OnClick = miSecond1Click end end object N5: TMenuItem Caption = '-' end object miPlugin: TMenuItem Caption = 'Plugin' end end object pmEditDirect: TPopupMenu left = 475 top = 97 object mnuLoadFromFile: TMenuItem Caption = 'Load names from file...' OnClick = mnuLoadFromFileClick end object mnuEditNames: TMenuItem Caption = 'Edit names...' OnClick = mnuEditNamesClick end end end doublecmd-0.9.8/src/fmodview.pas0000644000175000001440000001735312646706137015667 0ustar alexxusersunit fModView; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ButtonPanel, 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; rbBmp: TRadioButton; rbIco: TRadioButton; rbJpg: TRadioButton; rbPath1: TRadioButton; rbPath2: TRadioButton; rbPath3: TRadioButton; rbPath4: TRadioButton; rbPath5: TRadioButton; rbPng: TRadioButton; rbPnm: TRadioButton; sddCopyMoveFile: TSelectDirectoryDialog; tbQuality: TTrackBar; teHeight: TEdit; tePath1: TEdit; tePath2: TEdit; tePath3: TEdit; tePath4: TEdit; tePath5: TEdit; teQuality: TEdit; 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 rbBmpChange(Sender: TObject); procedure rbIcoChange(Sender: TObject); procedure rbJpgChange(Sender: TObject); procedure rbPngChange(Sender: TObject); procedure rbPnmChange(Sender: TObject); procedure tbQualityMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure teHeightKeyPress(Sender: TObject; var Key: char); procedure teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure teQualityKeyPress(Sender: TObject; var Key: char); procedure teQualityKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure teWidthKeyPress(Sender: TObject; var Key: char); procedure teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } prX, prY: integer; public Path, sExt : 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 sExt:= '.jpg'; tbQuality.Enabled:=true; lblQuality.Enabled:=True; end; end; procedure TfrmModView.rbBmpChange(Sender: TObject); begin sExt:='.bmp'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbIcoChange(Sender: TObject); begin sExt:='.ico'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbJpgChange(Sender: TObject); begin sExt:='.jpg'; tbQuality.Enabled:=True; teQuality.Enabled:=True; lblQuality.Enabled:=True; end; procedure TfrmModView.rbPngChange(Sender: TObject); begin sExt:='.png'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbPnmChange(Sender: TObject); begin sExt:='.pnm'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.tbQualityMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin teQuality.Text:= intToStr(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.teQualityKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teQualityKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if StrToInt(teQuality.Text)<=100 then tbQuality.Position:=StrToInt(teQuality.Text); 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-0.9.8/src/fmodview.lrt0000644000175000001440000000132712646706137015677 0ustar alexxusersTFRMMODVIEW.CAPTION=New Size TFRMMODVIEW.LBLQUALITY.CAPTION=Quality of compress to Jpg TFRMMODVIEW.TEQUALITY.TEXT=80 TFRMMODVIEW.RBJPG.CAPTION=JPG TFRMMODVIEW.RBBMP.CAPTION=BMP TFRMMODVIEW.RBPNG.CAPTION=PNG TFRMMODVIEW.RBICO.CAPTION=ICO TFRMMODVIEW.RBPNM.CAPTION=PNM TFRMMODVIEW.BTNPATH1.CAPTION=... TFRMMODVIEW.BTNPATH2.CAPTION=... TFRMMODVIEW.BTNPATH3.CAPTION=... TFRMMODVIEW.BTNPATH4.CAPTION=... TFRMMODVIEW.BTNPATH5.CAPTION=... TFRMMODVIEW.LBLPATH1.CAPTION=1 TFRMMODVIEW.LBLPATH2.CAPTION=2 TFRMMODVIEW.LBLPATH3.CAPTION=3 TFRMMODVIEW.LBLPATH4.CAPTION=4 TFRMMODVIEW.LBLPATH5.CAPTION=5 TFRMMODVIEW.LBLHEIGHT.CAPTION=Height : TFRMMODVIEW.LBLWIDTH.CAPTION=Width : TFRMMODVIEW.TEWIDTH.TEXT=Width TFRMMODVIEW.TEHEIGHT.TEXT=Height doublecmd-0.9.8/src/fmodview.lfm0000644000175000001440000004322712646706137015661 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 = '1.6.0.3' 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 Left = 0 Height = 22 Top = 71 Width = 140 Max = 100 Min = 1 Position = 80 OnMouseMove = tbQualityMouseMove 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: TEdit Left = 144 Height = 23 Top = 71 Width = 43 OnKeyPress = teQualityKeyPress OnKeyUp = teQualityKeyUp TabOrder = 1 Text = '80' end object rbJpg: TRadioButton Left = 8 Height = 19 Top = 0 Width = 39 Caption = 'JPG' Checked = True OnChange = rbJpgChange TabOrder = 2 TabStop = True end object rbBmp: TRadioButton Left = 59 Height = 19 Top = 0 Width = 45 Caption = 'BMP' OnChange = rbBmpChange TabOrder = 3 end object rbPng: TRadioButton Left = 112 Height = 19 Top = 0 Width = 44 Caption = 'PNG' OnChange = rbPngChange TabOrder = 4 end object rbIco: TRadioButton Left = 29 Height = 19 Top = 22 Width = 40 Caption = 'ICO' OnChange = rbIcoChange TabOrder = 5 end object rbPnm: TRadioButton Left = 88 Height = 19 Top = 21 Width = 47 Caption = 'PNM' OnChange = rbPnmChange TabOrder = 6 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 = { 4C69020000000900000018000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000535755565357 55FF535755FF535755FF535755FF535755FF5357555600000000000000005357 55FF8E8D8DFFE9E8E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF000000000000 0000535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF0000 000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357 55FF0000000000000000535755FFE9E8E8FF535755FF00000000535755FFE9E8 E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF000000005357 55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF858A 88FF535755FFE9E8E8FF535755FF0000000000000000535755FF918F8FFF3634 2EFFECEEEEFF858A88FF918F8FFF535755FF0000000000000000535755445357 55FF36342EFFECEEEEFF858A88FF535755FF5357555600000000000000000000 00000000000036342EFFECEEEEFF858A88FF0000000000000000000000000000 0000000000000000000036342EFFECEEEEFF858A88FF00000000000000000000 00000000000053575544535755FF36342EFFECEEEEFF858A88FF535755FF5357 55440000000000000000535755FF999898FF36342EFFECEEEEFF858A88FF9795 95FF535755FF0000000000000000535755FFE9E8E8FF535755FF36342EFF5357 55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF0000 0000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF5357 55FF00000000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8 E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF000000000000 0000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9B9FF535755FF0000 00005357550053575556535755FF535755FF535755FF535755FF535755FF5357 5556000000000000000000000000000000000000000000000000000000000000 0000535755000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000053575556535755FF535755FF5357 55FF535755FF535755FF535755560000000000000000535755FF8E8D8DFFE9E8 E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF0000000000000000535755FFE9E8 E8FF535755FF535755FF535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF000000000000 0000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF0000 000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357 55FF0000000000000000535755FFE9E8E8FF535755FF858A88FF535755FFE9E8 E8FF535755FF0000000000000000535755FF918F8FFF36342EFFECEEEEFF858A 88FF918F8FFF535755FF000000000000000053575544535755FF36342EFFECEE EEFF858A88FF535755FF53575556000000000000000053575500918F8F003634 2EFFECEEEEFF858A88FF918F8F00535755000000000000000000535755005357 550036342E00ECEEEE00858A8800535755005357550000000000000000000000 00000000000036342E00ECEEEE00858A88000000000000000000000000000000 0000000000000000000036342E00ECEEEE00858A880000000000000000000000 000000000000535755005357550036342E00ECEEEE00858A8800535755005357 55000000000000000000535755009998980036342EFFECEEEEFF858A88FF9795 950053575500000000000000000053575544535755FF36342EFFECEEEEFF858A 88FF535755FF535755440000000000000000535755FF999898FF36342EFFECEE EEFF858A88FF979595FF535755FF0000000000000000535755FFE9E8E8FF5357 55FF36342EFF535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8 E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF000000000000 0000535755FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF0000 000053575500535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF5357 55FF0000000000000000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9 B9FF535755FF000000000000000053575556535755FF535755FF535755FF5357 55FF535755FF5357555600000000 } end end doublecmd-0.9.8/src/fmkdir.pas0000644000175000001440000000264611740433676015321 0ustar alexxusersunit fMkDir; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls; type { TfrmMkDir } TfrmMkDir = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; cbMkDir: TComboBox; lblMakeDir: TLabel; pnlButtons: TPanel; pnlBottom: TPanel; procedure FormKeyPress(Sender: TObject; var Key: Char); public function ShowMkDir(var sPath:string):Boolean; // 21.05.2009 - перенес в public end; var frmMkDir: TfrmMkDir; // 21.05.2009 - создаем из файла проекта implementation {$R *.lfm} procedure TfrmMkDir.FormKeyPress(Sender: TObject; var Key: Char); begin inherited; if Key=#27 then begin ModalResult:=mrCancel; Key := #0; end else if Key=#13 then begin ModalResult:=mrOK; Key:=#0; end; end; Function TfrmMkDir.ShowMkDir(var sPath:string):Boolean; var Index: Integer; const MAX_LINES = 20; begin ActiveControl := cbMkDir; if (sPath <> '..') then cbMkDir.Text := sPath else cbMkDir.Text := ''; cbMkDir.SelectAll; Result := (ShowModal = mrOK); sPath := cbMkDir.Text; If Result then begin Index := cbMkDir.Items.IndexOf(cbMkDir.Text); if (Index = -1) then cbMkDir.Items.Insert(0, cbMkDir.Text) else cbMkDir.Items.Move(Index, 0); if (cbMkDir.Items.Count > MAX_LINES) then cbMkDir.Items.Delete(cbMkDir.Items.Count - 1); end; end; end. doublecmd-0.9.8/src/fmkdir.lrt0000644000175000001440000000023712023046500015306 0ustar alexxusersTFRMMKDIR.CAPTION=Create new directory TFRMMKDIR.LBLMAKEDIR.CAPTION=&Input new directory name: TFRMMKDIR.BTNOK.CAPTION=&OK TFRMMKDIR.BTNCANCEL.CAPTION=&Cancel doublecmd-0.9.8/src/fmkdir.lfm0000644000175000001440000000450712023046500015267 0ustar alexxusersobject frmMkDir: TfrmMkDir Left = 366 Height = 77 Top = 429 Width = 350 ActiveControl = cbMkDir AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create new directory' ClientHeight = 77 ClientWidth = 350 Constraints.MinHeight = 50 Constraints.MinWidth = 350 KeyPreview = True OnKeyPress = FormKeyPress Position = poScreenCenter LCLVersion = '1.1' object lblMakeDir: TLabel Left = 6 Height = 18 Top = 3 Width = 338 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 3 BorderSpacing.Right = 6 Caption = '&Input new directory name:' FocusControl = cbMkDir ParentColor = False end object cbMkDir: TComboBox Left = 6 Height = 28 Top = 21 Width = 338 Align = alTop AutoComplete = True AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactRetainPrefixCase, cbactSearchAscending] BorderSpacing.Left = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 3 DropDownCount = 5 ItemHeight = 0 TabOrder = 0 end object pnlBottom: TPanel Left = 6 Height = 36 Top = 55 Width = 338 Align = alTop AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 338 TabOrder = 1 object pnlButtons: TPanel Left = 192 Height = 36 Top = 0 Width = 146 Align = alRight AutoSize = True BevelOuter = bvNone ClientHeight = 36 ClientWidth = 146 TabOrder = 0 object btnOK: TBitBtn Left = 0 Height = 36 Top = 0 Width = 59 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 50 Default = True Kind = bkOK ModalResult = 1 TabOrder = 0 end object btnCancel: TBitBtn Left = 62 Height = 36 Top = 0 Width = 84 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 50 Kind = bkCancel ModalResult = 2 TabOrder = 1 end end end end doublecmd-0.9.8/src/fmaskinputdlg.pas0000644000175000001440000001551613020647235016704 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 sTemplateName: string; begin if lbxSearchTemplate.ItemIndex >= 0 then sTemplateName := lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; if ShowDefineTemplateDlg(sTemplateName) then begin lbxSearchTemplate.ItemIndex := lbxSearchTemplate.Items.Add(sTemplateName); 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-0.9.8/src/fmaskinputdlg.lrt0000644000175000001440000000103613017214262016706 0ustar alexxusersTFRMMASKINPUTDLG.LBLPROMPT.CAPTION=Input Mask: TFRMMASKINPUTDLG.CHKCASESENSITIVE.CAPTION=Case sensitive TFRMMASKINPUTDLG.CHKIGNOREACCENTSANDLIGATURES.CAPTION=Ignore accents and ligatures TFRMMASKINPUTDLG.LBLSEARCHTEMPLATE.CAPTION=O&r select predefined selection type: TFRMMASKINPUTDLG.BTNDEFINETEMPLATE.CAPTION=&Define... TFRMMASKINPUTDLG.BTNOK.CAPTION=&OK TFRMMASKINPUTDLG.BTNCANCEL.CAPTION=&Cancel TFRMMASKINPUTDLG.LBLATTRIBUTES.CAPTION=Attri&butes: TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION=&Add TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION=&Help doublecmd-0.9.8/src/fmaskinputdlg.lfm0000644000175000001440000001375613103644345016704 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-0.9.8/src/fmaincommandsdlg.pas0000644000175000001440000004257613216301337017342 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-0.9.8/src/fmaincommandsdlg.lrt0000644000175000001440000000170512467752466017371 0ustar alexxusersTFRMMAINCOMMANDSDLG.CAPTION=Select your internal command TFRMMAINCOMMANDSDLG.LBLCATEGORY.CAPTION=&Categories: TFRMMAINCOMMANDSDLG.LBLCOMMANDNAME.CAPTION=Command &name: TFRMMAINCOMMANDSDLG.LBLHINT.CAPTION=Hint: TFRMMAINCOMMANDSDLG.LBLEDTFILTER.EDITLABEL.CAPTION=&Filter: TFRMMAINCOMMANDSDLG.BTNOK.CAPTION=&OK TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION=&Cancel TFRMMAINCOMMANDSDLG.CBCATEGORYSORTORNOT.TEXT=Legacy sorted TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT=Legacy sorted TFRMMAINCOMMANDSDLG.GBSELECTION.CAPTION=Selection: TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMAND.CAPTION=cm_name TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHINT.CAPTION=Hint TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION=Help TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION=Hotkey TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION=Category TFRMMAINCOMMANDSDLG.CBSELECTALLCATEGORYDEFAULT.CAPTION=Select all categories by default TFRMMAINCOMMANDSDLG.LBLHOTKEY.CAPTION=Hotkey: doublecmd-0.9.8/src/fmaincommandsdlg.lfm0000644000175000001440000002524613367712446017346 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-0.9.8/src/fmain.pas0000644000175000001440000060204413611061256015123 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Licence : GNU GPL v 2.0 Copyright (C) 2006-2018 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, uCmdBox, uFilePanelSelect, uBriefFileView, uFileView, uFileSource, uFileViewNotebook, uFile, LCLVersion, uOperationsManager, uFileSourceOperation, uDrivesList, uTerminal, DCClassesUtf8, DCXmlConfig, uDrive, uDriveWatcher, uDCVersion, uMainCommands, uFormCommands, uOperationsPanel, KASToolItems, uKASToolItemsExtended, uCmdLineParams, uOSForms {$IF DEFINED(LCLQT)} , Qt4, QtWidgets {$ELSEIF DEFINED(LCLQT5)} , Qt5, QtWidgets {$ELSEIF DEFINED(LCLGTK2)} , Glib2, Gtk2 {$ENDIF} , Types; type TForEachViewFunction = procedure (AFileView: TFileView; UserData: Pointer) of object; { TfrmMain } TfrmMain = class(TAloneForm, IFormCommands) actExtractFiles: TAction; actAddPathToCmdLine: TAction; actFileAssoc: TAction; actFocusCmdLine: TAction; actContextMenu: TAction; actCopyNamesToClip: TAction; actCopyFullNamesToClip: TAction; actCutToClipboard: TAction; actCopyToClipboard: 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; actGoToFirstFile: TAction; actGoToLastFile: TAction; actCompareDirectories: TAction; actCmdLineNext: TAction; actCmdLinePrev: TAction; actBriefView: TAction; actColumnsView: TAction; actChangeDirToHome: TAction; actCopyFileDetailsToClip: TAction; actFlatView: 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; 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; 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; 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: TPanel; pnlDskRight: TPanel; pnlDiskRightInner: TPanel; 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; 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: TPanel; 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 FormKeyUp( Sender: TObject; var {%H-}Key: Word; Shift: TShiftState) ; function MainToolBarToolItemShortcutsHint(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 dskLeftResize(Sender: TObject); procedure dskRightResize(Sender: TObject); 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 btnVirtualDriveClick(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 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; bIndUseGradient:boolean; pIndForeColor,pIndBackColor:TColor); procedure seLogWindowSpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); function FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; 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 OnCmdBoxInput(ACmdBox: TCmdBox; AInput: String); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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: TCmdBox; 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; // 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; 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 AddVirtualDriveButton(dskPanel: TKASToolBar); 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); procedure UpdateSelectedDrive(ANoteBook: TFileViewNotebook); procedure OnDriveWatcherEvent(EventType: TDriveWatcherEvent; const ADrive: PDrive); procedure AppActivate(Sender: TObject); procedure AppDeActivate(Sender: TObject); procedure AppEndSession(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(Button: TKASToolButton); procedure ToolbarExecuteCommand(ToolItem: TKASToolItem); procedure ToolbarExecuteProgram(ToolItem: TKASToolItem); procedure LeftDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure RightDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure SetDragCursor(Shift: TShiftState); protected procedure CreateWnd; override; {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} 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 ViewHistorySelected(Sender:TObject); procedure ViewHistoryPrevSelected(Sender:TObject); procedure ViewHistoryNextSelected(Sender:TObject); procedure CreatePopUpDirHistory; 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 UpdateShellTreeView; procedure UpdateTreeViewPath; procedure UpdateTreeView; procedure UpdateDiskCount; procedure UpdateSelectedDrives; procedure UpdateGUIFunctionKeys; procedure CreateDiskPanel(dskPanel : TKASToolBar); 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 LoadWindowState; procedure SaveWindowState; procedure LoadMainToolbar; procedure SaveMainToolBar; 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); procedure ReLoadTabs(ANoteBook: TFileViewNotebook); 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 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; end; var frmMain: TfrmMain; Cons: TConsoleThread = nil; implementation {$R *.lfm} uses 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 {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$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)} var LastActiveWindow: TCustomForm = nil; {$ENDIF} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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')); 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; 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; end; function GenerateTitle():String; var ServernameString: String; begin ServernameString := ''; if Length(UniqueInstance.ServernameByUser) > 0 then ServernameString := ' [' + UniqueInstance.ServernameByUser + ']'; Result := Format('%s%s %s build %s; %s', ['Double Commander', ServernameString, dcVersion, dcRevision, dcBuildDate] ); 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; // Use LCL's method of dropping files from external // applications if we don't support it ourselves. if not IsExternalDraggingSupported then frmMain.OnDropFiles := @FormDropFiles; {$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; //Caption of main window Self.Caption := 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; AllowDropFiles := not uDragDropEx.IsExternalDraggingSupported; MainToolBar.AddToolItemExecutor(TKASCommandItem, @ToolbarExecuteCommand); MainToolBar.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* } lastWindowState:= WindowState; UpdateActionIcons; LoadTabs; // Must be after LoadTabs TDriveWatcher.Initialize(Handle); TDriveWatcher.AddObserver(@OnDriveWatcherEvent); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} // 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} 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); UpdateFreeSpace(fpRight); 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 > MIN_FONT_SIZE_FUNCTION_BUTTONS) 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 < MAX_FONT_SIZE_FUNCTION_BUTTONS) 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.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.Height := nbConsole.Height + NewSize - pnlCommand.Height; 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); SaveMainToolBar; SaveGlobs; // Save toolbar and hotkeys mbRenameFile(BarFileName, BarFileName + '.obsolete'); finally ToolBarLoader.Free; end; end; end; end; procedure TfrmMain.dskLeftResize(Sender: TObject); begin pnlDskLeft.ClientHeight := dskLeft.Height + pnlDskLeft.BevelWidth * 2; pnlDiskLeftInner.ClientHeight := dskLeft.Height + pnlDiskLeftInner.BevelWidth * 2; end; procedure TfrmMain.dskRightResize(Sender: TObject); begin pnlDskRight.ClientHeight := dskRight.Height + pnlDskRight.BevelWidth * 2; pnlDiskRightInner.ClientHeight := dskRight.Height + pnlDiskRightInner.BevelWidth * 2; 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(GetKeyShiftState, mbLeft) 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(Button: TKASToolButton); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsToolbar); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsToolbar); if Assigned(Button) then begin (Editor as TfrmOptionsToolbar).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; begin if (ssShift in GetKeyShiftState) then // Button was moved. SaveMainToolBar 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; begin 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); MainToolBar.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 (NumberOfMoveButton <> (Sender as TSpeedButton).Tag) then begin Draging := True; if Source is TSpeedButton then MainToolBar.MoveButton((Source as TSpeedButton).Tag, (Sender as TSpeedButton).Tag) else begin tmp:= (Sender as TSpeedButton).Tag; MainToolBar.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(ToolItem: TKASNormalItem): String; begin Result := ShortcutsToText(TfrmOptionsToolbar.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; TDriveWatcher.RemoveObserver(@OnDriveWatcherEvent); TDriveWatcher.Finalize; DCDebug('Drive watcher finished'); // Close all tabs. CloseNotebook(LeftTabs); CloseNotebook(RightTabs); FreeAndNil(DrivesList); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} QObject_hook_destroy(QEventHook); {$ENDIF} DCDebug('Main form destroyed'); end; procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if OperationsManager.OperationsCount > 0 then begin CanClose := MessageDlg(rsMsgFileOperationsActive, rsMsgFileOperationsActiveLong + LineEnding + rsMsgConfirmQuit, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes; end else CanClose := True; {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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), 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(SourceFileName, TargetFileName, TargetPath)) or ((Operation = ddoHardLink) and ShowHardLinkForm(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 APoint: TPoint; Rect: TRect; sHint: String; 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 FMainSplitterPos:= MainSplitter.Left * 100 / (pnlNotebooks.Width-MainSplitter.Width) else FMainSplitterPos:= MainSplitter.Top * 100 / (pnlNotebooks.Height-MainSplitter.Height); // 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; begin if not (Source is TSpeedButton) and not Draging and (ssShift in GetKeyShiftState) 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.Hint := ExtractOnlyFileName(aFile.Name); // ToolItem.Text := ExtractOnlyFileName(aFile.Name); ToolItem.Icon := aFile.FullPath; MainToolBar.AddButton(ToolItem); end; finally FreeAndNil(aFile); end; end; SaveMainToolBar; Draging := False; end; procedure TfrmMain.MainToolBarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var aFile: TFile; begin if (ssShift in GetKeyShiftState) and not (Source is TSpeedButton) then begin aFile := ActiveFrame.CloneActiveFile; try Accept := Assigned(aFile) and aFile.IsNameValid; finally FreeAndNil(aFile); end; end else Accept := false; 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 Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then begin if msgYesNo(Format(rsMsgDelSel, [Button.Hint])) then begin MainToolBar.RemoveButton(Button); SaveMainToolBar; end; end; end; procedure TfrmMain.dskLeftToolButtonClick(Sender: TObject); begin PanelButtonClick(Sender as TKASToolButton, FrameLeft); end; procedure TfrmMain.btnVirtualDriveClick(Sender: TObject); var TargetPanel: TFileView; begin if gDriveBar1 and gDriveBar2 then begin if (Sender as TSpeedButton).Parent = dskLeft then TargetPanel := FrameLeft else TargetPanel := FrameRight; end else TargetPanel := ActiveFrame; Commands.DoOpenVirtualFileSystemList(TargetPanel); 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 pmToolBar.Tag := PtrInt(Sender) else pmToolBar.Tag := 0; 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); begin 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); end; end; if Assigned(QuickViewPanel) then Commands.cm_QuickView(['Close']); UpdatePrompt; UpdateTreeViewPath; 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.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); 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; procedure AddCommand(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. MainToolBar.AddButton(CommandItem); end; procedure AddSeparator; begin MainToolBar.AddButton(TKASSeparatorItem.Create); end; var MainToolBarNode: TXmlNode; begin if MainToolBar.ButtonCount = 0 then begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if not Assigned(MainToolBarNode) then begin 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_Search'); AddCommand('cm_MultiRename'); AddCommand('cm_SyncDirs'); AddCommand('cm_CopyFullNamesToClip'); SaveMainToolBar; 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; var I: Integer; MenuItem: TMenuItem; begin pmDirHistory.Items.Clear; for I:= 0 to Min(gDirHistoryCount, glsDirHistory.Count - 1) do begin MenuItem:= TMenuItem.Create(pmDirHistory); MenuItem.Caption:= glsDirHistory[I].Replace('&','&&'); MenuItem.Hint:= glsDirHistory[I]; MenuItem.OnClick:= @HistorySelected; 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 := ((frmMain.ActiveFrame.ClientToScreen(Classes.Point(0, 0)).y + frmMain.ActiveFrame.Height) - p.y) 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.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 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 + 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(Application, 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; GetDestinationPathAndMask(SourceFiles, SourceFileSource, TargetFileSource, sDestination, SourceFiles.Path, 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; 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(Application, 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; {$if lcl_fullversion >= 1070000} 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; {$endif} procedure TfrmMain.FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ; begin SetDragCursor(Shift); 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 // Select opposite panel. case PanelSelected of fpLeft: SetActiveFrame(fpRight); fpRight: SetActiveFrame(fpLeft); else SetActiveFrame(fpLeft); 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 pnlDskLeft.Width := pnlNotebooks.Width - pnlRight.Width; // 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); begin if not FResizingFilePanels then begin FResizingFilePanels := True; if not gHorizontalFilePanels then pnlLeft.Width := Round(Double(pnlNotebooks.Width - MainSplitter.Width) * FMainSplitterPos / 100.0) else pnlLeft.Height := Round(Double(pnlNotebooks.Height - MainSplitter.Height) * FMainSplitterPos / 100.0); FResizingFilePanels := False; end; end; procedure TfrmMain.pnlRightResize(Sender: TObject); begin if gDriveBar1 and not gHorizontalFilePanels then begin if gDriveBar2 then pnlDskRight.Width := pnlRight.Width + 1 else pnlDskRight.Width := pnlNotebooks.Width - 2; end; end; procedure TfrmMain.sboxDrivePaint(Sender: TObject); begin PaintDriveFreeBar(Sender, gIndUseGradient, gIndForeColor, gIndBackColor); end; procedure TfrmMain.PaintDriveFreeBar(Sender: TObject; bIndUseGradient:boolean; pIndForeColor,pIndBackColor:TColor); 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; AColor := pIndForeColor; 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 <= 50 then AColor:= RGB(0 + 5 * i, 255, 0) else AColor:= RGB(255, 255 - 5 * (i - 50), 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; case LogMsgType of lmtInfo: FG := gLogInfoColor; lmtSuccess: FG := gLogSuccessColor; lmtError: FG := gLogErrorColor else FG := clWindowText; end; end; function TfrmMain.FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; const NewPath: String): Boolean; var ANoteBook: TFileViewNotebook; Page, NewPage: TFileViewPage; PageAlreadyExists: Boolean = False; i: Integer; 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.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; end; end; procedure TfrmMain.FileViewAfterChangePath(FileView: TFileView); var 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; 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); end; 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); 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.Terminal.SetCurrentDir(FileView.CurrentPath); end; 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 ReadOnly := True; RightClickSelect := True; FileSortType := fstFoldersFirst; PopulateWithBaseFiles; 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 ShellTreeView.Font.Color := gForeColor; ShellTreeView.BackgroundColor := gBackColor; ShellTreeView.SelectionColor := gCursorColor; 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; UpdateDriveList(DrivesList); // 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.AddVirtualDriveButton(dskPanel: TKASToolBar); const btnCaption = PathDelim + PathDelim; var bmpBitmap: TBitmap; ToolItem: TKASNormalItem; Button: TKASToolButton; begin (*virtual drive button*) ToolItem := TKASNormalItem.Create; ToolItem.Hint := StripHotkey(actOpenVirtualFileSystemList.Caption); ToolItem.Text := btnCaption; Button := dskPanel.AddButton(ToolItem); bmpBitmap:= PixMapManager.GetVirtualDriveIcon(dskPanel.GlyphSize, clBtnFace); try Button.Glyph.Assign(bmpBitmap); Button.GroupIndex := 0; Button.Layout := blGlyphLeft; Button.OnClick:= @btnVirtualDriveClick; finally bmpBitmap.Free; 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); 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 virtual drive button AddVirtualDriveButton(dskPanel); // 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 raise Exception.Create('Invalid file view type'); 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; if Assigned(QuickViewPanel) then 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); 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 // 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.OnCmdBoxInput(ACmdBox: TCmdBox; AInput: String); begin Cons.Terminal.Write_pty(AInput + LineEnding); ACmdBox.StartRead(clWhite, clBlack, ACmdBox.Hint, clWhite, clBlack); end; procedure TfrmMain.ToggleConsole; begin if gTermWindow then begin if not Assigned(cmdConsole) then begin cmdConsole:= TCmdBox.Create(pgConsole); cmdConsole.Parent:= pgConsole; cmdConsole.Align:= alClient; cmdConsole.AutoFollow:= True; cmdConsole.LineCount:= 256; cmdConsole.ShowHint:= False; cmdConsole.CaretType:= cartSubBar; cmdConsole.OnInput:= @OnCmdBoxInput; ShowScrollBar(cmdConsole.Handle, SB_Horz, False); FontOptionsToFont(gFonts[dcfConsole], cmdConsole.Font); cmdConsole.Hint:= Format(fmtCommandPath, [GetComputerNetName]); end; if gCmdLine then begin cmdConsole.Tag := 0; cmdConsole.StopRead; end else if cmdConsole.Tag = 0 then begin cmdConsole.Tag := MaxInt; cmdConsole.Writeln(EmptyStr); cmdConsole.StartRead(clWhite, clBlack, cmdConsole.Hint, clWhite, clBlack); end; if not Assigned(Cons) then begin Cons:= CreateConsoleThread; Cons.ColsCount:= 80; Cons.RowsCount:= cmdConsole.LineCount; Cons.CmdBox:= cmdConsole; Cons.Start; 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.ToggleFullscreenConsole; begin if nbConsole.Height < (nbConsole.Height + pnlNotebooks.Height - 1) then begin nbConsole.Height := nbConsole.Height + pnlNotebooks.Height; if (not gCmdLine) and cmdConsole.CanFocus then cmdConsole.SetFocus; end else begin nbConsole.Height := 0; if (not gCmdLine) and 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('Command not found! ('+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 for I := 0 to NoteBook.PageCount - 1 do // change on all tabs NoteBook.View[I].UpdateView; 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; end else begin pnlLeft.Align := alLeft; pnlLeft.BorderSpacing.Right := 3; pnlLeft.BorderSpacing.Bottom := 0; MainSplitter.Cursor := crHSplit; end; 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; 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; // Create disk panels after assigning parent. UpdateDiskCount; // Update list of showed drives (*/ Disk Panels *) FDrivesListPopup.UpdateView; (*Main menu*) Commands.DoShowMainMenu(gMainMenu); (*Tool Bar*) MainToolBar.Visible:= gButtonBar; MainToolBar.Flat:= gToolBarFlat; MainToolBar.GlyphSize:= gToolBarIconSize; MainToolBar.SetButtonSize(gToolBarButtonSize, gToolBarButtonSize); MainToolBar.ChangePath:= gpExePath; MainToolBar.EnvVar:= '%commander_path%'; LoadMainToolbar; 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; // 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; // 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); UpdateFreeSpace(fpRight); 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); 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; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then try 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 MainToolBar.RemoveButton(Button); SaveMainToolBar; finally ItemClone.Free; Serializer.Free; Stream.Free; end; end; procedure TfrmMain.tbEditClick(Sender: TObject); begin EditToolbarButton(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; begin Stream := TStringStream.Create(''); if Clipboard.GetFormat(PredefinedClipboardFormat(pcfText), Stream) then try Button := TKASToolButton(pmToolBar.Tag); // 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]; MainToolBar.InsertButton(Button, ProgramItem); SaveMainToolBar; 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); MainToolBar.InsertButton(Button, ToolItem); SaveMainToolBar; 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; sDir, sParams: String; sFilename: String = ''; Operation: TFileSourceExecuteOperation = nil; aFile: TFile = 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 iIndex:= Pos('cd ', sCmd); if (iIndex = 1) or (sCmd = '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.Terminal.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.Terminal.Write_pty(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; UpdatePrompt; 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; begin LoadTabsXml(gConfig,'Tabs/OpenedTabs/Left', nbLeft); LoadTabsXml(gConfig,'Tabs/OpenedTabs/Right', nbRight); 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 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; 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.LoadWindowState; var ANode: TXmlNode; FPixelsPerInch: Integer; ALeft, ATop, AWidth, AHeight: Integer; begin (* Load window bounds and state *) ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); begin MainSplitterPos := gConfig.GetValue(ANode, 'Splitter', 50.0); ALeft := gConfig.GetValue(ANode, 'Left', 80); ATop := gConfig.GetValue(ANode, 'Top', 48); AWidth := gConfig.GetValue(ANode, 'Width', 800); AHeight := gConfig.GetValue(ANode, 'Height', 480); FPixelsPerInch := gConfig.GetValue(ANode, 'PixelsPerInch', DesignTimePPI); if Scaled and (Screen.PixelsPerInch <> FPixelsPerInch) then begin AWidth := MulDiv(AWidth, Screen.PixelsPerInch, FPixelsPerInch); AHeight := MulDiv(AHeight, Screen.PixelsPerInch, FPixelsPerInch); end; SetBounds(ALeft, ATop, AWidth, AHeight); if gConfig.GetValue(ANode, 'Maximized', True) then Self.WindowState := wsMaximized; end; end; procedure TfrmMain.SaveWindowState; var ANode: TXmlNode; begin (* Save window bounds and state *) ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); // save window size only if it's not Maximized (for not break normal size) if (WindowState <> wsMaximized) then begin gConfig.SetValue(ANode, 'Left', Left); gConfig.SetValue(ANode, 'Top', Top); gConfig.SetValue(ANode, 'Width', Width); gConfig.SetValue(ANode, 'Height', Height); gConfig.SetValue(ANode, 'PixelsPerInch', Screen.PixelsPerInch); end; gConfig.SetValue(ANode, 'Maximized', (WindowState = wsMaximized)); gConfig.SetValue(ANode, 'Splitter', FMainSplitterPos); end; procedure TfrmMain.LoadMainToolbar; var ToolBarLoader: TKASToolBarExtendedLoader; ToolBarNode: TXmlNode; begin MainToolBar.BeginUpdate; ToolBarLoader := TKASToolBarExtendedLoader.Create(Commands.Commands); try MainToolBar.Clear; ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if Assigned(ToolBarNode) then MainToolBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader, tocl_FlushCurrentToolbarContent); finally ToolBarLoader.Free; MainToolBar.EndUpdate; end; end; procedure TfrmMain.SaveMainToolBar; var ToolBarNode: TXmlNode; begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True); gConfig.ClearNode(ToolBarNode); MainToolBar.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); begin try DebugLn('Saving configuration'); if gSaveCmdLineHistory then glsCmdLineHistory.Assign(edtCommand.Items); (* Save all tabs *) if gSaveFolderTabs or bForce then begin SaveTabsXml(gConfig, 'Tabs/OpenedTabs/', nbLeft, gSaveDirHistory); SaveTabsXml(gConfig, 'Tabs/OpenedTabs/', nbRight, gSaveDirHistory); end; if gSaveWindowState then SaveWindowState; if gButtonBar then SaveMainToolBar; 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 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 BitmapTmp: Graphics.TBitmap = nil; DriveIndex: Integer; Drive: PDrive; begin if not gDrivesListButton then Exit; DriveIndex := FindMatchingDrive(FileView.CurrentAddress, FileView.CurrentPath); if DriveIndex >= 0 then begin Drive := DrivesList[DriveIndex]; DriveButton.Caption := Drive^.DisplayName; DriveButton.Tag := DriveIndex; BitmapTmp := PixMapManager.GetDriveIcon(Drive, gDiskIconsSize, DriveButton.Color); end else begin DriveButton.Caption := ''; DriveButton.Tag := -1; 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; 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.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]); AButton.Font.Size := gFonts[dcfFunctionButtons].Size; 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)} 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)} 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)} // 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)} if Assigned(LastActiveWindow) then begin {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} 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; const PTLen = 40; var st: String; Properties: TFileSourceProperties; begin if (fsoExecute in ActiveFrame.FileSource.GetOperationsTypes) then begin with lblCommandPath do begin Visible := True; AutoSize := False; if UTF8Length(ActiveFrame.CurrentPath) > PTLen then st:= UTF8Copy(ActiveFrame.CurrentPath, UTF8Length(ActiveFrame.CurrentPath) - PTLen, PTLen) else st:= ActiveFrame.CurrentPath; // Caption := Format(fmtCommandPath, [st]); AutoSize := True; Left := 1; end; // Change path in terminal if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.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.UpdateFreeSpace(Panel: TFilePanelSelect); var FreeSize, TotalSize: Int64; aFileView: TFileView; sboxDrive: TPaintBox; lblDriveInfo: TLabel; begin case Panel of fpLeft : begin sboxDrive := pbxLeftDrive; aFileView := FrameLeft; lblDriveInfo:=lblLeftDriveInfo; end; fpRight: begin sboxDrive := pbxRightDrive; aFileView := FrameRight; lblDriveInfo:=lblRightDriveInfo; end; end; if aFileView.FileSource.GetFreeSpace(aFileView.CurrentPath, FreeSize, TotalSize) then begin if gDriveInd = True then begin if TotalSize > 0 then sboxDrive.Tag:= 100 - Round((FreeSize / TotalSize) * 100) // Save busy percent else sboxDrive.Tag := -1; sboxDrive.Invalidate; end; lblDriveInfo.Hint := Format(rsFreeMsg, [cnvFormatFileSize(FreeSize, uoscHeaderFooter), cnvFormatFileSize(TotalSize, uoscHeaderFooter)]); //It's not an "operation" but most probably the closest wanted form. if gShortFormatDriveInfo then lblDriveInfo.Caption := Format(rsFreeMsgShort, [cnvFormatFileSize(FreeSize, uoscHeaderFooter)]) else lblDriveInfo.Caption := lblDriveInfo.Hint; sboxDrive.Hint := lblDriveInfo.Hint; end else begin lblDriveInfo.Caption := ''; lblDriveInfo.Hint := ''; sboxDrive.Hint := ''; sboxDrive.Tag := -1; sboxDrive.Invalidate; end; 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 // Hide progress bar if there are no operations if OperationsManager.OperationsCount = 0 then begin mnuAllOperProgress.Visible:= False; mnuAllOperPause.Visible:= False; mnuAllOperStart.Visible:= False; end else begin if gPanelOfOp = True then FOperationsPanel.UpdateView; if gProgInMenuBar = True then begin AllProgressPoint:= Round(OperationsManager.AllProgressPoint * 100); // Show in menu line mnuAllOperProgress.Caption:=IntToStr(AllProgressPoint) + ' %'; mnuAllOperProgress.Visible:= True; mnuAllOperPause.Visible:= True; mnuAllOperStart.Visible:= True; end; end; end; procedure TfrmMain.SetPanelDrive(aPanel: TFilePanelSelect; Drive: PDrive; ActivateIfNeeded: Boolean); var Index: Integer; DriveIndex: Integer; FoundPath: Boolean = False; aFileView, OtherFileView: TFileView; begin if (Drive^.DriveType in [dtSpecial, dtVirtual]) or IsAvailable(Drive, Drive^.AutoMount) 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 ChooseFileSource(aFileView, GetNetworkPath(Drive)); if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); Exit; end; // 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 OtherFileView.FileSource.IsClass(TFileSystemFileSource) and mbCompareFileNames(ExtractRootDir(OtherFileView.CurrentPath), ExcludeTrailingPathDelimiter(Drive^.Path)) and not mbCompareFileNames(OtherFileView.CurrentPath, aFileView.CurrentPath) and not gGoToRoot then begin FoundPath:= True; SetFileSystemPath(aFileView, OtherFileView.CurrentPath); end // Open latest path from history for chosen drive else if (gGoToRoot = False) and aFileView.FileSource.IsClass(TFileSystemFileSource) and not mbCompareFileNames(ExtractRootDir(aFileView.CurrentPath), ExcludeTrailingPathDelimiter(Drive^.Path)) 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:= gpExePath else if IsInPath(ADrive^.Path, NotActiveFrame.CurrentPath, True, True) then NotActiveFrame.CurrentPath:= gpExePath; end; UpdateSelectedDrives; 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.AppQueryEndSession(var Cancel: Boolean); var CanClose: Boolean = True; begin FormCloseQuery(Self, CanClose); Cancel := not CanClose; end; {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} function TfrmMain.QObjectEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result:= False; if QEvent_type(Event) = QEventClose then begin TQtWidget(Self.Handle).SlotClose; Result:= CloseQueryResult; if Result then QEvent_accept(Event) else QEvent_ignore(Event); end; end; {$ENDIF} initialization {$I DragCursors.lrs} TFormCommands.RegisterCommandsForm(TfrmMain, HotkeysCategory, @rsHotkeyCategoryMain); end. doublecmd-0.9.8/src/fmain.lrj0000644000175000001440000013617113422141577015137 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":75582604,"name":"tfrmmain.actmultirename.caption","sourcebytes":[77,117,108,116,105,32,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":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":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":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":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":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":170156852,"name":"tfrmmain.actdoanycmcommand.caption","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":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-0.9.8/src/fmain.lfm0000644000175000001440000044377613467737150015151 0ustar alexxusersobject frmMain: TfrmMain Left = 485 Height = 370 Top = 269 Width = 760 Caption = 'Double Commander' ClientHeight = 370 ClientWidth = 760 KeyPreview = True OnClose = frmMainClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnKeyPress = FormKeyPress OnKeyUp = FormKeyUp OnShow = frmMainShow OnUTF8KeyPress = FormUTF8KeyPress OnWindowStateChange = FormWindowStateChange SessionProperties = 'nbConsole.Height;seLogWindow.Height;TreePanel.Width' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '1.8.4.0' Visible = True 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: TPanel AnchorSideTop.Control = MainToolBar Left = 0 Height = 24 Top = 0 Width = 634 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 634 FullRepaint = False TabOrder = 0 Visible = False object pnlDskLeft: TPanel AnchorSideLeft.Control = pnlDisk AnchorSideTop.Control = pnlDisk Left = 0 Height = 24 Top = 0 Width = 170 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 = [ebTop, ebBottom] Flat = True ShowCaptions = True TabOrder = 0 OnResize = dskLeftResize OnToolButtonClick = dskLeftToolButtonClick 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 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 = [ebTop, ebBottom] Flat = True ShowCaptions = True TabOrder = 0 OnResize = dskRightResize OnToolButtonClick = dskRightToolButtonClick 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: TPanel Left = 0 Height = 10 Top = 0 Width = 511 Align = alTop BevelOuter = bvNone TabOrder = 1 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 end end 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: TPanel Left = 0 Height = 10 Top = 0 Width = 123 Align = alTop BevelOuter = bvNone TabOrder = 1 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 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 ResizeAnchor = akBottom 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 = 0 Height = 15 Top = 6 Width = 24 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 = 4 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 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' 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 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 actSwitchIgnoreList: TAction Tag = 19 Category = 'View' Caption = 'Enable/disable ignore list file to not show file names' 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 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 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' Caption = 'Brief view' Hint = 'Brief View' OnExecute = actExecute end object actColumnsView: TAction Tag = 1 Category = 'Active Panel' Caption = 'Full' Hint = 'Columns View' OnExecute = actExecute end object actThumbnailsView: TAction Tag = 1 Category = 'Active Panel' Caption = 'Thumbnails' Hint = 'Thumbnails View' OnExecute = actExecute end object actFlatView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Flat view' OnExecute = actExecute end object actQuickView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Quick View Panel' 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' 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 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 = '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' end object actTreeView: TAction Tag = 16 Category = 'Window' Caption = '&Tree View Panel' 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 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 end doublecmd-0.9.8/src/flinker.pas0000644000175000001440000001336413404102631015455 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Take selected files and put them together to form one single file. 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 . 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(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, uGlobs; { ShowLinkerFilesForm: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} function ShowLinkerFilesForm(aFileSource: IFileSource; aFiles: TFiles; TargetPath: String): Boolean; var I: Integer; xFiles: TFiles = nil; Operation: TFileSourceCombineOperation = nil; begin with TfrmLinker.Create(Application) 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 if mbForceDirectory(ExtractFileDir(edSave.Text)) 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, edSave.Text) as TFileSourceCombineOperation; OperationsManager.AddOperation(Operation, QueueIdentifier, False); finally FreeThenNil(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 FreeThenNil(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, '*.*']); end; end. doublecmd-0.9.8/src/flinker.lrj0000644000175000001440000000226313404102631015455 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-0.9.8/src/flinker.lfm0000644000175000001440000001213512567136531015462 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 = poScreenCenter SessionProperties = 'Height;Width' inherited pnlContent: TPanel Height = 371 Width = 381 ClientHeight = 371 ClientWidth = 381 object gbSaveTo: TGroupBox[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = lstFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 76 Top = 290 Width = 381 Anchors = [akTop, akLeft, akRight] AutoSize = True 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] 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 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 Top = 383 Width = 381 ClientWidth = 381 inherited btnCancel: TBitBtn Left = 199 end inherited btnOK: TBitBtn Left = 293 end end object dlgSaveAll: TSaveDialog[3] Filter = 'All files|*.*' FilterIndex = 0 left = 288 top = 160 end end doublecmd-0.9.8/src/fileviews/0000755000175000001440000000000013615241422015312 5ustar alexxusersdoublecmd-0.9.8/src/fileviews/uthumbfileview.pas0000644000175000001440000005211513530175472021071 0ustar alexxusersunit uThumbFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Types, DCXmlConfig, uFileSource, uOrderedFileView, uDisplayFile, uFileViewWorker, uThumbnails, uFileView, uTypes, uFileViewWithGrid, uFile; type { TFileThumbnailsRetriever } TFileThumbnailsRetriever = class(TFileViewWorker) private FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FThumbnailManager: TThumbnailManager; FUpdateFileMethod: TUpdateFileMethod; 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; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; 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 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; 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 not Aborted and Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; procedure TFileThumbnailsRetriever.Execute; var I: Integer; Bitmap: TBitmap; begin for I := 0 to FFileList.Count - 1 do begin if Aborted then Exit; FWorkingFile := FFileList.Files[I]; FWorkingUserData := FFileList.Data[I]; try if FWorkingFile.Tag < 0 then begin Bitmap:= FThumbnailManager.CreatePreview(FWorkingFile.FSFile); if Assigned(Bitmap) then begin FWorkingFile.Tag := FBitmapList.Add(Bitmap); end; end; if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); except on EFileNotFound do; end; end; end; constructor TFileThumbnailsRetriever.Create(AFileSource: IFileSource; AThread: TThread; ABitmapList: TBitmapList; AUpdateFileMethod: TUpdateFileMethod; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FBitmapList := ABitmapList; FThumbnailManager := AThumbnailManager; FUpdateFileMethod := AUpdateFileMethod; end; destructor TFileThumbnailsRetriever.Destroy; begin FFileList.Free; inherited Destroy; 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; 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 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 s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; var X, Y: Integer; IconID: PtrInt; Bitmap: TBitmap; begin IconID := AFile.Tag; if (AFile.FSFile.IsDirectory = False) 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]; Y:= (ColWidths[ACol] - Canvas.TextWidth('W')); s:= FitFileName(s, Canvas, AFile.FSFile, Y); Canvas.TextOut(aRect.Left + 2, iTextTop, s); Canvas.Pen.Color:= InvertColor(gBackColor); 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); iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')); DrawIconCell; end else begin // Draw background. Canvas.Brush.Color := FThumbView.DimColor(gBackColor); Canvas.FillRect(aRect); end; DrawCellGrid(aCol, aRow, aRect, aState); DrawLines(Idx, aCol, aRow, aRect, aState); end; { TThumbFileView } 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). if UpdatedFile.Tag <> -1 then OrigDisplayFile.Tag := UpdatedFile.Tag; DoFileUpdated(OrigDisplayFile); end; procedure TThumbFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); tmMouseScroll.Interval := 200; FBitmapList:= TBitmapList.Create(True); FThumbnailManager:= TThumbnailManager.Create(gBackColor); 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.IsDirectory = False) 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.IsDirectory = False) then begin if not Assigned(AFileList) then AFileList := TFVWorkerFileList.Create; AFileList.AddClone(AFile, AFile); end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFileThumbnailsRetriever.Create( FileSource, WorkersThread, FBitmapList, @ThumbnailsRetrieverOnUpdate, 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; 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-0.9.8/src/fileviews/uorderedfileview.pas0000644000175000001440000006221413467737150021405 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; 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 IsFileIndexInRange(FileIndex: PtrInt): Boolean; inline; {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; aLastTopRowIndex: PtrInt = -1): Boolean; public procedure CloneTo(AFileView: TFileView); override; procedure SetActiveFile(aFilePath: String); override; overload; procedure ChangePathAndSetActiveFile(aFilePath: String); override; overload; published // commands procedure cm_QuickSearch(const Params: array of string); procedure cm_QuickFilter(const 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, uIMCode, uFileSourceProperty, uPixMapManager, uFileViewWorker, uFileProperty, uFileSource, uFile; const CANCEL_FILTER = 0; CANCEL_OPERATION = 1; { TOrderedFileView } procedure TOrderedFileView.AfterChangePath; begin if Filtered 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; end; end; end; procedure TOrderedFileView.cm_GoToFirstFile(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(0); end; end; procedure TOrderedFileView.cm_GoToLastFile(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(FFiles.Count - 1); 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); if Assigned(OnChangeActiveFile) then OnChangeActiveFile(Self, FFiles[NewFileIndex].FSFile); end; 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 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 (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); end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFilePropertiesRetriever.Create( FileSource, WorkersThread, AFilePropertiesNeeded, GetVariantFileProperties, @PropertiesRetrieverOnUpdate, 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.IsFileIndexInRange(FileIndex: PtrInt): Boolean; begin Result := InRange(FileIndex, 0, FFiles.Count - 1); 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 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; 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 Masks:= TMaskList.Create(SearchTerm, ';,', SearchOptions.SearchCase = qscSensitive); 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) or (Masks.Matches(MakeSpellCode(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; function TOrderedFileView.SetActiveFileNow(aFilePath: String; aLastTopRowIndex: PtrInt = -1): Boolean; procedure SetUpdate(Index: PtrInt); begin FUpdatingActiveFile := True; SetActiveFile(Index, True, aLastTopRowIndex); FUpdatingActiveFile := False; SetLastActiveFile(Index, aLastTopRowIndex); end; var 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); Exit(True); end; end; if (FLastActiveFileIndex > -1) then begin if IsInPath(CurrentPath, LastActiveFile, False, False) then begin if (PathIsAbsolute and mbCompareFileNames(LastActiveFile, aFilePath)) 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.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-0.9.8/src/fileviews/ufileviewworker.pas0000644000175000001440000007377713425342034021275 0ustar alexxusersunit uFileViewWorker; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, syncobjs, StringHashList, 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; end; TSetFileListMethod = procedure (var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles) of object; TUpdateFileMethod = procedure (const UpdatedFile: TDisplayFile; const UserData: Pointer) of object; { TFileListBuilder } TFileListBuilder = class(TFileViewWorker) private FFilteredDisplayFiles: TDisplayFiles; FAllDisplayFiles: TDisplayFiles; FExistingDisplayFilesHashed: TStringHashList; 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: TStringHashList); 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: TStringHashList); class function MatchesFilter(aFile: TFile; aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; end; { TFilePropertiesRetriever } TFilePropertiesRetriever = class(TFileViewWorker) private FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FUpdateFileMethod: TUpdateFileMethod; 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; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; end; { TCalculateSpaceWorker } TCalculateSpaceWorker = class(TFileViewWorker) private 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; 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 filelistLoaderTime: TDateTime; {$ENDIF} implementation uses {$IFDEF timeFileView} uDebug, {$ENDIF} LCLProc, Graphics, DCFileAttributes, uIMCode, uFileSourceOperationTypes, uOSUtils, DCStrUtils, uDCUtils, uExceptions, uGlobs, uPixMapManager, uFileSourceProperty, uFileSourceCalcStatisticsOperation, uFileSourceOperationOptions; { 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: TStringHashList); 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} DCDebug('Loaded files : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$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} DCDebug('Made sorted disp.lst: ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} FFilteredDisplayFiles := TDisplayFiles.Create(False); MakeDisplayFileList(FAllDisplayFiles, FFilteredDisplayFiles, FFileFilter, FFilterOptions); {$IFDEF timeFileView} DCDebug('Made filtered list : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} if Aborted then Exit; // Loading file list is complete. Update grid with the new file list. TThread.Synchronize(Thread, @DoSetFilelist); {$IFDEF timeFileView} DCDebug('Grid files updated : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} finally {$IFDEF timeFileView} DCDebug('Finished : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} FreeAndNil(FFilteredDisplayFiles); FreeAndNil(FileSourceFiles); FreeAndNil(FAllDisplayFiles); end; end; class function TFileListBuilder.InternalMatchesFilter(aFile: TFile; const aFileFilter: String; 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 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, 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) or aMasks.Matches(MakeSpellCode(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; CaseSence: Boolean; begin filteredDisplayFiles.Clear; CaseSence:= qscSensitive in [aFilterOptions.SearchCase]; if Assigned(allDisplayFiles) then try Masks:= TMaskList.Create(aFileFilter, ';,', CaseSence); 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: TStringHashList); 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; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FVariantProperties := AVariantProperties; FFilePropertiesNeeded := AFilePropertiesNeeded; FUpdateFileMethod := AUpdateFileMethod; end; destructor TFilePropertiesRetriever.Destroy; begin FFileList.Free; inherited Destroy; end; procedure TFilePropertiesRetriever.Execute; var i: Integer; 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; for i := 0 to FFileList.Count - 1 do begin if Aborted then Exit; try FWorkingFile := FFileList.Files[i]; FWorkingUserData := FFileList.Data[i]; 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; if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); except on EListError do; on EFileNotFound do; end; end; end; procedure TFilePropertiesRetriever.DoUpdateFile; begin if not Aborted and 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; i: Integer; begin if fsoCalcStatistics in FFileSource.GetOperationsTypes then begin for i := 0 to FFileList.Count - 1 do begin if Aborted then Exit; FWorkingFile := FFileList.Files[i]; FWorkingUserData := FFileList.Data[i]; AFile := FWorkingFile.FSFile; if (fpSize in AFile.SupportedProperties) and AFile.IsDirectory then begin TargetFiles := TFiles.Create(AFile.Path); try TargetFiles.Add(AFile.Clone); 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 FOperation.Result = fsorFinished then begin CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; AFile.Size := CalcStatisticsOperationStatistics.Size; Inc(FCompletedCalculations); if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); end; finally FreeAndNil(TargetFiles); FOperationLock.Acquire; try FreeAndNil(FOperation); finally FOperationLock.Release; end; end; end; end; end; end; procedure TCalculateSpaceWorker.DoUpdateFile; begin if not Aborted and Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; end. doublecmd-0.9.8/src/fileviews/ufileviewwithpanels.pas0000644000175000001440000001506513445406747022142 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 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; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure RemoveCurrentFileSource; override; published procedure cm_EditPath(const {%H-}Params: array of string); end; implementation uses DCStrUtils, uFile, uGlobs, uLng, uFileProperty, uFileViewWorker, uDCUtils; { TFileViewWithPanels } procedure TFileViewWithPanels.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); pnlHeader.UpdateAddressLabel; 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; {$ELSE} lblInfo.Height := lblInfo.Canvas.TextHeight('Wg'); {$ENDIF} {$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; end; procedure TFileViewWithPanels.RemoveCurrentFileSource; begin inherited RemoveCurrentFileSource; if FileSourcesCount > 0 then pnlHeader.UpdateAddressLabel; 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 Selected then SizeSelected := SizeSelected + SizeProperty.Value; SizeInDir := SizeInDir + SizeProperty.Value; end; end; end; FSelectedCount := FilesSelected + FolderSelected; if FlatView and (FSelectedCount = 0) then UpdateFlatFileName else lblInfo.Caption := Format(rsMsgSelectedInfo, [cnvFormatFileSize(SizeSelected, uoscHeaderFooter), cnvFormatFileSize(SizeInDir, uoscHeaderFooter), FilesSelected, FilesInDir, FolderSelected, FolderInDir]); end else if not (csDestroying in ComponentState) then lblInfo.Caption := ''; end; end. doublecmd-0.9.8/src/fileviews/ufileviewwithmainctrl.pas0000644000175000001440000014554213611061256022460 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-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 uFileViewWithMainCtrl; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, StdCtrls, LCLType, LMessages, EditBtn, Graphics, uFile, uFileViewWorker, uOrderedFileView, uFileView, uDragDropEx; 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 CylceFinished: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 function GetFont: TFont; procedure SetFont(AValue: TFont); protected function CalcButtonVisible: Boolean; override; function GetDefaultGlyphName: String; override; public 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 edtRenameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtRenameMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); 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; 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 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 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; published procedure cm_RenameOnly(const Params: array of string); procedure cm_ContextMenu(const Params: array of string); end; // in future this function will moved to DCStrUtils {en Return position of first founded tag in string begun from start position @param(T String set of tags) @param(S String) @param(StartPos Start position) @returns(Position of first founded tag in string) } function TagPos(T:string; const S: string; StartPos: Integer = 1; SearchBackward:boolean=False): Integer; implementation uses {$IF DEFINED(LCLGTK2)} Gtk2Proc, // for ReleaseMouseCapture GTK2Globals, // for DblClickTime {$ENDIF} LCLIntf, LCLProc, LazUTF8, Forms, Dialogs, Buttons, DCOSUtils, fMain, uShowMsg, uLng, uFileProperty, uFileSource, uFileSourceOperationTypes, uGlobs, uInfoToolTip, uDisplayFile, uFileSystemFileSource, uFileSourceUtil, uArchiveFileSourceUtil, uFormCommands, uKeyboard, uFileSourceSetFilePropertyOperation; type TControlHandlersHack = class(TWinControl) end; { TEditButtonEx } function TEditButtonEx.GetFont: TFont; begin Result:= BaseEditor.Font; end; procedure TEditButtonEx.SetFont(AValue: TFont); begin BaseEditor.Font:= AValue; end; function TEditButtonEx.GetDefaultGlyphName: String; begin Result:= BitBtnResNames[idButtonOk]; end; function TEditButtonEx.CalcButtonVisible: Boolean; begin Result:= (inherited CalcButtonVisible) and gInplaceRenameButton; end; { TFileViewWithMainCtrl } 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; edtRename.OnKeyDown := @edtRenameKeyDown; 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; MainControl.Color := DimColor(gBackColor); // 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 MainControl.Color := DimColor(gBackColor); inherited DoLoadingFileListLongTime; end; procedure TFileViewWithMainCtrl.DoUpdateView; begin inherited DoUpdateView; MainControl.Color := DimColor(gBackColor); 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); 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 := MainControl.ScreenToClient(Mouse.CursorPos); // 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.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), 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; 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); 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 case Button of mbExtra1: begin GoToPrevHistory; Exit; end; mbExtra2: begin GoToNextHistory; Exit; end; 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); 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 SetActiveFile(FileIndex); 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); 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 MainControlDblClick(Sender); end; end end // A single click starts programs and opens files else begin MainControlDblClick(Sender); end; end; FMainControlMouseDown := False; end; procedure TFileViewWithMainCtrl.MainControlQuadClick(Sender: TObject); begin MainControlDblClick(Sender); 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 inherited SetFocus; MainControl.SetFocus; end; end; procedure TFileViewWithMainCtrl.SetDragCursor(Shift: TShiftState); var DropEffect: TDropEffect; begin if (DragManager <> nil) and DragManager.IsDragging then begin DropEffect := GetDropEffectByKey(Shift); 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; ClientPoint, MousePoint: TPoint; Background: Boolean; FileIndex: PtrInt; AtFileList: 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; AFile := FFiles[FileIndex]; MarkFile(AFile, not FMouseSelectionLastState, 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); var Key: Word = VK_RETURN; begin edtRenameKeyDown(Sender, Key, []); end; procedure TFileViewWithMainCtrl.edtRenameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var NewFileName: String; OldFileNameAbsolute: String; begin case Key of VK_ESCAPE: begin Key := 0; edtRename.Visible:=False; SetFocus; end; VK_RETURN, VK_SELECT: begin Key := 0; // catch the enter NewFileName := edtRename.Text; OldFileNameAbsolute := edtRename.Hint; try case RenameFile(FileSource, FRenameFile, NewFileName, True) of sfprSuccess: begin edtRename.Visible:=False; SetActiveFile(CurrentPath + NewFileName); SetFocus; end; sfprError: msgError(Format(rsMsgErrRename, [ExtractFileName(OldFileNameAbsolute), NewFileName])); end; except on e: EInvalidFileProperty do msgError(Format(rsMsgErrRename + ':' + LineEnding + '%s (%s)', [ExtractFileName(OldFileNameAbsolute), NewFileName, rsMsgInvalidFileName, e.Message])); end; end; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: Key := 0; {$ENDIF} {$IFDEF LCLWIN32} // Workaround for Win32 - right arrow must clear selection at first move. VK_RIGHT: begin if (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 {$ENDIF} end; 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; 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.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.CylceFinished:=True; if not FRenFile.CylceFinished then begin if gRenameSelOnlyName then begin if FRenFile.LastAction = rfatName then RenameSelectPart(rfatFull) else begin RenameSelectPart(rfatExt); FRenFile.CylceFinished:= True; Exit; end; end else begin if FRenFile.LastAction = rfatFull then RenameSelectPart(rfatName) else begin RenameSelectPart(rfatExt); FRenFile.CylceFinished:= 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.CylceFinished:= False; // cycle of selection Name-FullName-Ext of FullName-Name-Ext, after finish this cycle will be part selection mechanism if FRenFile.LenExt = 0 then FRenFile.CylceFinished:= True; // don't need cycle if no extension if gRenameSelOnlyName and not (AFile.IsDirectory or AFile.IsLinkToDirectory) then RenameSelectPart(rfatName) else begin RenameSelectPart(rfatFull); end; 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; function TagPos(T: string; const S: string; StartPos: Integer; SearchBackward: boolean): Integer; // in future this function will moved to DCStrUtils var i,cnt:integer; ch:char; 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(PChar(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(PChar(S), length(S), i)]; if Pos(ch,T)=0 then inc(i) else break; end; Result:=i; end; end. doublecmd-0.9.8/src/fileviews/ufileviewwithgrid.pas0000644000175000001440000006576413611060423021576 0ustar alexxusersunit uFileViewWithGrid; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Graphics, StdCtrls, LCLVersion, uDisplayFile, DCXmlConfig, uFileSorting, uFileProperty, uFileViewWithMainCtrl, uFile, uFileViewHeader, uFileView, uFileSource; type TFileViewWithGrid = class; { TFileViewGrid } TFileViewGrid = class(TDrawGrid) 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; procedure AddFileSource(aFileSource: IFileSource; aPath: String); 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 LCLIntf, LCLType, LCLProc, LazUTF8, Math, LMessages, DCStrUtils, uGlobs, uPixmapManager, uKeyboard, uDCUtils, fMain, uFileFunctions; function FitFileName(const AFileName: String; ACanvas: TCanvas; AFile: TFile; ATargetWidth: Integer): String; var S: String; Index: Integer; AMaxWidth: Integer; begin Index:= UTF8Length(AFileName); AMaxWidth:= ACanvas.TextFitInfo(AFileName, ATargetWidth); if Index <= AMaxWidth then Result:= AFileName else begin if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then S:= '..]' else begin S:= '...'; end; Index:= ACanvas.TextFitInfo(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:= ACanvas.TextFitInfo(sStringToFit, ATargetWidth); if Index <= AMaxWidth then Result:= sStringToFit else begin Index:= ACanvas.TextFitInfo(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 OnMouseDown(Self, Button, Shift, X, Y); 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 if FFileView.Active then Canvas.Pen.Color := gCursorColor else begin Canvas.Pen.Color := gInactiveCursorColor; 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 := gForeColor; 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); // Set up default background color first. if IsCursor then BackgroundColor := gCursorColor else begin if IsCursorInactive AND gUseInactiveSelColor then BackgroundColor := gInactiveCursorColor else // Alternate rows background color. if odd(ARow) then BackgroundColor := gBackColor else BackgroundColor := gBackColor2; end; // Set text color. TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := gForeColor; if AFile.Selected then begin if gUseInvertedSelection then begin //------------------------------------------------------ if IsCursor OR (IsCursorInactive AND gUseInactiveSelColor) then begin TextColor := InvertColor(gCursorText); end else begin if FFileView.Active OR (not gUseInactiveSelColor) then BackgroundColor := gMarkColor else BackgroundColor := gInactiveMarkColor; TextColor := gBackColor; end; //------------------------------------------------------ end else begin if FFileView.Active OR (not gUseInactiveSelColor) then TextColor := gMarkColor else TextColor := gInactiveMarkColor; end; end else if IsCursor then begin TextColor := gCursorText; end; BackgroundColor := FFileView.DimColor(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); 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; {$if lcl_fullversion >= 1080004} AllowOutboundEvents := False; {$endif} 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; begin // Update grid col and row count dgPanel.SetColRowCount(FFiles.Count); dgPanel.CalculateColRowCount; dgPanel.CalculateColumnWidth; SetFilesDisplayItems; if SetActiveFileNow(RequestedActiveFile, FLastTopRowIndex) then RequestedActiveFile := '' else // Requested file was not found, restore position to last active file. SetActiveFileNow(LastActiveFile, 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; procedure TFileViewWithGrid.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); if 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 := gCursorBorderColor; 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-0.9.8/src/fileviews/ufileviewhistory.pas0000644000175000001440000002346012612505011021436 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-0.9.8/src/fileviews/ufileviewheader.pas0000644000175000001440000003777513332631074021214 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 PathEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 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 EachViewUpdateHeader(AFileView: TFileView; {%H-}UserData: Pointer); protected tmViewHistoryMenu: TTimer; public constructor Create(AOwner: TFileView; AParent: TWinControl); reintroduce; procedure UpdateAddressLabel; procedure UpdatePathLabel; procedure UpdateFont; procedure ShowPathEdit; procedure SetActive(bActive: Boolean); 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, uDCUtils, DCOSUtils, DCStrUtils, uKeyboard, fMain, uFileSourceUtil, uGlobs, uPixMapManager, uLng, uFileFunctions, uArchiveFileSource, uFileViewWithPanels; const SortingImageIndex: array[TSortDirection] of Integer = (-1, 0, 1); { TFileViewHeader } procedure TFileViewHeader.PathEditExit(Sender: TObject); begin FPathEdit.Visible := False; end; procedure TFileViewHeader.PathEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var NewPath: String; begin case Key of VK_ESCAPE: begin Key := 0; FPathEdit.Visible:=False; FFileView.SetFocus; end; VK_RETURN, VK_SELECT: begin Key := 0; // catch the enter NewPath:= NormalizePathDelimiters(FPathEdit.Text); NewPath:= ReplaceEnvVars(ReplaceTilde(NewPath)); if not 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; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: Key := 0; {$ENDIF} end; 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 < MAX_FONT_SIZE_PATHEDIT) 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 > MIN_FONT_SIZE_PATHEDIT) 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 FFileView.SetFocus; frmMain.Commands.cm_DirHotList(['position=cursor']); 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; 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; // 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.ObjectTypes:= [otFolders, otHidden]; OnResize:= @HeaderResize; FPathEdit.OnExit:= @PathEditExit; FPathEdit.OnKeyDown:= @PathEditKeyDown; FPathLabel.OnClick := @PathLabelClick; FPathLabel.OnDblClick := @PathLabelDblClick; FPathLabel.OnMouseUp := @PathLabelMouseUp; FPathLabel.OnMouseWheelDown := @PathLabelMouseWheelDown; FPathLabel.OnMouseWheelUp := @PathLabelMouseWheelUp; FAddressLabel.OnClick := @AddressLabelClick; FAddressLabel.OnMouseEnter:= @AddressLabelMouseEnter; 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; 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.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; 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); Images.Add(PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdAscending)), nil); Images.Add(PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdDescending)), nil); 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-0.9.8/src/fileviews/ufileview.pas0000644000175000001440000032250013467737150020035 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, StringHashList, uGlobs; type TFileView = class; TFileViewClass = class of TFileView; {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; 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(TWinControl) 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 := TStringHashList.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; // FFiles need to be recreated because the filter is not cloned. // This is done in AFileView.UpdateView. 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; procedure TFileView.AddFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var ADisplayFile: TDisplayFile; AFile: TFile; I: Integer; begin I := FHashedNames.Find(FileName); if I < 0 then begin AFile := TFile.Create(APath); AFile.Name := FileName; try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded, GetVariantFileProperties); except on EFileSourceException do begin FreeAndNil(AFile); Exit; end; end; ADisplayFile := TDisplayFile.Create(AFile); FHashedFiles.Add(ADisplayFile, nil); FHashedNames.Add(FileName, 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: String); var I: Integer; begin I := FHashedNames.Find(FileName); if I >= 0 then RemoveFile(TDisplayFile(FHashedNames.List[I]^.Data)); end; procedure TFileView.RemoveFile(ADisplayFile: TDisplayFile); begin FHashedNames.Remove(ADisplayFile.FSFile.Name); 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; begin OldIndex := FHashedNames.Find(OldFileName); NewIndex := FHashedNames.Find(NewFileName); if OldIndex >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[OldIndex]^.Data); if NewIndex < 0 then begin ADisplayFile.FSFile.Name := NewFileName; FHashedNames.Remove(OldFileName); FHashedNames.Add(NewFileName, ADisplayFile); ADisplayFile.IconID := -1; ADisplayFile.Selected := False; ADisplayFile.IconOverlayID := -1; ADisplayFile.TextColor := clNone; ADisplayFile.DisplayStrings.Clear; ResortFile(ADisplayFile, FAllDisplayFiles); 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; 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; VisualizeFileUpdate(ADisplayFile); end; begin I := FHashedNames.Find(FileName); if I >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[I]^.Data); AFile := ADisplayFile.FSFile; AFile.ClearProperties; try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded, GetVariantFileProperties); 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; 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.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.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.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, NewPath) then begin FFlatView:= False; EnableWatcher(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()); 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; SearchTemplate: TSearchTemplate = nil; bSelected: Boolean = False; bCaseSensitive, bIgnoreAccents, bWindowsInterpretation: boolean; LocalMarkFileChecks: TFindFileChecks; 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; 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 MatchesMaskList(FFiles[I].FSFile.Name, sMask, ';, ', bCaseSensitive, bIgnoreAccents, bWindowsInterpretation) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; end; 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); 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: TStringHashList = nil; i: Integer; begin if (csDestroying in ComponentState) or (FileSourcesCount = 0) or ([fvfDelayLoadingFiles, fvfDontLoadFiles] * Flags <> []) then Exit; {$IFDEF timeFileView} filelistLoaderTime := Now; 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 := TStringHashList.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; 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 FHashedFiles.Add(FAllDisplayFiles[i], nil); FHashedNames.Add(FAllDisplayFiles[i].FSFile.Name, 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 FHistory.Add(aFileSource, APage.LockPath); end; // 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; 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 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; function TFileView.BeforeChangePath(NewFileSource: IFileSource; NewPath: String): Boolean; begin if NewPath <> '' then begin if Assigned(OnBeforeChangePath) then if not OnBeforeChangePath(Self, NewFileSource, NewPath) then Exit(False); if Assigned(NewFileSource) and not NewFileSource.SetCurrentWorkingDirectory(NewPath) then begin msgError(Format(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; procedure TFileView.AddFileSource(aFileSource: IFileSource; aPath: String); var IsNewFileSource: Boolean; begin IsNewFileSource := not aFileSource.Equals(FileSource); if BeforeChangePath(aFileSource, aPath) 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; procedure TFileView.RemoveCurrentFileSource; var NewFileSource: IFileSource = nil; NewPath: String = ''; IsNewFileSource: Boolean; PrevIndex: Integer; FocusedFile: String; begin 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]; if BeforeChangePath(NewFileSource, NewPath) 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) = False then FWatchPath := EmptyStr; end; end; end else begin TFileSystemWatcher.RemoveWatch(FWatchPath, @WatcherEvent); FWatchPath := EmptyStr; end; 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); fswFileRenamed: Self.RenameFile(EventData.NewFileName, EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); else Reload(EventData.Path); 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 (csDestroying in ComponentState) and not FReloadNeeded and (IncludeTrailingPathDelimiter(EventData.Path) = 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(EventData.Path); 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], 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-0.9.8/src/fileviews/ucolumnsfileviewvtv.pas0000644000175000001440000017160713117442667022206 0ustar alexxusersunit uColumnsFileViewVtv; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, Forms, ExtCtrls, Grids, LMessages, LCLIntf, LCLType, Menus, uTypes, uFile, uFileProperty, uFileView, uFileViewWithMainCtrl, uFileSource, uDisplayFile, uColumns, uFileSorting, DCXmlConfig, DCClassesUtf8, VirtualTrees; type TFunctionDime = function (AColor: TColor): TColor of object; TColumnsSortDirections = array of uFileSorting.TSortDirection; TColumnsFileViewVTV = class; TNodeRange = record First: PVirtualNode; Last: PVirtualNode; end; TColumnsDrawTreeRecord = record end; // We don't need anything in it, just Node^.Index. PColumnsDrawTreeRecord = ^TColumnsDrawTreeRecord; TColumnResized = procedure (Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer) of object; { TColumnsDrawTree } TColumnsDrawTree = class(TVirtualDrawTree) private ColumnsView: TColumnsFileViewVTV; function GetGridHorzLine: Boolean; function GetGridVertLine: Boolean; procedure SetGridHorzLine(const AValue: Boolean); procedure SetGridVertLine(const AValue: Boolean); function GetNodeFile(Node: PVirtualNode): TDisplayFile; function GetVisibleNodes: TNodeRange; procedure SetAllRowsHeights(ARowHeight: Cardinal); protected function CanAutoScroll: Boolean; override; function CanScroll(const ClientMousePos: TPoint): Boolean; override; function DetermineScrollDirections(X, Y: Integer): TScrollDirections; override; function DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; procedure InitializeWnd; override; procedure FinalizeWnd; override; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; public ColumnsOwnDim: TFunctionDime; constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure AfterConstruction; override; procedure UpdateView; function MouseOnGrid(X, Y: LongInt): Boolean; // Returns height of all the header rows. function GetHeaderHeight: Integer; function GetVisibleIndexes: TRange; property GridVertLine: Boolean read GetGridVertLine write SetGridVertLine; property GridHorzLine: Boolean read GetGridHorzLine write SetGridHorzLine; end; { TColumnsFileViewVTV } TColumnsFileViewVTV = class(TFileViewWithMainCtrl) private FColumnsSortDirections: TColumnsSortDirections; FFileNameColumn: Integer; FExtensionColumn: Integer; pmColumnsMenu: TPopupMenu; dgPanel: TColumnsDrawTree; FOnColumnResized: TColumnResized; function GetColumnsClass: TPanelColumnsClass; procedure SetRowCount(Count: Integer); procedure SetFilesDisplayItems; procedure SetColumns; procedure MakeVisible(Node: PVirtualNode); procedure DoSelectionChanged(Node: PVirtualNode); overload; {en Format and cache all columns strings for the file. } procedure MakeColumnsStrings(AFile: TDisplayFile); procedure MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); procedure ClearAllColumnsStrings; 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 dgPanelAdvancedHeaderDraw(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); procedure dgPanelAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); procedure dgPanelBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); procedure dgPanelHeaderDrawQueryElements(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); procedure dgPanelDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean); procedure dgPanelDragDrop(Sender: TBaseVirtualTree; Source: TObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); procedure dgPanelFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); procedure dgPanelFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); procedure dgPanelHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer); procedure dgPanelResize(Sender: TObject); procedure dgPanelColumnResize(Sender: TVTHeader; Column: TColumnIndex); procedure ColumnsMenuClick(Sender: TObject); 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; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(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); override; procedure SetSorting(const NewSortings: TFileSortings); override; procedure ShowRenameFileEdit(AFile: TFile); override; procedure UpdateRenameFileEditPosition; override; public ActiveColm: String; ActiveColmSlave: TPanelColumnsClass; isSlave: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; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TColumnsFileViewVTV; override; procedure CloneTo(FileView: TFileView); override; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure LoadConfiguration(Section: String; TabIndex: Integer); override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory: Boolean); override; procedure UpdateColumnsView; procedure SetGridFunctionDim(ExternalDimFunction: TFunctionDime); property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized; published procedure cm_CopyFileDetailsToClip(const Params: array of string); end; TColumnsFileView = TColumnsFileViewVTV; implementation uses LazUTF8, Clipbrd, uLng, uGlobs, uPixmapManager, uDebug, DCStrUtils, uDCUtils, math, fMain, fOptions, uClipboard, uFileViewNotebook, uOrderedFileView, uFileSourceProperty, uKeyboard, uFileFunctions, uFormCommands, uFileViewWithGrid, fOptionsCustomColumns; type TEachViewCallbackReason = (evcrUpdateColumns); TEachViewCallbackMsg = record Reason: TEachViewCallbackReason; UpdatedColumnsSetName: String; NewColumnsSetName: String; // If columns name renamed end; PEachViewCallbackMsg = ^TEachViewCallbackMsg; procedure TColumnsFileViewVTV.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); SetColumnsSortDirections; end; procedure TColumnsFileViewVTV.LoadConfiguration(Section: String; TabIndex: Integer); var ColumnsClass: TPanelColumnsClass; SortCount: Integer; SortColumn: Integer; SortDirection: uFileSorting.TSortDirection; i: Integer; sIndex: String; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin sIndex := IntToStr(TabIndex); ActiveColm := gIni.ReadString(Section, sIndex + '_columnsset', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; SortCount := gIni.ReadInteger(Section, sIndex + '_sortcount', 0); for i := 0 to SortCount - 1 do begin SortColumn := gIni.ReadInteger(Section, sIndex + '_sortcolumn' + IntToStr(i), -1); if (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := Column.GetColumnFunctions; SortDirection := uFileSorting.TSortDirection(gIni.ReadInteger(Section, sIndex + '_sortdirection' + IntToStr(i), Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end; end; inherited SetSorting(NewSorting); end; procedure TColumnsFileViewVTV.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var ColumnsClass: TPanelColumnsClass; SortColumn: Integer; SortDirection: uFileSorting.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 := Column.GetColumnFunctions; SortDirection := uFileSorting.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 TColumnsFileViewVTV.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); AConfig.SetValue(ANode, 'ColumnsSet', ActiveColm); end; procedure TColumnsFileViewVTV.dgPanelDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean); begin MainControlDragOver(Sender, Source, Pt.x, Pt.y, State, Accept); end; procedure TColumnsFileViewVTV.dgPanelDragDrop(Sender: TBaseVirtualTree; Source: TObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); begin MainControlDragDrop(Sender, Source, Pt.x, Pt.y); end; procedure TColumnsFileViewVTV.dgPanelFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); begin dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions - [toDisableAutoscrollOnFocus]; if Assigned(Node) then DoFileIndexChanged(Node^.Index); end; procedure TColumnsFileViewVTV.dgPanelFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); begin if (OldColumn <> NewColumn) and (OldNode = NewNode) then dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions + [toDisableAutoscrollOnFocus] else dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions - [toDisableAutoscrollOnFocus]; end; procedure TColumnsFileViewVTV.dgPanelHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ShiftState : TShiftState; SortingDirection : uFileSorting.TSortDirection; ColumnsClass: TPanelColumnsClass; PanelColumn: TPanelColumn; NewSorting: TFileSortings; SortFunctions: TFileFunctions; I : Integer; Point: TPoint; MI: TMenuItem; begin case Button of mbLeft: begin ColumnsClass := GetColumnsClass; PanelColumn := ColumnsClass.GetColumnItem(Column); if Assigned(PanelColumn) then begin NewSorting := Sorting; SortFunctions := PanelColumn.GetColumnFunctions; 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:= uFileSorting.sdDescending; else SortingDirection:= uFileSorting.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:= uFileSorting.sdDescending; else SortingDirection:= uFileSorting.sdAscending; end; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); SetSorting(NewSorting); end; end; mbRight: begin //Load Columns into menu pmColumnsMenu.Items.Clear; if ColSet.Items.Count>0 then begin For I:=0 to ColSet.Items.Count-1 do begin MI:=TMenuItem.Create(pmColumnsMenu); MI.Tag:=I; MI.Caption:=ColSet.Items[I]; MI.Checked:=(ColSet.Items[I] = ActiveColm); MI.OnClick:=@ColumnsMenuClick; pmColumnsMenu.Items.Add(MI); end; end; //- MI:=TMenuItem.Create(pmColumnsMenu); MI.Caption:='-'; pmColumnsMenu.Items.Add(MI); //Configure custom columns MI:=TMenuItem.Create(pmColumnsMenu); MI.Tag:=1001; MI.Caption:=rsMenuConfigureCustomColumns; MI.OnClick:=@ColumnsMenuClick; pmColumnsMenu.Items.Add(MI); Point := dgPanel.ClientToScreen(Classes.Point(0,0)); Point.X := Point.X + X - 50; Point.Y := Point.Y + dgPanel.GetHeaderHeight; pmColumnsMenu.PopUp(Point.X, Point.Y); end; end; end; procedure TColumnsFileViewVTV.dgPanelAdvancedHeaderDraw(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); var SortingDirection: uFileSorting.TSortDirection; TitleX: Integer; ColumnsSet: TPanelColumnsClass; aCol: Integer; iTextTop: Integer; s: String; aRect: TRect; begin aCol := PaintInfo.Column.Index; aRect := PaintInfo.PaintRectangle; // PaintRectangle is reduced by 2 pixels on each side even with owner draw, // so revert this change. InflateRect(aRect, 2, 2); ColumnsSet := GetColumnsClass; iTextTop := aRect.Top + (PaintInfo.Column.Owner.Header.Height - PaintInfo.TargetCanvas.TextHeight('Wg')) div 2; TitleX := 0; s := ColumnsSet.GetColumnTitle(ACol); SortingDirection := FColumnsSortDirections[ACol]; if SortingDirection <> sdNone then begin TitleX := TitleX + gIconsSize; PixMapManager.DrawBitmap( PixMapManager.GetIconBySortingDirection(SortingDirection), PaintInfo.TargetCanvas, aRect.Left, aRect.Top + (PaintInfo.Column.Owner.Header.Height - gIconsSize) div 2); end; TitleX := max(TitleX, 4); if gCutTextToColWidth then begin if (aRect.Right - aRect.Left) < TitleX then // Column too small to display text. Exit else while PaintInfo.TargetCanvas.TextWidth(s) - ((aRect.Right - aRect.Left) - TitleX) > 0 do UTF8Delete(s, UTF8Length(s), 1); end; PaintInfo.TargetCanvas.Brush.Style := bsClear; PaintInfo.TargetCanvas.TextOut(aRect.Left + TitleX, iTextTop, s); end; procedure TColumnsFileViewVTV.dgPanelAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); var ColumnsSet: TPanelColumnsClass; IsFocused: Boolean; procedure DrawLines; begin // Draw focus rect. if not ColumnsSet.UseFrameCursor and IsFocused and Active and ColumnsSet.UseCursorBorder then begin TargetCanvas.Pen.Color := ColumnsSet.CursorBorderColor; TargetCanvas.Brush.Color := ColumnsSet.CursorBorderColor; TargetCanvas.DrawFocusRect(ItemRect); end; end; begin IsFocused := Node = dgPanel.FocusedNode; ColumnsSet := GetColumnsClass; DrawLines; end; procedure TColumnsFileViewVTV.dgPanelBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); begin EraseAction := eaNone; end; procedure TColumnsFileViewVTV.dgPanelHeaderDrawQueryElements(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); begin Elements := [hpeSortGlyph, hpeText]; end; procedure TColumnsFileViewVTV.dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin 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 TColumnsFileViewVTV.dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin 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 TColumnsFileViewVTV.dgPanelScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer); begin if DeltaY <> 0 then Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileViewVTV.dgPanelResize(Sender: TObject); begin Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileViewVTV.dgPanelColumnResize(Sender: TVTHeader; Column: TColumnIndex); begin if Assigned(FOnColumnResized) then begin FOnColumnResized(Self, Column, Sender.Columns.Items[Column].Width); end; end; procedure TColumnsFileViewVTV.ShowRenameFileEdit(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 TColumnsFileViewVTV.UpdateRenameFileEditPosition; var ARect: TRect; begin ARect := dgPanel.GetDisplayRect(dgPanel.FocusedNode, FFileNameColumn, False); Dec(ARect.Top, 2); Inc(ARect.Bottom, 2); if gShowIcons <> sim_none then Inc(ARect.Left, gIconsSize + 2); if Succ(FFileNameColumn) = FExtensionColumn then Inc(ARect.Right, dgPanel.Header.Columns[FExtensionColumn].Width); edtRename.SetBounds(ARect.Left, ARect.Top, ARect.Width, ARect.Height); end; procedure TColumnsFileViewVTV.RedrawFile(FileIndex: PtrInt); begin dgPanel.InvalidateNode(PVirtualNode(FFiles[FileIndex].DisplayItem)); end; procedure TColumnsFileViewVTV.RedrawFile(DisplayFile: TDisplayFile); begin dgPanel.InvalidateNode(PVirtualNode(DisplayFile.DisplayItem)); end; procedure TColumnsFileViewVTV.SetColumnsSortDirections; var Columns: TPanelColumnsClass; function SetSortDirection(ASortFunction: TFileFunction; ASortDirection: uFileSorting.TSortDirection; Overwrite: Boolean): Boolean; var k, l: Integer; ColumnFunctions: TFileFunctions; begin for k := 0 to Columns.Count - 1 do begin ColumnFunctions := Columns.GetColumnItem(k).GetColumnFunctions; 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 TColumnsFileViewVTV.SetFilesDisplayItems; var Node: PVirtualNode; Index: Integer = 0; begin Node := dgPanel.GetFirstNoInit; while Assigned(Node) do begin FFiles[Index].DisplayItem := Node; Inc(Index); Node := Node^.NextSibling; end; end; function TColumnsFileViewVTV.GetFilePropertiesNeeded: TFilePropertiesTypes; var i, j: Integer; ColumnsClass: TPanelColumnsClass; Column: TPanelColumn; 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 Column := ColumnsClass.GetColumnItem(i); FileFunctionsUsed := Column.GetColumnFunctions; 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 + TFileFunctionToProperty[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 TColumnsFileViewVTV.GetFileRect(FileIndex: PtrInt): TRect; begin Result := dgPanel.GetDisplayRect(PVirtualNode(FFiles[FileIndex].DisplayItem), 0, False); end; function TColumnsFileViewVTV.GetVisibleFilesIndexes: TRange; begin Result := dgPanel.GetVisibleIndexes; end; procedure TColumnsFileViewVTV.SetRowCount(Count: Integer); begin if Count <> dgPanel.RootNodeCount then begin FUpdatingActiveFile := True; dgPanel.BeginUpdate; // If new node count is less then first delete all nodes and then create // new ones, because deleting only some nodes is much slower then deleting all. if Count < dgPanel.RootNodeCount then dgPanel.RootNodeCount := 0; dgPanel.RootNodeCount := Count; dgPanel.EndUpdate; FUpdatingActiveFile := False; end; end; procedure TColumnsFileViewVTV.SetColumns; var x: Integer; ColumnsClass: TPanelColumnsClass; col: TVirtualTreeColumn; begin // setup column widths ColumnsClass := GetColumnsClass; dgPanel.Header.Columns.Clear; dgPanel.Header.Columns.BeginUpdate; try for x:= 0 to ColumnsClass.ColumnsCount - 1 do begin col := dgPanel.Header.Columns.Add; col.Width := ColumnsClass.GetColumnWidth(x); //col.Text := ColumnsClass.GetColumnTitle(x); // I think not needed, as we draw text ourselves. col.Margin := 0; col.Spacing := 0; end; if gAutoFillColumns then begin if (gAutoSizeColumn = 0) then dgPanel.Header.AutoSizeIndex := gAutoSizeColumn else dgPanel.Header.AutoSizeIndex := col.Index; end; finally dgPanel.Header.Columns.EndUpdate; end; end; procedure TColumnsFileViewVTV.MakeVisible(Node: PVirtualNode); begin dgPanel.ScrollIntoView(Node, False, False); end; procedure TColumnsFileViewVTV.SetActiveFile(FileIndex: PtrInt); begin dgPanel.FocusedNode := PVirtualNode(FFiles[FileIndex].DisplayItem); end; procedure TColumnsFileViewVTV.RedrawFiles; begin dgPanel.Invalidate; end; procedure TColumnsFileViewVTV.UpdateColumnsView; var ColumnsClass: TPanelColumnsClass; OldFilePropertiesNeeded: TFilePropertiesTypes; begin ClearAllColumnsStrings; // 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.UpdateView; OldFilePropertiesNeeded := FilePropertiesNeeded; FilePropertiesNeeded := GetFilePropertiesNeeded; if FilePropertiesNeeded >= OldFilePropertiesNeeded then begin Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TColumnsFileViewVTV.SetGridFunctionDim(ExternalDimFunction: TFunctionDime); begin dgPanel.ColumnsOwnDim:= ExternalDimFunction; end; procedure TColumnsFileViewVTV.cm_CopyFileDetailsToClip(const Params: array of string); var I: Integer; AFile: TDisplayFile; sl: TStringList = nil; procedure AddFile; var J: Integer; S: String; begin if AFile.FSFile.IsNameValid then begin S:= EmptyStr; for J:= 0 to AFile.DisplayStrings.Count - 1 do begin S:= S + AFile.DisplayStrings[J] + #09; end; J:= Length(S); if J > 0 then sl.Add(Copy(S, 1, J - 1)); end; end; begin if DisplayFiles.Count > 0 then begin sl:= TStringList.Create; try for I:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[I]; if AFile.Selected then AddFile; end; if sl.Count = 0 then begin AFile:= GetActiveDisplayFile; AddFile; end; Clipboard.Clear; // prevent multiple formats in Clipboard ClipboardSetText(TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle)); finally FreeAndNil(sl); end; end; end; procedure TColumnsFileViewVTV.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]; UpdateColumnsView; RedrawFiles; end; end; end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); begin ActiveColm := 'Default'; inherited Create(AOwner, AFileSource, APath, AFlags); end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AFileView, AFlags); end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; procedure TColumnsFileViewVTV.CreateDefault(AOwner: TWinControl); begin DCDebug('TColumnsFileViewVTV.Create components'); inherited CreateDefault(AOwner); FFileNameColumn := -1; FExtensionColumn := -1; // -- other components dgPanel:=TColumnsDrawTree.Create(Self, Self); MainControl := dgPanel; // --- dgPanel.OnDragOver := @dgPanelDragOver; dgPanel.OnDragDrop:= @dgPanelDragDrop; dgPanel.OnAdvancedHeaderDraw:=@dgPanelAdvancedHeaderDraw; dgPanel.OnAfterItemPaint := @dgPanelAfterItemPaint; dgPanel.OnBeforeItemErase := @dgPanelBeforeItemErase; dgPanel.OnFocusChanged:=@dgPanelFocusChanged; dgPanel.OnFocusChanging:=@dgPanelFocusChanging; dgPanel.OnHeaderDrawQueryElements:=@dgPanelHeaderDrawQueryElements; dgPanel.OnHeaderClick:=@dgPanelHeaderClick; dgPanel.OnMouseWheelUp := @dgPanelMouseWheelUp; dgPanel.OnMouseWheelDown := @dgPanelMouseWheelDown; dgPanel.OnScroll:= @dgPanelScroll; dgpanel.OnResize:= @dgPanelResize; dgPanel.OnColumnResize:= @dgPanelColumnResize; pmColumnsMenu := TPopupMenu.Create(Self); pmColumnsMenu.Parent := Self; if Assigned(NotebookPage) then begin FOnColumnResized:= @DoColumnResized; end; end; destructor TColumnsFileViewVTV.Destroy; begin inherited Destroy; end; function TColumnsFileViewVTV.Clone(NewParent: TWinControl): TColumnsFileViewVTV; begin Result := TColumnsFileViewVTV.Create(NewParent, Self); end; procedure TColumnsFileViewVTV.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TColumnsFileViewVTV then with FileView as TColumnsFileViewVTV do begin FColumnsSortDirections := Self.FColumnsSortDirections; ActiveColm := Self.ActiveColm; ActiveColmSlave := nil; // set to nil because only used in preview? isSlave := Self.isSlave; end; end; end; procedure TColumnsFileViewVTV.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); end; procedure TColumnsFileViewVTV.BeforeMakeFileList; begin inherited; if gListFilesInThread then begin // Display info that file list is being loaded. UpdateInfoPanel; end; end; procedure TColumnsFileViewVTV.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // Reset state. TODO: Check if this is needed on any widgetset. dgPanel.TreeStates := dgPanel.TreeStates - [tsLeftButtonDown, tsMiddleButtonDown, tsRightButtonDown, tsVCLDragging]; end; procedure TColumnsFileViewVTV.DisplayFileListChanged; var AFocused: Boolean = False; Node: PVirtualNode; begin // Update grid row count. SetRowCount(FFiles.Count); SetFilesDisplayItems; RedrawFiles; if SetActiveFileNow(RequestedActiveFile) then RequestedActiveFile := '' else begin // Requested file was not found, restore position to last active file. if not SetActiveFileNow(LastActiveFile) then begin if FLastActiveFileIndex >= dgPanel.RootNodeCount then begin FUpdatingActiveFile := True; dgPanel.FocusedNode := dgPanel.GetLastNoInit; FUpdatingActiveFile := False; SetLastActiveFile(FLastActiveFileIndex); AFocused := True; end else if FLastActiveFileIndex >= 0 then begin Node := dgPanel.GetFirstNoInit; while Assigned(Node) do begin if Node^.Index = FLastActiveFileIndex then begin FUpdatingActiveFile := True; dgPanel.FocusedNode := Node; FUpdatingActiveFile := False; SetLastActiveFile(Node^.Index); AFocused := True; Break; end; Node := Node^.NextSibling; end; end; if not AFocused then dgPanel.FocusedNode := dgPanel.GetFirstNoInit; // At creation the control has default size (100, 200). // If the first column is wider than ClientWidth then VTV scrolls // to the right edge of the column. So, we scroll back here. // dgPanel.OffsetX := 0; end; end; Notify([fvnVisibleFilePropertiesChanged]); inherited; end; procedure TColumnsFileViewVTV.DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure UpdateWidth(ANotebook: TFileViewNotebook); var I: Integer; ColumnsView: TColumnsFileViewVTV; begin for I:= 0 to ANotebook.PageCount - 1 do begin if ANotebook.View[I] is TColumnsFileViewVTV then begin ColumnsView:= TColumnsFileViewVTV(ANotebook.View[I]); if ColumnsView.ActiveColm = ActiveColm then begin with ColumnsView.dgPanel do begin Header.Columns.BeginUpdate; Header.Columns.Items[ColumnIndex].Width:= ColumnNewSize; Header.Columns.EndUpdate; end; end; end; end; end; begin if gColumnsAutoSaveWidth then begin GetColumnsClass.SetColumnWidth(ColumnIndex, ColumnNewSize); UpdateWidth(frmMain.LeftTabs); UpdateWidth(frmMain.RightTabs); end; end; procedure TColumnsFileViewVTV.MakeColumnsStrings(AFile: TDisplayFile); begin MakeColumnsStrings(AFile, GetColumnsClass); end; procedure TColumnsFileViewVTV.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 TColumnsFileViewVTV.ClearAllColumnsStrings; var i: Integer; begin if Assigned(FAllDisplayFiles) then begin // Clear display strings in case columns have changed. for i := 0 to FAllDisplayFiles.Count - 1 do FAllDisplayFiles[i].DisplayStrings.Clear; end; end; procedure TColumnsFileViewVTV.EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); var ColumnsView: TColumnsFileViewVTV; PMsg: PEachViewCallbackMsg; begin if AFileView is TColumnsFileViewVTV then begin ColumnsView := TColumnsFileViewVTV(AFileView); PMsg := UserData; if ColumnsView.ActiveColm = PMsg^.UpdatedColumnsSetName then begin ColumnsView.ActiveColm := PMsg^.NewColumnsSetName; ColumnsView.UpdateColumnsView; ColumnsView.RedrawFiles; end; end; end; procedure TColumnsFileViewVTV.DoUpdateView; begin inherited DoUpdateView; UpdateColumnsView; end; function TColumnsFileViewVTV.GetActiveFileIndex: PtrInt; begin if Assigned(dgPanel.FocusedNode) then Result := dgPanel.FocusedNode^.Index else Result := InvalidFileIndex; end; function TColumnsFileViewVTV.GetColumnsClass: TPanelColumnsClass; begin if isSlave then Result := ActiveColmSlave else Result := ColSet.GetColumnSet(ActiveColm); end; function TColumnsFileViewVTV.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var Node: PVirtualNode; begin Node := dgPanel.GetNodeAt(X, Y); if Assigned(Node) then Result := Node^.Index else Result := InvalidFileIndex; AtFileList := Y >= dgPanel.GetHeaderHeight; end; procedure TColumnsFileViewVTV.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TColumnsFileViewVTV.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var Node, NextNode: PVirtualNode; aFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin Node := dgPanel.FocusedNode; if IsActiveItemValid then begin InvertFileSelection(GetActiveDisplayFile, False); DoSelectionChanged(nil); end; NextNode := dgPanel.GetNextSiblingNoInit(Node); if (Node <> NextNode) and Assigned(NextNode) then dgPanel.FocusedNode := NextNode else dgPanel.InvalidateNode(Node); end; Key := 0; end; VK_LEFT: if (Shift = []) then begin if gLynxLike then ChangePathToParent(True) else dgPanel.OffsetX := dgPanel.OffsetX + 20; Key := 0; end; VK_RIGHT: if (Shift = []) then begin if gLynxLike then ChooseFile(GetActiveDisplayFile, True) else dgPanel.OffsetX := dgPanel.OffsetX - 20; Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin Node := dgPanel.FocusedNode; if Assigned(Node) then begin aFile := dgPanel.GetNodeFile(Node); 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(nil); end; if gSpaceMovesDown then begin NextNode := dgPanel.GetNextSiblingNoInit(Node); if (Node <> NextNode) and Assigned(NextNode) then dgPanel.FocusedNode := NextNode else dgPanel.InvalidateNode(Node); end else dgPanel.InvalidateNode(Node); Key := 0; end; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TColumnsFileViewVTV.DoSelectionChanged(Node: PVirtualNode); begin if Assigned(Node) then DoSelectionChanged(Node^.Index) else DoSelectionChanged(-1); end; { TColumnsDrawTree } constructor TColumnsDrawTree.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ColumnsView := AParent as TColumnsFileViewVTV; ColumnsOwnDim := @ColumnsView.DimColor; DragType := dtVCL; HintMode := hmHint; Self.Parent := AParent; end; function TColumnsDrawTree.DetermineScrollDirections(X, Y: Integer): TScrollDirections; begin Result := inherited DetermineScrollDirections(X, Y) - [sdLeft, sdRight]; // Only scroll up, down. end; function TColumnsDrawTree.DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; begin Result := CharCode in [VK_HOME, VK_END, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT]; end; procedure TColumnsDrawTree.AfterConstruction; begin inherited; RootNodeCount := 0; NodeDataSize := SizeOf(TColumnsDrawTreeRecord); Align := alClient; TreeOptions.AutoOptions := [toAutoScroll, toDisableAutoscrollHorizontal]; TreeOptions.MiscOptions := [toFullRowDrag]; // TODO: if no mouse action for middle button: include toWheelPanning TreeOptions.PaintOptions := [toShowBackground, toThemeAware, toUseBlendedImages, toGhostedIfUnfocused, toStaticBackground, toAlwaysHideSelection, toHideFocusRect]; TreeOptions.SelectionOptions := [toDisableDrawSelection, toExtendedFocus, toFullRowSelect]; TabStop := False; Margin := 0; TextMargin := 0; Indent := 0; AnimationDuration := 0; AutoScrollDelay := 500; // milliseconds AutoScrollInterval := 100; // milliseconds UpdateView; end; function TColumnsDrawTree.CanAutoScroll: Boolean; begin Result := inherited CanAutoScroll; if Header.States = [] then begin with ColumnsView do begin if IsMouseSelecting then Result := True; end; end; end; function TColumnsDrawTree.CanScroll(const ClientMousePos: TPoint): Boolean; begin Result := ColumnsView.IsMouseSelecting; end; procedure TColumnsDrawTree.CMHintShow(var Message: TCMHintShow); begin // Skip CMHintShow from VTV and do what TControl.CMHintShow does. DoOnShowHint(Message.HintInfo); end; procedure TColumnsDrawTree.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 TColumnsFileViewVTV) 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; // 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; end; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin OldFont := Canvas.Font; Canvas.Font := Font; Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; var TabHeaderHeight: Integer; TempRowHeight: Integer; Node: PVirtualNode; begin BeginUpdate; try if gInterfaceFlat then begin Header.Style := hsPlates; BorderStyle := bsNone; BorderWidth := 0; end else Header.Style := hsFlatButtons; GridVertLine:= gGridVertLine; GridHorzLine:= gGridHorzLine; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then begin DefaultNodeHeight := TempRowHeight; // Set each node's height if changed. Node := GetFirstNoInit; if Assigned(Node) and (NodeHeight[Node] <> TempRowHeight) then SetAllRowsHeights(TempRowHeight); end; // Add additional space at the bottom so that the filelist doesn't jump at the end. // It happens when ClientHeight is not an exact multiplication of DefaultNodeHeight. BottomSpace := ClientHeight mod DefaultNodeHeight; Header.Options := [hoColumnResize, hoDblClickResize, hoDisableAnimatedResize, hoOwnerDraw, hoHotTrack]; // Set rows of header. if gTabHeader then begin Header.Options := Header.Options + [hoVisible]; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; Header.DefaultHeight := TabHeaderHeight; end; if gAutoFillColumns then Header.Options := Header.Options + [hoAutoResize, hoAutoSpring]; finally EndUpdate; end; end; procedure TColumnsDrawTree.WMKeyDown(var Message: TLMKeyDown); var Node, Temp: PVirtualNode; Offset: Integer; SavedKey: Word; Shift: TShiftState; begin Shift := KeyDataToShiftState(Message.KeyData); SavedKey := Message.CharCode; if ColumnsView.IsLoadingFileList then begin ColumnsView.HandleKeyDownWhenLoading(Message.CharCode, Shift); Exit; end; // 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; // Override scrolling with PageUp, PageDown because VirtualTreeView scrolls too much. case SavedKey of VK_PRIOR: begin Offset := 0; // If there's no focused node then just take the very first one. if FocusedNode = nil then Node := GetFirstNoInit else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FocusedNode; Temp := Node; while Assigned(Temp) do begin Inc(Offset, NodeHeight[Temp]); if Offset >= ClientHeight then Break; Node := Temp; Temp := GetPreviousSiblingNoInit(Temp); end; end; FocusedNode := Node; Message.CharCode := 0; end; VK_NEXT: begin Offset := 0; // If there's no focused node then just take the very last one. if FocusedNode = nil then Node := GetLastNoInit else begin // Go down as many nodes as comprise together a size of ClientHeight. Node := FocusedNode; Temp := Node; while Assigned(Temp) do begin Inc(Offset, NodeHeight[Temp]); if Offset >= ClientHeight then Break; Node := Temp; Temp := GetNextSiblingNoInit(Temp); end; end; FocusedNode := Node; //if OffsetY mod DefaultNodeHeight <> 0 then // OffsetY := OffsetY - ClientHeight mod DefaultNodeHeight; Message.CharCode := 0; end; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: begin Node := FocusedNode; if ((Node = GetLastNoInit) and (SavedKey = VK_DOWN)) or ((Node = GetFirstNoInit) and (SavedKey = VK_UP)) then Message.CharCode := 0; end; {$ENDIF} end; inherited WMKeyDown(Message); if (ColumnsView.FRangeSelecting) and Assigned(FocusedNode) then ColumnsView.Selection(SavedKey, FocusedNode^.Index); end; procedure TColumnsDrawTree.InitializeWnd; begin inherited InitializeWnd; ColumnsView.InitializeDragDropEx(Self); end; procedure TColumnsDrawTree.FinalizeWnd; begin ColumnsView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; procedure TColumnsDrawTree.DoPaintNode(var PaintInfo: TVTPaintInfo); var //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; ColumnsSet: TPanelColumnsClass; IsFocused: Boolean; aRect: TRect; aCol: TColumnIndex; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; oldClipping: Boolean; 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 + (PaintInfo.Node^.NodeHeight - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, PaintInfo.Canvas, aRect.Left + 1, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, PaintInfo.Canvas, aRect.Left + 1, Y ); end; end; s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin Y:= ((aRect.Right - aRect.Left) - PaintInfo.Canvas.TextWidth('V')); if (gShowIcons <> sim_none) then Y:= Y - gIconsSize; s:= FitFileName(s, PaintInfo.Canvas, AFile.FSFile, Y); end; oldClipping := PaintInfo.Canvas.Clipping; //PaintInfo.Canvas.Clipping := False; if (gShowIcons <> sim_none) then PaintInfo.Canvas.TextOut(aRect.Left + gIconsSize + 4, iTextTop, s) else PaintInfo.Canvas.TextOut(aRect.Left + 2, iTextTop, s); // PaintInfo.Canvas.Clipping := oldClipping; end; //of DrawIconCell //------------------------------------------------------ procedure DrawOtherCell; //------------------------------------------------------ var tw, cw: Integer; oldClipping: Boolean; begin s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin while PaintInfo.Canvas.TextWidth(s) - (aRect.Right - aRect.Left) - 4 > 0 do Delete(s, Length(s), 1); end; oldClipping := PaintInfo.Canvas.Clipping; //PaintInfo.Canvas.Clipping := False; case ColumnsSet.GetColumnAlign(ACol) of taRightJustify: begin cw := Header.Columns.Items[ACol].Width; tw := PaintInfo.Canvas.TextWidth(s); PaintInfo.Canvas.TextOut(aRect.Right - tw - 3, iTextTop, s); end; taLeftJustify: begin PaintInfo.Canvas.TextOut(aRect.Left + 3, iTextTop, s); end; taCenter: begin cw := Header.Columns.Items[ACol].Width; tw := PaintInfo.Canvas.TextWidth(s); PaintInfo.Canvas.TextOut(aRect.Left + ((cw - tw - 3) div 2), iTextTop, s); end; end; //of case // PaintInfo.Canvas.Clipping := oldClipping; end; //of DrawOtherCell //------------------------------------------------------ procedure PrepareColors; //------------------------------------------------------ var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; //--------------------- begin PaintInfo.Canvas.Font.Name := ColumnsSet.GetColumnFontName(ACol); PaintInfo.Canvas.Font.Size := ColumnsSet.GetColumnFontSize(ACol); PaintInfo.Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(ACol); PaintInfo.Canvas.Font.Quality := ColumnsSet.GetColumnFontQuality(ACol); IsCursor := IsFocused and ColumnsView.Active and (not ColumnsSet.UseFrameCursor); IsCursorInactive := IsFocused and (not ColumnsView.Active) and (not ColumnsSet.UseFrameCursor); // Set up default background color first. if IsCursor then begin BackgroundColor := ColumnsSet.GetColumnCursorColor(ACol); end else begin if IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol) then BackgroundColor := ColumnsSet.GetColumnInactiveCursorColor(ACol) else // Alternate rows background color. if odd(PaintInfo.Node^.Index) 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(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 TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; // Draw background. PaintInfo.Canvas.Brush.Color := BackgroundColor; PaintInfo.Canvas.FillRect(aRect); PaintInfo.Canvas.Font.Color := TextColor; end;// of PrepareColors; procedure DrawLines; begin // Draw frame cursor. if ColumnsSet.UseFrameCursor and IsFocused and (ColumnsView.Active or ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then begin if ColumnsView.Active then PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnCursorColor(ACol) else PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnInactiveCursorColor(ACol); PaintInfo.Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); PaintInfo.Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; // Draw drop selection. if PaintInfo.Node^.Index = ColumnsView.FDropFileIndex then begin PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnTextColor(ACol); PaintInfo.Canvas.Line(aRect.Left, aRect.Top + 1, aRect.Right, aRect.Top + 1); PaintInfo.Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; end; //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin aRect := PaintInfo.ContentRect; aCol := PaintInfo.Column; AFile := GetNodeFile(PaintInfo.Node); if not Assigned(AFile) then begin PaintInfo.Canvas.Brush.Color := Self.Color; PaintInfo.Canvas.FillRect(aRect); Exit; end; ColumnsSet := ColumnsView.GetColumnsClass; FileSourceDirectAccess := fspDirectAccess in ColumnsView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then ColumnsView.MakeColumnsStrings(AFile, ColumnsSet); IsFocused := PaintInfo.Node = FocusedNode; PrepareColors; // Paint on next column if it is empty. {if (ColumnsSet.GetColumnAlign(ACol) = taLeftJustify) and (ACol + 1 < ColumnsSet.ColumnsCount) and (AFile.DisplayStrings[ACol + 1] = EmptyStr) then aRect.Right := aRect.Right + Header.Columns.Items[ACol + 1].Width; // Paint on previous column if it is empty. if (ColumnsSet.GetColumnAlign(ACol) = taRightJustify) and (ACol - 1 >= 0) and (AFile.DisplayStrings[ACol - 1] = EmptyStr) then aRect.Left := aRect.Left - Header.Columns.Items[ACol - 1].Width; } iTextTop := aRect.Top + (PaintInfo.Node^.NodeHeight - PaintInfo.Canvas.TextHeight('Wg')) div 2; if PaintInfo.Column = 0 then DrawIconCell // Draw icon in the first column else DrawOtherCell; DrawLines; end; function TColumnsDrawTree.GetNodeFile(Node: PVirtualNode): TDisplayFile; begin if InRange(Node^.Index, 0, ColumnsView.FFiles.Count-1) then Result := ColumnsView.FFiles[Node^.Index] else Result := nil; end; procedure TColumnsDrawTree.SetAllRowsHeights(ARowHeight: Cardinal); var Node: PVirtualNode; begin BeginUpdate; try Node := GetFirstNoInit; while Assigned(Node) do begin NodeHeight[Node] := ARowHeight; Node := Node^.NextSibling; end; finally EndUpdate; end; end; procedure TColumnsDrawTree.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var BackgroundClick: Boolean; Point: TPoint; 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 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(ColumnsView, Point.x, Point.y, BackgroundClick); 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) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TColumnsDrawTree.MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin 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} ColumnsView.FMainControlMouseDown := True; inherited MouseDown(Button, Shift, X, Y); end; function TColumnsDrawTree.MouseOnGrid(X, Y: LongInt): Boolean; begin Result := Assigned(GetNodeAt(X, Y)); end; function TColumnsDrawTree.GetHeaderHeight: Integer; begin Result := Header.Height; end; function TColumnsDrawTree.GetGridHorzLine: Boolean; begin Result := toShowHorzGridLines in TreeOptions.PaintOptions; end; function TColumnsDrawTree.GetGridVertLine: Boolean; begin Result := toShowVertGridLines in TreeOptions.PaintOptions; end; procedure TColumnsDrawTree.SetGridHorzLine(const AValue: Boolean); begin if AValue then TreeOptions.PaintOptions := TreeOptions.PaintOptions + [toShowHorzGridLines] else TreeOptions.PaintOptions := TreeOptions.PaintOptions - [toShowHorzGridLines]; end; procedure TColumnsDrawTree.SetGridVertLine(const AValue: Boolean); begin if AValue then TreeOptions.PaintOptions := TreeOptions.PaintOptions + [toShowVertGridLines] else TreeOptions.PaintOptions := TreeOptions.PaintOptions - [toShowVertGridLines]; end; function TColumnsDrawTree.GetVisibleNodes: TNodeRange; var Offset: Integer = 0; Node: PVirtualNode; CH: Integer; begin Result.First := GetNodeAt(0, 0, True, Offset); Result.Last := Result.First; CH := ClientHeight; // Go down as many nodes as comprise together a size of ClientHeight. if Assigned(Result.Last) then begin while True do begin if Offset >= CH then Break; Node := GetNextSiblingNoInit(Result.Last); if not Assigned(Node) then Break; Result.Last := Node; Inc(Offset, NodeHeight[Node]); end; end; end; function TColumnsDrawTree.GetVisibleIndexes: TRange; begin if csLoading in ComponentState then begin Result.First := 0; Result.Last := -1; end else begin // This assumes each row has the same height = DefaultNodeHeight. Result.First := -OffsetY div DefaultNodeHeight; Result.Last := (-OffsetY + ClientHeight) div DefaultNodeHeight; // Account for the fact the BottomSpace might be > 0. if Result.Last >= RootNodeCount then Result.Last := RootNodeCount - 1; end; end; end. doublecmd-0.9.8/src/fileviews/ucolumnsfileview.pas0000644000175000001440000017726713611060423021437 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, DCClassesUtf8, uTypes, uFileViewWithGrid; type TFunctionDime = function (AColor: TColor): TColor of Object; TColumnsSortDirections = array of TSortDirection; TColumnsFileView = class; { TDrawGridEx } TDrawGridEx = class(TDrawGrid) 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); {$IF lcl_fullversion < 1080003} function SelectCell(aCol, aRow: Integer): Boolean; override; {$ENDIF} 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; 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; {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} 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; {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 -------------------------------------------------------------- {$IF lcl_fullversion >= 093100} procedure dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); {$ENDIF} 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); 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 MouseScrollTimer(Sender: TObject); override; procedure AfterChangePath; override; function GetVariantFileProperties: TDynamicStringArray; override; public ActiveColm: String; ActiveColmSlave: TPanelColumnsClass; isSlave: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; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; procedure UpdateColumnsView; procedure SetColumnSet(const AName: String); procedure SetGridFunctionDim(ExternalDimFunction:TFunctionDime); property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized; published procedure cm_CopyFileDetailsToClip(const Params: array of string); end; implementation uses LCLProc, Buttons, Clipbrd, DCStrUtils, uLng, uGlobs, uPixmapManager, uDebug, uDCUtils, math, fMain, fOptions, uClipboard, uOrderedFileView, uFileSourceProperty, uKeyboard, uFileFunctions, uFormCommands, 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); AConfig.SetValue(ANode, 'ColumnsSet', ActiveColm); 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].SizeMIN_FONT_SIZE_MAIN) 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 {$IF lcl_fullversion >= 093100} dgPanel.Options := dgPanel.Options - [goDontScrollPartCell]; {$ENDIF} DoFileIndexChanged(aRow - dgPanel.FixedRows, dgPanel.TopRow); 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.Right - ARect.Left, ARect.Bottom - ARect.Top); 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 + (dgPanel.RowHeights[FileIndex] - 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; dgPanel.RowCount := dgPanel.FixedRows + Count; 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.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; {$IF lcl_fullversion >= 093100} procedure TColumnsFileView.dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); begin if dgPanel.IsRowVisible(aRow) then dgPanel.Options := dgPanel.Options + [goDontScrollPartCell]; end; {$ENDIF} 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 Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TColumnsFileView.SetColumnSet(const AName: String); begin if ColSet.Items.IndexOf(AName) >= 0 then begin ActiveColm:= AName; 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]; 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; {$IF lcl_fullversion >= 093100} dgPanel.OnBeforeSelection:= @dgPanelBeforeSelection; {$ENDIF} 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 FileView as TColumnsFileView do begin FColumnsSortDirections := Self.FColumnsSortDirections; ActiveColm := Self.ActiveColm; ActiveColmSlave := nil; // set to nil because only used in preview? isSlave := Self.isSlave; end; end; end; procedure TColumnsFileView.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); if 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; begin // Update grid row count. SetRowCount(FFiles.Count); SetFilesDisplayItems; RedrawFiles; if SetActiveFileNow(RequestedActiveFile, FLastTopRowIndex) then RequestedActiveFile := '' // Requested file was not found, restore position to last active file. else if not SetActiveFileNow(LastActiveFile, 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.cm_CopyFileDetailsToClip(const Params: array of string); var I: Integer; AFile: TDisplayFile; sl: TStringList = nil; procedure AddFile; var J: Integer; S: String; begin if AFile.FSFile.IsNameValid then begin S:= EmptyStr; for J:= 0 to AFile.DisplayStrings.Count - 1 do begin S:= S + AFile.DisplayStrings[J] + #09; end; J:= Length(S); if J > 0 then sl.Add(Copy(S, 1, J - 1)); end; end; begin if DisplayFiles.Count > 0 then begin sl:= TStringList.Create; try for I:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[I]; if AFile.Selected then AddFile; end; if sl.Count = 0 then begin AFile:= GetActiveDisplayFile; AddFile; end; Clipboard.Clear; // prevent multiple formats in Clipboard ClipboardSetText(TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle)); finally FreeAndNil(sl); 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; 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; 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 + (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 + CELL_PADDING, Y ); end; end; s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin Y:= (aRect.Right - aRect.Left) - 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: Integer; begin s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then s := FitOtherCellText(s, Canvas, ARect.Right - ARect.Left - 2*CELL_PADDING); case ColumnsSet.GetColumnAlign(ACol) of taRightJustify: begin tw := Canvas.TextWidth(s); Canvas.TextOut(aRect.Right - tw - CELL_PADDING, 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(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 TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); 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 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 + (RowHeights[aRow] - 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; end else begin Canvas.Brush.Color := Self.Color; Canvas.FillRect(aRect); end; end; {$if lcl_fullversion >= 1070000} procedure TDrawGridEx.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust layout end; {$endif} 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 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 //- MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Caption:='-'; ColumnsView.pmColumnsMenu.Items.Add(MI); // General columns set for I:= 0 to ColSet.Items.Count - 1 do begin if not 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; end; end; //- MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Caption:='-'; ColumnsView.pmColumnsMenu.Items.Add(MI); //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; 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; {$IF lcl_fullversion < 1080003} // Workaround for Lazarus issue 31942. function TDrawGridEx.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} 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; 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-0.9.8/src/fileviews/ubrieffileview.pas0000644000175000001440000004221413530175472021040 0ustar alexxusersunit uBriefFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, LMessages, Grids, Graphics, uDisplayFile, DCXmlConfig, uTypes, uFileViewWithGrid, uFile, uFileSource; 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; 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, L, M: Integer; 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; for I:= 0 to FBriefView.FFiles.Count - 1 do begin L:= Length(FBriefView.FFiles[I].FSFile.Name); if L > M then begin M:= L; J:= I; end; end; Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Size := gFonts[dcfMain].Size; Canvas.Font.Style := gFonts[dcfMain].Style; 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>MIN_FONT_SIZE_MAIN) 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>MIN_FONT_SIZE_MAIN) 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(gBackColor); 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; 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; 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-0.9.8/src/filesources/0000755000175000001440000000000013615241422015640 5ustar alexxusersdoublecmd-0.9.8/src/filesources/winnet/0000755000175000001440000000000013615241422017144 5ustar alexxusersdoublecmd-0.9.8/src/filesources/winnet/uwinnetlistoperation.pas0000644000175000001440000001420313365127766024177 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 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; 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:= UTF8Decode(ExcludeTrailingPathDelimiter(Path)) else begin dwResult:= NPos(PathDelim, Path, 4); if dwResult = 0 then dwResult:= MaxInt; ServerPath:= UTF8Decode(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, mbSysErrorMessage(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:= UTF8Decode(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, mbSysErrorMessage(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:= UTF8Decode(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; 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 WorkgroupEnum; end; end; end; end. doublecmd-0.9.8/src/filesources/winnet/uwinnetfilesource.pas0000644000175000001440000002453013352734566023445 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 GetProviderName: WideString; function IsNetworkPath(const Path: String): Boolean; property ProviderName: WideString read GetProviderName; end; { TWinNetFileSource } TWinNetFileSource = class(TFileSystemFileSource, IWinNetFileSource) private FProviderName: array[0..MAX_PATH-1] of WideChar; function GetProviderName: WideString; 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; 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, Windows, JwaWinNetWk, uVfsModule, uShowMsg, DCOSUtils, DCStrUtils; 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 FilePath:= UTF8Decode(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(mbSysErrorMessage(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: WideString; begin Result:= WideString(FProviderName); 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; begin inherited Create; dwBufferSize:= MAX_PATH; if WNetGetProviderNameW(WNNC_NET_LANMAN, @FProviderName, dwBufferSize) <> NO_ERROR then RaiseLastOSError; end; class function TWinNetFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= (Pos('\\', Path) = 1); 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-0.9.8/src/filesources/winnet/uwinnetexecuteoperation.pas0000644000175000001440000000523412612505011024643 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; 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:= UTF8Decode(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-0.9.8/src/filesources/wfxplugin/0000755000175000001440000000000013615241422017663 5ustar alexxusersdoublecmd-0.9.8/src/filesources/wfxplugin/uwfxpluginutil.pas0000644000175000001440000003754013320373360023507 0ustar alexxusersunit uWfxPluginUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLProc, DCOSUtils, uLog, uGlobs, WfxPlugin, uFile, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uFileSourceCopyOperation, uWfxPluginFileSource; type TWfxPluginOperationHelperMode = (wpohmCopy, wpohmCopyIn, wpohmCopyOut, wpohmMove); TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; { TWfxPluginOperationHelper } TWfxPluginOperationHelper = class private FWfxPluginFileSource: IWfxPluginFileSource; FOperationThread: TThread; FMode: TWfxPluginOperationHelperMode; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FLogCaption: String; FRenamingFiles, FRenamingRootDir, FInternal: Boolean; 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 ProcessDirectory(aFile: TFile; AbsoluteTargetFileName: String): LongInt; function ProcessFile(aFile: TFile; AbsoluteTargetFileName: String; var Statistics: TFileSourceCopyOperationStatistics): LongInt; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function FileExists(aFile: TFile; AbsoluteTargetFileName: String; AllowResume: Boolean): TFileSourceOperationOptionFileExists; procedure CopyProperties(SourceFile: TFile; const TargetFileName: String); 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 ProcessFiles(aFiles: TFiles; 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; implementation uses uFileProcs, StrUtils, DCStrUtils, uLng, uWfxModule, uFileSystemUtil, uFileProperty, DCDateTimeUtils, DCBasicTypes; function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: String): Boolean; var RemoteInfo: TRemoteInfo; iTemp: TInt64Rec; begin with aFileSource do begin with RemoteInfo do begin iTemp.Value := (aFile.Properties[fpSize] as TFileSizeProperty).Value; SizeLow := iTemp.Low; SizeHigh := iTemp.High; LastWriteTime := DateTimeToWfxFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value); Attr := LongInt((aFile.Properties[fpAttributes] as TFileAttributesProperty).Value); 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; begin Result:= WinFileTimeToDateTime(TWinFileTime(FileTime)); end; function DateTimeToWfxFileTime(DateTime: TDateTime): TWfxFileTime; begin Result:= TWfxFileTime(DateTimeToWinFileTime(DateTime)); 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.ProcessDirectory(aFile: TFile; AbsoluteTargetFileName: String): LongInt; begin Result:= WFX_ERROR; case FMode of wpohmCopy, wpohmCopyIn, wpohmMove: begin Result:= FWfxPluginFileSource.WfxModule.WfxMkDir('', AbsoluteTargetFileName); end; wpohmCopyOut: begin if mbForceDirectory(AbsoluteTargetFileName) then Result:= WFX_SUCCESS; end; end; end; function TWfxPluginOperationHelper.ProcessFile(aFile: TFile; AbsoluteTargetFileName: String; var Statistics: TFileSourceCopyOperationStatistics): LongInt; var iFlags: Integer = 0; RemoteInfo: TRemoteInfo; iTemp: TInt64Rec; bCopyMoveIn: Boolean; 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 := Statistics.DoneBytes; with FWfxPluginFileSource do begin { FCurrentFileSize:= aFile.Size; } with RemoteInfo do begin iTemp.Value := aFile.Size; SizeLow := iTemp.Low; SizeHigh := 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 Statistics do begin if Result = FS_FILE_OK then DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(Statistics); 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, [Numb2USA(IntToStr(TargetFile.Size)), DateTimeToStr(TargetFile.ModificationTime)]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + SourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(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: array of TFileSourceOperationUIResponse; 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 mbFileSetTime(TargetFileName, DateTimeToFileTime(SourceFile.ModificationTime)) else begin WfxFileTime := DateTimeToWfxFileTime(SourceFile.ModificationTime); FWfxPluginFileSource.WfxModule.WfxSetTime(TargetFileName, nil, nil, @WfxFileTime); end; end; 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.ProcessFiles(aFiles: TFiles; var Statistics: TFileSourceCopyOperationStatistics); var I: Integer; iResult: LongInt; sTargetFile : String; 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 (aFiles.Count = 1) and FRenamingFiles then begin aFile := aFiles[0]; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; end; end; for I:= 0 to aFiles.Count - 1 do with FWfxPluginFileSource do begin aFile:= aFiles.Items[I]; // Filenames must be relative to the current directory. sTargetFile := FRootTargetPath + ExtractDirLevel(aFiles.Path, aFile.Path); if FRenamingRootDir then sTargetFile := sTargetFile + FRenameMask else sTargetFile := sTargetFile + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask); //DCDebug('Source name == ' + aFile.FullPath); //DCDebug('Target name == ' + sTargetFile); with Statistics do begin CurrentFileFrom := aFile.Path + aFile.Name; CurrentFileTo := sTargetFile; CurrentFileTotalBytes := (aFile.Properties[fpSize] as TFileSizeProperty).Value; CurrentFileDoneBytes := 0; end; UpdateStatistics(Statistics); if not aFile.IsDirectory then iResult := ProcessFile(aFile, sTargetFile, Statistics) else iResult := ProcessDirectory(aFile, sTargetFile); if iResult = FS_FILE_USERABORT then AbortOperation(); if iResult = FS_FILE_OK then CopyProperties(aFile, sTargetFile); if iResult = FS_FILE_OK then begin LogMessage(Format(rsMsgLogSuccess+FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile]), [log_vfs_op], lmtSuccess); end else begin ShowError(Format(rsMsgLogError + FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile + ' - ' + GetErrorMsg(iResult)])); LogMessage(Format(rsMsgLogError+FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile]), [log_vfs_op], lmtError); end; CheckOperationState; end; end; end. doublecmd-0.9.8/src/filesources/wfxplugin/uwfxpluginsetfilepropertyoperation.pas0000644000175000001440000001552213160155631027710 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; NewAttributes: TFileAttrs; ftTime: TFileTime; 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-0.9.8/src/filesources/wfxplugin/uwfxpluginmoveoperation.pas0000644000175000001440000001140613333770532025420 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; FFullFilesTreeToCopy: TFiles; // 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; 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; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) 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.ProcessFiles(FFullFilesTreeToCopy, 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-0.9.8/src/filesources/wfxplugin/uwfxpluginlistoperation.pas0000644000175000001440000000573313333770532025433 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, WfxPlugin, uWfxModule, uLog, uLng; function TWfxPluginListOperation.UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; begin logWrite(rsMsgLoadingFileList + IntToStr(PercentDone) + '%', lmtInfo, False, False); Result := 0; 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-0.9.8/src/filesources/wfxplugin/uwfxpluginfilesource.pas0000644000175000001440000012050413436740403024667 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; 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; // 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; 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; var sReq: String; begin Result:= False; // Use operation UI for this? if CustomTitle = '' then CustomTitle:= 'Double Commander'; case RequestType of RT_Other: begin sReq:= 'RT_Other'; Result:= ShowInputQuery(CustomTitle, CustomText, ReturnedText); end; RT_UserName: begin sReq:= 'RT_UserName'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserName, CustomText), ReturnedText); end; RT_Password: begin sReq:= 'RT_Password'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPassword, CustomText), True, ReturnedText); end; RT_Account: begin sReq:= 'RT_Account'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgAccount, CustomText), ReturnedText); end; RT_UserNameFirewall: begin sReq:= 'RT_UserNameFirewall'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserNameFirewall, CustomText), ReturnedText); end; RT_PasswordFirewall: begin sReq:= 'RT_PasswordFirewall'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPasswordFirewall, CustomText), True, ReturnedText); end; RT_TargetDir: begin sReq:= 'RT_TargetDir'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgTargetDir, CustomText), ReturnedText); end; RT_URL: begin sReq:= 'RT_URL'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgURL, CustomText), ReturnedText); end; RT_MsgOK: begin sReq:= 'RT_MsgOK'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OK) = IDOK); end; RT_MsgYesNo: begin sReq:= 'RT_MsgYesNo'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_YESNO) = IDYES); end; RT_MsgOKCancel: begin sReq:= 'RT_MsgOKCancel'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OKCANCEL) = IDOK); end; end; DCDebug('MainRequestProc ('+IntToStr(PluginNr)+','+sReq+','+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, UTF8Decode(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, UTF8Decode(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) then FindData.Reserved0:= FindData.Reserved0 or S_IFDIR; AttributesProperty := TUnixFileAttributesProperty.Create(FindData.Reserved0); end; SizeProperty := TFileSizeProperty.Create(FindData.FileSize); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(FindData.LastWriteTime); 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; 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; end; 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; 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-0.9.8/src/filesources/wfxplugin/uwfxpluginexecuteoperation.pas0000644000175000001440000000450013603447456026117 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-0.9.8/src/filesources/wfxplugin/uwfxplugindeleteoperation.pas0000644000175000001440000001443013206511222025700 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-0.9.8/src/filesources/wfxplugin/uwfxplugincreatedirectoryoperation.pas0000644000175000001440000000357611747211345027652 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-0.9.8/src/filesources/wfxplugin/uwfxplugincopyoutoperation.pas0000644000175000001440000001265013333770532026156 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; FFullFilesTreeToCopy: TFiles; // 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; 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; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) 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.ProcessFiles(FFullFilesTreeToCopy, 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-0.9.8/src/filesources/wfxplugin/uwfxplugincopyoperation.pas0000644000175000001440000001200213333770532025415 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; FFullFilesTreeToCopy: TFiles; // 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; 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; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) 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.ProcessFiles(FFullFilesTreeToCopy, 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-0.9.8/src/filesources/wfxplugin/uwfxplugincopyinoperation.pas0000644000175000001440000001255613506103211025744 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; FFullFilesTreeToCopy: TFiles; // 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, uFileSystemUtil; // -- 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; 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; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) 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.ProcessFiles(FFullFilesTreeToCopy, 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-0.9.8/src/filesources/wfxplugin/uwfxplugincalcstatisticsoperation.pas0000644000175000001440000000651213573157206027474 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-0.9.8/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.pas0000644000175000001440000001571613373444561027724 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-0.9.8/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lrj0000644000175000001440000000130713373444561027717 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-0.9.8/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lfm0000644000175000001440000000372713373444561027716 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-0.9.8/src/filesources/wcxarchive/0000755000175000001440000000000013615241422020003 5ustar alexxusersdoublecmd-0.9.8/src/filesources/wcxarchive/uwcxarchivetestarchiveoperation.pas0000644000175000001440000002254113546360050027231 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 FCurrentFileSize: Int64; 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 CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then CurrentFileDoneBytes := CurrentFileTotalBytes; 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 DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin CurrentFileTotalBytes := 100; CurrentFileDoneBytes := Int64(-Size) - 1000; 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; CurrentFileTotalBytes := Header.UnpSize; CurrentFileDoneBytes := 0; UpdateStatistics(FStatistics); FCurrentFileSize := Header.UnpSize; 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-0.9.8/src/filesources/wcxarchive/uwcxarchivelistoperation.pas0000644000175000001440000000333112577502642025667 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 not FileSource.IsPathAtRoot(Path) then begin aFile := TWcxArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FWcxArchiveFileSource.ArchiveFileList; 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; end; end. doublecmd-0.9.8/src/filesources/wcxarchive/uwcxarchivefilesource.pas0000644000175000001440000007404713546360050025137 0ustar alexxusersunit uWcxArchiveFileSource; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, contnrs, syncobjs, StringHashList, WcxPlugin, uWCXmodule, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation; type TWcxArchiveFileSourceConnection = class; { IWcxArchiveFileSource } IWcxArchiveFileSource = interface(IArchiveFileSource) ['{DB32E8A8-486B-4053-9448-4C145C1A33FA}'] function GetArcFileList: TObjectList; function GetPluginCapabilities: PtrInt; function GetWcxModule: TWcxModule; property ArchiveFileList: TObjectList read GetArcFileList; property PluginCapabilities: PtrInt read GetPluginCapabilities; property WcxModule: TWCXModule read GetWcxModule; end; { TWcxArchiveFileSource } TWcxArchiveFileSource = class(TArchiveFileSource, IWcxArchiveFileSource) private FModuleFileName: String; FPluginCapabilities: PtrInt; FArcFileList : TObjectList; FWcxModule: TWCXModule; FOpenResult: LongInt; procedure SetCryptCallback; function ReadArchive(anArchiveHandle: TArcHandle = 0): Boolean; function GetArcFileList: TObjectList; 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 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 type (only extension is checked). } class function CheckPluginByExt(anArchiveType: String): Boolean; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; override; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); override; property ArchiveFileList: TObjectList 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, uDCUtils, uGlobs, DCOSUtils, uShowMsg, DCDateTimeUtils, uLng, uLog, 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, UTF8Decode(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; WcxPlugin: TWcxModule; bFound: Boolean = False; lOpenResult: LongInt; anArchiveHandle: TArcHandle = 0; begin Result := 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.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 else if ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) = PK_CAPS_HIDE) then begin bFound:= SameText(ExtractOnlyFileExt(anArchiveFileName), 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 SameText(anArchiveType, gWCXPlugins.Ext[i]) and (gWCXPlugins.Enabled[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; begin Result:= CreateByArchiveType(anArchiveFileSource, anArchiveFileName, ExtractOnlyFileExt(anArchiveFileName), bIncludeHidden); end; class function TWcxArchiveFileSource.CheckPluginByExt(anArchiveType: String): Boolean; var i: Integer; begin for i := 0 to gWCXPlugins.Count - 1 do begin if SameText(anArchiveType, gWCXPlugins.Ext[i]) and (gWCXPlugins.Enabled[i]) 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 := TObjectList.Create(True); 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 := TObjectList.Create(True); 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); CompressedSizeProperty := TFileCompressedSizeProperty.Create(WcxHeader.PackSize); end; ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0); try ModificationTime := WcxFileTimeToDateTime(WcxHeader.FileTime); except on EConvertError do; end; // Set name after assigning Attributes property, because it is used to get extension. Name := ExtractFileName(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; Header: TWCXHeader; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); // Search file list for a directory with name NewDir. for I := 0 to FArcFileList.Count - 1 do begin Header := TWCXHeader(FArcFileList.Items[I]); if FPS_ISDIR(Header.FileAttr) and (Length(Header.FileName) > 0) then begin if NewDir = IncludeTrailingPathDelimiter(GetRootDir() + Header.FileName) then Exit(True); end; end; end; 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: TObjectList; 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: TStringHashList); 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; AllDirsList, ExistsDirList : TStringHashList; I : Integer; NameLength: Integer; 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*) FArcFileList.Clear; ExistsDirList := TStringHashList.Create(True); AllDirsList := TStringHashList.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); //********************************************************************** FArcFileList.Add(Header); // get next file FOpenResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); // Check for errors if FOpenResult <> E_SUCCESS then Exit; end; // while (* 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; {$IFDEF MSWINDOWS} WinToDosTime(mbFileAge(ArchiveFileName), Header.FileTime); {$ELSE} {$PUSH}{$R-} Header.FileTime := LongInt(mbFileAge(ArchiveFileName)); {$POP} {$ENDIF} FArcFileList.Add(Header); except FreeAndNil(Header); end; end; end; Result:= True; finally AllDirsList.Free; ExistsDirList.Free; WcxModule.CloseArchive(ArcHandle); 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-0.9.8/src/filesources/wcxarchive/uwcxarchiveexecuteoperation.pas0000644000175000001440000000341212736146106026352 0ustar alexxusersunit uWcxArchiveExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uWcxArchiveFileSource; type { TWcxArchiveExecuteOperation } TWcxArchiveExecuteOperation = class(TFileSourceExecuteOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; 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 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-0.9.8/src/filesources/wcxarchive/uwcxarchivedeleteoperation.pas0000644000175000001440000001707413546360050026157 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 TotalFiles := 100; DoneBytes := DoneBytes + Size; DoneFiles := DoneBytes * 100 div TotalBytes; 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; 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; 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-0.9.8/src/filesources/wcxarchive/uwcxarchivecopyoutoperation.pas0000644000175000001440000006051013546360050026410 0ustar alexxusersunit uWcxArchiveCopyOutOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, LazFileUtils,SysUtils, StringHashList, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationUI, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWcxModule, uWcxArchiveFileSource; type { TWcxArchiveCopyOutOperation } TWcxArchiveCopyOutOperation = class(TFileSourceCopyOutOperation) 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(FileMask 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; FileMask: String; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); {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: TStringHashList): 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; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property ExtractWithoutPath: Boolean read FExtractWithoutPath write FExtractWithoutPath; end; implementation uses Forms, LazUTF8, uMasks, FileUtil, contnrs, DCOSUtils, DCStrUtils, uDCUtils, 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 CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then CurrentFileDoneBytes := CurrentFileTotalBytes; 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 DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin CurrentFileDoneBytes := 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; 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; // 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; FileMask: String; CreatedPaths: TStringHashList; 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; FileMask := ExtractFileName(TargetPath); if FileMask = '' then FileMask := '*'; // extract all selected files/folders // Convert file list so that filenames are relative to archive root. Files := SourceFiles.Clone; ChangeFileListRoot(PathDelim, Files); CreatedPaths := TStringHashList.Create(True); try // Count total files size and create needed directories. CreateDirsAndCountFiles(Files, FileMask, 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 ((FileMask = '*.*') or (FileMask = '*') // And name matches file mask or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin if FExtractWithoutPath then TargetFileName := TargetPath + ExtractFileName(Header.FileName) else TargetFileName := TargetPath + ExtractDirLevel(Files.Path, Header.FileName); if FRenamingFiles then begin TargetFileName := ExtractFilePath(TargetFileName) + ApplyRenameMask(ExtractFileName(TargetFileName), FRenameNameMask, FRenameExtMask); end; with FStatistics do begin CurrentFileFrom := Header.FileName; CurrentFileTo := TargetFileName; CurrentFileTotalBytes := Header.UnpSize; CurrentFileDoneBytes := 0; 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; if (FExtractWithoutPath = False) then SetDirsAttributes(CreatedPaths); finally // Close archive, ignore function result, see: // https://www.ghisler.ch/board/viewtopic.php?p=299809#p299809 iResult := WcxModule.CloseArchive(ArcHandle); // Free memory FreeAndNil(Files); FreeAndNil(CreatedPaths); end; end; procedure TWcxArchiveCopyOutOperation.Finalize; begin ClearCurrentOperation; end; function TWcxArchiveCopyOutOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperExtractingFromTo, [FWcxArchiveFileSource.ArchiveFileName, TargetPath]); else Result := rsOperExtracting; end; end; procedure TWcxArchiveCopyOutOperation.CreateDirsAndCountFiles( const theFiles: TFiles; FileMask: String; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); var // List of paths that we know must be created. PathsToCreate: TStringHashList; // 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: TStringHashList; i: Integer; CurrentFileName: String; Header: TWCXHeader; Directories: TStringList = nil; PathIndex: Integer; ListIndex: Integer; TargetDir: String; FileList: TObjectList; begin FileList := FWcxArchiveFileSource.ArchiveFileList; { First, collect all the paths that need to be created and their attributes. } PathsToCreate := TStringHashList.Create(True); DirsAttributes := TStringHashList.Create(True); 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); // 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 (FileMask = '*.*') or (FileMask = '*') 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 ((FileMask = '*.*') or (FileMask = '*') or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin Inc(FStatistics.TotalBytes, Header.UnpSize); Inc(FStatistics.TotalFiles, 1); CurrentFileName := ExtractDirLevel(CurrentArchiveDir, ExtractFilePath(Header.FileName)); // 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; 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: TStringHashList): Boolean; var PathIndex: Integer; TargetDir: String; Header: TWCXHeader; Time: TFileTime; 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); {$IF DEFINED(MSWINDOWS)} DosToWinTime(TDosFileTime(Header.FileTime), Time); {$ELSE} {$PUSH}{$R-} Time := Header.FileTime; {$POP} {$ENDIF} // Set creation, modification time mbFileSetTime(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); var PossibleResponses: array of TFileSourceOperationUIResponse; Answer: Boolean; Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if WcxFileTimeToDateTime(Header.FileTime) > FileTimeToDateTime(mbFileAge(AbsoluteTargetFileName)) 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 : PossibleResponses := ResponsesNoCompare; False: PossibleResponses := Responses; end; Message:= FileExistsMessage(AbsoluteTargetFileName, Header.FileName, Header.UnpSize, WcxFileTimeToDateTime(Header.FileTime)); 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:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeOverwrite; AbsoluteTargetFileName:= ExtractFilePath(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-0.9.8/src/filesources/wcxarchive/uwcxarchivecopyinoperation.pas0000644000175000001440000004317713557263023026225 0ustar alexxusersunit uWcxArchiveCopyInOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, StringHashList, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFile, uWcxModule, uWcxArchiveFileSource, uFileSourceOperationUI, uArchiveCopyInOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI; type { TWcxArchiveCopyInOperation } TWcxArchiveCopyInOperation = class(TArchiveCopyInOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FFileList: TStringHashList; {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; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; property PackingFlags: Integer read FPackingFlags write FPackingFlags; property TarBefore: Boolean read FTarBefore write SetTarBefore; end; implementation uses LazUTF8, FileUtil, StrUtils, DCStrUtils, uLng, uShowMsg, fWcxArchiveCopyOperationOptions, uFileSystemFileSource, DCOSUtils, uTarWriter, 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 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:= TStringHashList.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; begin inherited Destroy; FreeAndNil(FFileList); FreeAndNil(FFullFilesTree); end; procedure TWcxArchiveCopyInOperation.Initialize; var Item: TObject; Index: Integer; 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 // Populate archive file list for Index:= 0 to FWcxArchiveFileSource.ArchiveFileList.Count - 1 do begin Item:= FWcxArchiveFileSource.ArchiveFileList[Index]; FFileList.Add(UTF8LowerCase(TWcxHeader(Item).FileName), Item); 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.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperPackingSomethingTo, [SourceFiles[0].Name, FWcxArchiveFileSource.ArchiveFileName]) else Result := Format(rsOperPackingFromTo, [SourceFiles.Path, FWcxArchiveFileSource.ArchiveFileName]); end; else Result := rsOperPacking; end; 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, [Numb2USA(IntToStr(aTargetHeader.UnpSize)), DateTimeToStr(WcxFileTimeToDateTime(aTargetHeader.FileTime))]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + aSourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(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 > WcxFileTimeToDateTime(aTargetHeader.FileTime) 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:= TWcxArchiveCopyOperationOptionsUI; 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-0.9.8/src/filesources/wcxarchive/uwcxarchivecalcstatisticsoperation.pas0000644000175000001440000000677413210732427027736 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; Header: TWCXHeader; CurrFileName: String; ModificationTime: TDateTime; begin for I:= 0 to FWcxArchiveFileSource.ArchiveFileList.Count - 1 do begin Header := TWCXHeader(FWcxArchiveFileSource.ArchiveFileList.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:= WcxFileTimeToDateTime(Header.FileTime); if ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := ModificationTime; if ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := ModificationTime; end; end; end; end. doublecmd-0.9.8/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.pas0000644000175000001440000000314713373444561027270 0ustar alexxusersunit fWcxArchiveCopyOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI; type { TWcxArchiveCopyOperationOptionsUI } TWcxArchiveCopyOperationOptionsUI = class(TFileSourceOperationOptionsUI) cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; 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, uFileSourceCopyOperation; { TWcxArchiveCopyOperationOptionsUI } 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; end; end. doublecmd-0.9.8/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lrj0000644000175000001440000000033313373444561027266 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"} ]} doublecmd-0.9.8/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lfm0000644000175000001440000000151313373444561027256 0ustar alexxusersobject WcxArchiveCopyOperationOptionsUI: TWcxArchiveCopyOperationOptionsUI 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-0.9.8/src/filesources/vfs/0000755000175000001440000000000013615241422016436 5ustar alexxusersdoublecmd-0.9.8/src/filesources/vfs/uvfslistoperation.pas0000644000175000001440000000277213444250470022756 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; 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; if TVfsModule(gVfsModuleList.Objects[I]).Visible then begin aFile := TVfsFileSource.CreateFile(Path); aFile.Name:= gVfsModuleList.Strings[I]; FFiles.Add(aFile); end; end; end; end. doublecmd-0.9.8/src/filesources/vfs/uvfsfilesource.pas0000644000175000001440000000607313444250470022220 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; // 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 FreeThenNil(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.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-0.9.8/src/filesources/vfs/uvfsexecuteoperation.pas0000644000175000001440000000365413367401147023450 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-0.9.8/src/filesources/uvirtualfilesource.pas0000644000175000001440000000066611747211345022316 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-0.9.8/src/filesources/usampleforconfiglistoperation.pas0000644000175000001440000000332012534542254024531 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-0.9.8/src/filesources/usampleforconfigfilesource.pas0000644000175000001440000000566412534542254024012 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-0.9.8/src/filesources/urealfilesource.pas0000644000175000001440000000056611747211345021552 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-0.9.8/src/filesources/uoperationthread.pas0000644000175000001440000000211711747211345021730 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-0.9.8/src/filesources/ulocalfilesource.pas0000644000175000001440000000062411747211345021714 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-0.9.8/src/filesources/ufilesourcewipeoperation.pas0000644000175000001440000001074411747211345023513 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-0.9.8/src/filesources/ufilesourceutil.pas0000644000175000001440000003270413517262030021575 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; procedure ChooseFile(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile); var 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; 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 if Pos('://', Operation.ResultString) > 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 SearchRec: TSearchRecEx; sPath: String; begin if not aFileView.FileSource.IsClass(TFileSystemFileSource) then begin aFileView.ChangePathToChild(aFile); Exit; end; sPath:= aFileView.CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); try if FindFirstEx(sPath + AllFilesMask, 0, SearchRec) = 0 then begin with aFileView do CurrentPath := CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); end else begin sPath:= ReadSymLink(aFile.FullPath); if sPath <> EmptyStr then aFileView.CurrentPath := IncludeTrailingPathDelimiter(GetAbsoluteFileName(aFileView.CurrentPath, sPath)) else msgError(Format(rsMsgChDirFailed, [aFile.FullPath])); 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 FreeThenNil(NewProperties[fpName]); FreeThenNil(Operation); FreeThenNil(UserInterface); FreeThenNil(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-0.9.8/src/filesources/ufilesourcetreebuilder.pas0000644000175000001440000001763713247565356023157 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 = class public // 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; 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 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; 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.BuildFromFiles(Files: TFiles); var i: Integer; begin FreeAndNil(FFilesTree); FFilesTree := TFileTreeNode.Create; FFilesTree.Data := TFileTreeNodeData.Create; 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; 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; (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; 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 CheckDirectoryNameRelative(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-0.9.8/src/filesources/ufilesourcetestarchiveoperation.pas0000644000175000001440000001140011747211345025056 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, 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 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-0.9.8/src/filesources/ufilesourcesplitoperation.pas0000644000175000001440000001273212365151656023706 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-0.9.8/src/filesources/ufilesourcesetfilepropertyoperation.pas0000644000175000001440000002760113163730360026004 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; 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; prop: TFilePropertyType; templateProperty: TFileProperty; bRetry: Boolean; sMessage, sQuestion: String; SetResult: TSetFilePropertyResult; ErrorString: String; begin // Iterate over all properties supported by this operation. for prop := Low(SupportedProperties) to High(SupportedProperties) do begin repeat bRetry := False; SetResult := sfprSuccess; // Double-check that the property really is supported by the file. if prop in (aFile.SupportedProperties * fpAll) then begin // Get template property from template file (if exists) or NewProperties. if Assigned(aTemplateFile) then templateProperty := aTemplateFile.Properties[prop] else templateProperty := NewProperties[prop]; // 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]); else Result := rsMsgLogError; end; end; end. doublecmd-0.9.8/src/filesources/ufilesourceproperty.pas0000644000175000001440000000300212774530245022503 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 ); TFileSourceProperties = set of TFileSourceProperty; implementation end. doublecmd-0.9.8/src/filesources/ufilesourceoperationui.pas0000644000175000001440000000422713364377277023201 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, 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. 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-0.9.8/src/filesources/ufilesourceoperationtypes.pas0000644000175000001440000000142111747211345023703 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-0.9.8/src/filesources/ufilesourceoperationoptionsui.pas0000644000175000001440000000167311747240010024570 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-0.9.8/src/filesources/ufilesourceoperationoptions.pas0000644000175000001440000000131612250667370024240 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, fsoofeAppend, fsoofeResume); TFileSourceOperationOptionDirectoryExists = (fsoodeNone, fsoodeSkip, fsoodeDelete, fsoodeCopyInto); TFileSourceOperationOptionSetPropertyError = (fsoospeNone, fsoospeDontSet, fsoospeIgnoreErrors); implementation end. doublecmd-0.9.8/src/filesources/ufilesourceoperationmisc.pas0000644000175000001440000000470713320373360023477 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 ShowOperation(OpManItem: TOperationsManagerItem); procedure ShowOperationModal(OpManItem: TOperationsManagerItem); implementation uses fFileOpDlg, uGlobs; 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 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-0.9.8/src/filesources/ufilesourceoperationmessageboxesui.pas0000644000175000001440000000704613364377277025611 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, 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, 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-0.9.8/src/filesources/ufilesourceoperation.pas0000644000175000001440000011421613320373360022620 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 if CheckState then CheckOperationState; end else begin WidgetSet.AppProcessMessages; if CheckState then try CheckOperationState; except on E: EFileSourceOperationAborting do Exit(False); end; 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-0.9.8/src/filesources/ufilesourcemoveoperation.pas0000644000175000001440000001476713320373360023521 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-0.9.8/src/filesources/ufilesourcelistoperation.pas0000644000175000001440000000407012317307414023512 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-0.9.8/src/filesources/ufilesourceexecuteoperation.pas0000644000175000001440000000701512612505011024172 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-0.9.8/src/filesources/ufilesourcedeleteoperation.pas0000644000175000001440000001072611747211345024011 0ustar alexxusersunit uFileSourceDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type 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-0.9.8/src/filesources/ufilesourcecreatedirectoryoperation.pas0000644000175000001440000000565511747211345025744 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-0.9.8/src/filesources/ufilesourcecopyoperation.pas0000644000175000001440000002220413320373360023506 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. 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, 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 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-0.9.8/src/filesources/ufilesourcecombineoperation.pas0000644000175000001440000001352712365151656024172 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-0.9.8/src/filesources/ufilesourcecalcstatisticsoperation.pas0000644000175000001440000001136111747211345025560 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-0.9.8/src/filesources/ufilesource.pas0000644000175000001440000007462213444250470020710 0ustar alexxusersunit uFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, syncobjs, LCLProc, URIParser, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceProperty, uFileProperty, uFile; type TFileSource = class; TFileSourceConnection = class; IFileSource = interface; 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 GetURI: TURI; function GetClassName: String; function GetRefCount: Integer; 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; 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 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 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; constructor Create(const URI: TURI); virtual; destructor Destroy; override; function Equals(aFileSource: IFileSource): Boolean; overload; function IsInterface(InterfaceGuid: TGuid): Boolean; function IsClass(aClassType: TClass): Boolean; 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; 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; {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 CreateDirectory(const Path: String): Boolean; virtual; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : 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; procedure Reload(const PathToReload: String); 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.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.CreateDirectory(const Path: String): Boolean; begin Result := False; end; function TFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := False; // not supported by default 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; 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.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-0.9.8/src/filesources/uarchivefilesourceutil.pas0000644000175000001440000002501113573160507023140 0ustar alexxusersunit uArchiveFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileView, uFile, uArchiveFileSource, uFileSource; function GetArchiveFileSource(SourceFileSource: IFileSource; ArchiveFile: TFile; ArchiveType: String; ArchiveSign: Boolean; IncludeHidden: Boolean): IArchiveFileSource; procedure TestArchive(aFileView: TFileView; aFiles: TFiles); function FileIsArchive(const FileName: String): Boolean; procedure FillAndCount(Files: TFiles; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); implementation uses uFindEx, uShowMsg, uLng, DCStrUtils, uFileSourceProperty, uWcxArchiveFileSource, uMultiArchiveFileSource, uFileSystemFileSource, uTempFileSystemFileSource, uFileSourceOperation, uFileSourceOperationTypes, uOperationsManager; // 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); if (ArchiveType = EmptyStr) and (ArchiveSign = False) then begin ArchiveType := ExtractOnlyFileExt(ArchiveFileName); end; // 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 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 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 (ArchiveType = EmptyStr) and (ArchiveSign = False) then begin ArchiveType := ArchiveFile.Extension; end; // 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.CheckPluginByExt(ArchiveType) or TMultiArchiveFileSource.CheckAddonByExt(ArchiveType))) 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 Operation.Execute; if Operation.Result = fsorFinished then begin Result := GetArchiveFileSourceDirect( TempFS, IncludeTrailingPathDelimiter(TempFS.FilesystemRoot) + ArchiveFile.Name, ArchiveType, ArchiveSign, IncludeHidden); end; end; finally TempFS := nil; if Assigned(Files) then FreeAndNil(Files); if Assigned(Operation) then FreeAndNil(Operation); end; end; end; procedure TestArchive(aFileView: TFileView; aFiles: TFiles); var I: Integer; FilesToTest: TFiles = nil; Operation: TFileSourceOperation = nil; ArchiveFileSource: IArchiveFileSource; 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); end else msgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgErrNotSupported); end else // if filesystem if aFileView.FileSource.IsClass(TFileSystemFileSource) then begin 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); end else msgWarning(rsMsgNotImplemented); finally if Assigned(FilesToTest) then FreeAndNil(FilesToTest); end; end else msgWarning(rsMsgErrNotSupported); end; // Short pause, so that all operations are not spawned at once. Sleep(100); 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; var ArchiveType: String; begin ArchiveType:= ExtractOnlyFileExt(FileName); Result:= TWcxArchiveFileSource.CheckPluginByExt(ArchiveType) or TMultiArchiveFileSource.CheckAddonByExt(ArchiveType); 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; end. doublecmd-0.9.8/src/filesources/uarchivefilesource.pas0000644000175000001440000000376611747211345022255 0ustar alexxusersunit uArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uLocalFileSource, uFileSource, uFile, uFileProperty; type IArchiveFileSource = interface(ILocalFileSource) ['{13A8637C-FFDF-46B0-B5B4-E7C6851C157A}'] {en Full path to the archive on the ParentFileSource. } property ArchiveFileName: String read GetCurrentAddress; end; TArchiveFileSource = class(TLocalFileSource, IArchiveFileSource) protected 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; property ArchiveFileName: String read GetCurrentAddress; end; implementation constructor TArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String); begin FCurrentAddress := anArchiveFileName; inherited Create; ParentFileSource := anArchiveFileSource; 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.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpCompressedSize, fpAttributes, fpModificationTime]; end; end. doublecmd-0.9.8/src/filesources/uarchivecopyinoperation.pas0000644000175000001440000000170013404757254023327 0ustar alexxusersunit uArchiveCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFile; type { 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 property CreateNew: Boolean read FCreateNew write FCreateNew; end; implementation { TArchiveCopyInOperation } procedure TArchiveCopyInOperation.DoReloadFileSources; begin if not FCreateNew then inherited DoReloadFileSources; end; end. doublecmd-0.9.8/src/filesources/tempfilesystem/0000755000175000001440000000000013615241422020712 5ustar alexxusersdoublecmd-0.9.8/src/filesources/tempfilesystem/utempfilesystemfilesource.pas0000644000175000001440000000756011747211345026754 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(GetTempDir + '_dc'); 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-0.9.8/src/filesources/searchresult/0000755000175000001440000000000013615241422020344 5ustar alexxusersdoublecmd-0.9.8/src/filesources/searchresult/usearchresultlistoperation.pas0000644000175000001440000000230611753503774026574 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); 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-0.9.8/src/filesources/searchresult/usearchresultfilesource.pas0000644000175000001440000000371713613266670026045 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 + [fspLinksToLocalFiles] - [fspNoneParent]; 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-0.9.8/src/filesources/multilist/0000755000175000001440000000000013615241422017666 5ustar alexxusersdoublecmd-0.9.8/src/filesources/multilist/umultilistlistoperation.pas0000644000175000001440000000375311753503774025447 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-0.9.8/src/filesources/multilist/umultilistfilesource.pas0000644000175000001440000002133113163730360024671 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; function GetFileList: TFileTree; function GetFileSource: IFileSource; 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 GetRetrievableFileProperties: TFilePropertiesTypes; override; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; 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 inherited Destroy; if Assigned(FFileList) then 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; 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.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result:= FFileSource.GetRetrievableFileProperties; end; procedure TMultiListFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; 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; function TMultiListFileSource.GetFileList: TFileTree; begin Result := FFileList; end; function TMultiListFileSource.GetFileSource: IFileSource; begin Result := FFileSource; 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-0.9.8/src/filesources/multiarchive/0000755000175000001440000000000013615241422020334 5ustar alexxusersdoublecmd-0.9.8/src/filesources/multiarchive/umultiarchiveutil.pas0000644000175000001440000003407213254010721024621 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; 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-0.9.8/src/filesources/multiarchive/umultiarchivetestarchiveoperation.pas0000644000175000001440000001751313401360470030112 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 FreeThenNil(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 FreeThenNil(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-0.9.8/src/filesources/multiarchive/umultiarchiveparser.pas0000644000175000001440000002015113254000057025132 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 FArchiveItem := TArchiveItem.Create; // 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)), 0); if FPackSizePos.Index = FFormatIndex then FArchiveItem.PackSize := StrToInt64Def(Trim(GetKeyValue(str, FPackSizePos)), 0); 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-0.9.8/src/filesources/multiarchive/umultiarchivelistoperation.pas0000644000175000001440000000311611753503774026554 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 not FileSource.IsPathAtRoot(Path) then begin aFile := TMultiArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FMultiArchiveFileSource.ArchiveFileList; 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; end; end. doublecmd-0.9.8/src/filesources/multiarchive/umultiarchivefilesource.pas0000644000175000001440000005132413613100542026003 0ustar alexxusersunit uMultiArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, StringHashList, uOSUtils, uMultiArc, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation, uMultiArchiveUtil, DCBasicTypes; type { IMultiArchiveFileSource } IMultiArchiveFileSource = interface(IArchiveFileSource) ['{71BF41D3-1E40-4E84-83BB-B6D3E0DEB6FC}'] function GetPassword: String; function GetArcFileList: TObjectList; 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: TObjectList read GetArcFileList; property MultiArcItem: TMultiArcItem read GetMultiArcItem; end; { TMultiArchiveFileSource } TMultiArchiveFileSource = class(TArchiveFileSource, IMultiArchiveFileSource) private FPassword: String; FOutputParser: TOutputParser; FArcFileList : TObjectList; FMultiArcItem: TMultiArcItem; FAllDirsList, FExistsDirList: TStringHashList; 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: TObjectList; protected 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 type (only extension is checked). } class function CheckAddonByExt(anArchiveType: String): Boolean; property Password: String read GetPassword; property ArchiveFileList: TObjectList 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 MatchesMaskList(anArchiveType, aMultiArcItem.FExtension, ',') and (aMultiArcItem.FEnabled) 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; begin Result:= CreateByArchiveType(anArchiveFileSource, anArchiveFileName, ExtractOnlyFileExt(anArchiveFileName)); end; class function TMultiArchiveFileSource.CheckAddonByExt(anArchiveType: String): Boolean; var I: Integer; aMultiArcItem: TMultiArcItem; begin for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if MatchesMaskList(anArchiveType, aMultiArcItem.FExtension, ',') and (aMultiArcItem.FEnabled) then Exit(True); end; Result := False; end; // ---------------------------------------------------------------------------- constructor TMultiArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aMultiArcItem: TMultiArcItem); begin inherited Create(anArchiveFileSource, anArchiveFileName); FMultiArcItem := aMultiArcItem; FArcFileList := TObjectList.Create(True); 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 { Comment, } SizeProperty := TFileSizeProperty.Create(ArchiveItem.UnpSize); CompressedSizeProperty := TFileCompressedSizeProperty.Create(ArchiveItem.PackSize); 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 AttributesProperty := TFileAttributesProperty.CreateOSAttributes(ArchiveItem.Attributes); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0); try with ArchiveItem do ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); except on EConvertError do; 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 := ExtractFileName(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; ArchiveItem: TArchiveItem; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); // Search file list for a directory with name NewDir. for I := 0 to FArcFileList.Count - 1 do begin ArchiveItem := TArchiveItem(FArcFileList.Items[I]); if FileIsDirectory(ArchiveItem) and (Length(ArchiveItem.FileName) > 0) then begin if NewDir = IncludeTrailingPathDelimiter(GetRootDir() + ArchiveItem.FileName) then Exit(True); end; end; end; end; function TMultiArchiveFileSource.GetArcFileList: TObjectList; 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: TStringHashList); 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.GetPassword: String; begin Result:= FPassword; end; function TMultiArchiveFileSource.ReadArchive(bCanYouHandleThisFile : Boolean = False): Boolean; var I : Integer; 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 } FArcFileList.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); FArcFileList.Add(ArchiveItem); Exit(True); end; FExistsDirList := TStringHashList.Create(True); FAllDirsList := TStringHashList.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; FArcFileList.Add(ArchiveItem); except FreeAndNil(ArchiveItem); end; end; end; finally FreeAndNil(FAllDirsList); FreeAndNil(FExistsDirList); 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 I, J: Integer; ArchiveItem: TArchiveItem; sFileName: String; aFile: TFile; begin NewFiles:= TFiles.Create(Files.Path); FilesCount:= 0; FilesSize:= 0; for I := 0 to ArchiveFileList.Count - 1 do begin ArchiveItem := TArchiveItem(ArchiveFileList.Items[I]); sFileName:= PathDelim + ArchiveItem.FileName; if ((FileMask = '*.*') or (FileMask = '*') or // And name matches file mask MatchesMaskList(ExtractFileName(ArchiveItem.FileName), FileMask)) then 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(ExtractFilePath(ArchiveItem.FileName), ArchiveItem, FMultiArcItem.FFormMode); aFile.FullPath:= ExcludeFrontPathDelimiter(aFile.FullPath); NewFiles.Add(aFile); end; end; // for J end; // for I end; end. doublecmd-0.9.8/src/filesources/multiarchive/umultiarchiveexecuteoperation.pas0000644000175000001440000000344412736146106027241 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-0.9.8/src/filesources/multiarchive/umultiarchivedynamicparser.pas0000644000175000001440000003024412747112514026513 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi archive dynamic parser Copyright (C) 2016 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 Clear; virtual; 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 Clear; FLines.Free; FUnparsedLines.Free; inherited Destroy; end; procedure TMultiArchiveDynamicParser.Clear; begin FLines.Clear; FUnparsedLines.Clear; end; procedure TMultiArchiveDynamicParser.Prepare; begin 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, 0); Value.UnpSize:= StrToInt64Def(Size, 0); 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-0.9.8/src/filesources/multiarchive/umultiarchivedeleteoperation.pas0000644000175000001440000001562512612505011027030 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 FreeThenNil(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 FreeThenNil(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-0.9.8/src/filesources/multiarchive/umultiarchivecopyoutoperation.pas0000644000175000001440000005360513405412452027277 0ustar alexxusersunit uMultiArchiveCopyOutOperation; {$mode objfpc}{$H+} interface uses LazFileUtils,LazUtf8,Classes, SysUtils, StringHashList, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSourceOperationUI, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFileSource, uFile, uMultiArchiveFileSource; type { TMultiArchiveCopyOutOperation } TMultiArchiveCopyOutOperation = class(TFileSourceCopyOutOperation) 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: TStringHashList); {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: TStringHashList): 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; FFileMask: 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 DoneFiles := -1; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; end; destructor TMultiArchiveCopyOutOperation.Destroy; begin FreeThenNil(FFullFilesTreeToExtract); inherited Destroy; end; procedure TMultiArchiveCopyOutOperation.Initialize; 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; AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); FFileMask := ExtractFileName(TargetPath); if FFileMask = '' then FFileMask := '*'; // extract all selected files/folders with FMultiArchiveFileSource do FillAndCount(FFileMask, SourceFiles, True, FFullFilesTreeToExtract, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveCopyOutOperation.MainExecute; var TargetFileName, SourcePath, sTempDir: String; CreatedPaths: TStringHashList = 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 := TStringHashList.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 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:= ExtractFileDir(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 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; 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 // 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 FreeThenNil(CreatedPaths); FreeThenNil(FilesToExtract); end; end; procedure TMultiArchiveCopyOutOperation.Finalize; begin FreeThenNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveCopyOutOperation.CreateDirs( const theFiles: TFiles; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); var // List of paths that we know must be created. PathsToCreate: TStringHashList; // 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: TStringHashList; 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 := TStringHashList.Create(True); DirsAttributes := TStringHashList.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: TStringHashList): 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-0.9.8/src/filesources/multiarchive/umultiarchivecopyinoperation.pas0000644000175000001440000003122613405412452027071 0ustar alexxusersunit uMultiArchiveCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFile, uArchiveCopyInOperation, 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; 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; 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-0.9.8/src/filesources/multiarchive/umultiarchivecalcstatisticsoperation.pas0000644000175000001440000000732012612505011030574 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; ArchiveItem: TArchiveItem; CurrFileName: String; ModificationTime: TDateTime; begin for I:= 0 to FMultiArchiveFileSource.ArchiveFileList.Count - 1 do begin ArchiveItem := TArchiveItem(FMultiArchiveFileSource.ArchiveFileList.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; end; end. doublecmd-0.9.8/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.pas0000644000175000001440000000503513373444561030150 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-0.9.8/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lrj0000644000175000001440000000033513373444561030152 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-0.9.8/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lfm0000644000175000001440000000151713373444561030144 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-0.9.8/src/filesources/gio/0000755000175000001440000000000013615241422016416 5ustar alexxusersdoublecmd-0.9.8/src/filesources/gio/ugiosetfilepropertyoperation.pas0000644000175000001440000001437413457076377025224 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-0.9.8/src/filesources/gio/ugiomoveoperation.pas0000644000175000001440000000512513320373360022701 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-0.9.8/src/filesources/gio/ugiolistoperation.pas0000644000175000001440000000435513457076377022735 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; 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); // Mount the target if (Assigned(AError) and 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); Break; end; end; // List files try AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); while Assigned(AInfo) do begin CheckOperationState; AFile:= TGioFileSource.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; Break; end; finally g_object_unref(PGObject(AFolder)); end; end; // FGioFileSource end; end. doublecmd-0.9.8/src/filesources/gio/ugiofilesourceutil.pas0000644000175000001440000007010713457076377023075 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_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); 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, StrUtils, DCDateTimeUtils, 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, [Numb2USA(IntToStr(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, [Numb2USA(IntToStr(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; 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)); 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, 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; begin if aFile.ModificationTime > UnixFileTimeToDateTime(g_file_info_get_attribute_uint64(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)) 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-0.9.8/src/filesources/gio/ugiofilesource.pas0000644000175000001440000004303213457076377022174 0ustar alexxusersunit uGioFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, URIParser, SyncObjs, uFileSourceProperty, uFileSourceOperationTypes, uRealFileSource, uFileProperty, uFileSource, 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 CreateDirectory(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; 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, DCStrUtils, 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 AFile: PGFile; ATarget: Pgchar; AFileType: TGFileType; ASymlinkInfo: PGFileInfo; begin Result:= CreateFile(APath); Result.Name:= g_file_info_get_name(AFileInfo); Result.Size:= g_file_info_get_size (AFileInfo); Result.Attributes:= g_file_info_get_attribute_uint32 (AFileInfo, FILE_ATTRIBUTE_UNIX_MODE); Result.ModificationTime:= UnixFileTimeToDateTime(g_file_info_get_attribute_uint64 (AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED)); Result.LinkProperty := TFileLinkProperty.Create; // 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 AFile:= g_file_get_child(AFolder, ATarget); ASymlinkInfo := g_file_query_info (AFile, FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, nil, nil); Result.LinkProperty.LinkTo := ATarget; 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 else if AFileType in [G_FILE_TYPE_SHORTCUT, G_FILE_TYPE_MOUNTABLE] then begin Result.Attributes:= Result.Attributes or S_IFLNK or S_IFDIR; ATarget:= g_file_info_get_attribute_string(AFileInfo, FILE_ATTRIBUTE_STANDARD_TARGET_URI); Result.LinkProperty.IsValid := Length(ATarget) > 0; Result.LinkProperty.LinkTo := ATarget; 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; //inherited SetCurrentWorkingDirectory(NewDir); 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); 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.CreateDirectory(const Path: String): Boolean; var AGFile: PGFile; begin AGFile:= GioNewFile(Path); Result:= g_file_make_directory_with_parents(AGFile, nil, 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-0.9.8/src/filesources/gio/ugioexecuteoperation.pas0000644000175000001440000000222013054000521023354 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-0.9.8/src/filesources/gio/ugiodeleteoperation.pas0000644000175000001440000001343413457076377023222 0ustar alexxusersunit uGioDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uGioFileSource, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog; type TGioDeleteOperation = class(TFileSourceDeleteOperation) private 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; procedure Finalize; override; end; implementation uses DCOSUtils, uLng, uGlib2, 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; 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; procedure TGioDeleteOperation.Finalize; begin 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-0.9.8/src/filesources/gio/ugiocreatedirectoryoperation.pas0000644000175000001440000000266213457076377025151 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-0.9.8/src/filesources/gio/ugiocopyoperation.pas0000644000175000001440000000777613320373360022723 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 protected FSymLinkOption: TFileSourceOperationOptionSymLink; 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 SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; 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-0.9.8/src/filesources/gio/ugiocalcstatisticsoperation.pas0000644000175000001440000001012613457075765024770 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-0.9.8/src/filesources/gio/fgiocopymoveoperationoptions.pas0000644000175000001440000001007512550161266025175 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; fsoofeSkip : cmbFileExists.ItemIndex := 2; 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 := 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-0.9.8/src/filesources/gio/fgiocopymoveoperationoptions.lfm0000644000175000001440000000507012550161266025167 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-0.9.8/src/filesources/gio/fgioauthdlg.pas0000644000175000001440000000413412576570674021445 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-0.9.8/src/filesources/gio/fgioauthdlg.lrt0000644000175000001440000000037512545763133021454 0ustar alexxusersTFRMGIOAUTHDIALOG.LBLUSERNAME.CAPTION=User name: TFRMGIOAUTHDIALOG.LBLDOMAIN.CAPTION=Domain: TFRMGIOAUTHDIALOG.LBLPASSWORD.CAPTION=Password: TFRMGIOAUTHDIALOG.RBANONYMOUS.CAPTION=Connect anonymously TFRMGIOAUTHDIALOG.RBCONNETAS.CAPTION=Connect as user: doublecmd-0.9.8/src/filesources/gio/fgioauthdlg.lfm0000644000175000001440000002763612754670157021447 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-0.9.8/src/filesources/filesystem/0000755000175000001440000000000013615241421020023 5ustar alexxusersdoublecmd-0.9.8/src/filesources/filesystem/ufilesystemwipeoperation.pas0000644000175000001440000003320013376527136025723 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, 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)) + '.tmp'; Result := mbRenameFile(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:= mbRemoveDir(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 := mbDeleteFile(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: TFileStreamEx; 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 := TFilestreamEx.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 := mbDeleteFile(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 mbFileSetReadOnly(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-0.9.8/src/filesources/filesystem/ufilesystemutil.pas0000644000175000001440000015577613605137373024035 0ustar alexxusersunit uFileSystemUtil; {$mode objfpc}{$H+} 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; FSkipOpenForReadingError: Boolean; FSkipOpenForWritingError: Boolean; FSkipReadError: Boolean; FSkipWriteError: Boolean; FAutoRenameItSelf: Boolean; FCorrectSymLinks: Boolean; FCopyAttributesOptions: TCopyAttributesOptions; FMaxPathOption: TFileSourceOperationUIResponse; FDeleteFileOption: TFileSourceOperationUIResponse; FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; 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 CheckFileHash(const FileName, Hash: 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 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 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, uOSUtils, DCStrUtils, FileUtil, uFindEx, DCClassesUtf8, uFileProcs, uLng, DCBasicTypes, uFileSource, uFileSystemFileSource, uFileProperty, StrUtils, DCDateTimeUtils, uShowMsg, Forms, LazUTF8, uHash; const HASH_TYPE = HASH_BLAKE2S; 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 FindFirstEx(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 FindNextEx(sr) <> 0; end; FindCloseEx(sr); end; var i: Integer; aFile: TFile; aFindData: TSearchRecEx; 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 mbFileGetAttr(aFile.FullPath, aFindData) then begin aFile.Size:= aFindData.Size; aFile.Attributes:= aFindData.Attr; aFile.ModificationTime:= FileTimeToDateTime(aFindData.Time); 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 TargetInfo: TSearchRecEx; begin Result:= rsMsgFileExistsOverwrite + LineEnding + WrapTextSimple(TargetName, 100) + LineEnding; if mbFileGetAttr(TargetName, TargetInfo) then begin Result:= Result + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(TargetInfo.Size)), DateTimeToStr(FileTimeToDateTime(TargetInfo.Time))]) + LineEnding; end; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + WrapTextSimple(SourceName, 100) + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(SourceSize)), DateTimeToStr(SourceTime)]); 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 (LinkedFilePath <> PathDelim) then begin try LinkedFile := TFileSystemFileSource.CreateFileFromFile(LinkedFilePath); // Add link to current node. AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create; (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 FindFirstEx(srcPath + '*', 0, sr) = 0 then begin repeat if (sr.Name = '.') or (sr.Name = '..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); AddItem(aFile, CurrentNode); until FindNextEx(sr) <> 0; end; FindCloseEx(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 mbDirectoryExists(FRootTargetPath) then if not mbForceDirectory(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: TFileStreamEx; iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; NewPos: Int64; Hash: String; Context: THashContext; DeleteFile: Boolean = False; 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 := TFileStreamEx.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 FVerify then Flags := fmOpenSync; try TargetFileStream.Free; // In case stream was created but 'while' loop run again case Mode of fsohcmAppend: begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmOpenReadWrite or Flags); TargetFileStream.Seek(0, soFromEnd); // seek to end TotalBytesToRead := SourceFileStream.Size; end; fsohcmResume: begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmOpenReadWrite or Flags); NewPos := TargetFileStream.Seek(0, soFromEnd); SourceFileStream.Seek(NewPos, soFromBeginning); TotalBytesToRead := SourceFileStream.Size - NewPos; end else begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmCreate or Flags); TotalBytesToRead := SourceFileStream.Size; if FReserveSpace then begin TargetFileStream.Size:= 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 = True then begin GetDiskFreeSpace(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize); 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; 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; OpenTargetFile; if not Assigned(TargetFileStream) then Exit; 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; 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(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo, fsourSkip], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: AbortOperation; fsourSkip: Exit; end; // case end else begin DeleteFile := 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 DeleteFile := 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 DeleteFile := 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 DeleteFile := 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. DeleteFile := True; raise; end; end; finally FreeAndNil(SourceFileStream); if FVerify then Context.Free; if Assigned(TargetFileStream) then begin 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 DeleteFile or (AskQuestion('', rsMsgDeletePartiallyCopied, [fsourYes, fsourNo], fsourYes, fsourNo) = fsourYes) then begin mbDeleteFile(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; CopyAttrResult: TCopyAttributesOptions = []; ACopyAttributesOptions: TCopyAttributesOptions; begin if FCopyAttributesOptions <> [] then begin ACopyAttributesOptions := FCopyAttributesOptions; ACopyTime := (FMode = fsohmMove) and (caoCopyTime in ACopyAttributesOptions); if ACopyTime then ACopyAttributesOptions -= [caoCopyTime]; if ACopyAttributesOptions <> [] then begin CopyAttrResult := mbFileCopyAttr(SourceFile.FullPath, TargetFileName, ACopyAttributesOptions); end; if ACopyTime then try // Copy time from properties because move operation change time of original folder if not mbFileSetTime(TargetFileName, DateTimeToFileTime(SourceFile.ModificationTime), {$IF DEFINED(MSWINDOWS)}DateTimeToFileTime(SourceFile.CreationTime){$ELSE}0{$ENDIF}, DateTimeToFileTime(SourceFile.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, [SourceFile.FullPath]), LineEnding); if caoCopyTime in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetDateTime, [SourceFile.FullPath]), LineEnding); if caoCopyOwnership in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetOwnership, [SourceFile.FullPath]), LineEnding); if caoCopyPermissions in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetPermissions, [SourceFile.FullPath]), 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; RetryDelete: Boolean; begin if (Mode in [fsohcmAppend, fsohcmResume]) or (not mbRenameFile(SourceFile.FullPath, TargetFileName)) then begin if FVerify then FStatistics.TotalBytes += SourceFile.Size; if CopyFile(SourceFile, TargetFileName, Mode) then begin repeat RetryDelete := True; if FileIsReadOnly(SourceFile.Attributes) then mbFileSetReadOnly(SourceFile.FullPath, False); Result := mbDeleteFile(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 else Result := False; end else Result := True; 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 case AskQuestion(Format(rsMsgCanNotCopyMoveItSelf, [TargetName]), '', [fsourAbort, fsourSkip], fsourAbort, fsourSkip) of fsourAbort: AbortOperation(); else begin Result := False; CountStatistics(CurrentSubNode); AppProcessMessages; CheckOperationState; Continue; end; end; end; // Check MAX_PATH if 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); end; case AskResult of fsourAbort: AbortOperation(); fsourSkip, fsourSkipAll: begin Result := False; FMaxPathOption := fsourSkip; CountStatistics(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 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; CountStatistics(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. if (FMode = fsohmMove) and (not FRenamingFiles) and ((FCorrectSymlinks = False) or (NodeData.SubnodesHaveLinks = False)) and (NodeData.SubnodesHaveExclusions = False) and mbRenameFile(aNode.TheFile.FullPath, AbsoluteTargetFileName) then begin // Success. CountStatistics(aNode); Result := True; bRemoveDirectory := False; end else begin // Create target directory. if mbCreateDir(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])); 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 if FileIsReadOnly(aNode.TheFile.Attributes) then mbFileSetReadOnly(aNode.TheFile.FullPath, False); mbRemoveDir(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 mbRenameFile(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 CreateSymlink(LinkTarget, AbsoluteTargetFileName) then begin CopyProperties(aFile, AbsoluteTargetFileName); end else begin ShowError(rsMsgLogError + Format(rsMsgLogSymLink, [AbsoluteTargetFileName])); 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; Inc(FStatistics.DoneFiles); UpdateStatistics(FStatistics); end; function TFileSystemOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var 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; // 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 (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: Result := False; 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; DoneBytes := OldDoneBytes + aNode.TheFile.Size; 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 mbDeleteFile(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 mbFileSetReadOnly(AbsoluteTargetFileName, False); if FPS_ISLNK(Attrs) or (FMode = fsohmMove) then begin mbDeleteFile(AbsoluteTargetFileName); Exit(fsoterDeleted); end; Exit(fsoterNotExists); end; fsoofeAppend: begin Exit(fsoterAddToTarget); end; fsoofeResume: begin Exit(fsoterResume); end; 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 := mbFileGetAttr(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 := mbFileGetAttrNoLinks(AbsoluteTargetFileName); 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..12] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourResume, fsourOverwriteOlder, fsourCancel, fsouaCompare, fsourAppend, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource); ResponsesNoAppend: array[0..10] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel, fsouaCompare, fsourOverwriteLarger, fsourAutoRenameSource); var Answer: Boolean; Message: String; PossibleResponses: array of TFileSourceOperationUIResponse; 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 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; 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; fsoofeAutoRenameSource: begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName, aFile.IsDirectory or aFile.IsLinkToDirectory); end; else Result := FFileExistsOption; end; 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.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:= mbFileOpen(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; 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-0.9.8/src/filesources/filesystem/ufilesystemsplitoperation.pas0000644000175000001440000003145512670100055026103 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, crc, //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 CurrentCRC32:=crc32(CurrentCRC32,FBuffer,BytesRead); 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-0.9.8/src/filesources/filesystem/ufilesystemsetfilepropertyoperation.pas0000644000175000001440000003503313407371024030211 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; function RenameFile(aFile: TFile; NewName: String): TSetFilePropertyResult; 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 uGlobs, uLng, DCDateTimeUtils, uFileSystemUtil, DCOSUtils, DCStrUtils, DCBasicTypes {$IF DEFINED(MSWINDOWS)} , Windows, ShellAPI {$ELSEIF 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 mbFileSetAttr( aFile.FullPath, (aTemplateProperty as TFileAttributesProperty).Value) <> 0 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 mbFileSetTime( aFile.FullPath, DateTimeToFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value), 0, 0) 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 mbFileSetTime( aFile.FullPath, 0, DateTimeToFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value), 0) 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 mbFileSetTime( aFile.FullPath, 0, 0, DateTimeToFileTime((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; function TFileSystemSetFilePropertyOperation.RenameFile(aFile: TFile; NewName: String): TSetFilePropertyResult; var OldName: String; function AskIfOverwrite(Attrs: TFileAttrs): TFileSourceOperationUIResponse; var sQuestion: String; begin if DCOSUtils.FPS_ISDIR(Attrs) 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 if FFileExistsOption <> fsourInvalid then Exit(FFileExistsOption); sQuestion:= FileExistsMessage(NewName, aFile.FullPath, aFile.Size, aFile.ModificationTime); Result := AskQuestion(sQuestion, '', [fsourOverwrite, fsourSkip, fsourAbort, fsourOverwriteAll, fsourSkipAll], fsourOverwrite, fsourAbort); case Result of fsourOverwriteAll: begin Result:= fsourOverwrite; FFileExistsOption:= Result; end; fsourSkipAll: begin Result:= fsourSkip; FFileExistsOption:= Result; end; end; end; end; {$IFDEF MSWINDOWS} function CanShellRename: Boolean; begin Result := (FFullFilesTree.Count = 1) and (UTF8Length(OldName) < MAX_PATH - 1) and (UTF8Length(NewName) < MAX_PATH - 1) and (not StrBegins(ExtractFileName(OldName), ' ')) and (StrBegins(ExtractFileName(NewName), ' ')); end; function ShellRename: Boolean; var wsFromName, wsToName: WideString; FileOpStruct: TSHFileOpStructW; begin wsFromName := UTF8Decode(OldName) + #0; wsToName := UTF8Decode(NewName) + #0; FillByte(FileOpStruct, SizeOf(FileOpStruct), 0); with FileOpStruct do begin Wnd := GetForegroundWindow; // Use rename operation when only file name case is changed if UTF8LowerCase(OldName) = UTF8LowerCase(NewName) then wFunc := FO_RENAME else wFunc := FO_MOVE; pFrom := PWideChar(wsFromName); pTo := PWideChar(wsToName); end; Result := (SHFileOperationW(@FileOpStruct) = 0) and (not FileOpStruct.fAnyOperationsAborted); end; {$ENDIF} var {$IFDEF UNIX} tmpFileName: String; OldFileStat, NewFileStat: stat; {$ELSE} NewFileAttrs: TFileAttrs; {$ENDIF} begin OldName:= aFile.FullPath; if FileSource.GetPathType(NewName) <> ptAbsolute then NewName := ExtractFilePath(OldName) + NewName; if OldName = NewName then Exit(sfprSkipped); {$IFDEF UNIX} if fpLstat(UTF8ToSys(OldName), OldFileStat) <> 0 then Exit(sfprError); // 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"; hard links to directories are not supported on Linux // or Windows anyway (on MacOSX 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. {$IFDEF DARWIN} // If it was a directory with multiple hard links then fall through // to asking for overwrite and unlinking source link. if not (BaseUnix.fpS_ISDIR(NewFileStat.st_mode) and (NewFileStat.st_nlink > 1)) then {$ENDIF} Exit(sfprError); end else if FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(NewName)) = 0 then begin Exit(sfprSuccess); end else begin FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. Exit(sfprError); end; end else Exit(sfprError); end; // Both names are hard links to the same file. case AskIfOverwrite(NewFileStat.st_mode) of fsourOverwrite: ; // continue fsourSkip: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; // Multiple links - simply unlink the source file. if fpUnLink(UTF8ToSys(OldName)) = 0 then Result := sfprSuccess else Result := sfprError; Exit; end else begin case AskIfOverwrite(NewFileStat.st_mode) of fsourOverwrite: ; // continue fsourSkip: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; if FpRename(UTF8ToSys(OldName), UTF8ToSys(NewName)) = 0 then Result := sfprSuccess else Result := sfprError; {$ELSE} if gUseShellForFileOperations and CanShellRename then begin if ShellRename then Result := sfprSuccess else Result := sfprError; end else begin // Windows XP doesn't allow two filenames that differ only by case (even on NTFS). if UTF8LowerCase(OldName) <> UTF8LowerCase(NewName) then begin NewFileAttrs := mbFileGetAttr(NewName); if NewFileAttrs <> faInvalidAttributes then // If target file exists. begin case AskIfOverwrite(NewFileAttrs) of fsourOverwrite: ; // continue fsourSkip: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; if mbRenameFile(OldName, NewName) then Result := sfprSuccess else Result := sfprError; end; {$ENDIF} end; end. doublecmd-0.9.8/src/filesources/filesystem/ufilesystemmoveoperation.pas0000644000175000001440000001404113320373360025712 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; procedure SetSearchTemplate(AValue: TSearchTemplate); protected 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 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. FCopyAttributesOptions := []; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; FSetPropertyError := gOperationOptionSetPropertyError; FReserveSpace := gOperationOptionReserveSpace; FCheckFreeSpace := gOperationOptionCheckFreeSpace; FSkipAllBigFiles := False; FCorrectSymlinks := gOperationOptionCorrectLinks; FExcludeEmptyTemplateDirectories := True; inherited Create(aFileSource, theSourceFiles, aTargetPath); 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 // 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.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; procedure TFileSystemMoveOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FreeAndNil(FOperationHelper); end; class function TFileSystemMoveOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TFileSystemMoveOperationOptionsUI; end; end. doublecmd-0.9.8/src/filesources/filesystem/ufilesystemlistoperation.pas0000644000175000001440000000425113340517105025720 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-0.9.8/src/filesources/filesystem/ufilesystemfilesource.pas0000644000175000001440000007751513400502314025172 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; 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; 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 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, 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 FillFromFindData( AFile: TFile; AFilePath: String; pFindData: PWIN32FINDDATAW); var LinkAttrs: TFileAttrs; begin with AFile do begin AttributesProperty := TNtfsFileAttributesProperty.Create( pFindData^.dwFileAttributes); 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(pFindData^.dwFileAttributes) then begin LinkAttrs := mbFileGetAttrNoLinks(AFilePath); LinkProperty.LinkTo := ReadSymLink(AFilePath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs) else // On Windows links to directories are marked with Directory flag on the link. LinkProperty.IsLinkToDirectory := fpS_ISDIR(pFindData^.dwFileAttributes); end; end; end; {$ELSEIF DEFINED(UNIX)} procedure FillFromStat( AFile: TFile; AFilePath: String; pStatInfo: BaseUnix.PStat); 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( FileTimeToDateTime(pStatInfo^.st_mtime)); Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTime(pStatInfo^.st_ctime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTime(pStatInfo^.st_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; begin Result := TFile.Create(APath); {$IF DEFINED(MSWINDOWS)} FillFromFindData(Result, APath + pSearchRecord^.Name, @(pSearchRecord^.FindData)); {$ELSEIF DEFINED(UNIX)} FillFromStat(Result, APath + pSearchRecord^.Name, @(PUnixFindData(pSearchRecord^.FindHandle)^.StatRec)); {$ELSE} FillFromSearchRecord(Result, APath + pSearchRecord^.Name, pSearchRecord); {$ENDIF} // 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: BaseUnix.Stat; {$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 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; 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, LinkInfo: BaseUnix.Stat; //buffer for stat info {$ELSEIF DEFINED(MSWINDOWS)} FindData: TWIN32FINDDATAW; FindHandle: THandle; LinkAttrs: TFileAttrs; {$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 LinkAttrs := mbFileGetAttrNoLinks(sFullPath); LinkProperty.LinkTo := ReadSymLink(sFullPath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs) else // On Windows links to directories are marked with Directory flag on the link. LinkProperty.IsLinkToDirectory := fpS_ISDIR(Attrs); 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 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( FileTimeToDateTime(StatInfo.st_mtime)); if not (fpChangeTime in AssignedProperties) then Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTime(StatInfo.st_ctime)); if not (fpLastAccessTime in AssignedProperties) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTime(StatInfo.st_atime)); 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:= FileTimeToDateTime(DCBasicTypes.TFileTime(StatXInfo.stx_btime.tv_sec)); 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; 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.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-0.9.8/src/filesources/filesystem/ufilesystemexecuteoperation.pas0000644000175000001440000000472712612505011026411 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-0.9.8/src/filesources/filesystem/ufilesystemdeleteoperation.pas0000644000175000001440000003216313472537516026230 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 function ProcessFile(aFile: TFile): Boolean; 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, uOSUtils {$IF DEFINED(MSWINDOWS)} , Windows, uFileUnlock, fFileUnlock {$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; 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; function TFileSystemDeleteOperation.ProcessFile(aFile: TFile): Boolean; const ResponsesTrash: array[0..4] of TFileSourceOperationUIResponse = (fsourYes, fsourAll, fsourSkip, fsourSkipAll, fsourAbort); 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 Result := True; 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 mbFileSetReadOnly(FileName, False); if aFile.IsDirectory then // directory begin DeleteResult := mbRemoveDir(FileName); end else begin // files and other stuff DeleteResult := mbDeleteFile(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 if AdministratorPrivileges then PossibleResponses:= ResponsesTrash else begin SetLength(PossibleResponses, Length(ResponsesTrash) + 1); Move(ResponsesTrash[0], PossibleResponses[0], SizeOf(ResponsesTrash)); PossibleResponses[High(PossibleResponses)]:= fsourRetryAdmin; end; case AskQuestion(Format(rsMsgDelToTrashForce, [WrapTextSimple(FileName)]), '', PossibleResponses, 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; fsourRetryAdmin: Exit(False); end; end; fsoogYes: RemoveDirectly:= fsoogYes; fsoogNo: RemoveDirectly:= fsoogNo; end; if RemoveDirectly = fsoogYes then begin if aFile.IsLinkToDirectory then begin DeleteResult := mbRemoveDir(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 := mbDeleteFile(FileName); end; end; end; end; if DeleteResult then begin // success // process comments if need if gProcessComments then FDescription.DeleteDescription(FileName); 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 AdministratorPrivileges then begin SetLength(PossibleResponses, Length(ResponsesError)); Move(ResponsesError[0], PossibleResponses[0], SizeOf(ResponsesError)); end else begin SetLength(PossibleResponses, Length(ResponsesError) + 1); Move(ResponsesError[0], PossibleResponses[0], SizeOf(ResponsesError)); PossibleResponses[High(PossibleResponses)]:= fsourRetryAdmin; 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; fsourRetryAdmin: Exit(False); {$IF DEFINED(MSWINDOWS)} 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); if not ProcessFile(aFile) then begin Delete(Self, aFiles, CurrentFileIndex); Exit; end; with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; end; UpdateStatistics(FStatistics); 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-0.9.8/src/filesources/filesystem/ufilesystemcreatedirectoryoperation.pas0000644000175000001440000000362011747211345030142 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, uFileProcs, uLog, uLng, uGlobs, DCOSUtils; 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 mbFileGetAttr(AbsolutePath) <> faInvalidAttributes then begin AskQuestion(Format(rsMsgErrDirExists, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end else if uFileProcs.mbForceDirectory(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-0.9.8/src/filesources/filesystem/ufilesystemcopyoperation.pas0000644000175000001440000001671213320373360025725 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; 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; FSymLinkOption: TFileSourceOperationOptionSymLink; 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 SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; 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 FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; 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.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-0.9.8/src/filesources/filesystem/ufilesystemcombineoperation.pas0000644000175000001440000004207513506114031026362 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, crc, //DC uOSUtils, DCOSUtils, uLng, uFileSystemUtil, uFileSystemFileSource, uFileProcs, 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 (mbFileExists(MaybeAdditionalSourceFilename)) OR (MaybeFileIndex=1) then begin //Let's make sure the first file is available and if not, beg for it! if (mbFileExists(MaybeAdditionalSourceFilename)=FALSE) AND (MaybeFileIndex=1) then BegForPresenceOfThisFile(MaybeAdditionalSourceFilename); MaybeFile := TFileSystemFileSource.CreateFileFromFile(MaybeAdditionalSourceFilename); SourceFiles.Add(MaybeFile); end; inc(MaybeFileIndex); until (not mbFileExists(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 aFile, DynamicNextFile: TFile; CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; TargetFileStream: TFileStreamEx = 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; // Create destination file TargetFileStream := TFileStreamEx.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. mbDeleteFile(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: TFileStreamEx; 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 := TFileStreamEx.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 CurrentCRC32:=crc32(CurrentCRC32,FBuffer,BytesRead); 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: TStringList; 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 mbFileExists(MaybeSummaryFilename)) AND (UserAnswer=fsourOk) do begin UserAnswer:=AskQuestion(Format(msgTryToLocateCRCFile,[MaybeSummaryFilename]), '' , [fsourOk,fsourCancel], fsourOk, fsourCancel); end; if mbFileExists(MaybeSummaryFilename) then begin SummaryLines := TStringListEx.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 mbFileExists(aFilename) do begin case AskQuestion(Format(rsMsgFileNotFound+#$0A+rsMsgProvideThisFile,[aFilename]), '', [fsourRetry, fsourAbort], fsourRetry, fsourAbort) of fsourAbort: RaiseAbortOperation; end; end; end; end. doublecmd-0.9.8/src/filesources/filesystem/ufilesystemcalcstatisticsoperation.pas0000644000175000001440000001161713340517105027766 0ustar alexxusersunit uFileSystemCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog; type TFileSystemCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private 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, uOSUtils, uLng, uFindEx, uFileSystemFileSource; 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; 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 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-0.9.8/src/filesources/filesystem/ufilesystemcalcchecksumoperation.pas0000644000175000001440000004110613611061256027374 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; 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, uLng, uFileSystemUtil, uFileSystemFileSource, DCOSUtils, DCStrUtils, uFileProcs, uDCUtils, uShowMsg; type TChecksumEntry = class public Checksum: String; Algorithm: THashAlgorithm; end; const SFV_MAGIC = '; Generated by'; SFV_HEADER = SFV_MAGIC + ' 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) 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 := 1 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] = ';') 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 := Copy(FCheckSumFile.ValueFromIndex[I], 2, MaxInt); AddFile(Path, FileName, FCheckSumFile.Names[I]); CheckOperationState; 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 FindInvalidUTF8Character(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 (Pos(SFV_MAGIC, FCheckSumFile[0]) = 1) then InitializeRightToLeft(aFile.Path) else begin InitializeLeftToRight(aFile.Path); end; end; end; function TFileSystemCalcChecksumOperation.CalcChecksumProcessFile(aFile: TFile): Boolean; 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; if Algorithm = HASH_SFV then begin FCheckSumFile.Add(ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name + ' ' + sCheckSum); end else begin FCheckSumFile.Add(sCheckSum + ' *' + ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name); 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 fmShareDenyNone); 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 := mbFileSize(aFile.FullPath); 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-0.9.8/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.pas0000644000175000001440000002532512776401620030216 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; 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; 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} 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; 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; 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; 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; 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; cbDropReadOnlyFlag.Visible := True; cbFollowLinks.Visible := True; end; end. doublecmd-0.9.8/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lrt0000644000175000001440000000270712773673456030252 0ustar alexxusersTFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION=When &file exists TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLDIRECTORYEXISTS.CAPTION=When dir&ectory exists TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLSETPROPERTYERROR.CAPTION=When ca&nnot set property TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CMBSETPROPERTYERROR.HINT=What to do when cannot set file time, attributes, etc. TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCHECKFREESPACE.CAPTION=C&heck free space TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBFOLLOWLINKS.CAPTION=Fo&llow links TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCORRECTLINKS.CAPTION=Correct lin&ks TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYATTRIBUTES.CAPTION=Cop&y attributes TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION=Drop readonly fla&g TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION=Copy d&ate/time TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYOWNERSHIP.CAPTION=Copy o&wnership TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBRESERVESPACE.CAPTION=&Reserve space TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYPERMISSIONS.CAPTION=Copy &permissions TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CHKVERIFY.CAPTION=&Verify TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.GBFILETEMPLATE.CAPTION=Use file template TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.BTNSEARCHTEMPLATE.HINT=Choose template... TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLTEMPLATENAME.CAPTION= TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBEXCLUDEEMPTYDIRECTORIES.CAPTION=E&xclude empty directories doublecmd-0.9.8/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lfm0000644000175000001440000002506112773673456030225 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 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 end doublecmd-0.9.8/src/fhotdirexportimport.pas0000644000175000001440000000155012405254001020150 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-0.9.8/src/fhotdirexportimport.lrt0000644000175000001440000000060712405254001020170 0ustar alexxusersTFRMHOTDIREXPORTIMPORT.CAPTION=Select the entries your want to import TFRMHOTDIREXPORTIMPORT.LBLHINTHOLDCONTROL.CAPTION=Hold CTRL and click entries to select multiple ones TFRMHOTDIREXPORTIMPORT.LBHINT.CAPTION=When clicking a sub-menu, it will select the whole menu TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION=Import all! TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION=Import selected doublecmd-0.9.8/src/fhotdirexportimport.lfm0000644000175000001440000000415412405254001020146 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-0.9.8/src/fhardlink.pas0000644000175000001440000000447313101200015015753 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(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, uOSUtils, DCStrUtils, DCOSUtils; function ShowHardLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmHardLink.Create(Application, 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; begin sSrc:=edtExistingFile.Text; sDst:=edtLinkToCreate.Text; if CompareFilenames(sSrc, sDst) = 0 then Exit; sSrc := GetAbsoluteFileName(FCurrentPath, sSrc); sDst := GetAbsoluteFileName(FCurrentPath, sDst); if CreateHardLink(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; end; procedure TfrmHardLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. doublecmd-0.9.8/src/fhardlink.lrt0000644000175000001440000000035212023046500015772 0ustar alexxusersTFRMHARDLINK.CAPTION=Create hard link TFRMHARDLINK.LBLEXISTINGFILE.CAPTION=&Destination that the link will point to TFRMHARDLINK.LBLLINKTOCREATE.CAPTION=&Link name TFRMHARDLINK.BTNOK.CAPTION=&OK TFRMHARDLINK.BTNCANCEL.CAPTION=&Cancel doublecmd-0.9.8/src/fhardlink.lfm0000644000175000001440000000563212076733100015764 0ustar alexxusersobject frmHardLink: TfrmHardLink Left = 320 Height = 177 Top = 320 Width = 512 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create hard link' ClientHeight = 177 ClientWidth = 512 KeyPreview = True OnShow = FormShow Position = poScreenCenter LCLVersion = '1.0.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 BorderSpacing.Top = 6 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 81 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 28 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 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.Bottom = 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.Bottom = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 3 end end doublecmd-0.9.8/src/fhackform.pas0000644000175000001440000000044411740433676015777 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-0.9.8/src/fhackform.lfm0000644000175000001440000000025212045446211015753 0ustar alexxusersobject frmHackForm: TfrmHackForm Left = 455 Height = 300 Top = 236 Width = 400 Position = poScreenCenter ShowInTaskBar = stNever LCLVersion = '1.0.1.3' end doublecmd-0.9.8/src/ffindview.pas0000644000175000001440000000356313302225266016013 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, uOSForms; type { TfrmFindView } TfrmFindView = class(TModalForm) cbDataToFind: TComboBox; btnFind: TBitBtn; btnClose: TBitBtn; cbCaseSens: TCheckBox; chkHex: TCheckBox; procedure chkHexChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure btnFindClick(Sender: TObject); procedure cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; implementation {$R *.lfm} uses LCLProc, LCLType, 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; cbDataToFind.SetFocus; 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.btnFindClick(Sender: TObject); begin InsertFirstItem(cbDataToFind.Text, cbDataToFind); ModalResult:= mrOk; end; procedure TfrmFindView.cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; 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; end. doublecmd-0.9.8/src/ffindview.lrt0000644000175000001440000000022312023046500016006 0ustar alexxusersTFRMFINDVIEW.CAPTION=Find TFRMFINDVIEW.BTNFIND.CAPTION=&Find TFRMFINDVIEW.BTNCLOSE.CAPTION=&Cancel TFRMFINDVIEW.CBCASESENS.CAPTION=C&ase sensitive doublecmd-0.9.8/src/ffindview.lfm0000644000175000001440000000472613310021032015770 0ustar alexxusersobject frmFindView: TfrmFindView Left = 365 Height = 121 Top = 311 Width = 344 HorzScrollBar.Page = 343 HorzScrollBar.Range = 103 VertScrollBar.Page = 96 VertScrollBar.Range = 90 ActiveControl = cbDataToFind AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Find' ChildSizing.TopBottomSpacing = 6 ClientHeight = 121 ClientWidth = 344 OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '1.8.2.0' object cbDataToFind: TComboBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 26 Top = 12 Width = 328 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 12 BorderSpacing.Right = 8 Constraints.MinWidth = 328 ItemHeight = 18 OnKeyUp = cbDataToFindKeyUp TabOrder = 0 end object btnFind: TBitBtn AnchorSideTop.Control = btnClose AnchorSideRight.Control = btnClose AnchorSideBottom.Side = asrBottom Left = 150 Height = 29 Top = 80 Width = 90 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 BorderSpacing.Bottom = 4 Caption = '&Find' Constraints.MinWidth = 90 Default = True OnClick = btnFindClick TabOrder = 3 end object btnClose: TBitBtn AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 246 Height = 29 Top = 80 Width = 90 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 Caption = '&Cancel' Constraints.MinWidth = 90 Kind = bkCancel ModalResult = 2 TabOrder = 4 end object cbCaseSens: TCheckBox AnchorSideLeft.Control = cbDataToFind AnchorSideTop.Control = cbDataToFind AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 44 Width = 111 BorderSpacing.Top = 6 Caption = 'C&ase sensitive' TabOrder = 1 end object chkHex: TCheckBox AnchorSideLeft.Control = cbCaseSens AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrCenter Left = 131 Height = 24 Top = 44 Width = 104 BorderSpacing.Left = 12 Caption = 'Hexadecimal' OnChange = chkHexChange TabOrder = 2 end end doublecmd-0.9.8/src/ffileunlock.pas0000644000175000001440000001071713364663531016343 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, 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(UTF8Decode(rsMsgTerminateProcess)), PWideChar(UTF8Decode(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-0.9.8/src/ffileunlock.lrj0000644000175000001440000000216113364655625016346 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-0.9.8/src/ffileunlock.lfm0000644000175000001440000000566513364657675016360 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-0.9.8/src/ffileproperties.pas0000644000175000001440000005251113447625730017243 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-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 fFileProperties; {$mode objfpc}{$H+} interface uses LResources, SysUtils, Classes, Graphics, Forms, StdCtrls, Buttons, ComCtrls, Dialogs, Controls, ExtCtrls, Grids, DividerBevel, KASCDEdit, DCBasicTypes, uFile, uFileProperty, uFileSource, uFileSourceOperation, uFileSourceCalcStatisticsOperation, uExifReader; type { TfrmFileProperties } TfrmFileProperties = class(TForm) btnSetPropertiesToAllFiles: TBitBtn; btnClose: TBitBtn; btnSetProperties: TBitBtn; btnSkipFile: 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; cbxGroups: TComboBox; cbxUsers: TComboBox; chkExecutable: TCheckBox; DividerBevel1: TDividerBevel; DividerBevel2: TDividerBevel; edtOctal: TEdit; gbOwner: TGroupBox; lblExecutable: TLabel; lblFileName: TLabel; imgFileIcon: TImage; lblFolder: TKASCDEdit; lblFolderStr: TLabel; lblLastAccess: TKASCDEdit; lblLastAccessStr: TLabel; lblLastModif: TKASCDEdit; lblLastModifStr: TLabel; lblLastStChange: TKASCDEdit; lblLastStChangeStr: TLabel; lblOctal: TLabel; lblAttrBitsStr: TLabel; lblAttrText: TLabel; lblExec: TLabel; lblFileStr: TLabel; lblFile: TLabel; lblAttrGroupStr: TLabel; lblGroupStr: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblOwnerStr: TLabel; lblRead: TLabel; lblSize: TKASCDEdit; lblContains: TKASCDEdit; lblSizeStr: TLabel; lblContainsStr: TLabel; lblSymlink: TKASCDEdit; lblAttrTextStr: TLabel; lblSymlinkStr: TLabel; lblType: TKASCDEdit; lblTypeStr: TLabel; lblWrite: TLabel; pnlCaption: TPanel; pnlData: TPanel; pnlIcon: TPanel; pcPageControl: TPageControl; sgImage: TStringGrid; tsPlugins: TTabSheet; tmUpdateFolderSize: TTimer; tsProperties: TTabSheet; tsAttributes: TTabSheet; procedure btnSetPropertiesToAllFilesClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); 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 btnSetPropertiesClick(Sender: TObject); procedure btnSkipFileClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tmUpdateFolderSizeTimer(Sender: TObject); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; State: TFileSourceOperationState); private bPerm: Boolean; iCurrent: Integer; FFileSource: IFileSource; FFiles: TFiles; FExif: TExifReader; FPropertyFormatter: IFilePropertyFormatter; FFileSourceCalcStatisticsOperation: TFileSourceCalcStatisticsOperation; ChangeTriggersEnabled: Boolean; FFileType, OriginalAttr: TFileAttrs; OriginalUser, OriginalGroup: String; FChangedProperties: Boolean; function ShowError(const MessageFmt: String): TModalResult; procedure ShowExecutable; procedure ShowPermissions(Mode: TFileAttrs); function ChangeProperties: Boolean; function CheckIfChangedProperties: Boolean; function GetModeFromForm: TFileAttrs; procedure ShowFile(iIndex:Integer); procedure AllowChange(Allow: Boolean); procedure StartCalcFolderSize; procedure StopCalcFolderSize; procedure ShowPlugin(iIndex:Integer); 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, StrUtils, uLng, BaseUnix, uUsersGroups, uDCUtils, DCOSUtils, uDefaultFilePropertyFormatter, uMyUnix, DCFileAttributes, uGlobs, uWdxModule, uFileSourceOperationTypes, uFileSystemFileSource, uOperationsManager, WdxPlugin, uFileSourceOperationOptions, uKeyboard, DCStrUtils, DCUnix, uPixMapManager; 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); begin FExif:= TExifReader.Create; FFileSource:= aFileSource; FFiles := theFiles; FPropertyFormatter := MaxDetailsFilePropertyFormatter; ChangeTriggersEnabled := True; inherited Create(AOwner); imgFileIcon.Width:= gIconsSize; imgFileIcon.Height:= gIconsSize; end; destructor TfrmFileProperties.Destroy; begin FExif.Free; StopCalcFolderSize; inherited Destroy; FPropertyFormatter := nil; // free interface end; function TfrmFileProperties.GetModeFromForm: TFileAttrs; begin Result:=0; if cbReadOwner.Checked then Result:=(Result OR S_IRUSR); if cbWriteOwner.Checked then Result:=(Result OR S_IWUSR); if cbExecOwner.Checked then Result:=(Result OR S_IXUSR); if cbReadGroup.Checked then Result:=(Result OR S_IRGRP); if cbWriteGroup.Checked then Result:=(Result OR S_IWGRP); if cbExecGroup.Checked then Result:=(Result OR S_IXGRP); if cbReadOther.Checked then Result:=(Result OR S_IROTH); if cbWriteOther.Checked then Result:=(Result OR S_IWOTH); if cbExecOther.Checked then Result:=(Result OR S_IXOTH); if cbSuid.Checked then Result:=(Result OR S_ISUID); if cbSgid.Checked then Result:=(Result OR S_ISGID); if cbSticky.Checked then Result:=(Result OR S_ISVTX); end; procedure TfrmFileProperties.btnCloseClick(Sender: TObject); begin if FChangedProperties then FFileSource.Reload(FFiles.Path); Close; end; procedure TfrmFileProperties.cbChangeModeClick(Sender: TObject); var AMode: TFileAttrs; begin if ChangeTriggersEnabled then begin ChangeTriggersEnabled := False; ShowExecutable; AMode:= GetModeFromForm; edtOctal.Text:= DecToOct(AMode); lblAttrText.Caption := FormatUnixAttributes(FFileType or AMode); ChangeTriggersEnabled := 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 ChangeTriggersEnabled then begin ChangeTriggersEnabled := False; AMode:= OctToDec(edtOctal.Text); lblAttrText.Caption := FormatUnixAttributes(FFileType or AMode); ShowPermissions(AMode); ChangeTriggersEnabled := True; end; end; procedure TfrmFileProperties.btnSetPropertiesToAllFilesClick(Sender: TObject); begin repeat if not ChangeProperties then Exit; Inc (iCurrent); until (iCurrent = FFiles.Count); FFileSource.Reload(FFiles.Path); Close; 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; function TfrmFileProperties.ChangeProperties: Boolean; begin Result:= True; // First set owner/group because it clears SUID bit. if bPerm then begin if fplchown(FFiles[iCurrent].FullPath, StrToUID(cbxUsers.Text), StrToGID(cbxGroups.Text)) <> 0 then begin if ShowError(rsPropsErrChOwn) = mrCancel then Exit(False); end; end; if not FFiles[iCurrent].IsLink then begin if fpchmod(PAnsiChar(UTF8ToSys(FFiles[iCurrent].FullPath)), GetModeFromForm) <> 0 then begin if ShowError(rsPropsErrChMod) = mrCancel then Exit(False); end; end; end; function TfrmFileProperties.CheckIfChangedProperties: Boolean; begin Result := (OriginalAttr <> GetModeFromForm) or (OriginalUser <> cbxUsers.Text) or (OriginalGroup <> cbxGroups.Text); end; procedure TfrmFileProperties.ShowFile(iIndex:Integer); var Idx: PtrInt; iMyUID: Cardinal; hasSize: Boolean; ABitmap: TBitmap; sb: BaseUnix.Stat; Attrs: TFileAttrs; isFileSystem: Boolean; begin StopCalcFolderSize; // Stop previous calculate folder size operation 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; // 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 := Properties[fpSize].Format(FPropertyFormatter); end; lblSize.Visible := hasSize; lblSizeStr.Visible := hasSize; lblContains.Visible:= IsDirectory; lblContainsStr.Visible:= IsDirectory; // 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 := ''; // Chown if isFileSystem and (fpLStat(PChar(UTF8ToSys(FullPath)), sb) = 0) then begin OriginalUser := UIDToStr(sb.st_uid); OriginalGroup := GIDToStr(sb.st_gid); // Get current user UID iMyUID := fpGetUID; // Only owner or root can change owner bPerm := (iMyUID = sb.st_uid) or (iMyUID = 0); // Owner combo box cbxUsers.Text := OriginalUser; // Only root can change owner cbxUsers.Enabled := (imyUID = 0); if cbxUsers.Enabled then GetUsers(cbxUsers.Items); // Group combo box cbxGroups.Text := OriginalGroup; cbxGroups.Enabled := bPerm; if bPerm then GetUsrGroups(iMyUID, cbxGroups.Items); end; // Attributes if fpAttributes in SupportedProperties then begin Attrs := AttributesProperty.Value; FFileType:= Attrs and S_IFMT; OriginalAttr := Attrs and $0FFF; //if Attrs is TUnixFileAttributesProperty //if Attrs is TNtfsFileAttributesProperty ShowPermissions(Attrs); lblExecutable.Visible:= FPS_ISREG(Attrs); chkExecutable.Visible:= lblExecutable.Visible; edtOctal.Text:= DecToOct(GetModeFromForm); lblAttrText.Caption := Properties[fpAttributes].Format(DefaultFilePropertyFormatter); if FPS_ISDIR(Attrs) then lblType.Caption:=rsPropsFolder 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 else lblType.Caption:=rsPropsUnknownType; 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 edtOctal.Text:=rsMsgErrNotSupported; lblAttrText.Caption:=rsMsgErrNotSupported; lblType.Caption:=rsPropsUnknownType; lblSymlink.Caption:=''; end; end; tsPlugins.Visible:= isFileSystem; if isFileSystem then ShowPlugin(iIndex); // Only allow changes for file system file. AllowChange(isFileSystem); end; procedure TfrmFileProperties.FormCreate(Sender: TObject); begin InitPropStorage(Self); lblFileName.Font.Style:= [fsBold]; AllowChange(False); ShowFile(0); end; procedure TfrmFileProperties.btnSetPropertiesClick(Sender: TObject); begin if CheckIfChangedProperties then FChangedProperties := True; if not ChangeProperties then Exit; btnSkipFileClick(Self); end; procedure TfrmFileProperties.btnSkipFileClick(Sender: TObject); begin inc(iCurrent); if iCurrent >= FFiles.Count then begin if FChangedProperties then FFileSource.Reload(FFiles.Path); Close; end else ShowFile(iCurrent); 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.tmUpdateFolderSizeTimer(Sender: TObject); begin if Assigned(FFileSourceCalcStatisticsOperation) then with FFileSourceCalcStatisticsOperation.RetrieveStatistics do begin lblSize.Caption := Format('%s (%s)', [cnvFormatFileSize(Size), Numb2USA(IntToStr(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; function TfrmFileProperties.ShowError(const MessageFmt: String): TModalResult; begin Result:= MessageDlg(Caption, Format(MessageFmt, [FFiles[iCurrent].FullPath]) + LineEnding + SysErrorMessageUTF8(fpgetErrNo), mtError, mbOKCancel, 0); 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.AllowChange(Allow: Boolean); begin btnSetPropertiesToAllFiles.Enabled := Allow; btnSetProperties.Enabled := Allow; tsAttributes.Enabled:= Allow; gbOwner.Enabled:= Allow; end; procedure TfrmFileProperties.StartCalcFolderSize; var aFiles: TFiles; begin aFiles:= TFiles.Create(FFiles.Path); aFiles.Add(FFiles.Items[iCurrent].Clone); 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; end; procedure TfrmFileProperties.StopCalcFolderSize; begin if Assigned(FFileSourceCalcStatisticsOperation) then begin tmUpdateFolderSize.Enabled:= False; FFileSourceCalcStatisticsOperation.Stop; end; FFileSourceCalcStatisticsOperation:= nil; end; procedure TfrmFileProperties.ShowPlugin(iIndex: Integer); var I, J: Integer; Value: String; FileName: String; Index: Integer = 0; WdxModule: TWdxModule; begin FileName:= FFiles[iIndex].FullPath; Value:= LowerCase(FFiles[iIndex].Extension); tsPlugins.TabVisible:= Contains(['jpg', 'jpeg'], Value) and FExif.LoadFromFile(FileName); if tsPlugins.TabVisible then begin sgImage.RowCount:= 6; if FExif.ImageWidth <> 0 then begin Inc(Index); sgImage.Cells[0, Index]:= rsImageWidth; sgImage.Cells[1, Index]:= IntToStr(FExif.ImageWidth); end; if FExif.ImageHeight <> 0 then begin Inc(Index); sgImage.Cells[0, Index]:= rsImageHeight; sgImage.Cells[1, Index]:= IntToStr(FExif.ImageHeight); end; if Length(FExif.DateTimeOriginal) > 0 then begin Inc(Index); sgImage.Cells[0, Index]:= rsDateTimeOriginal; sgImage.Cells[1, Index]:= FExif.DateTimeOriginal; end; if Length(FExif.Make) > 0 then begin Inc(Index); sgImage.Cells[0, Index]:= rsMake; sgImage.Cells[1, Index]:= FExif.Make; end; if Length(FExif.Model) > 0 then begin Inc(Index); sgImage.Cells[0, Index]:= rsModel; sgImage.Cells[1, Index]:= FExif.Model; end; tsPlugins.TabVisible:= Index > 0; sgImage.RowCount:= Index + 1; end else begin 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; sgImage.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); sgImage.Cells[1, J]:= Value; sgImage.Cells[0, J]:= WdxModule.FieldList[I]; end; end; end; sgImage.RowCount:= J + 1; tsPlugins.TabVisible:= J > 0; if tsPlugins.TabVisible then Break; end; end; end; end; end. doublecmd-0.9.8/src/ffileproperties.lrt0000644000175000001440000000344013161673120017243 0ustar alexxusersTFRMFILEPROPERTIES.CAPTION=Properties TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION=Properties TFRMFILEPROPERTIES.LBLFILENAME.CAPTION=??? TFRMFILEPROPERTIES.LBLFOLDERSTR.CAPTION=Path: TFRMFILEPROPERTIES.LBLTYPESTR.CAPTION=Type: TFRMFILEPROPERTIES.LBLSYMLINKSTR.CAPTION=Symlink to: TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION=Size: TFRMFILEPROPERTIES.LBLCONTAINSSTR.CAPTION=Contains: TFRMFILEPROPERTIES.LBLLASTACCESSSTR.CAPTION=Last access: TFRMFILEPROPERTIES.LBLLASTMODIFSTR.CAPTION=Last modification: TFRMFILEPROPERTIES.LBLLASTSTCHANGESTR.CAPTION=Last status change: TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION=Attributes TFRMFILEPROPERTIES.LBLFILESTR.CAPTION=File name TFRMFILEPROPERTIES.LBLFILE.CAPTION=File name TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION=Owner TFRMFILEPROPERTIES.LBLWRITE.CAPTION=Write TFRMFILEPROPERTIES.LBLREAD.CAPTION=Read TFRMFILEPROPERTIES.LBLEXEC.CAPTION=Execute TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION=Group TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION=Other TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION=Text: TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION=----------- TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION=Bits: TFRMFILEPROPERTIES.LBLOCTAL.CAPTION=Octal: TFRMFILEPROPERTIES.CBSUID.CAPTION=SUID TFRMFILEPROPERTIES.CBSGID.CAPTION=SGID TFRMFILEPROPERTIES.CBSTICKY.CAPTION=Sticky TFRMFILEPROPERTIES.CHKEXECUTABLE.CAPTION=Allow &executing file as program TFRMFILEPROPERTIES.LBLEXECUTABLE.CAPTION=Execute: TFRMFILEPROPERTIES.TSPLUGINS.CAPTION=Plugins TFRMFILEPROPERTIES.GBOWNER.CAPTION=Owner TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION=O&wner TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION=&Group TFRMFILEPROPERTIES.BTNSETPROPERTIES.CAPTION=&Set properties TFRMFILEPROPERTIES.BTNSETPROPERTIESTOALLFILES.CAPTION=Set to &all selected files TFRMFILEPROPERTIES.BTNSKIPFILE.CAPTION=Ski&p this file TFRMFILEPROPERTIES.BTNCLOSE.CAPTION=&Close doublecmd-0.9.8/src/ffileproperties.lfm0000644000175000001440000005246013427105240017224 0ustar alexxusersobject frmFileProperties: TfrmFileProperties Left = 764 Height = 471 Top = 123 Width = 458 ActiveControl = pcPageControl Caption = 'Properties' ChildSizing.LeftRightSpacing = 8 ClientHeight = 471 ClientWidth = 458 Constraints.MinHeight = 432 Constraints.MinWidth = 458 KeyPreview = True OnCreate = FormCreate OnKeyDown = FormKeyDown Position = poScreenCenter SessionProperties = 'Height;Width' LCLVersion = '1.6.4.0' object pcPageControl: TPageControl AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbOwner Left = 8 Height = 300 Top = 8 Width = 440 ActivePage = tsProperties Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Bottom = 6 TabIndex = 0 TabOrder = 0 object tsProperties: TTabSheet Caption = 'Properties' ClientHeight = 273 ClientWidth = 436 object pnlData: TPanel Left = 0 Height = 273 Top = 0 Width = 436 Align = alClient BevelOuter = bvNone ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 273 ClientWidth = 436 Color = clForm ParentColor = False TabOrder = 0 object pnlIcon: TPanel Left = 10 Height = 32 Top = 12 Width = 108 BevelOuter = bvNone ClientHeight = 32 ClientWidth = 108 TabOrder = 0 object imgFileIcon: TImage Left = 0 Height = 32 Top = 0 Width = 32 end end object lblFileName: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 128 Height = 32 Top = 12 Width = 25 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 = 108 BorderSpacing.Top = 16 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Path:' ParentColor = False end object lblFolder: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 60 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblTypeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 88 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Type:' ParentColor = False end object lblType: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 85 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblSymlinkStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 113 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Symlink to:' ParentColor = False end object lblSymlink: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 110 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblSizeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 138 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Size:' ParentColor = False end object lblSize: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 135 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblContainsStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 163 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Contains:' ParentColor = False end object lblContains: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 160 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastAccessStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 194 Width = 108 BorderSpacing.Top = 8 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Last access:' ParentColor = False end object lblLastAccess: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 191 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastModifStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 219 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Last modification:' ParentColor = False end object lblLastModif: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 216 Width = 25 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastStChangeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 244 Width = 108 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Last status change:' ParentColor = False end object lblLastStChange: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 128 Height = 23 Top = 241 Width = 25 DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end end end object tsAttributes: TTabSheet Caption = 'Attributes' ClientHeight = 267 ClientWidth = 436 object lblFileStr: TLabel AnchorSideTop.Control = tsAttributes Left = 8 Height = 18 Top = 12 Width = 58 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False end object lblFile: TLabel AnchorSideTop.Control = tsAttributes Left = 104 Height = 18 Top = 12 Width = 58 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False ParentFont = False end object lblAttrOwnerStr: TLabel AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 71 Width = 42 Caption = 'Owner' ParentColor = False end object lblWrite: TLabel AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 176 Height = 18 Top = 50 Width = 33 Caption = 'Write' ParentColor = False end object lblRead: TLabel AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 104 Height = 18 Top = 50 Width = 30 Caption = 'Read' ParentColor = False end object lblExec: TLabel AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 240 Height = 18 Top = 50 Width = 48 Caption = 'Execute' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 90 Width = 39 Caption = 'Group' ParentColor = False end object lblAttrOtherStr: TLabel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 109 Width = 37 Caption = 'Other' ParentColor = False end object lblAttrTextStr: TLabel AnchorSideLeft.Control = edtOctal AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 204 Height = 18 Top = 206 Width = 30 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 = 242 Height = 18 Top = 206 Width = 45 BorderSpacing.Left = 8 Caption = '-----------' ParentColor = False ParentFont = False end object lblAttrBitsStr: TLabel AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 147 Width = 26 Caption = 'Bits:' ParentColor = False end object lblOctal: TLabel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 206 Width = 35 BorderSpacing.Left = 8 Caption = 'Octal:' FocusControl = edtOctal ParentColor = False end object cbReadOwner: TCheckBox AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 112 Height = 13 Top = 74 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 0 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = lblWrite AnchorSideTop.Side = asrBottom Left = 184 Height = 13 Top = 74 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 1 end object cbExecOwner: TCheckBox AnchorSideTop.Control = lblExec AnchorSideTop.Side = asrBottom Left = 256 Height = 13 Top = 74 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 2 end object cbReadGroup: TCheckBox AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 112 Height = 13 Top = 93 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideTop.Control = cbWriteOwner AnchorSideTop.Side = asrBottom Left = 184 Height = 13 Top = 93 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideTop.Control = cbExecOwner AnchorSideTop.Side = asrBottom Left = 256 Height = 13 Top = 93 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 5 end object cbReadOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 112 Height = 13 Top = 112 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideTop.Control = cbWriteGroup AnchorSideTop.Side = asrBottom Left = 184 Height = 13 Top = 112 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 256 Height = 13 Top = 112 Width = 13 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 8 end object cbSuid: TCheckBox AnchorSideLeft.Control = cbReadOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 145 Width = 55 Caption = 'SUID' OnClick = cbChangeModeClick TabOrder = 9 end object cbSgid: TCheckBox AnchorSideLeft.Control = cbWriteOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 184 Height = 23 Top = 145 Width = 54 Caption = 'SGID' OnClick = cbChangeModeClick TabOrder = 10 end object cbSticky: TCheckBox AnchorSideLeft.Control = cbExecOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 256 Height = 23 Top = 145 Width = 60 Caption = 'Sticky' OnClick = cbChangeModeClick TabOrder = 11 end object edtOctal: TEdit AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = chkExecutable AnchorSideTop.Side = asrBottom Left = 112 Height = 24 Top = 203 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 = 112 Height = 23 Top = 174 Width = 212 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 = 8 Height = 18 Top = 176 Width = 51 Caption = 'Execute:' ParentColor = False end object DividerBevel1: TDividerBevel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = lblFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAttributes AnchorSideRight.Side = asrBottom Left = 8 Height = 18 Top = 32 Width = 420 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 2 BorderSpacing.Right = 8 Font.Style = [fsBold] ParentFont = False end object DividerBevel2: TDividerBevel AnchorSideLeft.Control = DividerBevel1 AnchorSideTop.Control = cbWriteOther AnchorSideTop.Side = asrBottom AnchorSideRight.Control = DividerBevel1 AnchorSideRight.Side = asrBottom Left = 8 Height = 18 Top = 127 Width = 420 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Font.Style = [fsBold] ParentFont = False end end object tsPlugins: TTabSheet Caption = 'Plugins' ClientHeight = 218 ClientWidth = 434 TabVisible = False object sgImage: TStringGrid Left = 0 Height = 218 Top = 0 Width = 434 Align = alClient AutoEdit = False AutoFillColumns = True ColCount = 2 Columns = < item ReadOnly = True Title.Caption = 'Name' Width = 215 end item Title.Caption = 'Value' Width = 215 end> FixedCols = 0 MouseWheelOption = mwGrid Options = [goSmoothScroll, goCellHints, goTruncCellHints, goCellEllipsis] ShowHint = True TabOrder = 0 TitleStyle = tsNative ColWidths = ( 215 215 ) end end end object gbOwner: TGroupBox AnchorSideLeft.Control = pcPageControl AnchorSideRight.Control = pcPageControl AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnSetProperties Left = 8 Height = 83 Top = 314 Width = 440 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 Caption = 'Owner' ClientHeight = 62 ClientWidth = 436 TabOrder = 1 object lblOwnerStr: TLabel AnchorSideLeft.Control = gbOwner AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrCenter Left = 24 Height = 17 Top = 9 Width = 38 BorderSpacing.Left = 24 Caption = 'O&wner' FocusControl = cbxUsers ParentColor = False end object lblGroupStr: TLabel AnchorSideLeft.Control = gbOwner AnchorSideTop.Control = cbxGroups AnchorSideTop.Side = asrCenter Left = 24 Height = 17 Top = 36 Width = 36 BorderSpacing.Left = 24 Caption = '&Group' FocusControl = cbxGroups ParentColor = False end object cbxUsers: TComboBox AnchorSideTop.Control = gbOwner Left = 135 Height = 23 Top = 6 Width = 227 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 17 Sorted = True TabOrder = 0 end object cbxGroups: TComboBox AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrBottom Left = 135 Height = 23 Top = 33 Width = 227 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 BorderSpacing.Bottom = 6 ItemHeight = 17 Sorted = True TabOrder = 1 end end object btnSetProperties: TBitBtn AnchorSideRight.Control = btnSetPropertiesToAllFiles AnchorSideBottom.Control = btnSetPropertiesToAllFiles AnchorSideBottom.Side = asrBottom Left = 51 Height = 29 Top = 403 Width = 118 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 Caption = '&Set properties' Default = True Kind = bkOK OnClick = btnSetPropertiesClick TabOrder = 2 end object btnSetPropertiesToAllFiles: TBitBtn AnchorSideRight.Control = btnSkipFile AnchorSideBottom.Control = btnSkipFile AnchorSideBottom.Side = asrBottom Left = 175 Height = 29 Top = 403 Width = 162 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 Caption = 'Set to &all selected files' Kind = bkAll OnClick = btnSetPropertiesToAllFilesClick TabOrder = 3 end object btnSkipFile: TBitBtn AnchorSideRight.Control = btnClose AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 343 Height = 29 Top = 403 Width = 105 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 4 Caption = 'Ski&p this file' Kind = bkIgnore ModalResult = 5 OnClick = btnSkipFileClick TabOrder = 4 end object btnClose: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 378 Height = 29 Top = 436 Width = 70 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 10 BorderSpacing.Bottom = 6 Cancel = True Caption = '&Close' Kind = bkClose ModalResult = 2 OnClick = btnCloseClick TabOrder = 5 end object tmUpdateFolderSize: TTimer Enabled = False Interval = 500 OnTimer = tmUpdateFolderSizeTimer left = 360 top = 88 end end doublecmd-0.9.8/src/ffileexecuteyourself.pas0000644000175000001440000001210113320373360020256 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, 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 // 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-0.9.8/src/ffileexecuteyourself.lrt0000644000175000001440000000044211740433676020314 0ustar alexxusersTFRMFILEEXECUTEYOURSELF.CAPTION=Wait... TFRMFILEEXECUTEYOURSELF.LBLPROMPT.CAPTION=Click on Close when the temporary file can be deleted! TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION=&Close TFRMFILEEXECUTEYOURSELF.LBLFILENAME.CAPTION=File name: TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION=From: doublecmd-0.9.8/src/ffileexecuteyourself.lfm0000644000175000001440000000477412720315320020265 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 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-0.9.8/src/fextractdlg.pas0000644000175000001440000002401113611060423016323 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File unpacking window 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 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; pnlLabels: TPanel; procedure cbExtractPathChange(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } FArcType: String; procedure SwitchOptions; procedure ExtractArchive(ArchiveFileSource: IArchiveFileSource; TargetFileSource: IFileSource; const TargetPath: String; QueueId: TOperationsManagerQueueIdentifier); 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, 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 // 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, 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: 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 ArchiveFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyOutOperation do begin Password := edtPassword.Text; ExtractWithoutPath:= not cbExtractPath.Checked; end; end else if ArchiveFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyOutOperation do begin 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; end. doublecmd-0.9.8/src/fextractdlg.lrt0000644000175000001440000000077212616371371016364 0ustar alexxusersTFRMEXTRACTDLG.CAPTION=Unpack files TFRMEXTRACTDLG.LBLFILEMASK.CAPTION=&Extract files matching file mask: TFRMEXTRACTDLG.LBLPASSWORD.CAPTION=&Password for encrypted files: TFRMEXTRACTDLG.LBLEXTRACTTO.CAPTION=To the &directory: TFRMEXTRACTDLG.CBFILEMASK.TEXT=*.* TFRMEXTRACTDLG.CBINSEPARATEFOLDER.CAPTION=Unpack each archive to a &separate subdir (name of the archive) TFRMEXTRACTDLG.CBEXTRACTPATH.CAPTION=&Unpack path names if stored with files TFRMEXTRACTDLG.CBOVERWRITE.CAPTION=O&verwrite existing files doublecmd-0.9.8/src/fextractdlg.lfm0000644000175000001440000001355313517017054016336 0ustar alexxusersinherited frmExtractDlg: TfrmExtractDlg Left = 552 Height = 222 Top = 162 Width = 516 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 = 222 ClientWidth = 516 OnCreate = FormCreate Position = poOwnerFormCenter inherited pnlContent: TPanel Left = 6 Height = 148 Top = 5 Width = 500 Align = alNone ChildSizing.TopBottomSpacing = 4 ClientHeight = 148 ClientWidth = 500 object pnlLabels: TPanel[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = cbFileMask AnchorSideBottom.Control = edtPassword AnchorSideBottom.Side = asrBottom Left = 0 Height = 140 Top = 5 Width = 166 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 140 ClientWidth = 166 Color = clForm ParentColor = False TabOrder = 4 object lblFileMask: TLabel AnchorSideLeft.Control = pnlLabels AnchorSideTop.Control = pnlLabels Left = 0 Height = 15 Top = 3 Width = 166 BorderSpacing.Top = 3 Caption = '&Extract files matching file mask:' FocusControl = cbFileMask ParentColor = False end object lblPassword: TLabel AnchorSideLeft.Control = pnlLabels AnchorSideBottom.Control = pnlLabels AnchorSideBottom.Side = asrBottom Left = 0 Height = 15 Top = 122 Width = 151 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 3 Caption = '&Password for encrypted files:' FocusControl = edtPassword ParentColor = False end object lblExtractTo: TLabel AnchorSideTop.Control = lblFileMask AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 26 Width = 86 BorderSpacing.Top = 8 Caption = 'To the &directory:' FocusControl = edtExtractTo ParentColor = False end end object cbFileMask: TComboBox[1] AnchorSideLeft.Control = pnlLabels AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 5 Width = 260 BorderSpacing.Left = 5 BorderSpacing.Top = 2 Constraints.MinWidth = 260 ItemHeight = 15 ParentFont = False TabOrder = 0 Text = '*.*' end object edtExtractTo: TDirectoryEdit[2] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = cbFileMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbFileMask AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 30 Width = 321 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 1 end object edtPassword: TEdit[3] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = pnlCheckBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExtractTo AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 122 Width = 321 Anchors = [akTop, akLeft, akRight] EchoMode = emPassword Enabled = False PasswordChar = '*' TabOrder = 3 end object pnlCheckBoxes: TPanel[4] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = edtExtractTo AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 69 Top = 53 Width = 506 AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 69 ClientWidth = 506 Color = clForm ParentColor = False TabOrder = 2 object cbInSeparateFolder: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 6 Width = 351 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 = 19 Top = 25 Width = 351 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 = 19 Top = 44 Width = 351 Caption = 'O&verwrite existing files' Checked = True TabOrder = 2 end end end inherited pnlButtons: TPanel AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = DividerBevel AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 6 Top = 176 Width = 500 Align = alNone Anchors = [akTop, akLeft, akRight] ClientWidth = 500 inherited btnCancel: TBitBtn Left = 318 end inherited btnOK: TBitBtn Left = 412 end end object DividerBevel: TDividerBevel[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 157 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Font.Style = [fsBold] ParentFont = False end inherited pmQueuePopup: TPopupMenu[3] end end doublecmd-0.9.8/src/feditsearch.pas0000644000175000001440000003412312754667446016333 0ustar alexxusers{ Search & Replace dialog for lazarus converted from SynEdit by 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 Library 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. based on SynEdit demo, original license: ------------------------------------------------------------------------------- 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: dlgSearchText.pas, released 2000-06-23. The Original Code is part of the SearchReplaceDemo project, written by Michael Hieke for the SynEdit component suite. 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: dlgSearchText.pas,v 1.3 2002/08/01 05:44:05 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 fEditSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Buttons, ButtonPanel, uOSForms, DCClassesUtf8; type { 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; gbSearchOptions: TGroupBox; lblReplaceWith: TLabel; lblSearchFor: TLabel; rgSearchDirection: TRadioGroup; procedure btnOKClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure RequestAlign(Data: PtrInt); private function GetSearchBackwards: boolean; function GetSearchCaseSensitive: boolean; function GetSearchFromCursor: boolean; function GetSearchInSelection: boolean; function GetSearchText: string; function GetSearchTextHistory: string; function GetSearchWholeWords: boolean; function GetSearchRegExp: boolean; function GetReplaceText: string; function GetReplaceTextHistory: string; procedure SetSearchBackwards(Value: boolean); procedure SetSearchCaseSensitive(Value: boolean); procedure SetSearchFromCursor(Value: boolean); procedure SetSearchInSelection(Value: boolean); procedure SetSearchText(Value: string); procedure SetSearchTextHistory(Value: string); procedure SetSearchWholeWords(Value: boolean); procedure SetSearchRegExp(Value: boolean); procedure SetReplaceText(Value: string); procedure SetReplaceTextHistory(Value: string); public constructor Create(AOwner: TComponent; AReplace: Boolean); reintroduce; property SearchBackwards: boolean read GetSearchBackwards write SetSearchBackwards; property SearchCaseSensitive: boolean read GetSearchCaseSensitive write SetSearchCaseSensitive; property SearchFromCursor: boolean read GetSearchFromCursor write SetSearchFromCursor; property SearchInSelectionOnly: boolean read GetSearchInSelection write SetSearchInSelection; property SearchText: string read GetSearchText write SetSearchText; property SearchTextHistory: string read GetSearchTextHistory write SetSearchTextHistory; property SearchWholeWords: boolean read GetSearchWholeWords write SetSearchWholeWords; property SearchRegExp: boolean read GetSearchRegExp write SetSearchRegExp; property ReplaceText: string read GetReplaceText write SetReplaceText; property ReplaceTextHistory: string read GetReplaceTextHistory write SetReplaceTextHistory; end; function GetSimpleSearchAndReplaceString(AOwner:TComponent; OptionAllowed:TEditSearchDialogOption; var sSearchText:string; var sReplaceText:string; var OptionsToReturn:TEditSearchDialogOption; PastSearchList:TStringListEx; PastReplaceList:TStringListEx):boolean; implementation {$R *.lfm} uses Math, Graphics, uGlobs, uLng, uDCUtils; 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, TRUE); 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)); //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; SearchTextHistory:=PastSearchList.Text; cbSearchText.Text:=sSearchText; //4. Setup the REPLACE info if sReplaceText='' then sReplaceText:=rsEditSearchReplace; ReplaceTextHistory:=PastReplaceList.Text; 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.Text:=SearchTextHistory; PastReplaceList.Text:=ReplaceTextHistory; //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; { TfrmEditSearchReplace } procedure TfrmEditSearchReplace.btnOKClick(Sender: TObject); begin InsertFirstItem(cbSearchText.Text, cbSearchText); ModalResult := mrOK end; procedure TfrmEditSearchReplace.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if ModalResult = mrOK then InsertFirstItem(cbReplaceText.Text, cbReplaceText); 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.RequestAlign(Data: PtrInt); begin Width := Width + 1; Width := Width - 1; end; function TfrmEditSearchReplace.GetSearchBackwards: boolean; begin Result := rgSearchDirection.ItemIndex = 1; end; function TfrmEditSearchReplace.GetSearchCaseSensitive: boolean; begin Result := cbSearchCaseSensitive.Checked; end; function TfrmEditSearchReplace.GetSearchFromCursor: boolean; begin Result := cbSearchFromCursor.Checked; end; function TfrmEditSearchReplace.GetSearchInSelection: boolean; begin Result := cbSearchSelectedOnly.Checked; end; function TfrmEditSearchReplace.GetSearchText: string; begin Result := cbSearchText.Text; end; function TfrmEditSearchReplace.GetSearchTextHistory: string; var i: integer; begin for i:= cbSearchText.Items.Count - 1 downto 25 do cbSearchText.Items.Delete(i); Result:=cbSearchText.Items.Text; end; function TfrmEditSearchReplace.GetSearchWholeWords: boolean; begin Result := cbSearchWholeWords.Checked; end; function TfrmEditSearchReplace.GetSearchRegExp: boolean; begin Result:= cbSearchRegExp.Checked; end; function TfrmEditSearchReplace.GetReplaceText: string; begin Result := cbReplaceText.Text; end; function TfrmEditSearchReplace.GetReplaceTextHistory: string; var i: integer; begin for i:= cbSearchText.Items.Count - 1 downto 25 do cbReplaceText.Items.Delete(i); Result:=cbReplaceText.Items.Text; end; procedure TfrmEditSearchReplace.SetSearchBackwards(Value: boolean); begin rgSearchDirection.ItemIndex := Ord(Value); end; procedure TfrmEditSearchReplace.SetSearchCaseSensitive(Value: boolean); begin cbSearchCaseSensitive.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchFromCursor(Value: boolean); begin cbSearchFromCursor.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchInSelection(Value: boolean); begin cbSearchSelectedOnly.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchText(Value: string); begin cbSearchText.Text := Value; end; procedure TfrmEditSearchReplace.SetSearchTextHistory(Value: string); begin cbSearchText.Items.Text := Value; end; procedure TfrmEditSearchReplace.SetSearchWholeWords(Value: boolean); begin cbSearchWholeWords.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchRegExp(Value: boolean); begin cbSearchRegExp.Checked:= Value; end; procedure TfrmEditSearchReplace.SetReplaceText(Value: string); begin cbReplaceText.Items.Text := Value; end; procedure TfrmEditSearchReplace.SetReplaceTextHistory(Value: string); begin cbReplaceText.Items.Text := Value; end; constructor TfrmEditSearchReplace.Create(AOwner: TComponent; AReplace: Boolean); begin inherited Create(AOwner); Color:= clForm; if AReplace then begin Caption:= rsEditSearchReplace; lblReplaceWith.Visible:= True; cbReplaceText.Visible:= True; end else begin Caption:= rsEditSearchCaption; lblReplaceWith.Visible:= False; cbReplaceText.Visible:= False; Height:= Height - cbReplaceText.Height; end; rgSearchDirection.Items.Strings[0]:= rsEditSearchFrw; rgSearchDirection.Items.Strings[1]:= rsEditSearchBack; end; end. doublecmd-0.9.8/src/feditsearch.lrt0000644000175000001440000000125712754641025016334 0ustar alexxusersTFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION=&Search for: TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION=&Replace with: TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION=Option TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION=C&ase sensitivity TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION=&Whole words only TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION=Selected &text only TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION=S&earch from caret TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION=&Regular expressions TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION=Direction TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION=&OK TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION=&Cancel doublecmd-0.9.8/src/feditsearch.lfm0000644000175000001440000001377412754667446016337 0ustar alexxusersobject frmEditSearchReplace: TfrmEditSearchReplace Left = 606 Height = 255 Top = 251 Width = 385 ActiveControl = cbSearchText AutoSize = True BorderIcons = [] ChildSizing.TopBottomSpacing = 6 ClientHeight = 255 ClientWidth = 385 Constraints.MinWidth = 385 OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnShow = FormShow Position = poOwnerFormCenter SessionProperties = 'Left;Top;Width;Height' LCLVersion = '1.6.0.4' object lblSearchFor: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrCenter Left = 12 Height = 14 Top = 15 Width = 66 BorderSpacing.Left = 12 Caption = '&Search for:' FocusControl = cbSearchText ParentColor = False end object lblReplaceWith: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrCenter Left = 12 Height = 14 Top = 41 Width = 80 BorderSpacing.Left = 12 Caption = '&Replace with:' FocusControl = cbReplaceText ParentColor = False end object cbSearchText: TComboBox AnchorSideLeft.Control = lblSearchFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 84 Height = 20 Top = 12 Width = 293 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 8 ItemHeight = 14 TabOrder = 0 end object gbSearchOptions: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom Left = 12 Height = 133 Top = 70 Width = 162 AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Caption = 'Option' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 115 ClientWidth = 158 TabOrder = 2 object cbSearchCaseSensitive: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = gbSearchOptions Left = 8 Height = 19 Top = 6 Width = 117 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 = 131 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 = 134 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 = 134 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 = 144 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Regular expressions' TabOrder = 4 end end object rgSearchDirection: TRadioGroup AnchorSideLeft.Control = gbSearchOptions AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbSearchText AnchorSideRight.Side = asrBottom Left = 180 Height = 70 Top = 70 Width = 197 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 = 52 ClientWidth = 193 Items.Strings = ( '&Forward' '&Backward' ) TabOrder = 3 end object cbReplaceText: TComboBox AnchorSideLeft.Control = lblReplaceWith AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 98 Height = 20 Top = 38 Width = 279 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 8 ItemHeight = 14 TabOrder = 1 end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSearchOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 28 Top = 213 Width = 373 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False OKButton.OnClick = btnOKClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.Caption = '&Cancel' CancelButton.DefaultCaption = False TabOrder = 4 Spacing = 12 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-0.9.8/src/feditor.pas0000644000175000001440000007033013517264305015467 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Build-in Editor using SynEdit and his Highlighters 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 . 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, ComCtrls, SynEditSearch, SynEditHighlighter, uDebug, uOSForms, uShowForm, types, Graphics, uFormCommands, uHotkeyManager, LCLVersion, SynPluginMultiCaret; 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; 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; actSaveAll: TAction; StatusBar: TStatusBar; Editor: TSynEdit; miHighlight: TMenuItem; actEditFind: TAction; actEditRplc: TAction; actConfHigh: TAction; miDiv: TMenuItem; miConfHigh: TMenuItem; tbToolBar: TToolBar; 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 } bChanged:Boolean; bNoName: Boolean; bSearchBackwards:Boolean; bSearchCaseSensitive:Boolean; bSearchFromCaret:Boolean; bSearchSelectionOnly:Boolean; bSearchWholeWords:Boolean; bSearchRegExp:Boolean; FFileName: String; sSearchText, sReplaceText:String; sEncodingIn, sEncodingOut, sOriginalText: String; FWaitData: TWaitData; 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); public { Public declarations } SynEditSearch: TSynEditSearch; { Function CreateNewTab:Integer; // return tab number Function OpenFileNewTab(const sFileName:String):Integer; } destructor Destroy; 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 DoSearchReplaceText(AReplace: boolean; ABackwards: boolean); procedure ShowSearchReplaceDialog(AReplace: boolean); 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, fEditSearch, uGlobs, fOptions, DCClassesUtf8, uOSUtils, uConvEncoding, fOptionsToolsEditor, uDCUtils, uClipboard; 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; EncodingsList: TStringList; HMEditor: THMForm; 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.Name:='miHigh'+IntToStr(i); mi.Enabled:=True; mi.OnClick:=@SetHighLighter; miHighlight.Add(mi); end; // 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; // if we already search text then use last searched text if not gFirstTextSearch then begin if glsSearchHistory.Count > 0 then sSearchText:= glsSearchHistory[0]; 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; 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>MIN_FONT_SIZE_EDITOR) 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 EncodingUCS2LE) and (sEncodingIn <> EncodingUCS2BE) 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; bChanged := False; bNoname := False; UpdateStatus; end; function TfrmEditor.SaveFile(const aFileName: String): Boolean; var TextOut: String; Encoding: String; Writer: TFileStreamEx; begin Result := False; try Writer := TFileStreamEx.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 = EncodingUCS2LE) then Writer.WriteBuffer(UTF16LEBOM, SizeOf(UTF16LEBOM)) else if (Encoding = EncodingUCS2BE) then Writer.WriteBuffer(UTF16BEBOM, SizeOf(UTF16BEBOM)); end else begin TextOut := EmptyStr; if (Encoding = EncodingUCS2LE) then TextOut := UTF16LEBOM else if (Encoding = EncodingUCS2BE) 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; 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; end; procedure TfrmEditor.SetFileName(const AValue: String); begin if FFileName = AValue then Exit; FFileName := AValue; Caption := FFileName; end; destructor TfrmEditor.Destroy; begin LastEditorUsedForConfiguration := nil; HotMan.UnRegister(Self); inherited Destroy; if Assigned(FWaitData) then FWaitData.Done; 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 inherited; bChanged:=True; UpdateStatus; end; procedure TfrmEditor.UpdateStatus; begin if bChanged then StatusBar.Panels[0].Text:='*' else StatusBar.Panels[0].Text:=''; StatusBar.Panels[1].Text:=Format('%d:%d',[Editor.CaretX, Editor.CaretY]); // StatusBar.Panels[2].Text:=IntToStr(Length(Editor.Lines.Text)); end; procedure TfrmEditor.SetEncodingIn(Sender: TObject); begin sEncodingIn:= (Sender as TMenuItem).Caption; sEncodingOut:= sEncodingIn; ChooseEncoding(miEncodingOut, sEncodingOut); Editor.Lines.Text:= ConvertEncoding(sOriginalText, sEncodingIn, EncodingUTF8); end; procedure TfrmEditor.SetEncodingOut(Sender: TObject); begin sEncodingOut:= (Sender as TMenuItem).Caption; end; procedure TfrmEditor.EditorStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin inherited; UpdateStatus; end; procedure TfrmEditor.UpdateHighlighter(Highlighter: TSynCustomHighlighter); begin dmHighl.SetHighlighter(Editor, Highlighter); StatusBar.Panels[3].Text:= Highlighter.LanguageName; end; procedure TfrmEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= False; if bChanged then case msgYesNoCancel(Format(rsMsgFileChangedSave,[FileName])) of mmrYes: cm_FileSave(['']); mmrNo: bChanged:= False; else Exit; end; CanClose:= True; end; procedure TfrmEditor.DoSearchReplaceText(AReplace: boolean; ABackwards: boolean); var Options: TSynSearchOptions; begin Statusbar.SimpleText := ''; if AReplace then Options := [ssoPrompt, ssoReplace, ssoReplaceAll] else Options := []; if ABackwards then Include(Options, ssoBackwards); if bSearchCaseSensitive then Include(Options, ssoMatchCase); if not bSearchFromCaret then Include(Options, ssoEntireScope); if bSearchSelectionOnly then Include(Options, ssoSelectedOnly); if bSearchWholeWords then Include(Options, ssoWholeWord); if bSearchRegExp then Include(Options, ssoRegExpr); try if Editor.SearchReplace(sSearchText, sReplaceText, Options) = 0 then begin if ssoBackwards in Options then Editor.BlockEnd := Editor.BlockBegin else Editor.BlockBegin := Editor.BlockEnd; Editor.CaretXY := Editor.BlockBegin; msgOK(Format(rsViewNotFound, ['"' + sSearchText + '"'])); end; except on E: Exception do msgError(E.Message); end; end; procedure TfrmEditor.ShowSearchReplaceDialog(AReplace: boolean); var dlg: TfrmEditSearchReplace; begin // Statusbar.SimpleText := ''; dlg := TfrmEditSearchReplace.Create(Self, AReplace); with dlg do try // assign search options SearchBackwards := bSearchBackwards; SearchCaseSensitive := bSearchCaseSensitive; SearchFromCursor := bSearchFromCaret; SearchInSelectionOnly := bSearchSelectionOnly; SearchRegExp := bSearchRegExp; // start with last search text SearchText := sSearchText; { if fSearchTextAtCaret then begin} // if something is selected search for that text if Editor.SelAvail and (Editor.BlockBegin.Y = Editor.BlockEnd.Y) then SearchText := Editor.SelText else SearchText := Editor.GetWordAtRowCol(Editor.CaretXY); // end; SearchTextHistory := glsSearchHistory.Text; if AReplace then with dlg as TfrmEditSearchReplace do begin ReplaceText := sReplaceText; ReplaceTextHistory := glsReplaceHistory.Text; end; SearchWholeWords := bSearchWholeWords; if ShowModal = mrOK then begin bSearchBackwards := SearchBackwards; bSearchCaseSensitive := SearchCaseSensitive; bSearchFromCaret := SearchFromCursor; bSearchSelectionOnly := SearchInSelectionOnly; bSearchWholeWords := SearchWholeWords; bSearchRegExp := SearchRegExp; sSearchText := SearchText; glsSearchHistory.Text := SearchTextHistory; if AReplace then with dlg as TfrmEditSearchReplace do begin sReplaceText := ReplaceText; glsReplaceHistory.Text := ReplaceTextHistory; end; // bSearchFromCaret := gbSearchFromCaret; if sSearchText <> '' then begin DoSearchReplaceText(AReplace, bSearchBackwards); bSearchFromCaret:= True; gFirstTextSearch:= False; end; end; finally FreeAndNil(dlg); end; end; procedure TfrmEditor.cm_FileReload(const Params: array of string); begin if bChanged then begin if not msgYesNo(rsMsgFileReloadWarning) then Exit; end; OpenFile(FFileName); end; procedure TfrmEditor.cm_EditFind(const Params: array of string); begin ShowSearchReplaceDialog(False); end; procedure TfrmEditor.cm_EditFindNext(const Params:array of string); begin if gFirstTextSearch then begin ShowSearchReplaceDialog(False); Exit; end; if sSearchText <> '' then begin DoSearchReplaceText(False, bSearchBackwards); bSearchFromCaret:= True; end; end; procedure TfrmEditor.cm_EditFindPrevious(const Params: array of string); begin if gFirstTextSearch then begin bSearchBackwards:=True; ShowSearchReplaceDialog(False); Exit; end; if sSearchText <> '' then begin Editor.SelEnd:=Editor.SelStart; DoSearchReplaceText(False, True); bSearchFromCaret:= True; 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; end; procedure TfrmEditor.cm_EditLineEndCrLf(const Params:array of string); begin Editor.Lines.TextLineBreakStyle:= tlbsCRLF; end; procedure TfrmEditor.cm_EditLineEndLf(const Params:array of string); begin Editor.Lines.TextLineBreakStyle:= tlbsLF; 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; bChanged:= False; 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:= '*.*'; 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); bChanged:=False; UpdateStatus; end; end; procedure TfrmEditor.cm_FileSaveAs(const Params:array of string); var Highlighter: TSynCustomHighlighter; begin dmComData.SaveDialog.FileName := FileName; dmComData.SaveDialog.Filter:='*.*'; // rewrite for highlighter if not dmComData.SaveDialog.Execute then Exit; FileName := dmComData.SaveDialog.FileName; SaveFile(FileName); bChanged:=False; 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(True); 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 if SameText(NormalizeEncoding(mnuMenuItem.Items[I].Caption), sEncoding) then mnuMenuItem.Items[I].Checked:= True; end; initialization TFormCommands.RegisterCommandsForm(TfrmEditor, HotkeysCategory, @rsHotkeyCategoryEditor); end. doublecmd-0.9.8/src/feditor.lrj0000644000175000001440000001500713372161555015475 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":231153436,"name":"tfrmeditor.actsaveall.caption","sourcebytes":[83,97,38,118,101,32,65,108,108],"value":"Sa&ve All"}, {"hash":147276732,"name":"tfrmeditor.actsaveall.hint","sourcebytes":[83,97,118,101,32,65,108,108],"value":"Save All"}, {"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-0.9.8/src/feditor.lfm0000644000175000001440000006266113506102431015457 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.0.2.0' object StatusBar: TStatusBar Left = 0 Height = 23 Top = 437 Width = 640 Panels = < item Width = 50 end item Width = 150 end item Width = 50 end item Width = 50 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.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 = clNone 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 = clWhite MarkupInfo.Foreground = clGray 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: TToolBar Left = 0 Height = 26 Top = 0 Width = 640 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 actSaveAll: TAction Category = 'File' Caption = 'Sa&ve All' HelpType = htKeyword Hint = 'Save All' 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 end doublecmd-0.9.8/src/fdiffer.pas0000644000175000001440000011444613604734735015455 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Internal diff and merge tool Copyright (C) 2010-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 fDiffer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Dialogs, Menus, ComCtrls, ActnList, ExtCtrls, EditBtn, Buttons, SynEdit, uSynDiffControls, uPariterControls, uDiffOND, uFormCommands, uHotkeyManager, uOSForms, uBinaryDiffViewer, uShowForm; type { TStatusBar } TStatusBar = class(ComCtrls.TStatusBar) protected procedure InvalidatePanel(PanelIndex: Integer; PanelParts: TPanelParts); override; end; { TfrmDiffer } TfrmDiffer = class(TAloneForm, IFormCommands) actBinaryCompare: TAction; actCopyLeftToRight: TAction; actCopyRightToLeft: TAction; actExit: TAction; actEditCut: TAction; actEditCopy: TAction; actEditDelete: TAction; actEditUndo: TAction; actEditRedo: 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; ImageList: TImageList; MainMenu: TMainMenu; miAutoCompare: TMenuItem; miDivider10: TMenuItem; miLineDifferences: TMenuItem; miEncodingRight: TMenuItem; miEncodingLeft: TMenuItem; miAbout: TMenuItem; mnuEncoding: TMenuItem; miSaveRightAs: TMenuItem; miSaveLeftAs: TMenuItem; miCopyContext: TMenuItem; miCutContext: TMenuItem; miDeleteContext: TMenuItem; miEditSelectAll: TMenuItem; miDivider9: 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; ToolBar: TToolBar; 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; 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 FormRestoreProperties(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); procedure FormShow(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; FWaitData: TWaitData; FCommands: TFormCommands; procedure ShowIdentical; procedure Clear(bLeft, bRight: Boolean); procedure BuildHashList(bLeft, bRight: Boolean); procedure ChooseEncoding(SynDiffEdit: TSynDiffEdit); 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; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; published procedure cm_CopyLeftToRight(const Params: array of string); procedure cm_CopyRightToLeft(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 LCLType, LazFileUtils, LConvEncoding, SynEditTypes, uHash, uLng, uGlobs, uShowMsg, DCClassesUtf8, dmCommonData, DCOSUtils, uConvEncoding; const HotkeysCategory = 'Differ'; procedure ShowDiffer(const FileNameLeft, FileNameRight: String; WaitData: TWaitData = nil; Modal: Boolean = False); var Differ: TfrmDiffer; begin Differ := TfrmDiffer.Create(Application); with Differ do begin FWaitData := WaitData; edtFileNameLeft.Text:= FileNameLeft; edtFileNameRight.Text:= FileNameRight; FShowIdentical:= actAutoCompare.Checked; if not (FileIsText(FileNameLeft) and FileIsText(FileNameRight)) then actBinaryCompare.Execute else begin OpenFileLeft(FileNameLeft); OpenFileRight(FileNameRight); if actAutoCompare.Checked then actStartCompare.Execute; end; if actBinaryCompare.Checked or (FShowIdentical = False) then begin if Modal then ShowModal else if (WaitData = nil) then ShowOnTop else WaitData.ShowOnTop(Differ); end; end; end; { TStatusBar } procedure TStatusBar.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; { TfrmDiffer } procedure TfrmDiffer.actStartCompareExecute(Sender: TObject); var I: Integer; LineNumberLeft, LineNumberRight: PtrInt; begin 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 try Inc(ScrollLock); Screen.Cursor := crHourGlass; 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 Exit; actStartCompare.Enabled := False; actCancelCompare.Enabled := True; Diff.Execute( PInteger(@HashListLeft[0]), PInteger(@HashListRight[0]), Length(HashListLeft), Length(HashListRight) ); 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; 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 FShowIdentical:= (modifies = 0) and (adds = 0) and (deletes = 0); if FShowIdentical then ShowIdentical else begin FShowIdentical:= False; Application.QueueAsyncCall(@ShowFirstDifference, 0); end; end; end; finally SynDiffEditLeft.FinishCompare; SynDiffEditRight.FinishCompare; Screen.Cursor := crDefault; actStartCompare.Enabled := True; actCancelCompare.Enabled := False; Dec(ScrollLock); end; if actLineDifferences.Checked then begin SynDiffEditLeft.Highlighter:= SynDiffHighlighterLeft; SynDiffEditRight.Highlighter:= SynDiffHighlighterRight; end; //mnuEdit.Enabled := true; 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 SaveToFile(SynDiffEditLeft, dmComData.SaveDialog.FileName); edtFileNameLeft.FileName:= dmComData.SaveDialog.FileName; end; end; procedure TfrmDiffer.actSaveRightAsExecute(Sender: TObject); begin dmComData.SaveDialog.FileName:= edtFileNameRight.FileName; if dmComData.SaveDialog.Execute then begin SaveToFile(SynDiffEditRight, dmComData.SaveDialog.FileName); 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; 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 BinaryDiffList.Clear; BinaryViewerLeft.FileName:= edtFileNameLeft.Text; BinaryViewerRight.FileName:= edtFileNameRight.Text; 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; if Visible and actAutoCompare.Checked then 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.Visible:= False; BinaryViewerRight.Visible:= False; BinaryViewerLeft.Parent:= pnlLeft; BinaryViewerRight.Parent:= pnlRight; BinaryViewerLeft.Align:= alClient; BinaryViewerRight.Align:= alClient; BinaryViewerLeft.SecondViewer:= BinaryViewerRight; BinaryViewerRight.SecondViewer:= BinaryViewerLeft; FontOptionsToFont(gFonts[dcfEditor], SynDiffEditLeft.Font); FontOptionsToFont(gFonts[dcfEditor], SynDiffEditRight.Font); FontOptionsToFont(gFonts[dcfViewer], BinaryViewerLeft.Font); FontOptionsToFont(gFonts[dcfViewer], BinaryViewerRight.Font); // Initialize property storage with InitPropStorage(Self) do begin OnRestoreProperties:= @FormRestoreProperties; end; // 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.FormRestoreProperties(Sender: TObject); begin // Initialize mode actKeepScrollingExecute(actKeepScrolling); actPaintBackgroundExecute(actPaintBackground); 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.FormShow(Sender: TObject); begin if actBinaryCompare.Checked and actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.BinaryCompareFinish; begin BinaryCompare:= nil; BinaryDiffIndex:= -1; 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 FShowIdentical:= (BinaryDiffList.Count = 0); if FShowIdentical then ShowIdentical else begin FShowIdentical:= False; Application.QueueAsyncCall(@ShowFirstDifference, 0); end; end; end; procedure TfrmDiffer.ShowIdentical; var Message: String; begin Message:= rsDiffFilesIdentical + LineEnding + LineEnding; Message+= edtFileNameLeft.Text + LineEnding + edtFileNameRight.Text; if MessageDlg(rsToolDiffer, Message, mtWarning, [mbClose, mbCancel], 0, mbClose) = mrClose then Close else begin FShowIdentical:= False; end; end; procedure TfrmDiffer.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; 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); for I:= iStart to iFinish do SynDiffEditRight.Lines[I]:= SynDiffEditLeft.Lines[I]; 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); for I:= iStart to iFinish do SynDiffEditLeft.Lines[I]:= SynDiffEditRight.Lines[I]; 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 SaveToFile(SynDiffEditLeft, edtFileNameLeft.FileName); end; procedure TfrmDiffer.cm_SaveRight(const Params: array of string); begin SaveToFile(SynDiffEditRight, edtFileNameRight.FileName); 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.BuildHashList(bLeft, bRight: Boolean); var I: Integer; begin if bLeft then begin SetLength(HashListLeft, SynDiffEditLeft.Lines.Count); for I := 0 to SynDiffEditLeft.Lines.Count - 1 do HashListLeft[I]:= Integer(HashString(SynDiffEditLeft.Lines[I], actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; if bRight then begin SetLength(HashListRight, SynDiffEditRight.Lines.Count); for I := 0 to SynDiffEditRight.Lines.Count - 1 do HashListRight[I]:= Integer(HashString(SynDiffEditRight.Lines[I], actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; actStartCompare.Enabled := (Length(HashListLeft) > 0) and (Length(HashListRight) > 0); 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; 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 fsFileStream: TFileStreamEx = nil; begin try fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try SynDiffEdit.BeginUpdate; SynDiffEdit.Lines.LoadFromStream(fsFileStream); if Length(SynDiffEdit.Encoding) = 0 then begin SynDiffEdit.Encoding:= DetectEncoding(SynDiffEdit.Lines.Text); ChooseEncoding(SynDiffEdit); end; SynDiffEdit.Lines.Text:= ConvertEncoding(SynDiffEdit.Lines.Text, SynDiffEdit.Encoding, EncodingUTF8); finally SynDiffEdit.EndUpdate; FreeAndNil(fsFileStream); end; except on E: Exception do begin msgError(E.Message + LineEnding + FileName); end; end; end; procedure TfrmDiffer.SaveToFile(SynDiffEdit: TSynDiffEdit; const FileName: String); var slStringList: TStringListEx; begin slStringList:= TStringListEx.Create; try slStringList.Assign(SynDiffEdit.Lines); // remove fake lines slStringList.RemoveFake; // restore encoding slStringList.Text:= ConvertEncoding(slStringList.Text, EncodingUTF8, SynDiffEdit.Encoding); try // save to file slStringList.SaveToFile(FileName); SynDiffEdit.Modified:= False; // needed for the undo stack except on EFCreateError do begin msgError(rsMsgErrECreate + ': ' + FileName); end; on EFOpenError do begin msgError(rsMsgErrEOpen + ': ' + FileName); end; on EWriteError do begin msgError(rsMsgErrEWrite + ': ' + FileName); end; end; finally slStringList.Free; end; end; procedure TfrmDiffer.OpenFileLeft(const FileName: String); begin if not mbFileExists(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerLeft.FileName:= FileName end else try Clear(True, False); LoadFromFile(SynDiffEditLeft, FileName); BuildHashList(True, False); SynDiffEditLeft.Repaint; except on EFOpenError do msgWarning(rsMsgErrEOpen + ' ' + FileName); end; end; procedure TfrmDiffer.OpenFileRight(const FileName: String); begin if not mbFileExists(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerRight.FileName:= FileName end else try Clear(False, True); LoadFromFile(SynDiffEditRight, FileName); BuildHashList(False, True); SynDiffEditRight.Repaint; except on EFOpenError do msgWarning(rsMsgErrEOpen + ' ' + FileName); 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; initialization TFormCommands.RegisterCommandsForm(TfrmDiffer, HotkeysCategory, @rsHotkeyCategoryDiffer); end. doublecmd-0.9.8/src/fdiffer.lrt0000644000175000001440000000554511752246222015461 0ustar alexxusersTFRMDIFFER.CAPTION=Compare files TFRMDIFFER.BTNLEFTENCODING.HINT=Encoding TFRMDIFFER.BTNRIGHTENCODING.HINT=Encoding TFRMDIFFER.MNUFILE.CAPTION=&File TFRMDIFFER.MIDIVIDER7.CAPTION=- TFRMDIFFER.MIDIVIDER6.CAPTION=- TFRMDIFFER.MNUEDIT.CAPTION=&Edit TFRMDIFFER.MIDIVIDER8.CAPTION=- TFRMDIFFER.MIDIVIDER9.CAPTION=- TFRMDIFFER.MNUOPTIONS.CAPTION=&Options TFRMDIFFER.MIDIVIDER10.CAPTION=- TFRMDIFFER.MIDIVIDER4.CAPTION=- TFRMDIFFER.MIDIVIDER3.CAPTION=- TFRMDIFFER.MNUACTIONS.CAPTION=&Actions TFRMDIFFER.MIDIVIDER1.CAPTION=- TFRMDIFFER.MIDIVIDER2.CAPTION=- TFRMDIFFER.MIDIVIDER5.CAPTION=- TFRMDIFFER.MNUENCODING.CAPTION=En&coding TFRMDIFFER.MIENCODINGLEFT.CAPTION=&Left TFRMDIFFER.MIENCODINGRIGHT.CAPTION=&Right TFRMDIFFER.ACTSAVE.CAPTION=Save TFRMDIFFER.ACTSAVE.HINT=Save TFRMDIFFER.ACTSAVEAS.CAPTION=Save as... TFRMDIFFER.ACTSAVEAS.HINT=Save as... TFRMDIFFER.ACTSTARTCOMPARE.CAPTION=Compare TFRMDIFFER.ACTSTARTCOMPARE.HINT=Compare TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION=Last Difference TFRMDIFFER.ACTLASTDIFFERENCE.HINT=Last Difference TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION=Next Difference TFRMDIFFER.ACTNEXTDIFFERENCE.HINT=Next Difference TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION=Previous Difference TFRMDIFFER.ACTPREVDIFFERENCE.HINT=Previous Difference TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION=First Difference TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT=First Difference TFRMDIFFER.ACTIGNORECASE.CAPTION=Ignore Case TFRMDIFFER.ACTIGNOREWHITESPACE.CAPTION=Ignore Blanks TFRMDIFFER.ACTKEEPSCROLLING.CAPTION=Keep Scrolling TFRMDIFFER.ACTCANCELCOMPARE.CAPTION=Cancel TFRMDIFFER.ACTCANCELCOMPARE.HINT=Cancel TFRMDIFFER.ACTBINARYCOMPARE.CAPTION=Binary Mode TFRMDIFFER.ACTPAINTBACKGROUND.CAPTION=Paint Background TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION=Copy Block Right TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT=Copy Block Right TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION=Copy Block Left TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT=Copy Block Left TFRMDIFFER.ACTSAVELEFT.CAPTION=Save Left TFRMDIFFER.ACTSAVELEFT.HINT=Save Left TFRMDIFFER.ACTSAVERIGHT.CAPTION=Save Right TFRMDIFFER.ACTSAVERIGHT.HINT=Save Right TFRMDIFFER.ACTRELOAD.CAPTION=&Reload TFRMDIFFER.ACTRELOAD.HINT=Reload TFRMDIFFER.ACTOPENLEFT.CAPTION=Open Left... TFRMDIFFER.ACTOPENRIGHT.CAPTION=Open Right... TFRMDIFFER.ACTEXIT.CAPTION=E&xit TFRMDIFFER.ACTEDITCUT.CAPTION=Cut TFRMDIFFER.ACTEDITCOPY.CAPTION=Copy TFRMDIFFER.ACTEDITPASTE.CAPTION=Paste TFRMDIFFER.ACTEDITDELETE.CAPTION=Delete TFRMDIFFER.ACTEDITSELECTALL.CAPTION=Select &All TFRMDIFFER.ACTEDITREDO.CAPTION=Redo TFRMDIFFER.ACTEDITUNDO.CAPTION=Undo TFRMDIFFER.ACTSAVELEFTAS.CAPTION=Save Left As... TFRMDIFFER.ACTSAVELEFTAS.HINT=Save Left As... TFRMDIFFER.ACTSAVERIGHTAS.CAPTION=Save Right As... TFRMDIFFER.ACTSAVERIGHTAS.HINT=Save Right As... TFRMDIFFER.ACTABOUT.CAPTION=About TFRMDIFFER.ACTLINEDIFFERENCES.CAPTION=Line Differences TFRMDIFFER.ACTAUTOCOMPARE.CAPTION=Auto Compare TFRMDIFFER.MISEPARATOR1.CAPTION=- TFRMDIFFER.MISEPARATOR2.CAPTION=- doublecmd-0.9.8/src/fdiffer.lfm0000644000175000001440000046353013604734735015451 0ustar alexxusersobject frmDiffer: TfrmDiffer Left = 200 Height = 370 Top = 140 Width = 760 Caption = 'Compare files' ClientHeight = 350 ClientWidth = 760 Menu = MainMenu OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnResize = FormResize OnShow = FormShow SessionProperties = 'actAutoCompare.Checked;actIgnoreCase.Checked;actIgnoreWhiteSpace.Checked;actKeepScrolling.Checked;actLineDifferences.Checked;actPaintBackground.Checked;Height;Left;Top;Width;WindowState' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '1.0.1.3' object ToolBar: TToolBar Left = 0 Height = 22 Top = 0 Width = 760 AutoSize = True ButtonHeight = 20 ButtonWidth = 20 Images = ImageList ParentShowHint = False ShowHint = True TabOrder = 0 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 Top = 2 Width = 4 Style = tbsDivider end object btnCompare: TToolButton Left = 65 Top = 2 Action = actStartCompare end object btnLast: TToolButton Left = 153 Top = 2 Action = actLastDifference end object btnNext: TToolButton Left = 109 Top = 2 Action = actNextDifference end object btnPrev: TToolButton Left = 129 Top = 2 Action = actPrevDifference end object btnFirst: TToolButton Left = 173 Top = 2 Action = actFirstDifference end object Divider2: TToolButton Left = 105 Top = 2 Width = 4 Style = tbsDivider end object Divider3: TToolButton Left = 149 Top = 2 Width = 4 Style = tbsDivider end object btnCancelCompare: TToolButton Left = 85 Top = 2 Action = actCancelCompare end object Divider4: TToolButton Left = 193 Top = 2 Width = 4 Style = tbsDivider end object btnReload: TToolButton Left = 1 Top = 2 Action = actReload end object btnCopyRightToLeft: TToolButton Left = 197 Top = 2 Action = actCopyRightToLeft end object btnCopyLeftToRight: TToolButton Left = 217 Top = 2 Action = actCopyLeftToRight end object Divider5: TToolButton Left = 237 Top = 2 Width = 8 Style = tbsSeparator end end object pnlLeft: TPanel Left = 0 Height = 305 Top = 22 Width = 379 Align = alLeft BevelOuter = bvNone ClientHeight = 305 ClientWidth = 379 TabOrder = 1 object pnlLeftBox: TPanel Left = 0 Height = 22 Top = 0 Width = 379 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 22 ClientWidth = 379 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameLeft: TFileNameEdit AnchorSideLeft.Control = btnLeftEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 21 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 = 21 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00858A8802858A8808858A8808858A8808858A8808858A8808858A8808858A 8808858A8808858A8808858A8808858A8803FFFFFF00FFFFFF00FFFFFF00858A 8851868B89EF858A88FC858A88FC858A88FC858A88FC858A88FC858A88FC858A 88FC858A88FC858A88FC858A88FC868B89F4868C896AFFFFFF00FFFFFF00888D 8BD9C8CCCBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DD DBFFD9DDDBFFD9DDDBFFD9DDDBFFCBCFCEFF868B89F3FFFFFF00FFFFFF00878C 8AECD5D8D7FFB7BEBBFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB7BEBBFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFBAC0BEFFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3 C0FFBCC3C0FFBCC3C0FFBAC0BEFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF4F5F5FFF5F7F7FFF5F8F7FFF6F8F8FFF6F8F8FFF6F8F8FFF6F8 F8FFF6F8F8FFF6F8F8FFF4F5F5FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF3F4F4FFE2E7E4FFE5EAE7FFE8ECEAFFEBEFECFF969997FF7678 77FF7E807FFFE0E4E2FFF3F4F4FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D9D7FFEBEEEDFFE1E6E4FFE4E9E6FFE7EBE8FFE9EDEBFF3B3C3CFFE3E6 E4FF2B2C2CFFD8DDDAFFEBEEEEFFDBDEDDFF858A88FFFFFFFF00FFFFFF00878C 8AECD9DDDBFFE5E7E7FFE0E5E2FFE2E7E4FFE4E9E6FFE6EAE8FF9A9C9BFF696C 6AFF232323FFD7DBD9FFE5E7E7FFE0E3E2FF858A88FFFFFFFF00FFFFFF00888D 8BECDDE0DFFFE0E3E3FFDDE3E0FFE0E5E2FFE1E7E4FFE3E8E5FF9C9F9DFF6E71 6FFF393B3AFFE2E7E4FFE0E3E3FFE5E7E7FF858A88FFFFFFFF00FFFFFF00888D 8BECE0E3E2FFD9DDDDFFDBE1DEFFDDE3E0FFDEE4E1FFE0E5E2FFDCE2DFFFBABF BCFFD5DAD7FFDFE4E1FFD9DDDDFFE9EBEBFF858A88FFFFFFFF00FFFFFF00888D 8BECE3E5E4FFD5D9D9FFD8DFDBFFDAE0DDFFDBE1DEFFDCE2DFFFDDE2DFFF6B6D 6CFF515453FFDBE2DEFFD5D9D9FFEDEEEEFF858A88FFFFFFFF00FFFFFF00888D 8BECE4E7E5FFD7DBDBFFD7DADAFFD8DCDBFFD8DCDBFFD8DCDBFFD8DDDCFFD8DD DCFFD8DCDBFFD8DCDBFFD9DDDCFFEFF0F0FF858A88FFFFFFFF00FFFFFF008A8E 8CD7D4D7D6FFECEEEDFFEEF0EFFFF1F2F2FFF3F4F4FFF5F6F6FFF7F7F7FFF7F7 F7FFF5F6F6FFF3F4F4FFF1F2F2FFDEE0E0FF888C8AF1FFFFFF00FFFFFF00858A 8849888D8BEB858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF878C8AF1878C8A61FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnLeftEncodingClick end object btnLeftSave: TSpeedButton AnchorSideLeft.Control = pnlLeftBox AnchorSideTop.Control = pnlLeftBox Left = 0 Height = 22 Top = 0 Width = 23 Action = actSaveLeft Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end object btnLeftSaveAs: TSpeedButton AnchorSideLeft.Control = btnLeftSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftBox Left = 23 Height = 22 Top = 0 Width = 23 Action = actSaveLeftAs Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000004864725A3654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end end end object Splitter: TSplitter Left = 379 Height = 305 Top = 22 Width = 5 end object pnlRight: TPanel Left = 384 Height = 305 Top = 22 Width = 376 Align = alClient BevelOuter = bvNone ClientHeight = 305 ClientWidth = 376 TabOrder = 3 object pnlRightBox: TPanel Left = 0 Height = 22 Top = 0 Width = 376 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 22 ClientWidth = 376 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameRight: TFileNameEdit AnchorSideLeft.Control = btnRightEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 21 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 = 21 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00858A8802858A8808858A8808858A8808858A8808858A8808858A8808858A 8808858A8808858A8808858A8808858A8803FFFFFF00FFFFFF00FFFFFF00858A 8851868B89EF858A88FC858A88FC858A88FC858A88FC858A88FC858A88FC858A 88FC858A88FC858A88FC858A88FC868B89F4868C896AFFFFFF00FFFFFF00888D 8BD9C8CCCBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DD DBFFD9DDDBFFD9DDDBFFD9DDDBFFCBCFCEFF868B89F3FFFFFF00FFFFFF00878C 8AECD5D8D7FFB7BEBBFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB7BEBBFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFBAC0BEFFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3 C0FFBCC3C0FFBCC3C0FFBAC0BEFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF4F5F5FFF5F7F7FFF5F8F7FFF6F8F8FFF6F8F8FFF6F8F8FFF6F8 F8FFF6F8F8FFF6F8F8FFF4F5F5FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF3F4F4FFE2E7E4FFE5EAE7FFE8ECEAFFEBEFECFF969997FF7678 77FF7E807FFFE0E4E2FFF3F4F4FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D9D7FFEBEEEDFFE1E6E4FFE4E9E6FFE7EBE8FFE9EDEBFF3B3C3CFFE3E6 E4FF2B2C2CFFD8DDDAFFEBEEEEFFDBDEDDFF858A88FFFFFFFF00FFFFFF00878C 8AECD9DDDBFFE5E7E7FFE0E5E2FFE2E7E4FFE4E9E6FFE6EAE8FF9A9C9BFF696C 6AFF232323FFD7DBD9FFE5E7E7FFE0E3E2FF858A88FFFFFFFF00FFFFFF00888D 8BECDDE0DFFFE0E3E3FFDDE3E0FFE0E5E2FFE1E7E4FFE3E8E5FF9C9F9DFF6E71 6FFF393B3AFFE2E7E4FFE0E3E3FFE5E7E7FF858A88FFFFFFFF00FFFFFF00888D 8BECE0E3E2FFD9DDDDFFDBE1DEFFDDE3E0FFDEE4E1FFE0E5E2FFDCE2DFFFBABF BCFFD5DAD7FFDFE4E1FFD9DDDDFFE9EBEBFF858A88FFFFFFFF00FFFFFF00888D 8BECE3E5E4FFD5D9D9FFD8DFDBFFDAE0DDFFDBE1DEFFDCE2DFFFDDE2DFFF6B6D 6CFF515453FFDBE2DEFFD5D9D9FFEDEEEEFF858A88FFFFFFFF00FFFFFF00888D 8BECE4E7E5FFD7DBDBFFD7DADAFFD8DCDBFFD8DCDBFFD8DCDBFFD8DDDCFFD8DD DCFFD8DCDBFFD8DCDBFFD9DDDCFFEFF0F0FF858A88FFFFFFFF00FFFFFF008A8E 8CD7D4D7D6FFECEEEDFFEEF0EFFFF1F2F2FFF3F4F4FFF5F6F6FFF7F7F7FFF7F7 F7FFF5F6F6FFF3F4F4FFF1F2F2FFDEE0E0FF888C8AF1FFFFFF00FFFFFF00858A 8849888D8BEB858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF878C8AF1878C8A61FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnRightEncodingClick end object btnRightSave: TSpeedButton AnchorSideLeft.Control = pnlRightBox AnchorSideTop.Control = pnlRightBox Left = 0 Height = 22 Top = 0 Width = 23 Action = actSaveRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end object btnRightSaveAs: TSpeedButton AnchorSideLeft.Control = btnRightSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightBox Left = 23 Height = 22 Top = 0 Width = 23 Action = actSaveRightAs Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000004864725A3654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end end end object StatusBar: TStatusBar Left = 0 Height = 23 Top = 327 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 = ImageList left = 72 top = 136 object mnuFile: TMenuItem Caption = '&File' object miOpenLeft: TMenuItem Action = actOpenLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8002D88 D8F72D87D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F72C86D800FFFFFF00FFFFFF00338ED9FBDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7 F3FF74D5F3FF70D3F2FFC2EAF8FF3594DAFFFFFFFF00FFFFFF003594DAF7EFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8 F4FF4DD4F3FF40D1F2FFCAF2FBFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDC F6FF5ED9F4FF4FD5F3FFCCF2FBFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CE D7FF8CC8CFFF86C1C6FFC9D8D6FF3594DAFFC57444E8CA7F53F137A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5 F5FF9EE5F5FF9FE5F4FFDAF3F8FF3594DAFFFDF4EEFFCA8054F935ABDAFAE8F6 FBFF70BCE7FF55AAE2FF4DA5E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFD FCFFFEFDFCFFFEFCFBFFFEFEFDFF3594DAFFEFF2E8FFCE8156FF36AADAF2F1FA FDFF94DEF5FF93DCF4FF64BCE9FF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFBF6EFFFCC8355FE35AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEA DBFFFFE9D9FFFFE7D7FFFFE5D2FFFFE2CBFFFFF7F1FFCB8555FE36B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7 D6FFFDE6D4FFFCE4D0FFFBE3CBFFFADCC2FFFEF3E8FFCC8656FE34B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7 D5FFFDE5D1FFFAE0CAFFF9DEC4FFF7D9BCFFFDF2E7FFCC8757FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4 D1FFFBE2CCFFF9DDC4FFF6D7BBFFF3D1AFFFFAEFE4FFCC8758FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3 CDFFFADFC8FFF7D9BCFFF5E9DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0 C7FFF9DCC2FFF5D3B4FFFEF9F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3 EAFFFCF2E8FFFAEFE3FFFAF2E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB 92FFD1A06CF5D09E6DF6CC965FDAC479427EB2673C09FFFFFF00 } OnClick = actOpenLeftExecute end object miOpenRight: TMenuItem Action = actOpenRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8002D88 D8F72D87D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F72C86D800FFFFFF00FFFFFF00338ED9FBDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7 F3FF74D5F3FF70D3F2FFC2EAF8FF3594DAFFFFFFFF00FFFFFF003594DAF7EFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8 F4FF4DD4F3FF40D1F2FFCAF2FBFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDC F6FF5ED9F4FF4FD5F3FFCCF2FBFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CE D7FF8CC8CFFF86C1C6FFC9D8D6FF3594DAFFC57444E8CA7F53F137A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5 F5FF9EE5F5FF9FE5F4FFDAF3F8FF3594DAFFFDF4EEFFCA8054F935ABDAFAE8F6 FBFF70BCE7FF55AAE2FF4DA5E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFD FCFFFEFDFCFFFEFCFBFFFEFEFDFF3594DAFFEFF2E8FFCE8156FF36AADAF2F1FA FDFF94DEF5FF93DCF4FF64BCE9FF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFBF6EFFFCC8355FE35AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEA DBFFFFE9D9FFFFE7D7FFFFE5D2FFFFE2CBFFFFF7F1FFCB8555FE36B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7 D6FFFDE6D4FFFCE4D0FFFBE3CBFFFADCC2FFFEF3E8FFCC8656FE34B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7 D5FFFDE5D1FFFAE0CAFFF9DEC4FFF7D9BCFFFDF2E7FFCC8757FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4 D1FFFBE2CCFFF9DDC4FFF6D7BBFFF3D1AFFFFAEFE4FFCC8758FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3 CDFFFADFC8FFF7D9BCFFF5E9DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0 C7FFF9DCC2FFF5D3B4FFFEF9F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3 EAFFFCF2E8FFFAEFE3FFFAF2E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB 92FFD1A06CF5D09E6DF6CC965FDAC479427EB2673C09FFFFFF00 } OnClick = actOpenRightExecute end object miReload: TMenuItem Action = actReload Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00A465 34A2A4653401FFFFFF00FFFFFF00A4653405A4653453A76A3ABEA66938E9A466 35FAA76A3AE4A76B3BAAA4653424FFFFFF00FFFFFF00FFFFFF00FFFFFF00A465 34FFA5673693FFFFFF00A4653454A66737EEB58055F3CEA684FFD8B697FFDBB9 99FFD3AC8AFFC2946DFCA66838F6A466355BFFFFFF00FFFFFF00FFFFFF00A567 37FEB7845BF7A56736D4B17A4EF4E3CAB4FFECDAC9FFE7D1BCFFE3C9B0FFDEBE A0FFD2AB88FFCEA582FFD3AE8EFFA66838F5A465342AFFFFFF00FFFFFF00A668 38FDF1E4D8FFD4B295FEF4E9E0FFF3E8DDFFEDDCCCFFD2AD8FFEB0784CF5A566 35FBA66939FFA66939FEA96D3DFFB0784CFFA76A3AA8FFFFFF00FFFFFF00A567 37FDF6EEE6FFF5ECE3FFF5EDE4FFE6D2C1FFB0794DF5A66938CAA4653436FFFF FF00A465346AA96B3CEDB67C4FFFA76A3AFEA56837FAFFFFFF00FFFFFF00A466 35FCF6EEE6FFEBD7C4FFEAD9C9FFA46534FEA465346AFFFFFF00FFFFFF00FFFF FF00A465340BA56635E9C9956C8DB77F53C2A46534FFA4653405FFFFFF00A465 34FCF5EDE5FFF6EDE5FFF5ECE4FFD7B79CFDA66837E0A4653410FFFFFF00FFFF FF00FFFFFF00FFFFFF00D5A47E1ACD997239A46534FCA465340CFFFFFF00A465 34F9A46534FEA46534FEA46534FDA46534FCA46534FBA46534B9A465341DA465 3418A4653418A4653418A4653418A4653418A465341CFFFFFF00FFFFFF00A465 340DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A46534A0A465 34FFAD7447F8AF774CF7AF774CF7AF784CF7A46534FFA4653408FFFFFF00A465 34FCB3794C7ECF9D762BBB835713A4653402FFFFFF00FFFFFF00A4653404A668 38C4D0AC8FFAF6EEE7FFF2E6DBFFF6EEE6FFA66A3AFBA4653409FFFFFF00A465 35FEA76A3AFBC791689DA56737E6A4653423FFFFFF00FFFFFF00FFFFFF00A465 3460A46635FFE9D7C7FFEBD8C6FFF5ECE3FFA66A3AFAA465340AFFFFFF00A668 38F3AB7041FFA96C3CFEA76A3AF5A4653475A4653419A4653445A66938CDB988 61F5EBDBCDFFF5EBE2FFF6EEE6FFF6EEE6FFA76A3AFAA465340BFFFFFF00A769 399BC09069FDC59872FFA86B3CFFA46635FFA76A3AFCB7855DF3D9BBA1FEF1E4 D8FFF2E6DBFFF3E8DDFFCEA788FDEAD8C8FFA76A3AF9A465340DFFFFFF00A465 3429A66939F5D3AD8CFFDCBD9DFFDDBEA1FFE5CBB4FFE9D3BFFFEEDDCCFFF0E2 D5FFE7D2BFFFAF774BF5A56736C0AB7143F7A46635FCA465340EFFFFFF00FFFF FF00A4653550A66838F6C09068FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB987 5FF4A56737F0A4653458FFFFFF00A4663566A46534FFA465340FFFFFFF00FFFF FF00FFFFFF00A465341DA7693A9FA76A3ADEA56736F6A76939E5A76A3ABCA465 3453A4653405FFFFFF00FFFFFF00FFFFFF00A4653479A4653410 } end object miDivider7: TMenuItem Caption = '-' end object miSaveLeft: TMenuItem Action = actSaveLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miSaveRight: TMenuItem Action = actSaveRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miSaveLeftAs: TMenuItem Action = actSaveLeftAs Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000486472003654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } OnClick = actSaveLeftAsExecute end object miSaveRightAs: TMenuItem Action = actSaveRightAs Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000486472003654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } OnClick = actSaveRightAsExecute end object miDivider6: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExit Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B7B7 B7FFAEAEAEFF3071A9FF2C6EA6FF286BA3FF2468A0FF21669EFF1D639BFF1A61 99FF175F97FF145C94FF115B93FF6C6C6CFF6C6C6CFFFFFFFF00FFFFFF00FFFF FF00FFFFFF003675ADFF86B6D8FF83B3D7FF81B2D6FF7DAFD5FF7BADD4FF79AB D3FF76AAD2FF74A8D1FF155D95FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF003C79B1FF8BB9DAFF66A2CEFF62A0CDFF5F9DCBFF5B9AC9FF5897 C8FF5495C7FF77ABD3FF196098FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00427DB5FF8FBDDCFF6CA7D0FF67A4CFFF64A1CDFF609ECCFF5C9B CAFF5999C9FF7BADD4FF1E649CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF004882BAFF93C0DDFF71ABD2FF6DA8D1FF69A5CFFF66A2CEFF629F CCFF5E9CCBFF7FB0D5FF23679FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF004E86BEFF98C3DFFF77AFD5FF73ACD3FF6FA9D2FF6BA7D0FF5BB7 E3FF54C2EDFF81B4D7FF286BA3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00538AC2FF9CC6E1FF7CB3D7FF79B1D5FF75ADD4FF71ABD2FF5FBA E4FF4BD4FFFF7CBBE0FF2E6FA7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00598EC6FFA0C9E3FF82B8D9FF7EB5D8FF7AB2D6FF77AFD5FF73AC D3FF6DABD4FF8CBADAFF3373ABFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF005E91C9FFA4CCE4FF87BBDBFF84B9DAFF80B6D8FF7CB3D7FF79B0 D5FF74ADD4FF8FBDDCFF3977AFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006395CDFFA8CFE5FF8CBFDDFF88BDDCFF85BADBFF81B7D9FF7EB4 D7FF7AB2D6FF94C1DDFF3F7CB4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006798D0FFABD1E7FF90C2DFFF8DC0DEFF8ABEDCFF87BBDBFF83B8 DAFF80B6D8FF99C4E0FF4580B8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006B9BD3FFAED4E8FFABD3E8FFAAD1E7FFA8CFE5FFA5CDE4FFA2CB E4FFA0C9E2FF9DC7E1FF4B84BCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006E9DD5FF6C9BD3FF699AD2FF6697CFFF6395CDFF6093CBFF5C90 C8FF598EC6FF558BC3FF5188C0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end end object mnuEdit: TMenuItem Caption = '&Edit' object miEditUndo: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000018A6C3691AA7C46900A0C4180000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000A0C45D66DBEAB211A6C2AE0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000A0C42243C4DBFC43C5D8FE23A6C07F00000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFE5DDAE9FE23A6C0EF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 000000000000009EC11A02ACC8FF88E7F2FE11A2C2FF00000000000000000000 00000000000005797D1100A0C4FF76EDFBFF00A0C4FF000000000000000000A0 C4300099B95000A0C4C96DE6F5FF76E2EFFF19A3C1FF00000000000000000000 000005797D1100A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0F800000000000000000579 7D1100A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFF40000000005797E1100A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5F815A0BCCB0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDCA05797D0A0000000005797D0A00A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FE13A3C1E405797D320000000000000000000000000579 7D1100A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7F814A1BCD414A3C1D505797D1C000000000000000000000000000000000000 000005797D1100A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEE7159F BBCF1BA1BBA4067A7C0B00000000000000000000000000000000000000000000 00000000000005797D1100A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000009DBF1400A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miEditRedo: TMenuItem Action = actEditRedo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000069A4E20069A4E6A069A4E5B069A4E1D04A8B70404A8B803000000000000 000000000000000000000000000000000000000000000000000000000000069A 4E5E0FA85A862CD6C09602999A8C069A4E0C0000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EC123C7AFC6059D91CE069A4E48000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF3ADDB8F5069A4EFE0000000000000000000000000000000000000000069A 4EFF069A4E33000000000000000000000000000000000000000000000000069A 4EFF37D9B3FD069A4EFF069A4E4800000000000000000000000000000000069A 4EFF069A4EFF069A4E330000000000000000000000000000000000000000069A 4EFF46E2BEFF05A699FF069A4EF1069A4E73069A4E300000000000000000069A 4EFF34E28AFF069A4EFF069A4E41000000000000000000000000000000000A9D 52F164ECB2FF24D6CDFF0BA193FE069A4EFF069A4EFF069A4EFF069A4EFF069A 4EFF1ED4CCFF34E28AFF069A4EFF069A4E410000000000000000000000000C9F 55DA63E9B1FF31E0BAFF17D4CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DA A1FF23DED9FF16D273FF34E28AFF069A4EFF069A4E410000000000000000069A 4E9E30C29DEA60EDB1FF26DFA5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D2 73FF16D273FF16D273FF16D273FF34E28AFF069A4EFF069A4E4100000000069A 4E2B069A4EBA46D8A9FF65EFB1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7 AFFF16D273FF16D273FF16D273FF18D375FF6CF3AEFF069A4EFF000000000000 0000069A4E4A069A4EC845D9ACFD67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DB A0FF24DBA0FF16D273FF16D273FF6CF3AEFF069A4EFF0084773B000000000000 000000000000069A4E36069A4EB10C9B8FC449DEA9DD6AF1AEFF6BF2AEFF73F5 B3FF61EFA6FF16D273FF6CF3AEFF069A4EFF069A4E4100000000000000000000 00000000000000000000069A4E07069A4E46069A4E9E069A4ECF069A4EFF069A 4EFF6CF3AEFF6CF3AEFF069A4EFF069A4E410000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF6CF3AEFF069A4EFF069A4E41000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF069A4EFF069A4E4300000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF069A4E330000000000000000000000000000000000000000 } OnClick = actEditRedoExecute end object miDivider8: TMenuItem Caption = '-' end object miEditCut: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000001A1A AF5C0E0EAAE71010ABF41616ABF71A1AAF330000000000000000000000000000 00001A1AAF5C0D0DAAC30B0BAAEE0B0BA9E21A1AAF3300000000000000001313 ABDF2727DBFD1F1FD0F91D1DCEFD0707A8E61A1AAF3300000000000000001A1A AF330808AAE92222D4FD1D1DCFF91D1DCEFD1313ABE900000000000000000D0D ABF91D1DCFFA000000000B0BB5902121D3FD0C0CAAD500000000000000000909 AACB2323D6FD0D0DB895000000001F1FD1FB1111ABFA00000000000000001414 ABE62323D5FD0303A87A000000001D1DCEF50A0AA9FC00000000000000000303 A8FD1A1BCAF2000000000202A7772020D1FD1414ABE600000000000000001A1A AF5C0606A8FE1F1FD0FB0303A8B81415C0F80101A6FF00000000000AA00E1C1D CDFD1315C0F90303A8B71D1DCDFA0606A7FE1A1AAF7D00000000000000000000 00001919AE7D0707A9FD2020D2FD1E1ECEFE0E0FB7FD0205A4A40304A8FC1A1A C9FF2020D1FD1F1FCBFD0A0AA9FD1919AE5D0000000000000000000000000000 000000000000000000001818AE8D1616ABF30606A6FF454AA3FE0202A6FF191A C7FF1717ADF01818AE8900000000000000000000000000000000000000000000 0000000000000000000000000000888D8B5C848989FFC3C6C5FFAFB2B3FF2C2F 9CF5888D8B330000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DA1B7BBBAFDE6E8E7FFA7ACAAFF8B90 8EFE878C8A970000000000000000000000000000000000000000000000000000 00000000000000000000888D8B33888D8BFEDFE1E1FFF5F6F5FD979C9AFFA5A9 A8FF888D8BF7888D8B3300000000000000000000000000000000000000000000 000000000000000000008A8F8DE1B2B6B5FFF7F7F7FF888D8BF29CA09FFEB3B6 B5FFB5BAB8FD888D8BB200000000000000000000000000000000000000000000 000000000000878C8A39888D8BFFD9DCDBFFEFF0EFFE8E9391BD898E8C99B3B8 B6FFCBCECDFF888D8BFD888D8B7D000000000000000000000000000000000000 0000000000008A8F8DF3B0B5B3FFF6F7F7FE888D8BD79297957D000000008B90 8EFAC9CECCFFABAFAEFD888D8BD4000000000000000000000000000000000000 000000000000888D8BFED0D4D2FFEFF0EFFD8F9492AC0000000000000000878C 8A3FA7ACAAFFC3C8C6FF8A8F8DF7000000000000000000000000000000000000 0000000000008B908EF6F7F7F7FD888D8BB79297957D00000000000000000000 00008D9190E6D0D3D2FE8C918FBF000000000000000000000000000000000000 000000000000888D8B48888D8BEC909593D50000000000000000000000000000 0000888D8B978C918FEE00000000000000000000000000000000 } OnClick = actEditCutExecute end object miEditCopy: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CA3868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88BF858A887F0000000000000000000000000000 00000000000000000000868B89FBF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF858A887F00000000000000000000 00000000000000000000868B89FBF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88CC8B908F50868B 897F868B897F868B897F868B89FDFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF868B897DF2F3 F37FF3F4F47FF2F2F27F878C8AFDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF868B897DF9F9 F97FEBEBEB7FEAEAEA7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF868B897DFEFE FE7FECECEC7FC3C4C47F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF868B897DFFFF FF7FEDEEEE7FECEDED7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEEEFEF7FC5C6C67F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FEEEFEF7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FC7C8C87F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FEFF0F07F878C8AFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FC7C8C87F979B9AD0858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DAB868B897DFFFF FF7FEFF0F07FEEEFEF7FEEEFEF7FEEEFEF7FEEEFEF7FEEEFEF7FEFF0F07FEFF0 F07FFFFFFF7F858A887F00000000000000000000000000000000868B897DFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7F858A887F000000000000000000000000000000008A8F8D4F858A 887F858A887F858A887F858A887F858A887F858A887F858A887F858A887F858A 887F858A887F89918E5300000000000000000000000000000000 } OnClick = actEditCopyExecute end object miEditPaste: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000143 6B6401436CEE01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BED00426A5D0000000000426A040143 6CF3237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BF000426A0200426A100245 6EF82687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFC00426A0800426A100245 6EF82687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFC00426A0800426A100245 6EF82687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFC00426A0800426A040144 6DF32484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CF000426A02000000000144 6C6401446DEE01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CED00436B5D00000000000000000000 000000000000000000005C5C5C015E5F5FBB5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FBB5C5C5C0100000000000000000000000000000000 } OnClick = actEditPasteExecute end object miEditDelete: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8F99919493FFADB0AFFF0000000000000000909492FF9DA09FFD989C9AE50000 000000000000A5A8A7677B7E7DC9989B9AA40000000000000000000000008C90 8FFDFAFAFAFF949897F9999C9BD6999C9BEF969A98FFEDEEEEF1949997CB9B9E 9DFF989B9AFF8B8E8DFFFFFFFFDE8F9392BC0000000000000000000000008C90 8F99858988ECF6F6F6FB999C9BFFABADACFF838885E7DEDFDEED9C9F9EC6CCCE CDDB989B9AFFEBEBEBF0969998E6959797670000000000000000000000000000 0000858988EFC9CBCAA2838885E8C4C4C4E9838885F0CACCCBEB9B9D9CE8C0C0 C0DF7C807FFFE2E3E3F28B8E8DF0000000000000000000000000000000000000 0000727675FAC7C9C8EB797E7BE89E9F9EE98E8F8FF6ADAEADED8C8D8CF1AEAF AEE77C807FFFB7B8B7EB767978F5000000000000000000000000000000000000 00006A6E6DFFCCCDCDFA656968F4AAACABF96C6F6EFEAEB0AFFB6B6E6DFDB0B2 B1FA6E7271FDB2B3B3FB6C706FFD000000000000000000000000874920C0874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920C0874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF874A207F874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF874A207F000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391BF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391BF0000000000000000 } OnClick = actEditDeleteExecute end object miDivider9: TMenuItem Caption = '-' end object miEditSelectAll: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00898E 8C94858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8D94FFFFFF00FFFFFF00858A 88FEF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFEFFFFFF00FFFFFF00858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FEFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFEFFFFFF00FFFFFF00898D 8B94858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8C94FFFFFF00 } OnClick = actEditSelectAllExecute 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 Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF18844DF504763BAB04733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF7BD3A6FF36A16AF804763CE10473 3A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF81D7ABFF6CD5A0FF58C18BFE0A79 40F504743A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004743AE80473 3AFF04733AFF04733AFF04733AFF04783CF781D6ABFF11BA64FF52D392FF73D7 A5FF1E8B53F504763CAC04733A0CFFFFFF00FFFFFF00FFFFFF0004733AFF7ECA A3FF7ECAA3FF7ECAA3FF7ECCA4FF7FD1A7FF81D5AAFF0EB761FF10BF66FF34CB 7FFF78DAA8FF3EA671F904763BE104733A2DFFFFFF00FFFFFF0004733AFF7ECA A3FF069A4EFF069A4EFF069C4FFF08A454FF0BAC5AFF0DB35EFF0EB962FF0FBC 64FF1CBF6CFF67D29CFF5DBB8BFE0E7A42F504733A65FFFFFF0004733AFF7ECA A3FF069A4EFF069A4EFF069A4EFF07A052FF09A757FF0BAE5BFF0EB25FFF17B8 66FF1FBA6CFF26BA6FFF55C68DFF76C99EFF268956F504753B9D04733AFF9CD7 B9FF3BAF74FF33AC6EFF2BA968FF2FAC6BFF3DB678FF49BE82FF50C389FF4DC4 88FF49C284FF44BE80FF6DCA9BFF89CEAAFF308F5EF604753B9D04733AFFA3D9 BDFF54B985FF58BB88FF5BBC8BFF5CBD8BFF5CBE8CFF5CC18DFF5AC28DFF55C2 8AFF58C38CFF8CD4AFFF7AC39CFE147C46F504733A65FFFFFF0004733AFFA7DB C0FFAADCC2FFADDDC5FFAFDEC6FFB0DEC7FFB0DEC7FF64C191FF61C18FFF73C8 9DFF9FD9BBFF5AAB81FA05743AE104733A2DFFFFFF00FFFFFF0004743AE80473 3AFF04733AFF04733AFF04733AFF04763BF7B6E0CBFF6FC499FF91D2B1FF9CD4 B7FF318F5FF604743BAC04733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFBBE3CEFFABDCC3FF84C6A4FE107A 43F504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFB7E1CBFF5AAB82F904743AE10473 3A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF2A8C59F604743AAB04733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miCancelCompare: TMenuItem Action = actCancelCompare Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000008606000089BB000086FF000086FF000086FF000086FF0000 86FF000086FF000088CF0000860F000000000000000000000000000000000000 000000008606000089BB1A1AB1F84A4AECFF4747EDFF4343EBFF3F3FEAFF3B3B E8FF3737E7FF1818BCFB000088D8000086140000000000000000000000000000 8606000089BB1D1DB4F84C4CEBFF0F0FCCFF0000C3FF0000C1FF0000BFFF0000 BDFF0505BFFF2D2DDFFF1919BFFC000088DF0000861A00000000000086060000 89BB2121B7F85252EDFF1010D0FF0000C7FF0000C5FF0000C3FF0000C1FF0000 BFFF0000BDFF0505BEFF2C2CDFFF1B1BC4FC000088E600008620000089BC2424 B8F95A5AEFFF1111D3FF0101CBFF5858D6FF0303C7FF0000C5FF0000C3FF0101 C1FF5F5FD6FF0202BDFF0404BEFF2B2BDFFF1D1DC7FD000087EB020288FF6969 F2FF2323D5FF1F1FD2FF9292DEFFECECECFFAAAAE4FF2F2FD0FF2828CEFFA5A5 E9FFFEFEFEFF9696E3FF0000BDFF0303BDFF3434E6FF020289FF030389FF8585 F5FF2F2FD5FF2F2FD5FF5B5BD7FFDFDFE5FFECECECFFAAAAE4FFA5A5E6FFF9F9 F9FFF7F7FCFF6767DAFF1A1AC5FF0202BDFF3737E8FF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF2F2FD5FF5B5BD8FFDFDFE6FFECECECFFF1F1F1FFEDED F3FF6464DAFF2F2FCEFF2F2FCCFF2929C9FF4545E9FF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF2F2FD5FF3030D5FFACACDEFFE8E8E8FFECECECFFBCBC E8FF3131D1FF2F2FCFFF2F2FCEFF2F2FCCFF6161ECFF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF3030D5FF9999D8FFDFDFDFFFDEDEE2FFDFDFE6FFECEC ECFFABABE6FF3131D2FF2F2FD0FF2F2FCEFF6565EDFF020289FF020288FF8989 F6FF4040DBFF2F2FD5FF9292D8FFDBDBDBFFD6D6DAFF6060D7FF5A5AD8FFE0E0 E6FFEDEDEDFFA5A5E5FF2F2FD2FF3B3BD6FF6868EEFF020288FF000089B42626 B3F78383F3FF4141DBFF5757D7FFCDCDDAFF5F5FD7FF2F2FD5FF2F2FD5FF5C5C D8FFD9D9E6FF5F5FDBFF3B3BD9FF6A6AEFFF1818B0F7000089AE33339E050000 89B22424B2F78383F3FF4242DCFF3737D5FF2F2FD5FF2F2FD5FF2F2FD5FF2F2F D5FF3737D5FF3B3BDAFF6F6FF0FF1B1BB1F7000089B13F3FA404000000003F3F A404000089B12222B1F78383F3FF4242DCFF2F2FD5FF2F2FD5FF2F2FD5FF2F2F D5FF3C3CDBFF7575F1FF1F1FB4F8000089B50000860400000000000000000000 00003F3FA404000089AF2222AFF78888F6FF8B8BF7FF8B8BF7FF8A8AF6FF8787 F6FF8383F5FF2323B8F8000089B8000086040000000000000000000000000000 0000000000003F3FA404000089AD000086FF000086FF000086FF000086FF0000 86FF000086FF000089BC00008605000000000000000000000000 } end object miDivider1: TMenuItem Caption = '-' end object miNextDiff: TMenuItem Action = actNextDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004763C9D04763C9DFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65248B56F5248B56F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0E7A42F674D1A2FF75D3A3FF0E7B 42F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04763BE15DBF8DFE4CD18DFF4ED590FF5FC5 92FE04763CE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753BAC4CAA7AFA6DD6A0FF12C469FF14CB6EFF6CE0 A5FF3FA872F904763CABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65268C57F594DBB7FF31C379FF11C067FF12C56AFF1FC9 73FF78DBA8FF1E8952F504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F690D3B1FF65CC98FF3BC27DFF0FB962FF0FBC65FF10BD 65FF32C57BFF71CE9FFF0A783FF604733A2DFFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE175BF99FE83D1A9FF52C289FF4DC387FF1EB669FF0DB45FFF0DB4 5FFF0DB35EFF4EC589FF55B784FE04753BE104733A0CFFFFFF00FFFFFF000474 3BAC4FA57AF89BD6B8FF5DBE8DFF58C08AFF51C087FF42BC7EFF0CAB5AFF0BAB 59FF0AAA59FF0CA958FF68C797FF349A65F804743BABFFFFFF0004733A652789 56F6AADBC2FFAFDEC6FFADDDC5FFAADCC2FF56BD88FF4DBA82FF1FAA63FF08A2 53FF7FCEA5FF7ECDA4FF7ECCA4FF78C79FFF18824BF504733A6504753BC50473 3AFF04733AFF04733AFF04763BF7ADDDC5FF59BC89FF50B882FF34AD6FFF069A 4EFF7ECAA3FF04763BF704733AFF04733AFF04733AFF04753BC5FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DEC7FF5DBD8CFF54B985FF47B47CFF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC7FF5FBE8DFF55BA86FF41B278FF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC8FF5FBE8DFF55BA86FF37AE71FF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DEC7FFABDCC3FFA6DABFFF91D2B1FF7ECA A3FF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743AE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miPrevDiff: TMenuItem Action = actPrevDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743BE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA5DFC1FF81D5AAFF81D7ABFF82D9ACFF82DA ADFF82D9ADFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA9E2C5FF16B665FF0FBA63FF10BE66FF11C1 67FF83DEB0FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFADE4C8FF1FBD6DFF10BF66FF12C56AFF13C9 6DFF84E3B3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0E5CAFF31C378FF11C067FF13C86CFF15CF 71FF85E5B4FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004753BC50473 3AFF04733AFF04733AFF04783CF7B2E6CBFF4BC989FF10BD65FF11C369FF12C7 6BFF84E1B2FF057A3EF704733AFF04733AFF04733AFF04753BC504733A65288B 58F6B5E0CAFFBCE5D0FFB8E5CEFFB3E5CBFF63CD97FF19BA68FF0FBC64FF10BE 65FF83DCAFFF82DBAEFF82D9ACFF7BD3A6FF18844CF504733A65FFFFFF000474 3BAC56A97FF9B0DFC7FF77CBA0FF6CCA9AFF63CA96FF43C181FF0DB35EFF0DB5 5FFF0DB45FFF0FB25FFF6ACE9BFF359C67F804753BABFFFFFF00FFFFFF000473 3A0C04743AE180C4A1FE97D5B5FF69C596FF60C591FF56C38BFF1DB066FF0BAC 59FF0BAB59FF4DC185FF55B484FE04753BE104733A0CFFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F69CD4B7FF7AC9A0FF5ABE8BFF51BC86FF38B474FF08A3 53FF2CAF6CFF6EC397FF0A773EF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65288A57F6A0D7BBFF5FBD8CFF4DB680FF44B37AFF1AA2 5CFF71C49AFF1D844FF504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743BAC4EA578FA91D2B0FF48B47DFF3FB176FF6AC2 95FF3B9C6AF904743AABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04743AE172BD96FE72C59AFF6AC295FF5BB3 86FE04743AE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0F7941F687CAA7FF7EC7A2FF0E79 41F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65288957F5268956F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004753B9D04753B9DFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miDivider2: TMenuItem Caption = '-' end object miFirstDiff: TMenuItem Action = actFirstDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04753BE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA1DCBEFF81D3A9FF81D5AAFF81D7ACFF82D9 ADFF82DAADFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA5DEC1FF14B161FF0DB560FF0FBB63FF10BF 66FF83DEB0FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA9E1C5FF1BB668FF0EB962FF10C067FF12C6 6BFF84E3B3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFADE2C7FF2EBD74FF0FBA63FF11C168FF13C8 6CFF85E6B5FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004753BC50473 3AFF04733AFF04733AFF04773CF7AFE3C8FF47C384FF0EB861FF10BE66FF11C3 69FF84E1B2FF057A3EF704733AFF04733AFF04733AFF04763BC504733A65288B 58F6B3DFC9FFB9E2CDFFB5E2CBFFB1E2C9FF5FC992FF18B665FF0EB861FF0FBB 64FF83DCAFFF83DCAFFF82DBAEFF7CD5A8FF19844DF504733A65FFFFFF000474 3BAC57A97FF9B0DFC7FF75C79DFF6AC697FF60C692FF41BE7EFF0CB05CFF0DB3 5EFF0DB45FFF0FB460FF6ACF9BFF359D68F804753BABFFFFFF00FFFFFF000473 3A0C04743AE183C5A3FE99D5B6FF69C395FF5FC18FFF56C18AFF1CAE63FF0AAA 58FF0BAB59FF4DC286FF55B584FE04753BE104733A0CFFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F69ED4B8FF7CCAA2FF5CBD8BFF53BB85FF37B173FF08A1 53FF2CAF6CFF6EC397FF0A773EF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65298B58F6A2D8BCFF62BE8FFF4FB782FF45B37BFF1AA2 5CFF71C49AFF1D844FF504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743BAC4FA679FA93D3B2FF4BB67FFF42B279FF6BC2 96FF3B9C6AF904743AABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04743AE173BD97FE74C69CFF6CC396FF5CB3 86FE04743AE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0F7941F689CCA9FF7FC8A2FF0E79 41F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF } end object miLastDiff: TMenuItem Action = actLastDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000004733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A000E7A42F674D1A2FF75D3A3FF0E7B 42F604733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0004763BE15DBF8DFE4CD18DFF4ED590FF5FC5 92FE04763CE104733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753BAC3DA36FF969D59EFF12C469FF14CB6EFF6CE0 A5FF3FA872F904763CABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A00238A56F578D2A5FF1CBD6BFF11C067FF12C56AFF1FC9 73FF78DBA8FF1E8952F504733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A000B773EF68FD3B0FF5BC891FF0DB45FFF0FB962FF0FBC65FF10BD 65FF32C57BFF71CE9FFF0A783FF604733A00FFFFFF00FFFFFF00FFFFFF000473 3A0004743AE173BF98FE87D2ACFF56C38CFF30BA74FF0CB15DFF0DB45FFF0DB4 5FFF0DB35EFF4EC589FF55B784FE04753BE104733A00FFFFFF00FFFFFF000474 3BAC4DA478F89ED7BAFF61C090FF5BC18DFF55C18AFF3AB978FF11AD5EFF0BAB 59FF0AAA59FF0CA958FF68C797FF349A65F804743BABFFFFFF0004733A002789 56F6ACDCC4FFB2DFC8FFB0DEC7FFACDDC4FF58BD89FF4EBB84FF43B87CFF0FA4 58FF7FCEA5FF7ECDA4FF7ECCA4FF78C79FFF18824BF504733A0004753BC50473 3AFF04733AFF04733AFF04763BF7AFDEC6FF5BBC8BFF52B884FF47B47CFF35AD 70FF7FCBA4FF04763BF704733AFF04733AFF04733AFF04753BC5FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DFC7FF5EBE8DFF54B985FF49B57DFF3EB0 76FF85CDA9FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC7FF5EBE8DFF55BA86FF4AB57EFF3FB1 76FF8ACFACFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DFC7FF5DBD8CFF54B985FF49B57DFF3EB0 76FF8FD1AFFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFAEDEC6FFAADCC2FFA4DABEFF9FD8BBFF9AD6 B7FF93D3B2FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743AE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miDivider5: TMenuItem Caption = '-' end object miCopyLeftToRight: TMenuItem Action = actCopyLeftToRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004763BC504733A00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF19854DF504763CAB04733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF7DD9AAFF36A46CF804763CE10473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF83DDAFFF6EDCA5FF59C48DFE0A79 3FF504733A00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04743AE80473 3AFF04733AFF04733AFF04733AFF04793DF783DDAFFF15C86DFF55DC97FF73D6 A3FF1E8952F504763BAC04733A00FFFFFF0004733AFF04733AFF04733AFF7ECA A3FF7ECAA3FF7FCFA6FF80D4A9FF81D8ACFF83DCAFFF12C46AFF13C86CFF35CC 80FF77D7A6FF3DA36EF904753BE104733A0004733AFF04733AFF04733AFF7ECA A3FF069A4EFF08A152FF0AA958FF0CB15DFF0EB862FF10BE66FF11C067FF10BE 66FF1BBB6AFF66CE99FF5BB889FE0E7942F504733AFF04733AFF04733AFF7ECA A3FF069A4EFF079E50FF09A656FF0BAD5AFF0DB35EFF0EB761FF16BB66FF1FBC 6CFF2ABC71FF30B973FF60C592FF7FC9A3FF04733AFF04733AFF04733AFF8ACF ACFF16A059FF149F58FF18A75EFF26B26AFF35BB76FF45C283FF4BC688FF4DC5 88FF4DC387FF4CBF84FF76CB9FFF92D0B0FF04733AFF04733AFF04733AFF90D1 B0FF30AB6CFF37AE71FF3DB276FF45B87DFF4BBE83FF50C187FF53C38BFF56C3 8CFF60C591FF94D6B4FF81C5A2FE177E49F504733AFF04733AFF04733AFF93D3 B2FF96D4B4FF9AD6B7FF9ED7BAFFA1D9BDFFA4DCC0FF58C08AFF5CC28EFF76CB 9FFFA4DBBFFF60AF86FA06753BE104733A0004733AFF04733AFF04743AE80473 3AFF04733AFF04733AFF04733AFF04763BF7A9DBC1FF5FBE8EFF8DD2AFFFA0D6 BAFF359162F604743BAC04733A00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFABDCC3FFA0D8BCFF84C6A4FE117B 44F504733A00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFA7DBC0FF55A97EF804743AE10473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF278956F604743AAB04733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF } end object miCopyRightToLeft: TMenuItem Action = actCopyRightToLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004763CC5FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004763BAC1986 4EF504733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004753BE136A16AF87EDB ACFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF0004733A000A783FF555B987FE6CD59FFF84E0 B1FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF0004733A0004743BAC1D8550F56EC699FF4EC78AFF11BB64FF84E0 B1FF057B3FF704733AFF04733AFF04733AFF04733AFF04743AE804733AFF0473 3AFF04733A0004743AE13B9C6AF972C79CFF2DB470FF0CB05CFF0EB962FF83DE B0FF84E1B2FF84E1B2FF83DEB0FF82DAADFF81D6AAFF04733AFF04733AFF0473 3AFF0E7941F65AB285FE62BF8FFF13A259FF09A555FF0BAD5AFF0DB55FFF0FBB 64FF10BF66FF10BF66FF0FBB63FF0DB45FFF80D4A9FF04733AFF04733AFF0473 3AFF7EC7A1FF5DBD8CFF2BA968FF23A562FF1AA85FFF11AB5DFF0CB05CFF0DB5 60FF0EB862FF0EB861FF0DB55FFF0CAF5CFF80D2A8FF04733AFF04733AFF0473 3AFF8FCEAEFF73C69CFF48B47DFF49B57DFF4BB780FF4BBC83FF46BF81FF37BC 79FF2ABA71FF1EB569FF1BB365FF1DB065FF8ED5B0FF04733AFF04733AFF0473 3AFF177E48F680C3A0FE92D2B1FF5DBC8BFF55BA86FF54BD87FF52BF87FF4FC0 87FF4CC085FF46BE81FF3FBA7CFF39B576FF94D5B4FF04733AFF04733AFF0473 3AFF04733A0006753BE15FAE86FAA3D9BDFF75C79DFF5DBD8CFF5BBE8BFFA8DD C2FFA5DDC0FFA2DBBEFF9ED9BBFF9AD7B8FF96D4B4FF04733AFF04733AFF0473 3AFFFFFFFF0004733A0004743BAC359162F6A1D6BBFF90D2B0FF64C091FFABDD C3FF04763BF704733AFF04733AFF04733AFF04733AFF04743AE804733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF0004733A00127C45F587C7A6FEA5DABEFFAFDE C6FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004743AE158AA81F9ACDC C4FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004743BAC288B 58F604733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004753BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } 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 = ImageList left = 16 top = 136 object actSave: TAction Caption = 'Save' Hint = 'Save' ImageIndex = 0 OnExecute = actSaveExecute end object actSaveAs: TAction Caption = 'Save as...' Hint = 'Save as...' ImageIndex = 1 OnExecute = actSaveAsExecute end object actStartCompare: TAction Caption = 'Compare' Hint = 'Compare' ImageIndex = 2 OnExecute = actStartCompareExecute end object actLastDifference: TAction Caption = 'Last Difference' Hint = 'Last Difference' ImageIndex = 3 OnExecute = actExecute end object actNextDifference: TAction Caption = 'Next Difference' Hint = 'Next Difference' ImageIndex = 4 OnExecute = actExecute end object actPrevDifference: TAction Caption = 'Previous Difference' Hint = 'Previous Difference' ImageIndex = 5 OnExecute = actExecute end object actFirstDifference: TAction Caption = 'First Difference' Hint = 'First Difference' ImageIndex = 6 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 = 7 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 = 21 OnExecute = actExecute end object actCopyRightToLeft: TAction Caption = 'Copy Block Left' Hint = 'Copy Block Left' ImageIndex = 20 OnExecute = actExecute end object actSaveLeft: TAction Caption = 'Save Left' Hint = 'Save Left' ImageIndex = 9 OnExecute = actExecute end object actSaveRight: TAction Caption = 'Save Right' Hint = 'Save Right' ImageIndex = 9 OnExecute = actExecute end object actReload: TAction Caption = '&Reload' Hint = 'Reload' ImageIndex = 8 OnExecute = actExecute end object actOpenLeft: TAction Caption = 'Open Left...' ImageIndex = 11 OnExecute = actOpenLeftExecute end object actOpenRight: TAction Caption = 'Open Right...' ImageIndex = 11 OnExecute = actOpenRightExecute end object actExit: TAction Caption = 'E&xit' ImageIndex = 12 OnExecute = actExecute end object actEditCut: TAction Category = 'Edit' Caption = 'Cut' ImageIndex = 15 OnExecute = actEditCutExecute end object actEditCopy: TAction Category = 'Edit' Caption = 'Copy' ImageIndex = 16 OnExecute = actEditCopyExecute end object actEditPaste: TAction Category = 'Edit' Caption = 'Paste' ImageIndex = 17 OnExecute = actEditPasteExecute end object actEditDelete: TAction Category = 'Edit' Caption = 'Delete' ImageIndex = 18 OnExecute = actEditDeleteExecute end object actEditSelectAll: TAction Category = 'Edit' Caption = 'Select &All' ImageIndex = 19 OnExecute = actEditSelectAllExecute end object actEditRedo: TAction Category = 'Edit' Caption = 'Redo' ImageIndex = 14 OnExecute = actEditRedoExecute end object actEditUndo: TAction Category = 'Edit' Caption = 'Undo' ImageIndex = 13 OnExecute = actEditUndoExecute end object actSaveLeftAs: TAction Caption = 'Save Left As...' Hint = 'Save Left As...' ImageIndex = 10 OnExecute = actSaveLeftAsExecute end object actSaveRightAs: TAction Caption = 'Save Right As...' Hint = 'Save Right As...' ImageIndex = 10 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 ImageList: TImageList left = 200 top = 136 Bitmap = { 4C6916000000100000001000000077856C7C91794D7E8B67386F8B67388C8B67 38D48B6738FF8A693DF880714AE57A7858850000000000000000000000000000 00000000000000000000000000009270425EBB96627ED1AD815DE6CEB1CDEFDF D0FFECDBC5FFDFC29BFFA08B68FD886E43FD5A7F6A1B00000000000000000000 0000000000000000000000000000887F6B96737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706E006B706E006B70 6E006B706E006B706E006B706E006E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706E006B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706E006B706E00FCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706E006B706E00FAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706E006B706E00F9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706E006B706E00F9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706E006B706E00F7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706E006B706E00FEFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FFF4F4F4FFEBEBEBFFEBEB EBFFE3E3E3FFF0F0F0FF6B706E006B706E00CECECEFFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC5C5C5FFC9C9C9FFC9C9C9FFC5C5C5FFC5C5C5FFC5C5C5FFC5C5 C5FFC5C5C5FFD6D6D6FF6B706E006B706E00CECECEFFC5C5C5FF9F9F9FFFAFAF AFFFBCBCBCFFC4C4C4FFC8C8C8FFD0D0D0FFA9A9A9FFD2D2D2FFA9A9A9FFD2D2 D2FFB9B9B9FFCACACAFF6B706E006B706E00CDCDCDFFC3C3C3FFA9AAAAFFB4B4 B4FFC2C2C2FFC4C4C4FFC8C8C8FFCBCBCBFFA8A7A8FFD1D1D1FFA7A7A8FFD1D1 D1FFB6B6B7FFCACACAFF6B706E006B706E00DDDDDDFFDCDCDCFFDCDCDCFFDCDC DCFFD5D5D5FFD5D5D5FFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF CFFFCFCFCFFFCACACAFF6B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E0077856C7C91794D7E8B67386F8B67388C8B67 38D48B6738FF8A693DF880714AE57A7858850000000000000000000000000000 00000000000000000000000000009270425EBB96627ED1AD815DE6CEB1CDEFDF D0FFECDBC5FFDFC29BFFA08B68FD886E43FD5A7F6A1B00000000000000000000 0000000000000000000000000000887F6B96737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706E006B706E006B70 6E006B706E006B706E006B706E006E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706E006B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706E006B706E00FCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706E006B706E00FAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706E006B706E00F9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706E006B706E00F9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706E006B706E00F7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706E006B706E00A1A4A3FFA1A4A2FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FF6B706E006B706E00DCDCDCFFDBDBDCFFDBDCDCFFDCDC DCFFDCDBDCFFDBDCDCFFDCDBDCFFDCDCDCFFDBDCDBFFDCDCDBFF000000FFDBDC DCFFDCDCDBFFDCDCDCFF6B706E006B706E00EFEFEFFFADB0AFFFAEB0AEFFAEB0 AFFFADB0AEFFADB0AFFFADB0AFFFADB0AFFFADB0AFFFEFEEEFFF000000FFEEEF EEFFEFEEEEFFEFEEEFFF6B706E006B706E00FFFFFFFFB6B8B7FFB6B8B7FFB6B8 B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706E006B706E00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 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 3AFF04733AFF04733AFF04753BC504733A00278956F6ACDCC4FFB2DFC8FFB0DE C7FFACDDC4FF58BD89FF4EBB84FF43B87CFF0FA458FF7FCEA5FF7ECDA4FF7ECC A4FF78C79FFF18824BF504733A00FFFFFF0004743BAC4DA478F89ED7BAFF61C0 90FF5BC18DFF55C18AFF3AB978FF11AD5EFF0BAB59FF0AAA59FF0CA958FF68C7 97FF349A65F804743BABFFFFFF00FFFFFF0004733A0004743AE173BF98FE87D2 ACFF56C38CFF30BA74FF0CB15DFF0DB45FFF0DB45FFF0DB35EFF4EC589FF55B7 84FE04753BE104733A00FFFFFF00FFFFFF00FFFFFF0004733A000B773EF68FD3 B0FF5BC891FF0DB45FFF0FB962FF0FBC65FF10BD65FF32C57BFF71CE9FFF0A78 3FF604733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A00238A 56F578D2A5FF1CBD6BFF11C067FF12C56AFF1FC973FF78DBA8FF1E8952F50473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000475 3BAC3DA36FF969D59EFF12C469FF14CB6EFF6CE0A5FF3FA872F904763CABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004763BE15DBF8DFE4CD18DFF4ED590FF5FC592FE04763CE104733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A000E7A42F674D1A2FF75D3A3FF0E7B42F604733A00FFFFFF00FFFF 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 FF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000003F3FA4040000 89AD000086FF000086FF000086FF000086FF000086FF000086FF000089BC0000 860500000000000000000000000000000000000000003F3FA404000089AF2222 AFF78888F6FF8B8BF7FF8B8BF7FF8A8AF6FF8787F6FF8383F5FF2323B8F80000 89B8000086040000000000000000000000003F3FA404000089B12222B1F78383 F3FF4242DCFF2F2FD5FF2F2FD5FF2F2FD5FF2F2FD5FF3C3CDBFF7575F1FF1F1F B4F8000089B5000086040000000033339E05000089B22424B2F78383F3FF4242 DCFF3737D5FF2F2FD5FF2F2FD5FF2F2FD5FF2F2FD5FF3737D5FF3B3BDAFF6F6F F0FF1B1BB1F7000089B13F3FA404000089B42626B3F78383F3FF4141DBFF5757 D7FFCDCDDAFF5F5FD7FF2F2FD5FF2F2FD5FF5C5CD8FFD9D9E6FF5F5FDBFF3B3B D9FF6A6AEFFF1818B0F7000089AE020288FF8989F6FF4040DBFF2F2FD5FF9292 D8FFDBDBDBFFD6D6DAFF6060D7FF5A5AD8FFE0E0E6FFEDEDEDFFA5A5E5FF2F2F D2FF3B3BD6FF6868EEFF020288FF030389FF8888F6FF2F2FD5FF2F2FD5FF3030 D5FF9999D8FFDFDFDFFFDEDEE2FFDFDFE6FFECECECFFABABE6FF3131D2FF2F2F D0FF2F2FCEFF6565EDFF020289FF030389FF8888F6FF2F2FD5FF2F2FD5FF2F2F D5FF3030D5FFACACDEFFE8E8E8FFECECECFFBCBCE8FF3131D1FF2F2FCFFF2F2F CEFF2F2FCCFF6161ECFF020289FF030389FF8888F6FF2F2FD5FF2F2FD5FF2F2F D5FF5B5BD8FFDFDFE6FFECECECFFF1F1F1FFEDEDF3FF6464DAFF2F2FCEFF2F2F CCFF2929C9FF4545E9FF020289FF030389FF8585F5FF2F2FD5FF2F2FD5FF5B5B D7FFDFDFE5FFECECECFFAAAAE4FFA5A5E6FFF9F9F9FFF7F7FCFF6767DAFF1A1A C5FF0202BDFF3737E8FF020289FF020288FF6969F2FF2323D5FF1F1FD2FF9292 DEFFECECECFFAAAAE4FF2F2FD0FF2828CEFFA5A5E9FFFEFEFEFF9696E3FF0000 BDFF0303BDFF3434E6FF020289FF000089BC2424B8F95A5AEFFF1111D3FF0101 CBFF5858D6FF0303C7FF0000C5FF0000C3FF0101C1FF5F5FD6FF0202BDFF0404 BEFF2B2BDFFF1D1DC7FD000087EB00008606000089BB2121B7F85252EDFF1010 D0FF0000C7FF0000C5FF0000C3FF0000C1FF0000BFFF0000BDFF0505BEFF2C2C DFFF1B1BC4FC000088E6000086200000000000008606000089BB1D1DB4F84C4C EBFF0F0FCCFF0000C3FF0000C1FF0000BFFF0000BDFF0505BFFF2D2DDFFF1919 BFFC000088DF0000861A00000000000000000000000000008606000089BB1A1A B1F84A4AECFF4747EDFF4343EBFF3F3FEAFF3B3BE8FF3737E7FF1818BCFB0000 88D8000086140000000000000000000000000000000000000000000086060000 89BB000086FF000086FF000086FF000086FF000086FF000086FF000088CF0000 860F000000000000000000000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 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 3424FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 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 1BFF1D1C1FFF1F1F21EFFFFFFF004864720036546523FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9 F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9 DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7 BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3 E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3 CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0 F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5 D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5 E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3 F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5 F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8 D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5 F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2 FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3 F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2 FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA F8FF3594DAFFFFFFFF00FFFFFF002C86D8002D88D8F72D87D8F72D88D8F72D88 D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88 D8F72C86D800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E9DD5FF6C9B D3FF699AD2FF6697CFFF6395CDFF6093CBFF5C90C8FF598EC6FF558BC3FF5188 C0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B9BD3FFAED4 E8FFABD3E8FFAAD1E7FFA8CFE5FFA5CDE4FFA2CBE4FFA0C9E2FF9DC7E1FF4B84 BCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006798D0FFABD1 E7FF90C2DFFF8DC0DEFF8ABEDCFF87BBDBFF83B8DAFF80B6D8FF99C4E0FF4580 B8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006395CDFFA8CF E5FF8CBFDDFF88BDDCFF85BADBFF81B7D9FF7EB4D7FF7AB2D6FF94C1DDFF3F7C B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E91C9FFA4CC E4FF87BBDBFF84B9DAFF80B6D8FF7CB3D7FF79B0D5FF74ADD4FF8FBDDCFF3977 AFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00598EC6FFA0C9 E3FF82B8D9FF7EB5D8FF7AB2D6FF77AFD5FF73ACD3FF6DABD4FF8CBADAFF3373 ABFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00538AC2FF9CC6 E1FF7CB3D7FF79B1D5FF75ADD4FF71ABD2FF5FBAE4FF4BD4FFFF7CBBE0FF2E6F A7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004E86BEFF98C3 DFFF77AFD5FF73ACD3FF6FA9D2FF6BA7D0FF5BB7E3FF54C2EDFF81B4D7FF286B A3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004882BAFF93C0 DDFF71ABD2FF6DA8D1FF69A5CFFF66A2CEFF629FCCFF5E9CCBFF7FB0D5FF2367 9FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00427DB5FF8FBD DCFF6CA7D0FF67A4CFFF64A1CDFF609ECCFF5C9BCAFF5999C9FF7BADD4FF1E64 9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C79B1FF8BB9 DAFF66A2CEFF62A0CDFF5F9DCBFF5B9AC9FF5897C8FF5495C7FF77ABD3FF1960 98FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003675ADFF86B6 D8FF83B3D7FF81B2D6FF7DAFD5FF7BADD4FF79ABD3FF76AAD2FF74A8D1FF155D 95FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00B7B7B7FFAEAEAEFF3071A9FF2C6E A6FF286BA3FF2468A0FF21669EFF1D639BFF1A6199FF175F97FF145C94FF115B 93FF6C6C6CFF6C6C6CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000009D BF1400A0C4FF00A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000005797D1100A0 C4FFADF3FBFF00A0C4FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000005797D1100A0C4FFADF3 FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEE7159FBBCF1BA1BBA4067A7C0B0000 00000000000000000000000000000000000005797D1100A0C4FFADF3FBFF31E1 F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8F7F814A1BCD414A3C1D50579 7D1C00000000000000000000000005797D0A00A0C4FFADF3FBFF2FE0F6FF32E2 F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9ECFF69E7F6FF41CEE3FE13A3 C1E405797D32000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2F8FF32E2 F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2E8FF1DD2E8FF36D9ECFF40CD E1FF16A1BDCA05797D0A0000000005797E1100A0C4FF79EDFBFF32E2F8FF2CDF F4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2E8FF1DD2E8FF0BC8DFFF6AE5 F3FF1BABC5F815A0BCCB000000000000000005797D1100A0C4FF76EDFBFF04C3 DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EAF9FF05DDF7FF0AC8DFFF07C2 D8FF6FDCEBFF1BA3BFF400000000000000000000000005797D1100A0C4FF76ED FBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0C4FF01A9C4FF6EE1EEFF0FC9 DFFF69E4F2FF1AA4C0F80000000000000000000000000000000005797D1100A0 C4FF76EDFBFF00A0C4FF000000000000000000A0C4300099B95000A0C4C96DE6 F5FF76E2EFFF19A3C1FF00000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF00000000000000000000000000000000009EC11A02AC C8FF88E7F2FE11A2C2FF00000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000EAA CBFE5DDAE9FE23A6C0EF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C42243C4 DBFC43C5D8FE23A6C07F00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C45D66DB EAB211A6C2AE0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000018A6C3691AA7 C46900A0C4180000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4E33000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4EFF069A4E430000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF6CF3AEFF069A4EFF069A 4E4100000000000000000000000000000000000000000000000000000000069A 4E07069A4E46069A4E9E069A4ECF069A4EFF069A4EFF6CF3AEFF6CF3AEFF069A 4EFF069A4E410000000000000000000000000000000000000000069A4E36069A 4EB10C9B8FC449DEA9DD6AF1AEFF6BF2AEFF73F5B3FF61EFA6FF16D273FF6CF3 AEFF069A4EFF069A4E41000000000000000000000000069A4E4A069A4EC845D9 ACFD67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DBA0FF24DBA0FF16D273FF16D2 73FF6CF3AEFF069A4EFF0084773B00000000069A4E2B069A4EBA46D8A9FF65EF B1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7AFFF16D273FF16D273FF16D2 73FF18D375FF6CF3AEFF069A4EFF00000000069A4E9E30C29DEA60EDB1FF26DF A5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D273FF16D273FF16D273FF16D2 73FF34E28AFF069A4EFF069A4E41000000000C9F55DA63E9B1FF31E0BAFF17D4 CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DAA1FF23DED9FF16D273FF34E2 8AFF069A4EFF069A4E4100000000000000000A9D52F164ECB2FF24D6CDFF0BA1 93FE069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF1ED4CCFF34E28AFF069A 4EFF069A4E41000000000000000000000000069A4EFF46E2BEFF05A699FF069A 4EF1069A4E73069A4E300000000000000000069A4EFF34E28AFF069A4EFF069A 4E4100000000000000000000000000000000069A4EFF37D9B3FD069A4EFF069A 4E4800000000000000000000000000000000069A4EFF069A4EFF069A4E330000 000000000000000000000000000000000000069A4EFF3ADDB8F5069A4EFE0000 000000000000000000000000000000000000069A4EFF069A4E33000000000000 000000000000000000000000000000000000069A4EC123C7AFC6059D91CE069A 4E48000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4E5E0FA85A862CD6C0960299 9A8C069A4E0C0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000069A4E20069A4E6A069A 4E5B069A4E1D04A8B70404A8B803000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000888D8B48888D 8BEC909593D500000000000000000000000000000000888D8B978C918FEE0000 00000000000000000000000000000000000000000000000000008B908EF6F7F7 F7FD888D8BB79297957D0000000000000000000000008D9190E6D0D3D2FE8C91 8FBF000000000000000000000000000000000000000000000000888D8BFED0D4 D2FFEFF0EFFD8F9492AC0000000000000000878C8A3FA7ACAAFFC3C8C6FF8A8F 8DF70000000000000000000000000000000000000000000000008A8F8DF3B0B5 B3FFF6F7F7FE888D8BD79297957D000000008B908EFAC9CECCFFABAFAEFD888D 8BD4000000000000000000000000000000000000000000000000878C8A39888D 8BFFD9DCDBFFEFF0EFFE8E9391BD898E8C99B3B8B6FFCBCECDFF888D8BFD888D 8B7D000000000000000000000000000000000000000000000000000000008A8F 8DE1B2B6B5FFF7F7F7FF888D8BF29CA09FFEB3B6B5FFB5BAB8FD888D8BB20000 000000000000000000000000000000000000000000000000000000000000888D 8B33888D8BFEDFE1E1FFF5F6F5FD979C9AFFA5A9A8FF888D8BF7888D8B330000 0000000000000000000000000000000000000000000000000000000000000000 00008A8F8DA1B7BBBAFDE6E8E7FFA7ACAAFF8B908EFE878C8A97000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000888D8B5C848989FFC3C6C5FFAFB2B3FF2C2F9CF5888D8B33000000000000 0000000000000000000000000000000000000000000000000000000000001818 AE8D1616ABF30606A6FF454AA3FE0202A6FF191AC7FF1717ADF01818AE890000 000000000000000000000000000000000000000000001919AE7D0707A9FD2020 D2FD1E1ECEFE0E0FB7FD0205A4A40304A8FC1A1AC9FF2020D1FD1F1FCBFD0A0A A9FD1919AE5D0000000000000000000000001A1AAF5C0606A8FE1F1FD0FB0303 A8B81415C0F80101A6FF00000000000AA00E1C1DCDFD1315C0F90303A8B71D1D CDFA0606A7FE1A1AAF7D00000000000000001414ABE62323D5FD0303A87A0000 00001D1DCEF50A0AA9FC00000000000000000303A8FD1A1BCAF2000000000202 A7772020D1FD1414ABE600000000000000000D0DABF91D1DCFFA000000000B0B B5902121D3FD0C0CAAD500000000000000000909AACB2323D6FD0D0DB8950000 00001F1FD1FB1111ABFA00000000000000001313ABDF2727DBFD1F1FD0F91D1D CEFD0707A8E61A1AAF3300000000000000001A1AAF330808AAE92222D4FD1D1D CFF91D1DCEFD1313ABE900000000000000001A1AAF5C0E0EAAE71010ABF41616 ABF71A1AAF33000000000000000000000000000000001A1AAF5C0D0DAAC30B0B AAEE0B0BA9E21A1AAF33000000008A8F8D4F858A887F858A887F858A887F858A 887F858A887F858A887F858A887F858A887F858A887F858A887F89918E530000 0000000000000000000000000000868B897DFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7F858A887F0000 0000000000000000000000000000868B897DFFFFFF7FEFF0F07FEEEFEF7FEEEF EF7FEEEFEF7FEEEFEF7FEEEFEF7FEFF0F07FEFF0F07FFFFFFF7F858A887F0000 0000000000000000000000000000868B897DFFFFFF7FEFF0F07FC7C8C87F979B 9AD0858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF8A8F8DAB868B897DFFFFFF7FEFF0F07FEFF0F07F878C 8AFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF868B897DFFFFFF7FEFF0F07FC7C8C87F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEFF0F07FEEEFEF7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEEEFEF7FC5C6C67F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEDEEEE7FECEDED7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFEFEFE7FECECEC7FC3C4C47F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFFF3F3F3FF858A88FF868B897DF9F9F97FEBEBEB7FEAEAEA7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEEEE EEFFF6F7F7FFC3C4C3FF858A88FF868B897DF2F3F37FF3F4F47FF2F2F27F878C 8AFDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FF898E8CFF898E 8CFF898E8CFF898E8CFF858A88FF8B908F50868B897F868B897F868B897F868B 89FDFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFF959A98FFFAFA FAFFF7F8F8FFE2E4E3FF858A88FF00000000000000000000000000000000868B 89FBF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFFAFAFAFF959A98FFFAFA FAFFE2E3E3FF858A88FF858A88CC00000000000000000000000000000000868B 89FBF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFBFBFFD4D4D4FF969A98FFE2E4 E3FF858A88FF858A887F0000000000000000000000000000000000000000898E 8CA3868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88BF858A887F0000000000000000000000000000000000000000000000005C5C 5C015E5F5FBB5C5C5CFF5C5C5CFF5C5C5CFF5C5C5CFF5E5F5FBB5C5C5C010000 00000000000000000000000000000000000001446C6401446DEE01446CFF0344 6BFF5B5C5CFF899595FF8A9797FF8A9797FF899595FF5B5C5CFF03446BFF0144 6CFF01446CED00436B5D0000000000426A0401446DF32484C0FF3E7EA4FF646D 70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E7EFF5E5E5EFF646C6EFF407C A1FF237FB9FF01436CF000426A0200426A1002466FF82788C6FF646F71FFF1F1 F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFE0E0E0FFF2F2F2FF646D 6EFF2787C5FF00426AFC00426A0800426A1002466FF82788C6FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466FF82687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5B3FFEEEFEFFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466FF82687C5FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEFEFFFEBEDEDFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2B1FFE8EAEAFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EAEAFFD9DBDBFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DADAFFCACDCCFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BAB9FFB5B9B8FFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF646866FFFFFF FFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFFFFFFFFFFFFFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF646866FFFFFF FFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFFFFFFFFFFFFFF646967FF2787 C5FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF636D70FFEDEE EDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFEFEFF646967FF2787C5FF2787 C5FF2787C5FF00426AFC00426A0800426A0401436CF3237FBAFF3B7DA7FF646F 73FF686C6AFF686C6AFF686C6AFF686C6AFF686C6AFF3D7CA3FF3D7CA3FF3D7C A3FF227BB3FF01436BF000426A020000000001436B6401436CEE01446CFF0144 6CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01436BED00426A5D0000000000000000000000008F9391BF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF8F9391BF00000000000000000000000000000000858A88FFF1F1F1FFEBEB EBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9 E9FF858A88FF0000000000000000874A207F874A20FF858A88FFE7E7E7FFD7D7 D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5D5FFD5D5D5FFDADADAFFDCDC DCFF858A88FF874A20FF874A207F874A20FFDDBB9CFF777C7AFFD9D9D9FFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBCBCFFBCBCBCFFBFBFBFFFC0C0 C0FF777C7AFFDDBB9CFF874A20FF874A20FFDDBB9CFF6A5B4EFFC9C9C9FF9C9C 9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB9CFF86522CFF86512BFF8651 2BFF86512BFF86512BFF86512BFF86522CFF86522CFF86522CFF86522CFF8652 2CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFDDBB9CFF874A20FF874920C0874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874920C000000000000000006A6E6DFFCCCDCDFA6569 68F4AAACABF96C6F6EFEAEB0AFFB6B6E6DFDB0B2B1FA6E7271FDB2B3B3FB6C70 6FFD0000000000000000000000000000000000000000727675FAC7C9C8EB797E 7BE89E9F9EE98E8F8FF6ADAEADED8C8D8CF1AEAFAEE77C807FFFB7B8B7EB7679 78F50000000000000000000000000000000000000000858988EFC9CBCAA28388 85E8C4C4C4E9838885F0CACCCBEB9B9D9CE8C0C0C0DF7C807FFFE2E3E3F28B8E 8DF0000000000000000000000000000000008C908F99858988ECF6F6F6FB999C 9BFFABADACFF838885E7DEDFDEED9C9F9EC6CCCECDDB989B9AFFEBEBEBF09699 98E6959797670000000000000000000000008C908FFDFAFAFAFF949897F9999C 9BD6999C9BEF969A98FFEDEEEEF1949997CB9B9E9DFF989B9AFF8B8E8DFFFFFF FFDE8F9392BC0000000000000000000000008C908F99919493FFADB0AFFF0000 000000000000909492FF9DA09FFD989C9AE50000000000000000A5A8A7677B7E 7DC9989B9AA40000000000000000FFFFFF00898D8B94858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF898E8C94FFFFFF00FFFFFF00858A88FEFDFDFDFFFEFEFEFFFEFE FEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFAFAFAFFFAFA FAFFF9F9F9FF888D8BFEFFFFFF00FFFFFF00858A88FFFDFDFDFFD6BEA8FFD7BF A9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1 ABFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFEFEFEFFD7BFA9FFAF97 81FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF9781FFAF9781FFAF9781FFDAC2 ACFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3ADFFDBC3ADFFDBC3ADFFDBC3 ADFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4AEFFDCC4AEFFDCC4AEFFEBEB EBFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFD9C1ABFFAF97 81FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF9781FFAF9781FFDDC5AFFFECEC ECFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFDAC2ACFFDAC2 ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDEC6B0FFEEEE EEFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFDAC2ACFFDBC3 ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDFC7B1FFDFC7B1FFF0F0 F0FFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFBFBFBFFDAC2ACFFAF97 81FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFE0C8B2FFF2F2 F2FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFFBFBFBFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8B2FF000000FFE1C9B3FFF4F4 F4FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFFAFAFAFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF5F5F5FFF6F6F6FFF6F6 F6FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFF9F9F9FFDBC3ADFFB098 82FFB09882FFB09882FFB09882FFE0C8B2FF000000FFF7F7F7FFF8F8F8FFF7F7 F7FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFF9F9F9FFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF7F7F7FFF9F9F9FFF8F8 F8FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FEF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8F8FF000000FFF8F8F8FFF8F8 F8FFF8F8F8FF888D8BFEFFFFFF00FFFFFF00898E8C94858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8D94FFFFFF00808080FF808080FF808080FF808080FF8080 80FF808080FF808080FF0000000000000000000000003516E8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF808080FF00000000583EE0FF2A0BE4FF1A00A8FF000000000000 0000000000000000000000000000808080FF808080FF808080FF808080FF8080 80FFFFFFFFFF808080FF1F00D3FF6E56E4FFCBC2F9FF1A00A8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1F00CCFF9F91F0FFC3BAF8FFCFC7F9FF1A00A8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF583E E0FF3817EAFFBEB4F6FFAC9FF6FF7C66F0FFCAC2F9FF1B00B7FF1A00A8FF1A00 A8FF1A00A8FF1A00A8FF1E00CBFF808080FF808080FF808080FF1F01D5FF745D E6FFC1B7F8FF8F7CF2FF745DEFFF725BF0FFC8BFF9FFC5BBFAFFC2B7F9FFBDB2 F8FFB8ADF7FFB3A7F6FF1A00A8FFFFFFFFFFFFFFFFFF1E00D2FF9687EFFFAEA1 F6FF735CEFFF6B53EEFF6B52F1FF6A51F2FF694EF3FF664AF4FF5F43F3FF5537 F4FF4929F7FFB2A5F7FF1A00A8FF808080FF1E00D2FFAA9CF4FF8D79F2FF5B40 EEFF5B42EEFF6146EEFF6448F1FF5F43F4FF4C2BFAFF3B17FFFF2E06FFFF2701 FFFF2700FFFFAB9EF8FF1A00A8FFFFFFFFFF1A00A8FF9686F1FF745DEFFF2B07 FFFF2500FAFF2400F4FF2500EEFF2400EEFF2700F4FF2700F8FF2600F8FF2500 F4FF2500EDFF9E8DF8FF1A00A8FFFFFFFFFFFFFFFFFF1C00C4FF6D57E8FF7963 F0FF2300E7FF2200E0FF2300EAFF2500F4FF2800FCFF2902FFFF2902FFFF2600 FCFF2600F3FF9F8EF9FF1A00A8FF808080FF808080FFFFFFFFFF1F00D3FF4325 EBFF8D78F3FF3914FFFF2400EEFF2700F9FFA796FEFFA999FFFFA999FFFFA796 FEFFA393FCFFA090FAFF1A00A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF583E E0FF2302DEFF8873F3FF6B4FF8FF2700FEFFA898FFFF1E00BDFF1A00A8FF1A00 A8FF1A00A8FF1A00A8FF1E00CBFF808080FF808080FF808080FF808080FF8080 80FF808080FF1D00C0FF6D53EEFF8C77FCFFA898FFFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000002000D4FF4022EFFFA08EFDFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000005740E0FF2100DDFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000003816E8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003516E8FF000000000000000000000000808080FF808080FF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FF280AE2FF5840E0FF00000000808080FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 00001A00A8FFC5BDF8FF6953E4FF1F00D3FF808080FFFFFFFFFF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FFCAC1F9FFBFB4F7FF9C8DF0FF1F00CAFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF1E00CBFF1A00A8FF1A00A8FF1A00A8FF1A00 A8FF1B00B7FFC7BFF8FF775FF0FFAA9CF6FFBDB3F6FF3817EAFF583EE0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF1A00A8FFB0A3F6FFB3A7F6FFB7ACF7FFBCB1 F7FFC0B5F8FFC4BAF9FF7058F2FF765DF3FF917EF5FFC3B9F9FF745FE6FF1F01 D5FF808080FF808080FF808080FF1A00A8FFAD9FF5FF3512FBFF4121F6FF4B2E F3FF593EF1FF6349F2FF694FF4FF6F53F5FF7157F4FF7A63F4FFB2A5F8FF9989 F0FF1F00D3FFFFFFFFFFFFFFFFFF1A00A8FFA697F5FF2200E8FF2300E5FF2500 F1FF2F0BFFFF4627FBFF6143F6FF684BF8FF694DF7FF684DF5FF654AF3FF917E F5FFADA1F4FF1F00D3FF808080FF1A00A8FF9887F3FF1F00D2FF2000D7FF2300 E1FF2300EAFF2500F2FF2600F7FF2904FFFF330EFFFF3B19FFFF3F1DFEFF7B63 F4FF9988F2FF1A00A8FFFFFFFFFF1A00A8FF9887F3FF1F00D2FF2000DBFF2300 E5FF2500EFFF2700F8FF2901FFFF2B04FFFF2901FFFF3009FFFF846DF9FF715A ECFF1F00C5FFFFFFFFFFFFFFFFFF1A00A8FF9887F3FF9887F3FF9B8AF6FF9F8E F9FFA291FBFFA695FDFF3009FFFF340EFFFF5634FFFF9884FCFF472DECFF2000 D4FFFFFFFFFF808080FF808080FF1E00CBFF1A00A8FF1A00A8FF1A00A8FF1A00 A8FF1D00BAFFA696FDFF3510FFFF7D64FFFF937FFCFF2302E3FF5740E0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 00001A00A8FFA696FDFF937DFFFF735CF4FF1D00C1FF808080FF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FF9E8CFCFF4324F0FF2100D5FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00001A00A8FF1F00DCFF5C41E0FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003516E8FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end object ContextMenu: TPopupMenu left = 136 top = 136 object miUndoContext: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000066DBEAFF11A6C2FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000043C4DBFF43C5D8FF0000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFF5DDAE9FF23A6C0FF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000002ACC8FF88E7F2FF11A2C2FF00000000000000000000 0000000000000000000000A0C4FF76EDFBFF00A0C4FF00000000000000000000 00000000000000A0C4FF6DE6F5FF76E2EFFF19A3C1FF00000000000000000000 00000000000000A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0FF00000000000000000000 000000A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFFF000000000000000000A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5FF15A0BCFF0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDFF00000000000000000000000000A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FF13A3C1FF000000000000000000000000000000000000 000000A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7FF14A1BCFF14A3C1FF00000000000000000000000000000000000000000000 00000000000000A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159F BBFF1BA1BBFF0000000000000000000000000000000000000000000000000000 0000000000000000000000A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miSeparator1: TMenuItem Caption = '-' end object miCutContext: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000E0EAAFF1010ABFF1616ABFF000000000000000000000000000000000000 0000000000000D0DAAFF0B0BAAFF0B0BA9FF0000000000000000000000001313 ABFF2727DBFF1F1FD0FF1D1DCEFF0707A8FF0000000000000000000000000000 00000808AAFF2222D4FF1D1DCFFF1D1DCEFF1313ABFF00000000000000000D0D ABFF1D1DCFFF000000000B0BB5FF2121D3FF0C0CAAFF00000000000000000909 AAFF2323D6FF0D0DB8FF000000001F1FD1FF1111ABFF00000000000000001414 ABFF2323D5FF00000000000000001D1DCEFF0A0AA9FF00000000000000000303 A8FF1A1BCAFF00000000000000002020D1FF1414ABFF00000000000000000000 00000606A8FF1F1FD0FF0303A8FF1415C0FF0101A6FF00000000000000001C1D CDFF1315C0FF0303A8FF1D1DCDFF0606A7FF0000000000000000000000000000 0000000000000707A9FF2020D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1A C9FF2020D1FF1F1FCBFF0A0AA9FF000000000000000000000000000000000000 000000000000000000001818AEFF1616ABFF0606A6FF454AA3FF0202A6FF191A C7FF1717ADFF1818AEFF00000000000000000000000000000000000000000000 000000000000000000000000000000000000848989FFC3C6C5FFAFB2B3FF2C2F 9CFF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B90 8EFF878C8AFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9 A8FF888D8BFF0000000000000000000000000000000000000000000000000000 000000000000000000008A8F8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6 B5FFB5BAB8FF888D8BFF00000000000000000000000000000000000000000000 00000000000000000000888D8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8 B6FFCBCECDFF888D8BFF00000000000000000000000000000000000000000000 0000000000008A8F8DFFB0B5B3FFF6F7F7FF888D8BFF00000000000000008B90 8EFFC9CECCFFABAFAEFF888D8BFF000000000000000000000000000000000000 000000000000888D8BFFD0D4D2FFEFF0EFFF8F9492FF00000000000000000000 0000A7ACAAFFC3C8C6FF8A8F8DFF000000000000000000000000000000000000 0000000000008B908EFFF7F7F7FF888D8BFF0000000000000000000000000000 00008D9190FFD0D3D2FF8C918FFF000000000000000000000000000000000000 00000000000000000000888D8BFF909593FF0000000000000000000000000000 0000888D8BFF8C918FFF00000000000000000000000000000000 } OnClick = actEditCutExecute end object miCopyContext: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CFF868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF000000000000000000000000000000000000 00000000000000000000868B89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF0000000000000000000000000000 00000000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88FF000000000000 00000000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF000000000000 00000000000000000000979B9AFF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditCopyExecute end object miPasteContext: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000001436CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BFF0000000000000000000000000143 6CFF237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BFF00000000000000000245 6EFF2687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFF00000000000000000144 6DFF2484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CFF00000000000000000000 000001446DFF01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CFF0000000000000000000000000000 00000000000000000000000000005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FFF0000000000000000000000000000000000000000 } OnClick = actEditPasteExecute end object miDeleteContext: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8FFF919493FFADB0AFFF0000000000000000909492FF9DA09FFF989C9AFF0000 000000000000000000007B7E7DFF989B9AFF0000000000000000000000008C90 8FFFFAFAFAFF949897FF999C9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E 9DFF989B9AFF8B8E8DFFFFFFFFFF8F9392FF0000000000000000000000008C90 8FFF858988FFF6F6F6FF999C9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCE CDFF989B9AFFEBEBEBFF969998FF000000000000000000000000000000000000 0000858988FFC9CBCAFF838885FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0 C0FF7C807FFFE2E3E3FF8B8E8DFF000000000000000000000000000000000000 0000727675FFC7C9C8FF797E7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAF AEFF7C807FFFB7B8B7FF767978FF000000000000000000000000000000000000 00006A6E6DFFCCCDCDFF656968FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2 B1FF6E7271FFB2B3B3FF6C706FFF000000000000000000000000874920FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920FF874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF00000000874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF00000000000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391FF0000000000000000 } OnClick = actEditDeleteExecute end object miSeparator2: TMenuItem Caption = '-' end object miSelectAllContext: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000898E 8CFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000000000000000858A 88FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFF0000000000000000858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFF0000000000000000858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFF0000000000000000898D 8BFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8CFF00000000 } OnClick = actEditSelectAllExecute end end object pmEncodingLeft: TPopupMenu left = 256 top = 144 end object pmEncodingRight: TPopupMenu left = 319 top = 144 end end doublecmd-0.9.8/src/fdialogbox.pas0000644000175000001440000006306213573160507016156 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains realization of Dialog API 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 . } 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; type { TDialogBox } TDialogBox = class(TForm) DialogButton: TButton; DialogBitBtn: TBitBtn; DialogFileNameEdit: TFileNameEdit; DialogComboBox: TComboBox; DialogListBox: TListBox; DialogCheckBox: TCheckBox; DialogGroupBox: TGroupBox; DialogLabel: TLabel; DialogPanel: TPanel; DialogEdit: TEdit; DialogMemo: TMemo; DialogImage: TImage; DialogTabSheet: TTabSheet; DialogScrollBox: TScrollBox; DialogRadioGroup: TRadioGroup; DialogPageControl: TPageControl; DialogProgressBar: TProgressBar; DialogDividerBevel: TDividerBevel; // Dialog events procedure DialogBoxShow(Sender: TObject); // 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); private FRect: TRect; FText: String; 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 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 SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; implementation uses LCLStrConsts, LazFileUtils, DCClassesUtf8, DCOSUtils, uShowMsg, uDebug, uTranslator, uGlobs; 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 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): LongBool; var Dialog: TDialogBox; begin Dialog:= TDialogBox.Create(LRSData, DlgProc); try with Dialog do begin 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); 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); end else Result := False; end; function DialogBoxLFMFile(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; dcpcall; var lfmStringList: TStringListEx; begin if Assigned(lfmFileName) then begin lfmStringList:= TStringListEx.Create; try lfmStringList.LoadFromFile(lfmFileName); Result := DialogBox(LFMToLRS(lfmStringList.Text), DlgProc); finally FreeAndNil(lfmStringList); end; end else Result := False; end; function SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Key: Word; AText: String; Index: Integer; Control: TControl; lText: PAnsiChar absolute lParam; wText: PAnsiChar absolute wParam; pResult: Pointer absolute Result; DialogBox: TDialogBox absolute pDlg; begin // find component by name for Index:= 0 to DialogBox.ComponentCount - 1 do begin Control:= TControl(DialogBox.Components[Index]); if CompareText(Control.Name, DlgItemName) = 0 then Break; end; // process message case Msg of DM_CLOSE: begin DialogBox.Close; if wParam <> -1 then DialogBox.ModalResult:= wParam; end; DM_ENABLE: begin Result:= PtrInt(Control.Enabled); if wParam <> -1 then Control.Enabled:= Boolean(wParam); 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)); 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); 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); 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); 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); 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; 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]); 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]; 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; 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 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; 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); 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 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; 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; 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; 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(nil); end; destructor TDialogBox.Destroy; begin inherited Destroy; FTranslator.Free; end; procedure TDialogBox.DialogBoxShow(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_INITDIALOG,0,0); end; procedure TDialogBox.ButtonClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.ButtonEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ButtonExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ComboBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ComboBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.EditClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.EditDblClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt(PAnsiChar(sText)), 0); end; end; procedure TDialogBox.EditEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.EditExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ListBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ListBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), 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(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.CheckBoxChange(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TCheckBox).Checked),0); end; end; initialization {.$I fdialogbox.lrs} end. doublecmd-0.9.8/src/fdescredit.pas0000644000175000001440000001111412733420477016145 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Dialog for editing 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 fDescrEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, ActnList, uDescr, uFormCommands, uFileView; type { TfrmDescrEdit } TfrmDescrEdit = class(TForm, IFormCommands) actSaveDescription: TAction; ActionList: TActionList; btnOK: TBitBtn; btnCancel: TBitBtn; cbEncoding: TStaticText; 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; 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 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 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-0.9.8/src/fdescredit.lrt0000644000175000001440000000047212351626461016165 0ustar alexxusersTFRMDESCREDIT.CAPTION=File/folder comment TFRMDESCREDIT.LBLEDITCOMMENTFOR.CAPTION=E&dit comment for: TFRMDESCREDIT.LBLENCODING.CAPTION=&Encoding: TFRMDESCREDIT.LBLFILENAME.CAPTION=??? TFRMDESCREDIT.BTNOK.CAPTION=&OK TFRMDESCREDIT.BTNCANCEL.CAPTION=&Cancel TFRMDESCREDIT.ACTSAVEDESCRIPTION.CAPTION=Save Description doublecmd-0.9.8/src/fdescredit.lfm0000644000175000001440000000607212727304633016145 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 OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '1.6.0.4' 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 = asrBottom 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 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 btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 202 Height = 30 Top = 252 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 1 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 298 Height = 30 Top = 252 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 18 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 2 end object cbEncoding: TStaticText AnchorSideLeft.Control = lblEncoding AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCancel AnchorSideBottom.Side = asrCenter Left = 69 Height = 1 Top = 266 Width = 100 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 TabOrder = 3 end object ActionList: TActionList left = 312 top = 8 object actSaveDescription: TAction Caption = 'Save Description' OnExecute = actExecute end end end doublecmd-0.9.8/src/fdeletedlg.pas0000644000175000001440000000237613110106646016127 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-0.9.8/src/fdeletedlg.lfm0000644000175000001440000000247113110106646016116 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 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 inherited btnCancel: TBitBtn Left = 221 end inherited btnOK: TBitBtn Left = 311 end end end doublecmd-0.9.8/src/fcopymovedlg.pas0000644000175000001440000002552713104055077016535 0ustar alexxusersunit fCopyMoveDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, KASPathEdit, uFileSource, uFileViewNotebook, uFileSourceOperation, uFileSourceOperationOptionsUI, uOperationsManager, uFormCommands; type TCopyMoveDlgType = (cmdtCopy, cmdtMove); { 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; function GetQueueIdentifier: TOperationsManagerQueueIdentifier; procedure SetQueueIdentifier(AValue: TOperationsManagerQueueIdentifier); function ShowTabsSelector: integer; procedure TabsSelector(Sender: TObject); procedure TabsSelectorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ShowOptions(bShow: Boolean); procedure UpdateSize; property 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); end; implementation {$R *.lfm} uses fMain, uFileSourceProperty, 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; 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; 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; ShowOptions(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-0.9.8/src/fcopymovedlg.lrt0000644000175000001440000000071112362413601016533 0ustar alexxusersTFRMCOPYDLG.CAPTION=Copy file(s) TFRMCOPYDLG.BTNOPTIONS.CAPTION=O&ptions TFRMCOPYDLG.BTNADDTOQUEUE.CAPTION=A&dd To Queue TFRMCOPYDLG.BTNCANCEL.CAPTION=&Cancel TFRMCOPYDLG.BTNSAVEOPTIONS.CAPTION=Sa&ve these options as default TFRMCOPYDLG.MNUNEWQUEUE.CAPTION=New queue TFRMCOPYDLG.MNUQUEUE1.CAPTION=Queue 1 TFRMCOPYDLG.MNUQUEUE2.CAPTION=Queue 2 TFRMCOPYDLG.MNUQUEUE3.CAPTION=Queue 3 TFRMCOPYDLG.MNUQUEUE4.CAPTION=Queue 4 TFRMCOPYDLG.MNUQUEUE5.CAPTION=Queue 5 doublecmd-0.9.8/src/fcopymovedlg.lfm0000644000175000001440000002602013005211725016507 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 = poScreenCenter 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 Color = clForm ParentColor = False 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 Color = clForm ParentColor = False 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 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 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 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 = 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 BevelOuter = bvNone ClientHeight = 39 ClientWidth = 596 Color = clForm ParentColor = False 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 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' 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-0.9.8/src/fconnectionmanager.pas0000644000175000001440000001415112612505011017655 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-0.9.8/src/fconnectionmanager.lrt0000644000175000001440000000051712023046500017673 0ustar alexxusersTFRMCONNECTIONMANAGER.CAPTION=Connection manager TFRMCONNECTIONMANAGER.GBCONNECTTO.CAPTION=Connect to: TFRMCONNECTIONMANAGER.BTNCONNECT.CAPTION=C&onnect TFRMCONNECTIONMANAGER.BTNADD.CAPTION=A&dd TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION=&Edit TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION=&Delete TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION=&Cancel doublecmd-0.9.8/src/fconnectionmanager.lfm0000644000175000001440000002745312023046500017660 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-0.9.8/src/fconfirmcommandline.pas0000644000175000001440000000461412532643273020050 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-0.9.8/src/fconfirmcommandline.lrt0000644000175000001440000000103612532643273020061 0ustar alexxusersTTFRMCONFIRMCOMMANDLINE.CAPTION=TfrmConfirmCommandLine TTFRMCONFIRMCOMMANDLINE.BTNCANCEL.CAPTION=&Cancel TTFRMCONFIRMCOMMANDLINE.BTNOK.CAPTION=&OK TTFRMCONFIRMCOMMANDLINE.LBLECOMMANDLINE.EDITLABEL.CAPTION=Command line: TTFRMCONFIRMCOMMANDLINE.LBLECOMMANDLINE.TEXT=lbleCommandLine TTFRMCONFIRMCOMMANDLINE.LBLEPARAMETERS.EDITLABEL.CAPTION=Parameters: TTFRMCONFIRMCOMMANDLINE.LBLEPARAMETERS.TEXT=lbleParameters TTFRMCONFIRMCOMMANDLINE.LBLESTARTPATH.EDITLABEL.CAPTION=Start path: TTFRMCONFIRMCOMMANDLINE.LBLESTARTPATH.TEXT=lbleStartPath doublecmd-0.9.8/src/fconfirmcommandline.lfm0000644000175000001440000000641012532643273020037 0ustar alexxusersobject TfrmConfirmCommandLine: TTfrmConfirmCommandLine Left = 403 Height = 205 Top = 360 Width = 500 ActiveControl = btnOK Caption = 'TfrmConfirmCommandLine' 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 Text = 'lbleCommandLine' 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 Text = 'lbleParameters' 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 Text = 'lbleStartPath' end end doublecmd-0.9.8/src/fchecksumverify.pas0000644000175000001440000001124413434540707017230 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Verify checksum dialog 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 fCheckSumVerify; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Buttons, SynEdit, 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); public { public declarations } end; procedure ShowVerifyCheckSum(const VerifyResult: TVerifyChecksumResult); implementation {$R *.lfm} uses uLng, uGlobs, uClassesEx; 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), gLogSuccessColor); AddHeader(rsCheckSumVerifyMissing, Length(VerifyResult.Missing), gLogErrorColor); AddHeader(rsCheckSumVerifyBroken, Length(VerifyResult.Broken), gLogErrorColor); AddHeader(rsCheckSumVerifyReadError, Length(VerifyResult.ReadError), gLogErrorColor); // Add broken files ProcessResult(VerifyResult.Broken, rsCheckSumVerifyBroken, gLogErrorColor); // Add read error files ProcessResult(VerifyResult.ReadError, rsCheckSumVerifyReadError, gLogErrorColor); // Add missing files ProcessResult(VerifyResult.Missing, rsCheckSumVerifyMissing, gLogErrorColor); // Add good files ProcessResult(VerifyResult.Success, rsCheckSumVerifySuccess, gLogSuccessColor); 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); begin Special:= True; FG:= TColor(PtrInt(seCheckSumVerify.Lines.Objects[Line - 1])); 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; end. doublecmd-0.9.8/src/fchecksumverify.lrj0000644000175000001440000000047413434540707017237 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-0.9.8/src/fchecksumverify.lfm0000644000175000001440000002040713434540707017224 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-0.9.8/src/fchecksumcalc.pas0000644000175000001440000001223013347416035016621 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Calculate checksum dialog 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 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; lblSaveTo: TLabel; lbHashAlgorithm: TListBox; procedure cbSeparateFileChange(Sender: TObject); procedure edtSaveToChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); private FFileName: String; FAlgorithm: THashAlgorithm; public { public declarations } end; function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; 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 QueueId: TOperationsManagerQueueIdentifier): Boolean; begin with TfrmCheckSumCalc.Create(Application) do try FFileName:= sFileName; Result:= (ShowModal = mrOK); if Result then begin sFileName:= edtSaveTo.Text; SeparateFile:= cbSeparateFile.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:= Trim(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(Trim(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 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.FormShow(Sender: TObject); begin edtSaveTo.Text:= FFileName + ExtensionSeparator; lbHashAlgorithmSelectionChange(lbHashAlgorithm,FALSE); end; procedure TfrmCheckSumCalc.lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); begin FAlgorithm:= THashAlgorithm(lbHashAlgorithm.ItemIndex); edtSaveTo.Text:= ChangeFileExt(edtSaveTo.Text, '.' + HashFileExt[FAlgorithm]); end; end. doublecmd-0.9.8/src/fchecksumcalc.lrt0000644000175000001440000000043612567134601016643 0ustar alexxusersTFRMCHECKSUMCALC.CAPTION=Calculate checksum... TFRMCHECKSUMCALC.LBLSAVETO.CAPTION=&Save checksum file(s) to: TFRMCHECKSUMCALC.CBSEPARATEFILE.CAPTION=C&reate separate checksum file for each file TFRMCHECKSUMCALC.CBOPENAFTERJOBISCOMPLETE.CAPTION=Open checksum file after job is completed doublecmd-0.9.8/src/fchecksumcalc.lfm0000644000175000001440000000527212567134601016623 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 OnShow = FormShow 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 = cbOpenAfterJobIsComplete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtSaveTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 0 Height = 244 Top = 100 Width = 384 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 ItemHeight = 0 OnSelectionChange = lbHashAlgorithmSelectionChange ScrollWidth = 150 TabOrder = 3 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 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-0.9.8/src/fbuttonform.pas0000644000175000001440000000604212673327730016403 0ustar alexxusersunit fButtonForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Menus, uOperationsManager, uFileSource; type { TfrmButtonForm } TfrmButtonForm = class(TForm) 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 function GetQueueIdentifier: TOperationsManagerQueueIdentifier; public constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent; FileSource: IFileSource); reintroduce; property QueueIdentifier: TOperationsManagerQueueIdentifier read GetQueueIdentifier; end; var frmButtonForm: TfrmButtonForm; implementation uses uFileSourceProperty; {$R *.lfm} 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; constructor TfrmButtonForm.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; constructor TfrmButtonForm.Create(TheOwner: TComponent; FileSource: IFileSource); begin 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; end; end. doublecmd-0.9.8/src/fbuttonform.lrt0000644000175000001440000000060012567134601016406 0ustar alexxusersTFRMBUTTONFORM.BTNADDTOQUEUE.CAPTION=A&dd To Queue TFRMBUTTONFORM.BTNCANCEL.CAPTION=&Cancel TFRMBUTTONFORM.BTNOK.CAPTION=&OK TFRMBUTTONFORM.MNUNEWQUEUE.CAPTION=New queue TFRMBUTTONFORM.MNUQUEUE1.CAPTION=Queue 1 TFRMBUTTONFORM.MNUQUEUE2.CAPTION=Queue 2 TFRMBUTTONFORM.MNUQUEUE3.CAPTION=Queue 3 TFRMBUTTONFORM.MNUQUEUE4.CAPTION=Queue 4 TFRMBUTTONFORM.MNUQUEUE5.CAPTION=Queue 5 doublecmd-0.9.8/src/fbuttonform.lfm0000644000175000001440000001335013005213245016357 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 Color = clForm ParentColor = False 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 Color = clForm ParentColor = False 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-0.9.8/src/fbenchmark.pas0000644000175000001440000001130013215163303016112 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, 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; ACount: Integer; 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 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:= GetTickCount64; 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:= GetTickCount64 - 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-0.9.8/src/fbenchmark.lrj0000644000175000001440000000142413215163303016124 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-0.9.8/src/fbenchmark.lfm0000644000175000001440000000314613573160507016130 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-0.9.8/src/fattributesedit.pas0000644000175000001440000001506213431627562017241 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-0.9.8/src/fattributesedit.lrt0000644000175000001440000000234712023046500017240 0ustar alexxusersTFRMATTRIBUTESEDIT.CAPTION=Choose attributes TFRMATTRIBUTESEDIT.CBSYMLINK.CAPTION=&Symlink TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION=&Directory TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION=Owner TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION=Write TFRMATTRIBUTESEDIT.LBLREAD.CAPTION=Read TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION=Execute TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION=Group TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION=Other TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION=Bits: TFRMATTRIBUTESEDIT.CBSUID.CAPTION=SUID TFRMATTRIBUTESEDIT.CBSGID.CAPTION=SGID TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION=Sticky TFRMATTRIBUTESEDIT.GBWINGENERAL.CAPTION=General attributes TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION=&Archive TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION=Read o&nly TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION=&Hidden TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION=S&ystem TFRMATTRIBUTESEDIT.GBNTFSATTRIBUTES.CAPTION=NTFS attributes TFRMATTRIBUTESEDIT.CBCOMPRESSED.CAPTION=Co&mpressed TFRMATTRIBUTESEDIT.CBENCRYPTED.CAPTION=&Encrypted TFRMATTRIBUTESEDIT.CBTEMPORARY.CAPTION=&Temporary TFRMATTRIBUTESEDIT.CBSPARSE.CAPTION=S&parse TFRMATTRIBUTESEDIT.LBLTEXTATTRS.CAPTION=As te&xt: TFRMATTRIBUTESEDIT.BTNRESET.CAPTION=&Reset TFRMATTRIBUTESEDIT.BTNOK.CAPTION=&OK TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION=&Cancel doublecmd-0.9.8/src/fattributesedit.lfm0000644000175000001440000003402212023046500017210 0ustar alexxusersobject frmAttributesEdit: TfrmAttributesEdit Left = 388 Height = 284 Top = 144 Width = 329 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsSizeToolWin 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 Kind = bkOK ModalResult = 1 OnClick = btnOkClick TabOrder = 1 end object btnCancel: TBitBtn Left = 201 Height = 32 Top = 0 Width = 118 Caption = '&Cancel' Constraints.MinHeight = 30 Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 2 end end end doublecmd-0.9.8/src/fMsg.pas0000644000175000001440000000543113320373360014721 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; procedure TfrmMsg.FormCreate(Sender: TObject); begin iSelected:= -1; 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; 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 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-0.9.8/src/fMsg.lfm0000644000175000001440000000265013044671417014723 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 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 Color = clForm ParentColor = False TabOrder = 0 end object mnuOther: TPopupMenu left = 120 top = 48 end end doublecmd-0.9.8/src/fFindDlg.pas0000644000175000001440000022763113604734735015526 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Find dialog, with searching in thread Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) 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 fFindDlg; {$mode objfpc}{$H+} {$include calling.inc} interface uses Graphics, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Menus, EditBtn, Spin, Buttons, DateTimePicker, KASComboBox, fAttributesEdit, uDsxModule, DsxPlugin, uFindThread, uFindFiles, uSearchTemplate, fSearchPlugin, uFileView, types, DCStrUtils, ActnList, uOSForms, uShellContextMenu, uExceptions, uFileSystemFileSource, uFormCommands, uHotkeyManager, LCLVersion; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5)} {$DEFINE FIX_DEFAULT} {$ENDIF} const HotkeysCategory = 'Find files'; type { TfrmFindDlg } TfrmFindDlg = class(TForm, 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; 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; 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; 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; 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 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 cbOpenedTabsChange(Sender: TObject); procedure cbPartialNameSearchChange(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure cbTextRegExpChange(Sender: TObject); procedure cbSelectedFilesChange(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); procedure CancelCloseAndFreeMem; procedure LoadHistory; procedure SaveHistory; 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; 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 FillFindOptions(out FindOptions: TSearchTemplateRec; SetStartPath: boolean); procedure FindOptionsToDSXSearchRec(const AFindOptions: TSearchTemplateRec; out SRec: TDsxSearchRecord); 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(AChecked: boolean; const ARegExpr: string): boolean; procedure SetWindowCaption(AWindowCaptionStyle: byte); 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 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, uFileSource, uFileSourceUtil, uSearchResultFileSource, uFile, uFileViewNotebook, uKeyboard, uOSUtils, uArchiveFileSourceUtil, DCOSUtils, RegExpr, uDebug, uShowMsg, uConvEncoding; 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; 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; 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; 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 := lbSearchTemplates.Items[lbSearchTemplates.Count - 1]; 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; 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); Height := pnlFindFile.Height + 22; DsxPlugins := TDSXModuleList.Create; DsxPlugins.Assign(gDSXPlugins); FoundedStringCopy := TStringListTemp.Create; FoundedStringCopy.OnChange := @FoundedStringCopyChanged; 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); // 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; // 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 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.CanFocus and (Sender = cbUsePlugin) then begin cmbPlugin.SetFocus; cmbPlugin.SelectAll; end; end; { TfrmFindDlg.cmbEncodingSelect } procedure TfrmFindDlg.cmbEncodingSelect(Sender: TObject); var SingleByte: Boolean; begin SingleByte:= SingleByteEncoding(cmbEncoding.Text); cbTextRegExp.Enabled := cbFindText.Checked and SingleByte 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; { 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; 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; 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); EnableControl(cbNotContainingText, cbFindText.Checked); EnableControl(cbTextRegExp, cbFindText.Checked); lblEncoding.Enabled := cbFindText.Checked; cbReplaceText.Checked := False; cmbEncodingSelect(nil); if not FUpdating and cmbFindText.Enabled and cmbFindText.CanFocus 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; cbNotContainingText.Checked := False; cmbEncoding.ItemIndex := 0; cmbEncodingSelect(nil); // plugins cmbPlugin.Text := ''; FUpdating := False; end; { TfrmFindDlg.ClearResults } procedure TfrmFindDlg.ClearResults; begin lsFoundedFiles.Clear; lsFoundedFiles.Tag := 0; lsFoundedFiles.ScrollWidth := 0; FoundedStringCopy.Clear; 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; end; { TfrmFindDlg.btnAttrsHelpClick } procedure TfrmFindDlg.btnAttrsHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', edtAttrib.HelpKeyword); 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; 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 := not cbFindInArchive.Checked; actEdit.Enabled := not cbFindInArchive.Checked; actFeedToListbox.Enabled := not cbFindInArchive.Checked; cbReplaceTextChange(cbReplaceText); end; { TfrmFindDlg.cbOpenedTabsChange } procedure TfrmFindDlg.cbOpenedTabsChange(Sender: TObject); begin cbSelectedFiles.Enabled := not cbOpenedTabs.Checked; 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; cmbEncodingSelect(cmbEncoding); end; { TfrmFindDlg.cbSelectedFilesChange } procedure TfrmFindDlg.cbSelectedFilesChange(Sender: TObject); begin cmbFindPathStart.Enabled := not cbSelectedFiles.Checked; 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; cbReplaceText.Checked:= False; end else if not cbCaseSens.Enabled then begin cbCaseSens.Checked := Boolean(cbCaseSens.Tag); end; cmbEncoding.Enabled:= not chkHex.Checked; cbReplaceText.Enabled:= not chkHex.Checked; cmbEncodingSelect(cmbEncoding); 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 := cmbEncoding.Text; { Plugins } SearchPlugin := cmbPlugin.Text; 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 lsFoundedFiles.SetFocus; if (lsFoundedFiles.ItemIndex <> -1) then begin lsFoundedFiles.Selected[lsFoundedFiles.ItemIndex] := True; end; end else begin if actNewSearch.Enabled then btnNewSearch.SetFocus else btnStart.SetFocus; end; end; 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)} 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); begin EnableControl(cmbReplaceText, cbReplaceText.Checked and cbFindText.Checked); cbNotContainingText.Checked := False; cbNotContainingText.Enabled := (not cbReplaceText.Checked and cbFindText.Checked); cmbEncodingSelect(cmbEncoding); if not FUpdating and cmbReplaceText.Enabled and cmbReplaceText.CanFocus 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; { 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 (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; 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; // Show search results page pgcSearch.ActivePage := tsResults; if lsFoundedFiles.CanFocus 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; if (not frmContentPlugins.chkUsePlugins.Checked) OR (not gSearchWithWDXPluginInProgress) then begin 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; try 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 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 StopSearch; raise; end; end else begin MsgError(rsSearchWithWDXPluginInProgress); StopSearch; AfterSearchStopped; AfterSearchFocus; 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; btnStart.Default := True; 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 (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] <> nil) then msgError(rsMsgErrNotSupported) else ShowViewerByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); end; end; { TfrmFindDlg.cm_Edit } procedure TfrmFindDlg.cm_Edit(const Params: array of string); begin if pgcSearch.ActivePage = tsResults then if lsFoundedFiles.ItemIndex <> -1 then begin if (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] <> nil) then msgError(rsMsgErrNotSupported) else ShowEditorByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); 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 (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] <> nil) 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); var I: integer; sFileName: string; SearchResultFS: ISearchResultFileSource; FileList: TFileTree; aFile: TFile; Notebook: TFileViewNotebook; NewPage: TFileViewPage; begin StopSearch; FileList := TFileTree.Create; for i := 0 to lsFoundedFiles.Items.Count - 1 do begin sFileName := lsFoundedFiles.Items[I]; try aFile := TFileSystemFileSource.CreateFileFromFile(sFileName); 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, TFileSystemFileSource.GetFileSource); // Add new tab for search results. Notebook := frmMain.ActiveNotebook; NewPage := Notebook.NewPage(Notebook.ActiveView); 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; 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 + ' - File: ' + GetFileMask; if cbFindText.Checked then sBuildingCaptionName := sBuildingCaptionName + ' - Text:' + cmbFindText.Text; end; Caption := sBuildingCaptionName; 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); // 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; { TfrmFindDlg.FormShow } procedure TfrmFindDlg.frmFindDlgShow(Sender: TObject); var I: integer; begin pgcSearch.PageIndex := 0; if cmbFindFileMask.Visible then cmbFindFileMask.SelectAll; cbPartialNameSearch.Checked := gPartialNameSearch; lsFoundedFiles.Canvas.Font := lsFoundedFiles.Font; cmbPlugin.Clear; for I := 0 to DSXPlugins.Count - 1 do cmbPlugin.AddItem(DSXPlugins.GetDSXModule(i).Name + ' (' + DSXPlugins.GetDSXModule(I).Descr + ' )', nil); if (cmbPlugin.Items.Count > 0) then cmbPlugin.ItemIndex := 0; if pgcSearch.ActivePage = tsStandard then if cmbFindFileMask.CanFocus 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 lblSearchContents.Caption := '"' + FilesMasks + '"'; 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 StartPath <> '' then cmbFindPathStart.Text := StartPath; cmbExcludeDirectories.Text := ExcludeDirectories; cmbFindFileMask.Text := FilesMasks; cmbExcludeFiles.Text := ExcludeFiles; if (SearchDepth + 1 >= 0) and (SearchDepth + 1 < cmbSearchDepth.Items.Count) then cmbSearchDepth.ItemIndex := SearchDepth + 1 else cmbSearchDepth.ItemIndex := 0; cbRegExp.Checked := RegExp; cbPartialNameSearch.Checked := IsPartialNameSearch; cbFollowSymLinks.Checked := FollowSymLinks; cbFindInArchive.Checked := FindInArchives; // 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; cbReplaceText.Checked := IsReplaceText; cmbReplaceText.Text := ReplaceText; chkHex.Checked := HexValue; cbCaseSens.Checked := CaseSensitive; cbNotContainingText.Checked := NotContainingText; cbTextRegExp.Checked := TextRegExp; cmbEncoding.Text := TextEncoding; // plugins cmbPlugin.Text := SearchPlugin; frmContentPlugins.Load(Template); //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. 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 pgcSearch.ActivePage := tsStandard; 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 > MIN_FONT_SIZE_FILE_SEARCH_RESULTS) then begin lsFoundedFiles.Font.Size := lsFoundedFiles.Font.Size - 1; 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 < MAX_FONT_SIZE_FILE_SEARCH_RESULTS) then begin lsFoundedFiles.Font.Size := lsFoundedFiles.Font.Size + 1; 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:= (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] = nil); miShowInEditor.Enabled:= (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] = nil); 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(AChecked: boolean; const ARegExpr: string): boolean; var sMsg: string; begin Result := False; if AChecked then try ExecRegExpr(ARegExpr, ''); 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.CanFocus) then cmbFindFileMask.SetFocus; end else if pgcSearch.ActivePage = tsResults then begin if (not lsFoundedFiles.Focused) and (lsFoundedFiles.CanFocus) then lsFoundedFiles.SetFocus; end; end; { TfrmFindDlg.SaveTemplate } procedure TfrmFindDlg.SaveTemplate(SaveStartingPath: boolean); var sName: string; SearchTemplate: TSearchTemplate; SearchRec: TSearchTemplateRec; begin if InvalidRegExpr(cbRegExp.Checked, cmbFindFileMask.Text) or InvalidRegExpr(cbTextRegExp.Checked, cmbFindText.Text) 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; procedure TfrmFindDlg.CancelCloseAndFreeMem; begin cm_FreeFromMem([]); end; { TfrmFindDlg.cm_Close } procedure TfrmFindDlg.cm_Close(const Params: array of string); begin 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-0.9.8/src/fFindDlg.lrj0000644000175000001440000003405513374174500015516 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":127255587,"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,38,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":72913918,"name":"tfrmfinddlg.cbtextregexp.caption","sourcebytes":[82,101,103,117,108,97,114,32,38,101,120,112,114,101,115,115,105,111,110],"value":"Regular &expression"}, {"hash":183979276,"name":"tfrmfinddlg.chkhex.caption","sourcebytes":[72,101,120,97,100,101,99,105,109,97,108],"value":"Hexadecimal"}, {"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":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":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-0.9.8/src/fFindDlg.lfm0000644000175000001440000014123513374171021015477 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 = '1.8.4.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 = 6 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 = 'Regular &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 = 'Hexadecimal' OnChange = chkHexChange TabOrder = 7 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 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 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 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' OnExecute = actExecute end object actView: TAction Caption = '&View' OnExecute = actExecute end object actEdit: TAction Caption = '&Edit' OnExecute = actExecute end object actGoToFile: TAction Caption = '&Go to file' OnExecute = actExecute end object actFeedToListbox: TAction Caption = 'Feed to &listbox' 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-0.9.8/src/fFileOpDlg.pas0000644000175000001440000011602413405412452016001 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Window displaying progress for file source operations and queues. Copyright (C) 2008-2018 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 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.StopOperationOrQueue; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.IsFree then OpManItem.Operation.Stop else OpManItem.Queue.Stop; 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.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; ProgressBar.SetProgress(CurrentBytes, TotalBytes, cnvFormatFileSize(CurrentBytes, uoscOperation) + '/' + cnvFormatFileSize(TotalBytes, uoscOperation) ); 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; ProgressBar.SetProgress(CurrentFiles, TotalFiles, cnvFormatFileSize(CurrentFiles, uoscNoUnit) + '/' + cnvFormatFileSize(TotalFiles, uoscNoUnit) ); 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 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 CopyOperation: TFileSourceCopyOperation; CopyStatistics: TFileSourceCopyOperationStatistics; begin CopyOperation := Operation as TFileSourceCopyOperation; CopyStatistics := CopyOperation.RetrieveStatistics; with CopyStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressCount(Operation, DoneFiles, TotalFiles); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateMoveOperation(Operation: TFileSourceOperation); var MoveOperation: TFileSourceMoveOperation; MoveStatistics: TFileSourceMoveOperationStatistics; begin MoveOperation := Operation as TFileSourceMoveOperation; MoveStatistics := MoveOperation.RetrieveStatistics; with MoveStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressCount(Operation, DoneFiles, TotalFiles); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); 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 lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetProgressFiles(Operation, pbTotal, DoneFiles, TotalFiles); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(FilesPerSecond, uoscNoUnit)); end; end; procedure TfrmFileOp.UpdateWipeOperation(Operation: TFileSourceOperation); var WipeOperation: TFileSourceWipeOperation; WipeStatistics: TFileSourceWipeOperationStatistics; begin WipeOperation := Operation as TFileSourceWipeOperation; WipeStatistics := WipeOperation.RetrieveStatistics; with WipeStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); 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 lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); 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 lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); 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 lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetSpeedAndTime(Operation, 0, cnvFormatFileSize(FilesPerSecond, uoscNoUnit)); end; end; procedure TfrmFileOp.UpdateCalcChecksumOperation(Operation: TFileSourceOperation); var CalcChecksumOperation: TFileSourceCalcChecksumOperation; CalcChecksumStatistics: TFileSourceCalcChecksumOperationStatistics; begin CalcChecksumOperation := Operation as TFileSourceCalcChecksumOperation; CalcChecksumStatistics := CalcChecksumOperation.RetrieveStatistics; with CalcChecksumStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); 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 lblFileNameFrom.Caption := MinimizeFilePath(ArchiveFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFile, lblFileNameTo.Canvas, lblFileNameTo.Width); 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 lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetProgressFiles(Operation, pbTotal, DoneFiles, TotalFiles); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(FilesPerSecond, uoscNoUnit)); 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 := IntToStr(DoneFiles) + ' / ' + IntToStr(TotalFiles); end; end; initialization Initialize; finalization Terminate; end. doublecmd-0.9.8/src/fFileOpDlg.lrt0000644000175000001440000000037411740433676016032 0ustar alexxusersTFRMFILEOP.LBLCURRENTOPERATION.CAPTION=Current operation: TFRMFILEOP.LBLFROM.CAPTION=From: TFRMFILEOP.LBLTO.CAPTION=To: TFRMFILEOP.BTNMINIMIZETOPANEL.CAPTION=&To panel TFRMFILEOP.BTNVIEWOPERATIONS.CAPTION=&View all TFRMFILEOP.BTNCANCEL.CAPTION=&Cancel doublecmd-0.9.8/src/fFileOpDlg.lfm0000644000175000001440000001227213405024342015771 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 ShowAccelChar = False 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 ShowAccelChar = False 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-0.9.8/src/fAbout.pas0000644000175000001440000001404513403521256015247 0ustar alexxusers{ Seksi Commander ---------------------------- Implementing of About dialog Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Copyright (C) 2006-2008 Koblov Alexander (Alexx2000@mail.ru) } unit fAbout; {$mode objfpc}{$H+} interface uses Graphics, Forms, Controls, StdCtrls, ExtCtrls, Buttons, SysUtils, Classes, LCLType; type { TfrmAbout } TfrmAbout = class(TForm) btnClose: TBitBtn; btnCopyToClipboard: TButton; imgLogo: TImage; 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; pnlLogo: TPanel; procedure btnCopyToClipboardClick(Sender: TObject); procedure lblHomePageAddressClick(Sender: TObject); procedure lblHomePageAddressMouseEnter(Sender: TObject); procedure lblHomePageAddressMouseLeave(Sender: TObject); procedure OKButtonClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure frmAboutShow(Sender: TObject); private { Private declarations } public { Public declarations } end; procedure ShowAboutBox; implementation {$R *.lfm} uses Clipbrd, dmHelpManager, uDCVersion, uClipboard; 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 + 'Denis Bisson (denis.bisson@denisbisson.org) - developer' + LineEnding + LineEnding + 'Recent developers: ' + 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 + '- Farm-Fresh Web Icons (https://www.fatcow.com/free-icons)' + LineEnding + '- Oxygen icon theme (http://oxygen-icons.org)' + LineEnding + LineEnding + 'Big thanks to Lazarus and Free Pascal Team!'; procedure ShowAboutBox; begin with TfrmAbout.Create(Application) do try ShowModal; finally Free; end; end; procedure TfrmAbout.OKButtonClick(Sender: TObject); begin Close; end; procedure TfrmAbout.lblHomePageAddressMouseLeave(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= []; Font.Color:= clBlue; Cursor:= crDefault; end; end; procedure TfrmAbout.lblHomePageAddressMouseEnter(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= [fsUnderLine]; Font.Color:= clRed; 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); var StrInfo: String; begin StrInfo := Format('Double Commander' + LineEnding + 'Version: %s' + LineEnding + 'Revision: %s' + LineEnding + 'Build date: %s' + LineEnding + 'Lazarus: %s' + LineEnding + 'FPC: %s' + LineEnding + 'Platform: %s' + LineEnding + 'OS version: %s' + LineEnding, [dcVersion, dcRevision, dcBuildDate, GetLazarusVersion, fpcVersion, TargetCPU + '-' + TargetOS + '-' + TargetWS, OSVersion]); if WSVersion <> EmptyStr then StrInfo := StrInfo + LineEnding + 'Widgetset library: ' + WSVersion; ClipboardSetText(StrInfo); end; procedure TfrmAbout.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_Escape) then Close; 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; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + GetLazarusVersion; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; end; end. doublecmd-0.9.8/src/fAbout.lrj0000644000175000001440000000301013403522213015233 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":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-0.9.8/src/fAbout.lfm0000644000175000001440000004113513243761757015260 0ustar alexxusersobject frmAbout: TfrmAbout Left = 26 Height = 400 Top = 125 Width = 667 BorderIcons = [biSystemMenu, biMaximize] Caption = 'About' ClientHeight = 400 ClientWidth = 667 KeyPreview = True OnKeyDown = FormKeyDown OnShow = frmAboutShow Position = poScreenCenter LCLVersion = '1.0.1.3' 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 = 168 Height = 384 Top = 8 Width = 491 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 8 BevelInner = bvRaised BevelOuter = bvLowered ClientHeight = 384 ClientWidth = 491 FullRepaint = False TabOrder = 0 object lblHomePage: TLabel AnchorSideLeft.Control = memInfo AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 10 Height = 22 Top = 345 Width = 81 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 15 Caption = 'Home Page:' ParentColor = False end object lblHomePageAddress: TLabel AnchorSideLeft.Control = lblHomePage AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 97 Height = 22 Top = 345 Width = 231 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 = 327 Top = 10 Width = 471 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 end end object pnlInfo: TPanel Left = 9 Height = 290 Top = 9 Width = 151 AutoSize = True BorderSpacing.Around = 8 BevelOuter = bvNone ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 290 ClientWidth = 151 TabOrder = 1 object pnlLogo: TPanel Left = 39 Height = 72 Top = 8 Width = 72 BorderSpacing.Top = 8 BorderSpacing.Bottom = 8 BorderSpacing.CellAlignHorizontal = ccaCenter BevelInner = bvRaised BevelOuter = bvLowered BevelWidth = 2 ClientHeight = 72 ClientWidth = 72 TabOrder = 0 object imgLogo: TImage Left = 4 Height = 64 Top = 4 Width = 64 Align = alClient Center = True Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963F511000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000B1300000B1301009A9C180000000774494D4507DA021112343B F8979BBE000011754944415478DADD9B79905D559DC73FE7DC7BDFD24BBAD39D 3D241D9640020414102C4046CA5229401C71199771CA1A7416D19A9A19A79CC2 3F8471299491C1D1D2A15C81128D5A52AC53208B16191C9180C8960D1224E94E 27E974F7DBEF727EBFF9E3DED7FD3A74BFEEA483C0DCAA5B6F3BEFDCF3FB9EDF FEFB1D6873A92AFF5FAE996831330D36C6B4FED1BCDEE937C64CA16B5600000F 08803C901751CF5AA3AFB75D37C6C44023BBDDA14098E90857D5A231A60758B8 77F0C08A91DD7B97D66A8DE2C3BF7A6231869941505EF6A379F9903F05E166F1 92858D0DA79F38BAEAA48191C58B7B770383C0412032667223CD21C4FBC04260 0038EE1F2EF9E415FD94CE59B36E4D61755F1038455140D31724FB22235C9B00 A8A06A50145533051955455BDF4F3C3F7D159D44B229B72AA046419AD31826A7 555426E748D7A324899A3D2315F7DC737B4ACBCF3CF3A1AFDE74F50F45E4596B ED2010021863A600605575A13166DD2DDFFAD97B5F7AE0BE2B3F70C986DC9A1E 341CDA6DA2F238A2922E42155130B9226A6DBAC08C46D17401A293C4AAA68B97 560054106D8ECFFEAF9344A828922172E85C2E8E496AF50C7445267E4B3F7BC5 4EFC8E4E3A962CA5B864098F6D19E67F9FDEFBD4B5777CEBEAAE62F028306C8C 8955750A0005E0B8DB7E72FFFB776CBCF9EA2B3F7601D1738FA1C68282A84C2E 36DB0991960793EEBAA8A0A228267B4D7728DD451091740745D3B16A5A884BE7 C4804AF3790691942B9C4EEEB6A4AC82A84ECCD91C27D926A1E0C4915BD0A3C9 CAB5E6D6BB9E7CEEBB8F6EFC7BCF9ADF1B63C68D31D8A6CC00C5F1B1CAEA5F7E E3C68F5FF9A1B388B76E56635FF7CA1F632D61A964823DDBF5ED672C5BBFE917 F79F6B8C599429F814804C17148777ED5EF9E7672F5E69CA073198D73BF553AE FAD898E94F4AFCE26BDFFD04D00714547502000572BFBFFBA1F5EBD7AF32EEC0 E084401A32017F1DBA029ACA29886054F1C23AF9FAC163A37AB26C4209DE70C3 0DC50B2EB860477F7F7F978BE3BC7571DEF33D5CE220AC93D42AB8B103C8C161 BCE15D2C2CED070CCED84CD65E233A40158962B4A3133D6680DCC0B1E417F651 5CB49862FFA25439FA3EA28A09821AC6C443434357F9F57ADD747676F6E6F3F9 0ECDE526D0F301E8A5600CD6AEC3F7031255F68D1C441E7F88DE179FC536AA18 15F4D5E40E154C90C35BB21CFFBC3FA377DD29F47477E15B9B01ABD3B9C11D00 BEEF17FC294ECB0C62EF9CC3390740FF822EB8F032709730B6FB45F4819FB2A0 3A8EBE1A0A338E70679DCBB20BDF4EEFD265586B271C0AE7DCA4B7370D5D4D50 FCB93CE76513A8A2C6D0B7E6781A1FFB2C639B1F26F8DD031424CE7485BEA29A 9D3846561F4FEFA5EF61F989EB9038CECC9ECEBA99875E7E2B22871BFD254982 0FF49FF516AAEBDE48E317DF215FDAFFCABABBD6D2F8B38B38E5DD9723714C12 86F38A5EEDA13B7D24B788D0D1D949E1C39FE6C09AD3B04D4D7594AFC47AE43F 7405A75CF61E3449E6B5E609005A3FB42A8DC3B99BFFF5AD65F9BB3FCAC1B567 A2224795ED136BE9FAD015ACDE703A9224539E7BA46B9E108136DAF2B02F1387 2C7EC7E5ECC3B070CB63B8A3A01C9DE7D3F9D79F66D9EA01E2383EAA5CE58B88 F13CAF03C0063E82A7C66002CFC7B918750E1599369930B3985AFADF7939FBC7 46E81DDE354F4023F4D20FB274D5EA299A7D2ED91F630C412E87F53CD41892D4 92A9C69111278848CE6CDAB4C90E0F0FBFE1A4D34E5DF7C2CDB75D79C6A29173 EB62A9E73AA167116EF9712C5CB90AAF73019EE7CF59C3AB2A61AD4A74F3F578 61E3081CA1F4F7D28673D8F0171F250EC359896F6E92029AC48C0C0EB26FDB56 AA2FEE42460E62460F52E8E961F771E77C79C5DAFEFF2E97CB5BFCF3CE3B4F80 2D406E308A2BBD12D29324485442CB83E8EE27897FE71316BB195A7B0ECBCE38 0F5C3CABA931C650E8EA66FF85EFA3FF9E1FA273B3B853E45E8B5DAC7AC7BB48 A2684EC4FB41C081B1315EFAD98F31DBB7A1F53A8890270554150AF900EB7243 175F7CF173C088DF120C99FDCE4E666D4C6ACF552DBE0AB63ACA9ACD77B27FFB E3D8F3DF45F7CA01C4256D17A622AC39F534869E594FC78BDB0E2B9E50111A17 7F80EEAECE39E92607ECBAE74E2AF7DE85278A1A8B41119B725BF3D18A215FC8 4993E62966B024A6ED129DF5E92B0FD37DCFF7D8FBCC13F841D07671C6189238 2677FE45187187B5FFB5E5AB597BEA8659895755C439B6FCC75768DC7737BEB5 60BD36C02A6B4F5C559BD60F98EBE5A9B0F4E19F33F4DB5FE3FBFEAC20F4AC58 C5E8CA13A6786A6D159F4BC8BFF9ADB35A2655A55A6FB0F5BA2F100CED066BE7 AA9FCCBC00500CD65AFA1EBF9FBD2FEE4C7DF07656411CC1F917A173D0E00608 7BFAE93E615D5BCBA39A263B76DFFA03BCD19194F823B0E2763E262A5061C12F 7F44AD566BBB5322C2E2E52B483ABAE714DD554F7F33FDDDDD6DF58BE7FB6C79 F8D778DB9E9997EB3D2F0014C84575CACF3E91C6DA22D3DEAA8A18835BB21233 8B18489063C1C0713897CC389F8850191BC3BBF776F0BCF9394247C39BCA3FFE 10E3A79C49CEB40D2929AF389EC2F63FA0DECCB8BB7C919EFE45842D41CE748E D681271FC73897E522F4D504C0D01355D9B3F5297AD79EDC5ED1AD5883710978 C18C392CEDEE41B24873C627FA0195C71F25DF525778553940AC47D71FB790AC 59DB9E53F2391A0B971054CB33CABF5BB4141521690364BD56A330F847D47A73 B62CAF2800184BA1B49F4A1CD32E99EC594354E83C04009DB42DAA84411ED74C 36CE6056E37D7BD318C5D879275F8E0E008036EA181562D7C61A00B19F4BC359 E790895B5282C2107A1692B489F88C31D477EE40CA65D40FC09A1488EC566B53 636A4CB34E97BDD75716005471CE913899D17C19CFC3292423C3B824233E71A9 A57082346A18CF6FCB01188346118D7D4368904B95A0B12836F505AC07D6C378 1EF801C6F3534B619AC0BC52001883384792CC1CB2AA7368A3463C368A388713 C93841D33478BD8688A40AB00D0061B54A343E0E418064142936DD706B338EF0 52403C1F633DF0739820C02B16302D8EDB3C0150D4254814E2A2104CEA21CE04 40248ADB3784AB551027290788A63546716818D3D8F62C9D03C7B575820A2B8E A15229A1F9425AB7C4A46175C6F54A260E4DD1C8B802CFC3063E7D2DBEC36101 6068C6EE0E091B4818E2C206124548771F4EB5AD5B6CACC19447D3FFBAB4F0A1 2E739444D124A4806067516E1D1BDE806BD453229B79846639BE09064D4052D6 579B7245AEA32B158F2301409308693490B03149781C236148BC7A7D2A7B6DB4 77A31E523C308826719A656AEEBE6B569D159EDF9289EACC1C902F1691638EC5 0C0F4D94D155D2DE82664F82D0AC5899C9DB18A25A6D6A52742E6C2E7184544A 486914298F219571A45A46EB15A45E85D2412AA79EDF369456559228C40EBE98 EA02972A3E9AAEB2086A2CC9CEADD85982266934E8BEE83254252DC989A0EA52 CE1487B8044D92543C9338BDE3080943246E4CC902D8765A5D5D8256CB687914 ADA6444BAD8234AA6858471A0D340A29AF389EDC09A7CC1ABB7BCF6ECE185B5F E60334DF6B691CC27AFBF4781CD377FE5B5385A79A02A16912455D5A88D44CC1 AA7399D94D1097207132C555B1D3C5A3AA9212582921D512522F23F52A1AD6D0 A891DAEB3844E3084D62920BDF8749A2B679783586FCE65FA5B6BBD94FD32CE1 B6DCA63C4EEDC07E3CCF6B3B5F71D500C1056F87A6CFD09208553D24D3AD69C7 491310DA8A804BA056416A25B45E411B55B4D140C30634094F22344E3049447D F971D853CF4145DA174FEA35ECAEADD3D4AF5B3301293794EED8885FEC680F68 92B0E6AA2F60962C9F0AE6840FA1531E937289BECCBCDA431724B50A52AF40A3 86366A681442DC8038425D9C56649C0371D4BB16A29FFA4A0A5A3BD6F73C4677 EEC0AB8CCFC9ADB60FDC4EA334FB582F89597ECD7568239AE2274C4A550B7761 A6345ECD08006115C23A12A54413479942895197803890847AA183EADF7E39DD F9594A54A1F5E9BAEB87734F89F93EB55FDE411004B396B7166F78030337DE32 4B44903536CD9A105145C354B199388224CA884EC00946047509F5FE95C49FBB 897CFF524CE6FCB4BBC3271E21B7FDA939E7ECB01EA53B7F425028CC3A771285 F49DF64606FEEB16BC053D6D4A7266AAEE995E07282431B838DB7197B2B713AC 8B8815062FFF47DC3F7D738A3BD97E3703B8E3A654F91D4EE27578905DDFFE77 FC4261160FDC20E2E85FB79E33EE7C908EF77D18899239B7F5F859EB681D68B8 3811AB554CA3868D631227943BFA48161D43E584337067BF93EE7C0E49662F8C A4A5B61CC3B7DD44CF0B4FE3FCFC61C6A901C9EDB7125EF25E724B576415A5F6 7E8603CEFEFC9738F05757B0EFE73FE6C06F1EA1B6631B321EA66D7D808411D6 78215037C6A8B9F9E69B0B2B56ACB8B7A3A3A3AF323276CC325BE945A09CEF26 E85B42B158C40222EEB08AA7D65A6A2FEEC07EF99369A4279AF51666BD449239 3F5939ACD9DBD73A4E4449D69CC4FAEFFC94A85A3DACE77B9E47B1B31327C2D8 F838E5A79FA251AEE0E5028A6B4FDA8161AC5C2E5FEF8F8C8CD80D1B36BC2997 CB157B7B7B9B4DADA627435CC5212DEC36E7C246A5827EFDB3A9DE9847B8E56D 7F86E7AFFE0C277FF1064A6363735E8388502DA789978E5C8ECEB3DE34C92C22 27349374D6A6DE944EB8A322A655911C6EE381F53C3C6B31D75E49502DCDBFBB CE0F881EBC8767BF7D3D9D3DBD47B4AE66F528BB4D935611517FBAB2F2BC6AF9 5184FBD2DF111C18E468B54818DF27FAD177D852AD72FABF5EC3D8C18347ED30 87DFACBE98793686068502B55DDB906F7E8E60642FD2260D75A40997C6C61FF0 44699C933EF72554E4A8344BF887B2D4E165C1D2F8DFF33C0EFEFA1EBA6FB916 C164C473F4AF5C9EC67D77B2F9F78FB1EEEBDFA773C54A92AC43EC48D60E60E7 C301F98E4EC68776137EF1132CB8F5AB737774E69981F68687D8FAE14B79EEDA 6BB07E404767E71130544AF39C1A259B20D92CE91839811D7FA0BCE96EFA7F77 2F0E9BC9FB2BDD23D8E2EF8BA37AFB4FD8FCF083F4BFFF23AC7CD7E514571C03 71441C4573E60AFF50E2D3EEDC34B1636DAAD573BE4FB55CA65C29C353FFC3C2 077F8C19DD8F6011EB672EA6F027BD34F53275EC20FB6FFC3AC3FF791D85B3CF 65E9DF7C8AFE934EA66BC1021211DCCB2B4C0A98894ED18E8E8EA8542A7D5EA1 9703074ECF0D3E776971740F188B28D8A19D24A5118A95125DE307208A70D643 3D0FDC6BE70C95C9E5A93FF65B9EFFCD23BCD0D58DE95B44D0D74F61E531E4FA FA09A308CF0F745F1898B3FEF99377C5B5DAF65AADF670EB89919EFD3B5EB870 FC6B9FDAB878412E48F63C6F347138254D604A56C0902CE426B3A54EB3A32F4D 0F4F264E92A4AF9A75AC1F9927D89C5315DCB4E3B465CED6F9B235389706B00E 8ACB97B04906F67C7FF0D1CB80678C31A16DD188C982D5ABF7FCFCE978B0B8A8 DFE0E750CFCF2A2E66EA3D21E7E6357E8C40B3DA80C1F8505F7A2CEFBFFEDFBE 075452B275D20A00613EE70F5DFA8D1BAFF9C6DD2F49EEF4F3D2AA8A01632D86 26107A88AEB31908AF45240C9208413E50F7A6B7B1A9BAF0C9B7BDE76D8FA8EA 28904C9C1A6BF1AA3A513DF1BEDB7E75C9DDD75C73D527FEF22DC5BE3D4FE097 4690B0813A87CB8A186931A37960213B5425D9692F6DF6F9B58EC958B2E5BB66 5A7CEA7720B4FE3639D7D4CF2DA230B186C9FF193FD0C8A929AC3D991D1D03FA CCEEEA533F7DE6F6AB80A78121634C34E5D458068455D51E63CCC0F667779E71 C3BF5C77857B69C7590B6C985BB9BC9BBC6F303A29BBDACCE5A3538EBC35534F D27A3E509838E6D63C77A8ADC7E1267215538FC071E8B896A4C644AE0F404DCB 7B78693422ACC72C583DB0EDF2CF7C7CE3C51FB9649331662BE991B9B0797872 BA93A31628AAEA6263CCF29D8363AB6EDF78FFCAD20B7F5C58E8ECE8A854EBFD BDBD5DA3D552AD1A27499C2E6B9A63A86D4CF8DC98F7E5838DC1E6F3B99CF1BD FE5A2DECF7BC433D2FD5247671B198DF7BEC9A657BDEF2C18B77AEEC2BEE0646 5575D418330EC4D39E1C6D7578B236321F28909E1DB6A467893BB3EF22A00AC4 7F1ACF674A062B007A80E234952DC9D6546A595F98AD3731C6C8B440CF00C274 E3BC6C114ADA9C29AF82F66B6E8E9DE1D90A24D9FAB4D5D19BCE3BFC3F18A85F E1469E4F0B0000000049454E44AE426082 } Proportional = True end end object lblTitle: TLabel Left = 0 Height = 22 Top = 88 Width = 151 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Double Commander' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblVersion: TLabel Left = 0 Height = 22 Top = 114 Width = 51 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Version' ParentColor = False end object lblRevision: TLabel Left = 0 Height = 22 Top = 140 Width = 58 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Revision' ParentColor = False end object lblBuild: TLabel Left = 0 Height = 22 Top = 166 Width = 37 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False end object lblLazarusVer: TLabel Left = 0 Height = 22 Top = 192 Width = 53 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False end object lblFreePascalVer: TLabel Left = 0 Height = 22 Top = 218 Width = 77 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False end object lblPlatform: TLabel Left = 0 Height = 1 Top = 244 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object lblOperatingSystem: TLabel Left = 0 Height = 1 Top = 249 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object lblWidgetsetVer: TLabel Left = 0 Height = 1 Top = 254 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object btnCopyToClipboard: TButton Left = 4 Height = 31 Top = 259 Width = 143 AutoSize = True BorderSpacing.CellAlignHorizontal = ccaCenter Caption = 'Copy to clipboard' Constraints.MinWidth = 100 OnClick = btnCopyToClipboardClick TabOrder = 1 end end object btnClose: TBitBtn AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrCenter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 34 Height = 35 Top = 357 Width = 100 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Bottom = 8 BorderSpacing.InnerBorder = 2 Caption = '&Close' Constraints.MinWidth = 100 Default = True Kind = bkClose ModalResult = 11 TabOrder = 2 end end doublecmd-0.9.8/src/doublecmd.manifest.rc0000644000175000001440000000014512562710227017412 0ustar alexxusers#define RT_MANIFEST 24 #define APP_MANIFEST 1 APP_MANIFEST RT_MANIFEST "doublecmd.exe.manifest" doublecmd-0.9.8/src/doublecmd.lpr0000644000175000001440000001531413605322526016002 0ustar alexxusers{ $threading on} program doublecmd; {%File 'doc/changelog.txt'} {.$APPTYPE GUI} uses {$IFDEF DARWIN} uAppleMagnifiedModeFix, {$ENDIF} {$IF DEFINED(WIN64) AND (FPC_FULLVERSION < 30000)} uExceptionHandlerFix, {$ENDIF} {$IFDEF UNIX} cthreads, {$IFNDEF HEAPTRC} cmem, {$ENDIF} cwstring, clocale, {$IFDEF LINUX} uAppImage, {$ENDIF} {$IFDEF LCLGTK2} uOverlayScrollBarFix, gtk2, Gtk2Int, {$ENDIF} {$IF DEFINED(LCLQT5) and not DEFINED(DARWIN)} uQt5Workaround, {$ENDIF} {$ENDIF} DCConvertEncoding, Interfaces, {$IFDEF LCLGTK2} uGtk2FixCursorPos, {$ENDIF} {$IFDEF LCLWIN32} uDClass, uWin32WidgetSetFix, {$ENDIF} LCLProc, Classes, SysUtils, Forms, LCLVersion, Math, {$IF DEFINED(NIGHTLY_BUILD)} un_lineinfo, {$ENDIF} uGlobsPaths, uGlobs, fHackForm, fMain, uAccentsUtils, fMkDir, 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} ; {$IF NOT (DEFINED(DARWIN) AND DEFINED(LCLQT))} {$R *.res} {$ENDIF} {$IF DEFINED(MSWINDOWS)} {$R doublecmd.manifest.rc} {$ENDIF} {$IFDEF HEAPTRC} var LogPath: String; {$ENDIF} begin DCDebug('Starting Double Commander'); // Initialize random number generator Randomize; // Disable invalid floating point operation exception SetExceptionMask(GetExceptionMask + [exInvalidOp]); {$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.InitErrorMode; uMyWindows.FixCommandLineToUTF8; {$ENDIF} {$if lcl_fullversion >= 1070000} Application.Scaled:= True; {$endif} // Fix default BidiMode // see http://bugs.freepascal.org/view.php?id=22044 Application.BidiMode:= bdLeftToRight; Application.Title:= 'Double Commander'; Application.Initialize; uDCVersion.InitializeVersionInfo; // Initializing keyboard module on GTK needs GTKProc.InitKeyboardTables // which is called by Application.Initialize. uKeyboard.InitializeKeyboard; // Use only current directory separator AllowDirectorySeparators:= [DirectorySeparator]; {$IF lcl_fullversion >= 093100} // 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} {$ENDIF} DefaultFormatSettings.ThousandSeparator:= ' '; {$IFDEF UNIX} uMyUnix.FixDateTimeSeparators; {$ENDIF} FixDateNamesToUTF8; DCDebug('Double Commander ' + dcVersion); DCDebug('Revision: ' + dcRevision); DCDebug('Build: ' + dcBuildDate); DCDebug('Lazarus: ' + GetLazarusVersion); DCDebug('Free Pascal: ' + fpcVersion); DCDebug('Platform: ' + TargetCPU + '-' + TargetOS + '-' + TargetWS); DCDebug('System: ' + OSVersion); {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} DCDebug('Desktop Environment: ' + DesktopName[DesktopEnv]); {$ENDIF} if WSVersion <> EmptyStr then DCDebug('Widgetset library: ' + WSVersion); DCDebug('This program is free software released under terms of GNU GPL 2'); DCDebug('(C)opyright 2006-2020 Alexander Koblov (alexx2000@mail.ru)'); DCDebug(' and contributors (see about dialog)'); Application.ShowMainForm:= False; Application.CreateForm(TfrmHackForm, frmHackForm); ProcessCommandLineParams; // before load paths if not CommandLineParams.NoSplash then begin // Let's show the starting slash screen to confirm user application has been started Application.CreateForm(TfrmStartingSplash, frmStartingSplash); frmStartingSplash.Show; 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" LoadVariableMenuSupport; //Load support for the popup menu with variable if InitGlobs then //-- 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(TdmHighl, dmHighl); // highlighters Application.CreateForm(TdmComData, dmComData); // common data Application.CreateForm(TdmHelpManager, dmHelpMgr); // help manager Application.CreateForm(TfrmMkDir, frmMkDir); // 21.05.2009 - makedir form {$IF DEFINED(LCLGTK2) AND (lcl_fullversion >= 093100)} // 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; if not CommandLineParams.NoSplash then begin // We may now remove the starting splash screen, most of the application has been started now frmStartingSplash.Close; frmStartingSplash.Release; end; 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; uKeyboard.CleanupKeyboard; DCDebug('Finished Double Commander'); end. doublecmd-0.9.8/src/doublecmd.lpi0000644000175000001440000020756713611064300015774 0ustar alexxusers <ResourceType Value="res"/> <XPManifest> <DpiAware Value="True"/> </XPManifest> <Icon Value="0"/> </General> <i18n> <EnableI18N Value="True"/> <OutDir Value="..\language"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="9"/> <RevisionNr Value="8"/> <StringTable FileDescription="Double Commander is a cross platform open source file manager with two panels side by side" InternalName="DOUBLECMD" LegalCopyright="Copyright (C) 2006-2020 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"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <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\svn2revisioninc$(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"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <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\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item3> <Item4 Name="Nightly"> <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"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseLineInfoUnit Value="False"/> <UseExternalDbgSyms Value="True"/> </Debugging> </Linking> <Other> <CustomOptions Value="-dNIGHTLY_BUILD"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item4> <Item5 Name="Beta"> <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"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="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> <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\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item5> </BuildModes> <PublishOptions> <Version Value="2"/> <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="12"> <Item1> <PackageName Value="SynUni"/> <MinVersion Major="1" Minor="8" Valid="True"/> </Item1> <Item2> <PackageName Value="DateTimeCtrls"/> </Item2> <Item3> <PackageName Value="dcpcrypt"/> <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="4" Valid="True"/> </Item6> <Item7> <PackageName Value="cmdbox"/> </Item7> <Item8> <PackageName Value="KASComp"/> <MinVersion Major="1" Minor="8" Valid="True"/> </Item8> <Item9> <PackageName Value="LCL"/> <MinVersion Major="1" Minor="6" 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="3" Valid="True"/> </Item12> </RequiredPackages> <Units Count="248"> <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"/> <ComponentName Value="dmHighl"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <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"/> <HasResources Value="True"/> <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"/> </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"/> </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"/> </Unit134> <Unit135> <Filename Value="filesources\uvirtualfilesource.pas"/> <IsPartOfProject Value="True"/> </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"/> </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"/> </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"/> </Unit189> <Unit190> <Filename Value="filesources\winnet\uwinnetexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit190> <Unit191> <Filename Value="filesources\winnet\uwinnetfilesource.pas"/> <IsPartOfProject Value="True"/> </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> </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"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="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\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> <Debugging> <Exceptions Count="1"> <Item1> <Name Value="EXmlConfigNotFound"/> </Item1> </Exceptions> </Debugging> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/src/doublecmd.ico�������������������������������������������������������������������0000644�0001750�0000144�00001322626�12474406374�015776� 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-0.9.8/src/doublecmd.exe.manifest����������������������������������������������������������0000644�0001750�0000144�00000002775�12562710227�017602� 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> </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-0.9.8/src/dmhigh.pas����������������������������������������������������������������������0000644�0001750�0000144�00000045175�13313662716�015306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit dmHigh; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, SynEdit, StringHashList, LCLVersion, SynEditHighlighter, SynHighlighterPas, SynHighlighterCPP, SynHighlighterJava, SynHighlighterHTML, SynHighlighterXML, SynHighlighterLFM, SynHighlighterUNIXShellScript, SynHighlighterPHP, SynHighlighterTeX, SynHighlighterSQL, SynHighlighterPerl, SynHighlighterCss, SynHighlighterPython, SynHighlighterDiff, SynHighlighterVB, SynHighlighterBat, SynHighlighterIni, SynHighlighterPo, SynHighlighterLua, SynUniHighlighter; const HighlighterConfig = 'highlighters.xml'; SYNS_XML_DefaultText = 'Default text'; type { TSynPlainTextHighlighter } TSynPlainTextHighlighter = class(TSynCustomHighlighter) public class function GetLanguageName: string; override; end; { TdmHighl } TdmHighl = class(TDataModule) SynBatSyn1: TSynBatSyn; SynCppSyn1: TSynCppSyn; SynCssSyn1: TSynCssSyn; SynDiffSyn1: TSynDiffSyn; SynHTMLSyn1: TSynHTMLSyn; SynIniSyn1: TSynIniSyn; SynJavaSyn1: TSynJavaSyn; SynLFMSyn1: TSynLFMSyn; SynPasSyn1: TSynPasSyn; SynPerlSyn1: TSynPerlSyn; SynPHPSyn1: TSynPHPSyn; SynPoSyn1: TSynPoSyn; SynPythonSyn1: TSynPythonSyn; SynSQLSyn1: TSynSQLSyn; SynTeXSyn1: TSynTeXSyn; SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn; SynVBSyn1: TSynVBSyn; SynXMLSyn1: TSynXMLSyn; procedure dmHighlCreate(Sender: TObject); procedure dmHighlDestroy(Sender: TObject); private FTemp: Boolean; FChanged: Boolean; procedure ImportFromOldFormat; public SynHighlighterList: TStringList; SynHighlighterHashList: TStringHashList; SynPlainTextHighlighter: TSynPlainTextHighlighter; function GetSampleSource(Highlighter: TSynCustomHighlighter): string; public constructor Create(AOwner: TComponent; ATemp: Boolean); overload; procedure Assign(Source: TPersistent); override; function LoadFromFile(const FileName: String): Boolean; function SaveToFile(const FileName: String): Boolean; function GetHighlighter(SynEdit: TCustomSynEdit; const sExtension: string): TSynCustomHighlighter; procedure SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); property Changed: Boolean read FChanged write FChanged; end; { TSynCustomHighlighterHelper } TSynCustomHighlighterHelper = class helper for TSynCustomHighlighter public function LanguageName: String; end; TSynHighlighterAttrFeature = ( hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafStyleMask, hafFrameStyle, hafFrameEdges ); TSynHighlighterAttrFeatures = set of TSynHighlighterAttrFeature; { TSynHighlighterAttributesHelper } TSynHighlighterAttributesHelper = class helper for TSynHighlighterAttributes private function GetFeatures: TSynHighlighterAttrFeatures; procedure SetFeatures(AValue: TSynHighlighterAttrFeatures); public property Features: TSynHighlighterAttrFeatures read GetFeatures write SetFeatures; end; var dmHighl: TdmHighl; implementation {$R *.lfm} uses Graphics, SynEditTypes, FileUtil, uHighlighterProcs, DCXmlConfig, uGlobsPaths, DCClassesUtf8, LazUTF8Classes, DCOSUtils, DCStrUtils, uLng, uMasks, uGlobs, uOSUtils; const csDefaultName = 'editor.col'; 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; { TSynCustomHighlighterHelper } function TSynCustomHighlighterHelper.LanguageName: String; begin if Self is TSynUniSyn then Result:= TSynUniSyn(Self).Info.General.Name else Result:= Self.GetLanguageName; end; { TSynPlainTextHighlighter } class function TSynPlainTextHighlighter.GetLanguageName: string; begin Result:= rsSynLangPlainText; end; { TdmHighl } procedure TdmHighl.dmHighlCreate(Sender: TObject); var I: Integer; AList: TStringList; AFileName: String = ''; ACache: TStringListUtf8; HighLighter: TSynCustomHighlighter; begin TSynLuaSyn.Create(Self).Tag:= 1; SynHighlighterList:= TStringList.Create; SynHighlighterHashList:= TStringHashList.Create(True); {$PUSH}{$HINTS OFF}{$WARNINGS OFF} SynPlainTextHighlighter:= TSynPlainTextHighlighter.Create(Self); {$POP} GetHighlighters(Self, SynHighlighterList, False); ACache:= TStringListUtf8.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]); SynHighlighterList.AddObject(TSynUniSyn(HighLighter).Info.General.Name, Highlighter); ACache.Add(AFileName); except FreeAndNil(HighLighter); end; end; end; AList.Free; ACache.Free; for I:= 0 to SynHighlighterList.Count - 1 do begin HighLighter:= TSynCustomHighlighter(SynHighlighterList.Objects[I]); SynHighlighterHashList.Add(HighLighter.LanguageName, HighLighter); with HighLighter.AddSpecialAttribute(rsSynDefaultText, SYNS_XML_DefaultText) do begin Features:= [hafBackColor, hafForeColor]; Background:= clWindow; Foreground:= clWindowText; end; end; SynHighlighterList.CustomSort(@SynHighlighterSortCompare); if (FTemp = False) then begin if not mbFileExists(gpCfgDir + csDefaultName) then LoadFromFile(gpCfgDir + HighlighterConfig) else begin ImportFromOldFormat; SaveToFile(gpCfgDir + HighlighterConfig); mbRenameFile(gpCfgDir + csDefaultName, gpCfgDir + csDefaultName + '.obsolete'); end; end; end; procedure TdmHighl.dmHighlDestroy(Sender: TObject); begin if FChanged and (FTemp = False) then SaveToFile(gpCfgDir + HighlighterConfig); SynHighlighterList.Free; SynHighlighterHashList.Free; SynPlainTextHighlighter.Free; end; procedure TdmHighl.ImportFromOldFormat; var I: Integer = 0; J, K: Integer; aFile: TStringListEx; s, sValue: String; Highlighter: TSynCustomHighlighter; Attribute: TSynHighlighterAttributes; begin aFile:= TStringListEx.Create; try aFile.LoadFromFile(gpCfgDir + csDefaultName); while I < aFile.Count do begin; s:= Trim(aFile[I]); Inc(I, 1); if s = '' then Continue; if s[1] = '#' then Continue; if s[1] <> '[' then Continue; Inc(I, 3); sValue:= Copy(s, 2, Length(s) - 2); for J:= 0 to SynHighlighterList.Count - 1 do begin Highlighter:= TSynCustomHighlighter(SynHighlighterList.Objects[J]); for K:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[K]; if SameText(sValue, Attribute.StoredName) then begin Attribute.Background := TColor(StrToIntDef(aFile.ValueFromIndex[I - 3], 0)); Attribute.Foreground := TColor(StrToIntDef(aFile.ValueFromIndex[I - 2], 0)); Attribute.Style := TFontStyles(StrToIntDef(aFile.ValueFromIndex[I - 1], 0)); Break; end; end; end; end; finally aFile.Free; end; end; function TdmHighl.GetSampleSource(Highlighter: TSynCustomHighlighter): string; begin if (Highlighter is TSynPlainTextHighlighter) then 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 else if (Highlighter is TSynPasSyn) then 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 else if (Highlighter is TSynCppSyn) then 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 else if (Highlighter is TSynDiffSyn) then 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 else if (Highlighter is TSynHTMLSyn) then 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 else if (Highlighter is TSynPerlSyn) then 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 else if (Highlighter is TSynUNIXShellScriptSyn) then 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 else Result:= EmptyStr; end; constructor TdmHighl.Create(AOwner: TComponent; ATemp: Boolean); begin inherited Create(AOwner); FTemp:= ATemp; end; procedure TdmHighl.Assign(Source: TPersistent); var I: LongWord; Highl: TdmHighl absolute Source; procedure CopyAttributes(SourceHighlighter, TargetHighlighter: TSynCustomHighlighter); var J: LongWord; begin TargetHighlighter.Tag:= SourceHighlighter.Tag; TargetHighlighter.DefaultFilter:= SourceHighlighter.DefaultFilter; for J:= 0 to SourceHighlighter.AttrCount - 1 do begin TargetHighlighter.Attribute[J].Background:= SourceHighlighter.Attribute[J].Background; TargetHighlighter.Attribute[J].Foreground:= SourceHighlighter.Attribute[J].Foreground; TargetHighlighter.Attribute[J].FrameColor:= SourceHighlighter.Attribute[J].FrameColor; TargetHighlighter.Attribute[J].FrameStyle:= SourceHighlighter.Attribute[J].FrameStyle; TargetHighlighter.Attribute[J].FrameEdges:= SourceHighlighter.Attribute[J].FrameEdges; TargetHighlighter.Attribute[J].Style := SourceHighlighter.Attribute[J].Style; TargetHighlighter.Attribute[J].StyleMask := SourceHighlighter.Attribute[J].StyleMask; end; end; begin FChanged:= True; for I:= 0 to SynHighlighterList.Count - 1 do begin CopyAttributes(TSynCustomHighlighter(Highl.SynHighlighterList.Objects[I]), TSynCustomHighlighter(SynHighlighterList.Objects[I]) ); end; end; function TdmHighl.LoadFromFile(const FileName: String): Boolean; var J: LongInt; Config: TXmlConfig = nil; Root, FormNode, AttributeNode: TXmlNode; Highlighter: TSynCustomHighlighter; Attribute: TSynHighlighterAttributes; LanguageName, AttributeName : String; begin try Result:= True; try Config:= TXmlConfig.Create(FileName, True); Root := Config.FindNode(Config.RootNode, 'Highlighters'); if Assigned(Root) then begin FormNode := Config.FindNode(Root, 'Highlighter'); if Assigned(FormNode) then begin while Assigned(FormNode) do begin LanguageName:= Config.GetAttr(FormNode, 'Name', EmptyStr); Highlighter:= TSynCustomHighlighter(SynHighlighterHashList.Data[LanguageName]); if Assigned(Highlighter) then begin Highlighter.Tag := Config.GetAttr(FormNode, 'Tag', 1); Highlighter.DefaultFilter:= Config.GetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); 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) 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; FormNode := FormNode.NextSibling; end; end; end; except Result:= False; end; finally Config.Free; end; end; function TdmHighl.SaveToFile(const FileName: String): Boolean; var I: LongInt; Config: TXmlConfig; Root, FormNode, AttributeNode: TXmlNode; Attribute: TSynHighlighterAttributes; procedure SaveHighlighter(Highlighter: TSynCustomHighlighter); var J: LongWord; begin FormNode := Config.AddNode(Root, 'Highlighter'); Config.SetAttr(FormNode, 'Tag', Highlighter.Tag); Config.SetAttr(FormNode, 'Name', Highlighter.LanguageName); Config.SetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); for J:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[J]; AttributeNode := Config.AddNode(FormNode, 'Attribute'); Config.SetAttr(AttributeNode, 'Name', Attribute.StoredName); Config.SetValue(AttributeNode, 'Style', Integer(Attribute.Style)); Config.SetValue(AttributeNode, 'StyleMask', Integer(Attribute.StyleMask)); Config.SetValue(AttributeNode, 'Foreground', Integer(Attribute.Foreground)); Config.SetValue(AttributeNode, 'Background', Integer(Attribute.Background)); Config.SetValue(AttributeNode, 'FrameColor', Integer(Attribute.FrameColor)); Config.SetValue(AttributeNode, 'FrameStyle', Integer(Attribute.FrameStyle)); Config.SetValue(AttributeNode, 'FrameEdges', Integer(Attribute.FrameEdges)); end; end; begin Result:= True; Config := TXmlConfig.Create; try Config.FileName := FileName; Root := Config.FindNode(Config.RootNode, 'Highlighters', True); Config.ClearNode(Root); Config.SetAttr(Root, 'Version', 1); try for I := 0 to SynHighlighterList.Count - 1 do begin if SynHighlighterList.Objects[I] is TSynUniSyn then Continue; SaveHighlighter(TSynCustomHighlighter(SynHighlighterList.Objects[I])); end; Config.Save; except Result:= False; end; finally Config.Free; end; end; function TdmHighl.GetHighlighter(SynEdit: TCustomSynEdit; const sExtension: string): TSynCustomHighlighter; var Index: Integer; Extension: String; Highlighter: TSynUniSyn; begin Result:= GetHighlighterFromFileExt(SynHighlighterList, sExtension); // Try to find user custom highlighter if (Result = nil) then begin Extension:= Copy(sExtension, 2, MaxInt); for Index:= 0 to SynHighlighterList.Count - 1 do begin if SynHighlighterList.Objects[Index] is TSynUniSyn then begin Highlighter:= TSynUniSyn(SynHighlighterList.Objects[Index]); if MatchesMaskList(Extension, Highlighter.Info.General.Extensions, ', ') then Exit(Highlighter); end; end; end; // Determine file type by content if (Result = nil) and (SynEdit.Lines.Count > 0) then begin Extension:= SynEdit.Lines[0]; if StrBegins(Extension, ' 0) then Result:= SynUNIXShellScriptSyn1 // Python script else if (Pos('python', Extension) > 0) then Result:= SynPythonSyn1 // Perl script else if (Pos('perl', Extension) > 0) then Result:= SynPerlSyn1; end; end; // Default syntax highlighter if (Result = nil) then Result:= SynPlainTextHighlighter; end; procedure TdmHighl.SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); var I: LongInt; Attribute: TSynHighlighterAttributes; begin if (Highlighter is TSynPlainTextHighlighter) then SynEdit.Highlighter:= nil else SynEdit.Highlighter:= Highlighter; I:= Highlighter.AttrCount - 1; repeat Attribute:= Highlighter.Attribute[I]; Dec(I); until (I < 0) or SameText(Attribute.StoredName, SYNS_XML_DefaultText); SynEdit.Color:= Attribute.Background; SynEdit.Font.Color:= Attribute.Foreground; end; { TSynHighlighterAttributesHelper } function TSynHighlighterAttributesHelper.GetFeatures: TSynHighlighterAttrFeatures; begin if SameText(StoredName, SYNS_XML_DefaultText) then Result:= [hafBackColor, hafForeColor] else Result:= [hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafFrameStyle, hafFrameEdges]; end; procedure TSynHighlighterAttributesHelper.SetFeatures(AValue: TSynHighlighterAttrFeatures); begin end; end. doublecmd-0.9.8/src/dmhigh.lfm0000644000175000001440000002522713214265500015263 0ustar alexxusersobject dmHighl: TdmHighl OnCreate = dmHighlCreate OnDestroy = dmHighlDestroy OldCreateOrder = False Height = 379 HorizontalOffset = 309 VerticalOffset = 86 Width = 457 object SynPasSyn1: TSynPasSyn Tag = 1 Enabled = False AsmAttri.Foreground = clGreen AsmAttri.FrameEdges = sfeAround CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IDEDirectiveAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround CaseLabelAttri.FrameEdges = sfeAround DirectiveAttri.Foreground = clRed DirectiveAttri.FrameEdges = sfeAround DirectiveAttri.Style = [fsBold] CompilerMode = pcmDelphi NestedComments = False left = 24 top = 8 end object SynCppSyn1: TSynCppSyn Tag = 1 Enabled = False AsmAttri.Foreground = clGreen AsmAttri.FrameEdges = sfeAround CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DirecAttri.Foreground = clBlue DirecAttri.FrameEdges = sfeAround DirecAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.Foreground = clNone SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 96 top = 8 end object SynJavaSyn1: TSynJavaSyn Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DocumentAttri.Foreground = clBlue DocumentAttri.FrameEdges = sfeAround DocumentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.Foreground = clNone SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 168 top = 8 end object SynHTMLSyn1: TSynHTMLSyn Tag = 1 Enabled = False AndAttri.FrameEdges = sfeAround ASPAttri.FrameEdges = sfeAround CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround UndefKeyAttri.FrameEdges = sfeAround ValueAttri.FrameEdges = sfeAround left = 328 top = 8 end object SynXMLSyn1: TSynXMLSyn Tag = 1 Enabled = False ElementAttri.FrameEdges = sfeAround AttributeAttri.FrameEdges = sfeAround NamespaceAttributeAttri.FrameEdges = sfeAround AttributeValueAttri.FrameEdges = sfeAround NamespaceAttributeValueAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround CDATAAttri.FrameEdges = sfeAround EntityRefAttri.FrameEdges = sfeAround ProcessingInstructionAttri.FrameEdges = sfeAround CommentAttri.FrameEdges = sfeAround DocTypeAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround WantBracesParsed = False left = 24 top = 72 end object SynLFMSyn1: TSynLFMSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround left = 96 top = 72 end object SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SecondKeyAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround VarAttri.FrameEdges = sfeAround left = 296 top = 72 end object SynPHPSyn1: TSynPHPSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidSymbolAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 96 top = 136 end object SynTeXSyn1: TSynTeXSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround ControlSequenceAttri.FrameEdges = sfeAround MathmodeAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround BraceAttri.FrameEdges = sfeAround BracketAttri.FrameEdges = sfeAround left = 168 top = 136 end object SynSQLSyn1: TSynSQLSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DataTypeAttri.FrameEdges = sfeAround DefaultPackageAttri.FrameEdges = sfeAround ExceptionAttri.FrameEdges = sfeAround FunctionAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround PLSQLAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SQLPlusAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround TableNameAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround SQLDialect = sqlSybase left = 240 top = 136 end object SynPerlSyn1: TSynPerlSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround OperatorAttri.FrameEdges = sfeAround PragmaAttri.FrameEdges = sfeAround SpaceAttri.Foreground = clNone SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clNavy StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 240 top = 8 end object SynCssSyn1: TSynCssSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 24 top = 136 end object SynPythonSyn1: TSynPythonSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NonKeyAttri.FrameEdges = sfeAround SystemAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround HexAttri.FrameEdges = sfeAround OctalAttri.FrameEdges = sfeAround FloatAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround DocStringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround ErrorAttri.FrameEdges = sfeAround left = 328 top = 136 end object SynDiffSyn1: TSynDiffSyn Tag = 1 DefaultFilter = 'Difference Files (*.diff,*.patch)|*.diff;*.patch' Enabled = False UnknownAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround OrigFileAttri.FrameEdges = sfeAround NewFileAttri.FrameEdges = sfeAround ChunkMarkerAttri.FrameEdges = sfeAround ChunkNewAttri.FrameEdges = sfeAround ChunkOldAttri.FrameEdges = sfeAround ChunkMixedAttri.FrameEdges = sfeAround LineAddedAttri.FrameEdges = sfeAround LineRemovedAttri.FrameEdges = sfeAround LineChangedAttri.FrameEdges = sfeAround LineContextAttri.FrameEdges = sfeAround left = 168 top = 72 end object SynVBSyn1: TSynVBSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 24 top = 200 end object SynBatSyn1: TSynBatSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 96 top = 200 end object SynIniSyn1: TSynIniSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround SectionAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround left = 168 top = 200 end object SynPoSyn1: TSynPoSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround left = 240 top = 200 end end doublecmd-0.9.8/src/dmhelpmanager.pas0000644000175000001440000000724012615153436016637 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Help manager Copyright (C) 2008 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 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; {$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,''); FileWriteLn(hFile,''); // In case browser doesn't support auto-redirection, give a link to user. FileWriteLn(hFile,'
Click here for help
'); FileWriteLn(hFile,''); 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} begin if NumCountChars('.', gPOFileName) < 2 then gHelpLang:= 'en' else begin gHelpLang:= ExtractDelimited(2, gPOFileName, ['.']); if not mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then gHelpLang:= 'en'; end; if mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then HTMLHelpDatabase.BaseURL:= 'file://' + gpExePath + 'doc' + PathDelim + gHelpLang else begin HTMLHelpDatabase.BaseURL:= 'http://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-0.9.8/src/dmhelpmanager.lfm0000644000175000001440000000072612045446211016625 0ustar alexxusersobject 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-0.9.8/src/dmcommondata.pas0000644000175000001440000000350313272341427016473 0ustar alexxusersunit dmCommonData; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Dialogs; type { TdmComData } TdmComData = class(TDataModule) ilEditorImages: TImageList; ImageList: TImageList; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; procedure DataModuleCreate(Sender: TObject); private procedure LoadEditorImageList; public { public declarations } end; var dmComData: TdmComData; implementation uses LCLVersion, uGraphics, uPixMapManager; {$R *.lfm} { TdmComData } procedure TdmComData.DataModuleCreate(Sender: TObject); begin if Assigned(PixMapManager) then begin LoadEditorImageList; end; end; procedure TdmComData.LoadEditorImageList; begin {$if lcl_fullversion >= 1070000} ilEditorImages.Width:= AdjustIconSize(ilEditorImages.Width, 96); ilEditorImages.Height:= AdjustIconSize(ilEditorImages.Height, 96); {$endif} ilEditorImages.LoadThemeIcon(0, 'document-new'); ilEditorImages.LoadThemeIcon(1, 'document-open'); ilEditorImages.LoadThemeIcon(2, 'document-save'); ilEditorImages.LoadThemeIcon(3, 'document-save-as'); ilEditorImages.LoadThemeIcon(4, 'document-properties'); ilEditorImages.LoadThemeIcon(5, 'edit-cut'); ilEditorImages.LoadThemeIcon(6, 'edit-copy'); ilEditorImages.LoadThemeIcon(7, 'edit-paste'); ilEditorImages.LoadThemeIcon(8, 'edit-undo'); ilEditorImages.LoadThemeIcon(9, 'edit-redo'); ilEditorImages.LoadThemeIcon(10, 'edit-find'); ilEditorImages.LoadThemeIcon(11, 'edit-find-replace'); ilEditorImages.LoadThemeIcon(12, 'application-exit'); ilEditorImages.LoadThemeIcon(13, 'help-about'); ilEditorImages.LoadThemeIcon(14, 'edit-delete'); ilEditorImages.LoadThemeIcon(15, 'edit-select-all'); ilEditorImages.LoadThemeIcon(16, 'go-jump'); ilEditorImages.LoadThemeIcon(17, 'view-refresh'); end; end. doublecmd-0.9.8/src/dmcommondata.lfm0000644000175000001440000014166713260002626016474 0ustar alexxusersobject dmComData: TdmComData OnCreate = DataModuleCreate OldCreateOrder = False Height = 300 HorizontalOffset = 670 VerticalOffset = 280 Width = 400 object OpenDialog: TOpenDialog FilterIndex = 0 left = 32 top = 24 end object SaveDialog: TSaveDialog FilterIndex = 0 left = 120 top = 24 end object ImageList: TImageList Height = 22 Width = 22 left = 224 top = 24 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 = 320 top = 24 Bitmap = { 4C691200000010000000100000009E9E9EFF818181FF818181FF818181FF8181 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 3424FFFFFF00FFFFFF00FFFFFF00 } end end doublecmd-0.9.8/src/DragCursors.lrs0000644000175000001440000003537312512434150016305 0ustar alexxusersLazarusResources.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#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 +#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#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#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#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#1#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#1#1#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#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#255#255#255#255#143#255#255#254#0#1#255#254#0#1#255'~'#0 +#1#255'>'#0#1#255#28#0#1#255#12#0#1#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#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']' +#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#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#0#0#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#0#0#0#0#1#1#1#2#3#3#3#3#3#3#3#3#2#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#2#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#1#1#1#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#0 +#0#0#0#1#1#0#0#2#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#1#1#1#0 +#2#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#0#1#1#0#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#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#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#224#255#255#255 +#195#255#255#255#199#255#255#255#135#251#255#255#131#243#255#255#192#227#255 +#255#192#3#255#255#192#3#255#255#128#3#255#255#0#3#255#255#0#3#255'~'#8#3#255 +'>'#16#3#255#28#0#3#255#12#0#3#255#0#127#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 ]); doublecmd-0.9.8/sdk/0000755000175000001440000000000013615241421013306 5ustar alexxusersdoublecmd-0.9.8/sdk/wlxplugin.pas0000644000175000001440000000700212117073164016046 0ustar alexxusers// 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; 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-0.9.8/sdk/wlxplugin.h0000644000175000001440000000435613175653712015533 0ustar alexxusers#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-0.9.8/sdk/wfxplugin.pas0000644000175000001440000003470211740433676016060 0ustar alexxusersunit 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-0.9.8/sdk/wfxplugin.h0000644000175000001440000002353011740433676015521 0ustar alexxusers#include "common.h" // contents of fsplugin.h version 2.0 (30.Jan.2009) // 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_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 // 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 #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-0.9.8/sdk/wdxplugin.pas0000644000175000001440000001017412726724716016056 0ustar alexxusersunit 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-0.9.8/sdk/wdxplugin.h0000644000175000001440000000740413175653712015520 0ustar alexxusers#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 #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-0.9.8/sdk/wcxplugin.pas0000644000175000001440000001551613130677606016055 0ustar alexxusers{ 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; 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-0.9.8/sdk/wcxplugin.h0000644000175000001440000001405613130677606015517 0ustar alexxusers#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]; } 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-0.9.8/sdk/help/0000755000175000001440000000000013615241421014236 5ustar alexxusersdoublecmd-0.9.8/sdk/help/pasdoc.css0000644000175000001440000001210311375744471016234 0ustar alexxusersbody { 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
, 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 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-0.9.8/sdk/help/dfxplugin.html0000644000175000001440000007503311451563402017136 0ustar alexxusers 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-0.9.8/sdk/extension.pas0000644000175000001440000001460213573160507016042 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; // 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_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; 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}; 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}; 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; // Reserved for future API extension Reserved: packed array [0..Pred(4096 * 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-0.9.8/sdk/extension.h0000644000175000001440000001222313573160507015503 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 /* 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_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 /* 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 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); #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; unsigned char Reserved[4096 * 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-0.9.8/sdk/dsxplugin.pas0000644000175000001440000000332111740433676016043 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-0.9.8/sdk/common.h0000644000175000001440000000300013175653712014753 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-0.9.8/sdk/calling.inc0000644000175000001440000000014411740433676015425 0ustar alexxusers{$MACRO ON} {$IFDEF MSWINDOWS} {$DEFINE dcpcall:=stdcall} {$ELSE} {$DEFINE dcpcall:=cdecl} {$ENDIF} doublecmd-0.9.8/scripts/0000755000175000001440000000000013615241421014214 5ustar alexxusersdoublecmd-0.9.8/scripts/terminal.sh0000755000175000001440000000113212663033654016374 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-0.9.8/scripts/rabbit-vcs.py0000644000175000001440000000556513472537516016653 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 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 * from rabbitvcs.util.contextmenu import MenuBuilder, MainContextMenu, MainContextMenuCallbacks except: 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): upaths = [] for path in paths: upaths.append(unicode(path)) sender = DCSender() base_dir = os.path.dirname(upaths[0]) return DCMainContextMenu(sender, base_dir, upaths, None) if __name__ == "__main__": try: from rabbitvcs.services.checkerservice import StatusCheckerStub status_checker = StatusCheckerStub() except: exit(1) doublecmd-0.9.8/scripts/doublecmd-kde.py0000644000175000001440000000665712467727002017313 0ustar alexxusers# # Double Commander # ------------------------------------------------------------------------- # KDE integration module # # Copyright (C) 2013-2014 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. # import sys try: from PyKDE4.kdeui import KApplication from PyKDE4.kdecore import KService, KLocale, KGlobal from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineArgs, KUrl, KCmdLineOptions from PyKDE4.kio import KFileItem, KFileItemList, KPropertiesDialog, KRun, KOpenWithDialog except: exit(1) # Show help message def Help(): print("\nSyntax:\n") print(" doublecmd-kde properties \n" " # Opens a file properties dialog\n\n") print(" doublecmd-kde openwith \n" " # Display the Open-With dialog for those URLs, and run the chosen application\n\n") exit(0) # Check argument count def CheckArguments(argc): if args.count() < argc: Help() #--------------- main ------------------ if __name__ == '__main__': appName = "doublecmd-kde" catalog = "kio4" programName = ki18n ("Double Commander") version = "1.0" description = ki18n ("Double Commander KDE helper") license = KAboutData.License_GPL copyright = ki18n ("(C) 2013-2014 Alexander Koblov") text = ki18n ("none") homePage = "doublecmd.sourceforge.net" bugEmail = "alexx2000@users.sourceforge.net" aboutData = KAboutData (appName, catalog, programName, version, description, license, copyright, text, homePage, bugEmail) KCmdLineArgs.init (sys.argv, aboutData, 0) options = KCmdLineOptions() options.add("+command", ki18n("Command")) options.add("+[URL(s)]", ki18n("Arguments for command")) KCmdLineArgs.addCmdLineOptions(options) args = KCmdLineArgs.parsedArgs() CheckArguments(1) app = KApplication() command = args.arg(0).toLocal8Bit(); if command == "properties": CheckArguments(2) fileList = [] for index in range(1, args.count()): fileList.append(KFileItem(args.url(index), "", 0)) propertiesDialog = KPropertiesDialog(KFileItemList(fileList)); propertiesDialog.exec_() elif command == "openwith": CheckArguments(2) fileList = [] for index in range(1, args.count()): fileList.append(args.url(index)) fileList = KUrl.List(fileList) propertiesDialog = KOpenWithDialog(fileList) if propertiesDialog.exec_(): service = propertiesDialog.service() if service == None: print("No service set, running " + propertiesDialog.text() + "\n") service = KService(propertiesDialog.text(), propertiesDialog.text(), "") KRun.run(service, fileList, None) else: Help() doublecmd-0.9.8/plugins/0000755000175000001440000000000013615241421014206 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/0000755000175000001440000000000013615241421015020 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/simplewlx/0000755000175000001440000000000013615241421017044 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/simplewlx/src/0000755000175000001440000000000013615241421017633 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/simplewlx/src/wlxplugin.pas0000644000175000001440000000444312014201074022366 0ustar alexxusers// 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-0.9.8/plugins/wlx/simplewlx/src/simplewlx.lpr0000644000175000001440000000532512117057733022412 0ustar alexxuserslibrary 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-0.9.8/plugins/wlx/simplewlx/src/simplewlx.lpi0000644000175000001440000000411113022776142022367 0ustar alexxusers doublecmd-0.9.8/plugins/wlx/simplewlx/lib/0000755000175000001440000000000013615241421017612 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/WlxMplayer/0000755000175000001440000000000013615241421017124 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/WlxMplayer/src/0000755000175000001440000000000013615241421017713 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/WlxMplayer/src/wlxMplayer.lpr0000644000175000001440000001724013235405535022610 0ustar alexxusers{ 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))} {$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} 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)} 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)} 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-0.9.8/plugins/wlx/WlxMplayer/src/wlxMplayer.lpi0000644000175000001440000001154613235405535022602 0ustar alexxusers doublecmd-0.9.8/plugins/wlx/WlxMplayer/src/qt4.pas0000644000175000001440000500204712650004434021137 0ustar alexxusers//****************************************************************************** // Copyright (c) 2005-2011 by Jan Van hijfte // // See the included file COPYING.TXT 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 qt4; { Version : 2.5 } {$mode objfpc}{$H+} interface uses Types; {$MINENUMSIZE 4} const QT_VERSION = 4 shl 16 + 5 shl 8 + 3; {$IFDEF MSWINDOWS} Qt4PasLib = 'Qt4Pas5.dll'; {$ENDIF} {$IFDEF HAIKU} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} // Set qtopia yourself if using QTOPIA with QVFB on i386 // ppc386 -dQTOPIA //{$IFDEF CPUARM} // {$DEFINE QTOPIA} //{$ENDIF} {$IFDEF QTOPIA} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} {$IFNDEF QTOPIA} {$IF DEFINED(LINUX) or DEFINED(FREEBSD) or DEFINED(NETBSD)} {$DEFINE BINUX} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} {$ENDIF} {$IFDEF DARWIN} Qt4PasLib = ''; {$LINKFRAMEWORK Qt4Pas} {$ENDIF} type PLong = ^Long; {$if defined(CPU64) and not defined(WIN64)} Long = Int64; {$else} Long = LongInt; {$endif} QHookH = TMethod; PQSizePolicy = ^TQSizePolicy; TQSizePolicy = packed record Data: Word; end; PQColor = ^TQColor; TQColor = packed record ColorSpec : LongInt; Alpha : word; r,g,b : word; Pad : word; end; QtHandle = integer; PQReal = ^QReal; {$ifdef CPUARM} QReal = single; {$else} QReal = double; {$endif} PQRgb = ^QRgb; QRgb = longword; PPtrIntArray = ^TPtrIntArray; TPtrIntArray = array of PtrInt; PQRealArray = ^TQRealArray; TQRealArray = array of QReal; const NilMethod : TMethod = (Code: nil; Data: nil); type PQtPoint = ^TQtPoint; {$IFDEF DARWIN} TQtPoint = packed record y : LongInt; x : LongInt; end; {$ELSE} TQtPoint = packed record x : LongInt; y : LongInt; end; {$ENDIF} PQtPointF = ^TQtPointF; TQtPointF = packed record x : QReal; y : QReal; end; {$IFDEF DARWIN} EventHandlerRef = ^LongInt; EventRef = ^LongInt; RgnHandle = ^LongInt; MenuHandle = ^LongInt; MenuRef = MenuHandle; EventHandlerCallRef = ^LongInt; CGImageRef = Pointer; {$ENDIF} {$IFDEF MSWINDOWS} { Message structure } PMsg = ^tagMSG; tagMSG = packed record hwnd: LongWord; message: Cardinal; wParam: Longint; lParam: Longint; time: DWORD; pt: TPoint; end; // Extra Q to avoid name clash with other Pascal Units WINHANDLE = System.THandle; QHCURSOR = type WINHANDLE; QHPALETTE = type WINHANDLE; QHFONT = type WINHANDLE; QHDC = type WINHANDLE; QHBITMAP = type WINHANDLE; QHBRUSH = type WINHANDLE; QHPEN = type WINHANDLE; QHRGN = type WINHANDLE; QHICON = type WINHANDLE; {$ENDIF} {$IFDEF WIN32} Q_PID = type pointer; {$ELSE} Q_PID = type int64; {$ENDIF} QAbstractFileEngineH = class(TObject) end; QAuthenticatorH = class(TObject) end; QBitArrayH = class(TObject) end; QBrushH = class(TObject) end; QByteArrayH = class(TObject) end; QCharH = class(TObject) end; QColorH = class(TObject) end; QCursorH = class(TObject) end; QDataStreamH = class(TObject) end; QDateH = class(TObject) end; QDateTimeH = class(TObject) end; QDecorationH = class(TObject) end; QDesktopServicesH = class(TObject) end; QDirH = class(TObject) end; QEventH = class(TObject) end; QLCLMessageEventH = class(QEventH) end; QActionEventH = class(QEventH) end; QChildEventH = class(QEventH) end; QCloseEventH = class(QEventH) end; QDragLeaveEventH = class(QEventH) end; QDropEventH = class(QEventH) end; QDragMoveEventH = class(QDropEventH) end; QDragEnterEventH = class(QDragMoveEventH) end; QDynamicPropertyChangeEventH = class(QEventH) end; QFileOpenEventH = class(QEventH) end; QFocusEventH = class(QEventH) end; QHelpEventH = class(QEventH) end; QHideEventH = class(QEventH) end; QHoverEventH = class(QEventH) end; QIconDragEventH = class(QEventH) end; QInputEventH = class(QEventH) end; QContextMenuEventH = class(QInputEventH) end; QKeyEventH = class(QInputEventH) end; QMouseEventH = class(QInputEventH) end; QTabletEventH = class(QInputEventH) end; QWheelEventH = class(QInputEventH) end; QInputMethodEventH = class(QEventH) end; QMoveEventH = class(QEventH) end; QPaintEventH = class(QEventH) end; QResizeEventH = class(QEventH) end; QShortcutEventH = class(QEventH) end; QShowEventH = class(QEventH) end; QStatusTipEventH = class(QEventH) end; QTimerEventH = class(QEventH) end; QWhatsThisClickedEventH = class(QEventH) end; QWindowStateChangeEventH = class(QEventH) end; QFileIconProviderH = class(TObject) end; QFileInfoH = class(TObject) end; QFlagH = class(TObject) end; QFlagsH = class(TObject) end; QFontH = class(TObject) end; QFontDatabaseH = class(TObject) end; QFontInfoH = class(TObject) end; QFontMetricsH = class(TObject) end; QFontMetricsFH = class(TObject) end; QGradientH = class(TObject) end; QConicalGradientH = class(QGradientH) end; QLinearGradientH = class(QGradientH) end; QRadialGradientH = class(QGradientH) end; QGraphicsItemH = class(TObject) end; QAbstractGraphicsShapeItemH = class(QGraphicsItemH) end; QGraphicsEllipseItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsPathItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsPolygonItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsRectItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsSimpleTextItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsItemGroupH = class(QGraphicsItemH) end; QGraphicsLineItemH = class(QGraphicsItemH) end; QGraphicsObjectH = class(QGraphicsItemH) end; QGraphicsTextItemH = class(QGraphicsObjectH) end; QGraphicsWidgetH = class(QGraphicsObjectH) end; QGraphicsProxyWidgetH = class(QGraphicsWidgetH) end; QGraphicsPixmapItemH = class(QGraphicsItemH) end; QGraphicsLayoutItemH = class(TObject) end; QHostAddressH = class(TObject) end; QIconH = class(TObject) end; QIconEngineH = class(TObject) end; QIconEngineV2H = class(QIconEngineH) end; QImageIOHandlerH = class(TObject) end; QImageReaderH = class(TObject) end; QImageWriterH = class(TObject) end; QItemEditorCreatorBaseH = class(TObject) end; QItemEditorFactoryH = class(TObject) end; QItemSelectionRangeH = class(TObject) end; QKeySequenceH = class(TObject) end; QLatin1StringH = class(TObject) end; QLayoutItemH = class(TObject) end; QLayoutH = class(QLayoutItemH) end; QBoxLayoutH = class(QLayoutH) end; QHBoxLayoutH = class(QBoxLayoutH) end; QVBoxLayoutH = class(QBoxLayoutH) end; QGridLayoutH = class(QLayoutH) end; QStackedLayoutH = class(QLayoutH) end; QSpacerItemH = class(QLayoutItemH) end; QWidgetItemH = class(QLayoutItemH) end; QLineH = class(TObject) end; QLineFH = class(TObject) end; QListH = class(TObject) end; QStringListH = class(QListH) end; QListWidgetItemH = class(TObject) end; QLocaleH = class(TObject) end; QMetaClassInfoH = class(TObject) end; QMetaEnumH = class(TObject) end; QMetaMethodH = class(TObject) end; QMetaObjectH = class(TObject) end; QMetaPropertyH = class(TObject) end; QModelIndexH = class(TObject) end; QNetworkCookieH = class(TObject) end; QNetworkProxyH = class(TObject) end; QNetworkProxyFactoryH = class(TObject) end; QNetworkProxyQueryH = class(TObject) end; QNetworkRequestH = class(TObject) end; QObjectH = class(TObject) end; QAbstractEventDispatcherH = class(QObjectH) end; QAbstractItemDelegateH = class(QObjectH) end; QItemDelegateH = class(QAbstractItemDelegateH) end; QLCLItemDelegateH = class(QItemDelegateH) end; QStyledItemDelegateH = class(QAbstractItemDelegateH) end; QAbstractItemModelH = class(QObjectH) end; QAbstractListModelH = class(QAbstractItemModelH) end; QAbstractProxyModelH = class(QAbstractItemModelH) end; QAbstractTableModelH = class(QAbstractItemModelH) end; QStandardItemModelH = class(QAbstractItemModelH) end; QAbstractNetworkCacheH = class(QObjectH) end; QAbstractTextDocumentLayoutH = class(QObjectH) end; QPlainTextDocumentLayoutH = class(QAbstractTextDocumentLayoutH) end; QActionH = class(QObjectH) end; QActionGroupH = class(QObjectH) end; QButtonGroupH = class(QObjectH) end; QClipboardH = class(QObjectH) end; QCompleterH = class(QObjectH) end; QCoreApplicationH = class(QObjectH) end; QApplicationH = class(QCoreApplicationH) end; QDragH = class(QObjectH) end; QEventLoopH = class(QObjectH) end; QFileSystemWatcherH = class(QObjectH) end; QGraphicsSceneH = class(QObjectH) end; QIODeviceH = class(QObjectH) end; QAbstractSocketH = class(QIODeviceH) end; QTcpSocketH = class(QAbstractSocketH) end; QSslSocketH = class(QTcpSocketH) end; QUdpSocketH = class(QAbstractSocketH) end; QFileH = class(QIODeviceH) end; QNetworkReplyH = class(QIODeviceH) end; QProcessH = class(QIODeviceH) end; QInputContextH = class(QObjectH) end; QItemSelectionModelH = class(QObjectH) end; QMimeDataH = class(QObjectH) end; QMovieH = class(QObjectH) end; QNetworkAccessManagerH = class(QObjectH) end; QNetworkCookieJarH = class(QObjectH) end; QLCLNetworkCookieJarH = class(QNetworkCookieJarH) end; QSessionManagerH = class(QObjectH) end; QShortcutH = class(QObjectH) end; QSocketNotifierH = class(QObjectH) end; QStyleH = class(QObjectH) end; QSystemTrayIconH = class(QObjectH) end; QTcpServerH = class(QObjectH) end; QTextDocumentH = class(QObjectH) end; QTextObjectH = class(QObjectH) end; QTextBlockGroupH = class(QTextObjectH) end; QTextListH = class(QTextBlockGroupH) end; QTextFrameH = class(QTextObjectH) end; QTextTableH = class(QTextFrameH) end; QThreadH = class(QObjectH) end; QLCLThreadH = class(QThreadH) end; QTimerH = class(QObjectH) end; QTranslatorH = class(QObjectH) end; QUndoStackH = class(QObjectH) end; QValidatorH = class(QObjectH) end; QDoubleValidatorH = class(QValidatorH) end; QIntValidatorH = class(QValidatorH) end; QRegExpValidatorH = class(QValidatorH) end; QWebFrameH = class(QObjectH) end; QWebHistoryInterfaceH = class(QObjectH) end; QWebPageH = class(QObjectH) end; QLCLWebPageH = class(QWebPageH) end; QWebPluginFactoryH = class(QObjectH) end; QWidgetH = class(QObjectH) end; QAbstractButtonH = class(QWidgetH) end; QCheckBoxH = class(QAbstractButtonH) end; QPushButtonH = class(QAbstractButtonH) end; QRadioButtonH = class(QAbstractButtonH) end; QToolButtonH = class(QAbstractButtonH) end; QAbstractSliderH = class(QWidgetH) end; QScrollBarH = class(QAbstractSliderH) end; QSliderH = class(QAbstractSliderH) end; QAbstractSpinBoxH = class(QWidgetH) end; QLCLAbstractSpinBoxH = class(QAbstractSpinBoxH) end; QDoubleSpinBoxH = class(QAbstractSpinBoxH) end; QSpinBoxH = class(QAbstractSpinBoxH) end; QCalendarWidgetH = class(QWidgetH) end; QComboBoxH = class(QWidgetH) end; QDesktopWidgetH = class(QWidgetH) end; QDialogH = class(QWidgetH) end; QAbstractPrintDialogH = class(QDialogH) end; QPrintDialogH = class(QAbstractPrintDialogH) end; QColorDialogH = class(QDialogH) end; QFileDialogH = class(QDialogH) end; QFontDialogH = class(QDialogH) end; QInputDialogH = class(QDialogH) end; QMessageBoxH = class(QDialogH) end; QPageSetupDialogH = class(QDialogH) end; QPrintPreviewDialogH = class(QDialogH) end; QProgressDialogH = class(QDialogH) end; QDockWidgetH = class(QWidgetH) end; QFrameH = class(QWidgetH) end; QAbstractScrollAreaH = class(QFrameH) end; QLCLAbstractScrollAreaH = class(QAbstractScrollAreaH) end; QAbstractItemViewH = class(QAbstractScrollAreaH) end; QHeaderViewH = class(QAbstractItemViewH) end; QListViewH = class(QAbstractItemViewH) end; QListWidgetH = class(QListViewH) end; QTableViewH = class(QAbstractItemViewH) end; QTableWidgetH = class(QTableViewH) end; QTreeViewH = class(QAbstractItemViewH) end; QTreeWidgetH = class(QTreeViewH) end; QGraphicsViewH = class(QAbstractScrollAreaH) end; QMdiAreaH = class(QAbstractScrollAreaH) end; QPlainTextEditH = class(QAbstractScrollAreaH) end; QScrollAreaH = class(QAbstractScrollAreaH) end; QTextEditH = class(QAbstractScrollAreaH) end; QTextBrowserH = class(QTextEditH) end; QLCDNumberH = class(QFrameH) end; QLabelH = class(QFrameH) end; QSplitterH = class(QFrameH) end; QStackedWidgetH = class(QFrameH) end; QToolBoxH = class(QFrameH) end; QGroupBoxH = class(QWidgetH) end; QLineEditH = class(QWidgetH) end; QMainWindowH = class(QWidgetH) end; QMdiSubWindowH = class(QWidgetH) end; QMenuH = class(QWidgetH) end; QMenuBarH = class(QWidgetH) end; QPrintPreviewWidgetH = class(QWidgetH) end; QProgressBarH = class(QWidgetH) end; QRubberBandH = class(QWidgetH) end; QSizeGripH = class(QWidgetH) end; QSplitterHandleH = class(QWidgetH) end; QStatusBarH = class(QWidgetH) end; QTabBarH = class(QWidgetH) end; QTabWidgetH = class(QWidgetH) end; QLCLTabWidgetH = class(QTabWidgetH) end; QToolBarH = class(QWidgetH) end; QWebViewH = class(QWidgetH) end; QLCLWebViewH = class(QWebViewH) end; QPaintDeviceH = class(TObject) end; QImageH = class(QPaintDeviceH) end; QPictureH = class(QPaintDeviceH) end; QPixmapH = class(QPaintDeviceH) end; QBitmapH = class(QPixmapH) end; QPrinterH = class(QPaintDeviceH) end; QPaintEngineH = class(TObject) end; QPainterH = class(TObject) end; QPainterPathH = class(TObject) end; QPainterPathStrokerH = class(TObject) end; QPaletteH = class(TObject) end; QPenH = class(TObject) end; QPersistentModelIndexH = class(TObject) end; QPointH = class(TObject) end; QPointFH = class(TObject) end; QPrintEngineH = class(TObject) end; QPrinterInfoH = class(TObject) end; QRectH = class(TObject) end; QRectFH = class(TObject) end; QRegExpH = class(TObject) end; QRegionH = class(TObject) end; QSizeH = class(TObject) end; QSizeFH = class(TObject) end; QSizePolicyH = class(TObject) end; QSslCertificateH = class(TObject) end; QSslCipherH = class(TObject) end; QSslConfigurationH = class(TObject) end; QSslErrorH = class(TObject) end; QSslKeyH = class(TObject) end; QStandardItemH = class(TObject) end; QStringH = class(TObject) end; QStyleFactoryH = class(TObject) end; QStyleHintReturnH = class(TObject) end; QStyleHintReturnMaskH = class(QStyleHintReturnH) end; QStyleHintReturnVariantH = class(QStyleHintReturnH) end; QStyleOptionH = class(TObject) end; QStyleOptionButtonH = class(QStyleOptionH) end; QStyleOptionComplexH = class(QStyleOptionH) end; QStyleOptionComboBoxH = class(QStyleOptionComplexH) end; QStyleOptionGroupBoxH = class(QStyleOptionComplexH) end; QStyleOptionQ3ListViewH = class(QStyleOptionComplexH) end; QStyleOptionSizeGripH = class(QStyleOptionComplexH) end; QStyleOptionSliderH = class(QStyleOptionComplexH) end; QStyleOptionSpinBoxH = class(QStyleOptionComplexH) end; QStyleOptionTitleBarH = class(QStyleOptionComplexH) end; QStyleOptionToolButtonH = class(QStyleOptionComplexH) end; QStyleOptionDockWidgetH = class(QStyleOptionH) end; QStyleOptionFocusRectH = class(QStyleOptionH) end; QStyleOptionFrameH = class(QStyleOptionH) end; QStyleOptionFrameV2H = class(QStyleOptionFrameH) end; QStyleOptionFrameV3H = class(QStyleOptionFrameV2H) end; QStyleOptionGraphicsItemH = class(QStyleOptionH) end; QStyleOptionHeaderH = class(QStyleOptionH) end; QStyleOptionMenuItemH = class(QStyleOptionH) end; QStyleOptionProgressBarH = class(QStyleOptionH) end; QStyleOptionProgressBarV2H = class(QStyleOptionProgressBarH) end; QStyleOptionQ3DockWindowH = class(QStyleOptionH) end; QStyleOptionQ3ListViewItemH = class(QStyleOptionH) end; QStyleOptionRubberBandH = class(QStyleOptionH) end; QStyleOptionTabH = class(QStyleOptionH) end; QStyleOptionTabV2H = class(QStyleOptionTabH) end; QStyleOptionTabV3H = class(QStyleOptionTabV2H) end; QStyleOptionTabBarBaseH = class(QStyleOptionH) end; QStyleOptionTabBarBaseV2H = class(QStyleOptionTabBarBaseH) end; QStyleOptionTabWidgetFrameH = class(QStyleOptionH) end; QStyleOptionToolBarH = class(QStyleOptionH) end; QStyleOptionToolBoxH = class(QStyleOptionH) end; QStyleOptionToolBoxV2H = class(QStyleOptionToolBoxH) end; QStyleOptionViewItemH = class(QStyleOptionH) end; QStyleOptionViewItemV2H = class(QStyleOptionViewItemH) end; QStyleOptionViewItemV3H = class(QStyleOptionViewItemV2H) end; QStyleOptionViewItemV4H = class(QStyleOptionViewItemV3H) end; QSysInfoH = class(TObject) end; QSystemLocaleH = class(TObject) end; QTableWidgetItemH = class(TObject) end; QTableWidgetSelectionRangeH = class(TObject) end; QTextBlockH = class(TObject) end; QTextBlockUserDataH = class(TObject) end; QTextCursorH = class(TObject) end; QTextDocumentFragmentH = class(TObject) end; QTextFormatH = class(TObject) end; QTextBlockFormatH = class(QTextFormatH) end; QTextCharFormatH = class(QTextFormatH) end; QTextImageFormatH = class(QTextCharFormatH) end; QTextFrameFormatH = class(QTextFormatH) end; QTextTableFormatH = class(QTextFrameFormatH) end; QTextFragmentH = class(TObject) end; QTextInlineObjectH = class(TObject) end; QTextLayoutH = class(TObject) end; QTextLineH = class(TObject) end; QTextObjectInterfaceH = class(TObject) end; QTextOptionH = class(TObject) end; QTimeH = class(TObject) end; QToolTipH = class(TObject) end; QTransformH = class(TObject) end; QTreeWidgetItemH = class(TObject) end; QUrlH = class(TObject) end; QVariantH = class(TObject) end; QVectorH = class(TObject) end; QPolygonH = class(QVectorH) end; QPolygonFH = class(QVectorH) end; QWSEventH = class(TObject) end; QWebDatabaseH = class(TObject) end; QWebHistoryH = class(TObject) end; QWebHistoryItemH = class(TObject) end; QWebHitTestResultH = class(TObject) end; QWebSecurityOriginH = class(TObject) end; QWebSettingsH = class(TObject) end; QWhatsThisH = class(TObject) end; QX11InfoH = class(TObject) end; QMatrixH = class(TObject) end; QPainterPathElementH = class(TObject) end; QObject_hookH = class(TObject) end; QCoreApplication_hookH = class(QObject_hookH) end; QTimer_hookH = class(QObject_hookH) end; QModelIndex_hookH = class(QObject_hookH) end; QPersistentModelIndex_hookH = class(QObject_hookH) end; QAbstractItemModel_hookH = class(QObject_hookH) end; QAbstractTableModel_hookH = class(QAbstractItemModel_hookH) end; QAbstractListModel_hookH = class(QAbstractItemModel_hookH) end; QSocketNotifier_hookH = class(QObject_hookH) end; QThread_hookH = class(QObject_hookH) end; QIODevice_hookH = class(QObject_hookH) end; QProcess_hookH = class(QIODevice_hookH) end; QFileSystemWatcher_hookH = class(QObject_hookH) end; QApplication_hookH = class(QCoreApplication_hookH) end; QWidget_hookH = class(QObject_hookH) end; QLayout_hookH = class(QObject_hookH) end; QStackedLayout_hookH = class(QLayout_hookH) end; QAction_hookH = class(QObject_hookH) end; QActionGroup_hookH = class(QObject_hookH) end; QClipboard_hookH = class(QObject_hookH) end; QDesktopWidget_hookH = class(QWidget_hookH) end; QDrag_hookH = class(QObject_hookH) end; QShortcut_hookH = class(QObject_hookH) end; QAbstractTextDocumentLayout_hookH = class(QObject_hookH) end; QTextObjectInterface_hookH = class(QObject_hookH) end; QFrame_hookH = class(QWidget_hookH) end; QStackedWidget_hookH = class(QFrame_hookH) end; QAbstractScrollArea_hookH = class(QFrame_hookH) end; QAbstractSlider_hookH = class(QWidget_hookH) end; QScrollBar_hookH = class(QAbstractSlider_hookH) end; QMenu_hookH = class(QWidget_hookH) end; QMenuBar_hookH = class(QWidget_hookH) end; QButtonGroup_hookH = class(QObject_hookH) end; QAbstractButton_hookH = class(QWidget_hookH) end; QPushButton_hookH = class(QAbstractButton_hookH) end; QLineEdit_hookH = class(QWidget_hookH) end; QPlainTextEdit_hookH = class(QAbstractScrollArea_hookH) end; QPlainTextDocumentLayout_hookH = class(QAbstractTextDocumentLayout_hookH) end; QTextEdit_hookH = class(QAbstractScrollArea_hookH) end; QTabWidget_hookH = class(QWidget_hookH) end; QMainWindow_hookH = class(QWidget_hookH) end; QToolBar_hookH = class(QWidget_hookH) end; QLCDNumber_hookH = class(QFrame_hookH) end; QAbstractSpinBox_hookH = class(QWidget_hookH) end; QSpinBox_hookH = class(QAbstractSpinBox_hookH) end; QDoubleSpinBox_hookH = class(QAbstractSpinBox_hookH) end; QSplitter_hookH = class(QFrame_hookH) end; QSplitterHandle_hookH = class(QWidget_hookH) end; QComboBox_hookH = class(QWidget_hookH) end; QCheckBox_hookH = class(QAbstractButton_hookH) end; QSlider_hookH = class(QAbstractSlider_hookH) end; QTextBrowser_hookH = class(QTextEdit_hookH) end; QLabel_hookH = class(QFrame_hookH) end; QGroupBox_hookH = class(QWidget_hookH) end; QDockWidget_hookH = class(QWidget_hookH) end; QTabBar_hookH = class(QWidget_hookH) end; QProgressBar_hookH = class(QWidget_hookH) end; QStatusBar_hookH = class(QWidget_hookH) end; QToolBox_hookH = class(QFrame_hookH) end; QToolButton_hookH = class(QAbstractButton_hookH) end; QMdiArea_hookH = class(QAbstractScrollArea_hookH) end; QMdiSubWindow_hookH = class(QWidget_hookH) end; QCalendarWidget_hookH = class(QWidget_hookH) end; QPrintPreviewWidget_hookH = class(QWidget_hookH) end; QAbstractItemView_hookH = class(QAbstractScrollArea_hookH) end; QListView_hookH = class(QAbstractItemView_hookH) end; QItemSelectionRange_hookH = class(QObject_hookH) end; QItemSelectionModel_hookH = class(QObject_hookH) end; QListWidgetItem_hookH = class(QObject_hookH) end; QListWidget_hookH = class(QListView_hookH) end; QTreeView_hookH = class(QAbstractItemView_hookH) end; QTreeWidgetItem_hookH = class(QObject_hookH) end; QTreeWidget_hookH = class(QTreeView_hookH) end; QHeaderView_hookH = class(QAbstractItemView_hookH) end; QStandardItem_hookH = class(QObject_hookH) end; QStandardItemModel_hookH = class(QAbstractItemModel_hookH) end; QAbstractItemDelegate_hookH = class(QObject_hookH) end; QTableView_hookH = class(QAbstractItemView_hookH) end; QTableWidgetSelectionRange_hookH = class(QObject_hookH) end; QTableWidgetItem_hookH = class(QObject_hookH) end; QTableWidget_hookH = class(QTableView_hookH) end; QDialog_hookH = class(QWidget_hookH) end; QFileDialog_hookH = class(QDialog_hookH) end; QProgressDialog_hookH = class(QDialog_hookH) end; QAbstractPrintDialog_hookH = class(QDialog_hookH) end; QPrintDialog_hookH = class(QAbstractPrintDialog_hookH) end; QPrintPreviewDialog_hookH = class(QDialog_hookH) end; QSystemTrayIcon_hookH = class(QObject_hookH) end; QGraphicsScene_hookH = class(QObject_hookH) end; QAbstractSocket_hookH = class(QIODevice_hookH) end; QUdpSocket_hookH = class(QAbstractSocket_hookH) end; QTcpSocket_hookH = class(QAbstractSocket_hookH) end; QTcpServer_hookH = class(QObject_hookH) end; QNetworkAccessManager_hookH = class(QObject_hookH) end; QNetworkReply_hookH = class(QIODevice_hookH) end; QWebHitTestResult_hookH = class(QObject_hookH) end; QWebFrame_hookH = class(QObject_hookH) end; QWebSecurityOrigin_hookH = class(QObject_hookH) end; QWebDatabase_hookH = class(QObject_hookH) end; QWebHistoryItem_hookH = class(QObject_hookH) end; QWebHistory_hookH = class(QObject_hookH) end; QWebHistoryInterface_hookH = class(QObject_hookH) end; QWebPage_hookH = class(QObject_hookH) end; QWebSettings_hookH = class(QObject_hookH) end; QWebView_hookH = class(QWidget_hookH) end; QCoreApplicationEventFilter = function(Msg:PChar;Res:PLong):boolean cdecl; QAbstractEventDispatcherEventFilter = function(Msg:PChar):boolean cdecl; QLCLItemDelegate_sizeHint_Override = procedure (option: QStyleOptionViewItemH; index: QModelIndexH; Size: PSize) of object cdecl; QLCLItemDelegate_paint_Override = procedure (painter : QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_createEditor_Override = procedure (parent : QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH; out editor: QWidgetH) of object cdecl; QLCLItemDelegate_setEditorData_Override = procedure (editor : QWidgetH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_setModelData_Override = procedure (editor : QWidgetH; model: QAbstractItemModelH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_updateEditorGeometry_Override = procedure (editor : QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_editorEvent_Override = procedure (event : QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH; retval: PBoolean) of object cdecl; QLCLAbstractScrollArea_viewportEvent_Override = procedure (event: QEventH; retval: PBoolean) of object cdecl; QLCLWebPage_userAgentForUrl_Override = procedure(url : QUrlH;userAgent:PWideString) of object; cdecl; QLCLWebView_createWindow_Override = function (WebWindowType : integer):QWebViewH of object cdecl; QLCLThread_run_Override = procedure of object cdecl; type QObjectEventFilter = function (Sender:QObjectH; Event: QEventH):boolean of object cdecl; QObject_destroyed_Event = procedure of object; cdecl; function QtPoint(X,Y:integer): TQtPoint; function QtPointF(X,Y:QReal): TQtPointF; function QObject_hook_create(handle : QObjectH) : QObject_hookH; cdecl; external Qt4PasLib name 'QObject_hook_create'; procedure QObject_hook_destroy(handle : QObject_hookH ); cdecl; external Qt4PasLib name 'QObject_hook_destroy'; procedure QObject_hook_hook_events(handle : QObject_hookH; hook : QObjectEventFilter); cdecl; external Qt4PasLib name 'QObject_hook_hook_events'; procedure QObject_hook_hook_destroyed(handle : QObject_hookH; hook : QObject_destroyed_Event); cdecl; external Qt4PasLib name 'QObject_hook_hook_destroyed'; type QtGlobalColor = ( // Qt::GlobalColor (1) Qtcolor0, Qtcolor1, Qtblack, Qtwhite, QtdarkGray, Qtgray, QtlightGray, Qtred, Qtgreen, Qtblue, Qtcyan, Qtmagenta, Qtyellow, QtdarkRed, QtdarkGreen, QtdarkBlue, QtdarkCyan, QtdarkMagenta, QtdarkYellow, Qttransparent ); QtSortOrder = ( // Qt::SortOrder (1) QtAscendingOrder, QtDescendingOrder ); QtTextElideMode = ( // Qt::TextElideMode (1) QtElideLeft, QtElideRight, QtElideMiddle, QtElideNone ); QtBGMode = ( // Qt::BGMode (1) QtTransparentMode, QtOpaqueMode ); QtArrowType = ( // Qt::ArrowType (1) QtNoArrow, QtUpArrow, QtDownArrow, QtLeftArrow, QtRightArrow ); QtPenStyle = ( // Qt::PenStyle (1) QtNoPen, QtSolidLine, QtDashLine, QtDotLine, QtDashDotLine, QtDashDotDotLine, QtCustomDashLine ); QtSizeMode = ( // Qt::SizeMode (1) QtAbsoluteSize, QtRelativeSize ); QtUIEffect = ( // Qt::UIEffect (1) QtUI_General, QtUI_AnimateMenu, QtUI_FadeMenu, QtUI_AnimateCombo, QtUI_AnimateTooltip, QtUI_FadeTooltip, QtUI_AnimateToolBox ); QtTextFormat = ( // Qt::TextFormat (1) QtPlainText, QtRichText, QtAutoText, QtLogText ); QtAspectRatioMode = ( // Qt::AspectRatioMode (1) QtIgnoreAspectRatio, QtKeepAspectRatio, QtKeepAspectRatioByExpanding ); QtAnchorAttribute = ( // Qt::AnchorAttribute (1) QtAnchorName, QtAnchorHref ); QtTimeSpec = ( // Qt::TimeSpec (1) QtLocalTime, QtUTC, QtOffsetFromUTC ); QtScrollBarPolicy = ( // Qt::ScrollBarPolicy (1) QtScrollBarAsNeeded, QtScrollBarAlwaysOff, QtScrollBarAlwaysOn ); QtCaseSensitivity = ( // Qt::CaseSensitivity (1) QtCaseInsensitive, QtCaseSensitive ); QtConnectionType = ( // Qt::ConnectionType (1) QtAutoConnection, QtDirectConnection, QtQueuedConnection, QtAutoCompatConnection, QtBlockingQueuedConnection ); QtShortcutContext = ( // Qt::ShortcutContext (1) QtWidgetShortcut, QtWindowShortcut, QtApplicationShortcut, QtWidgetWithChildrenShortcut ); QtFillRule = ( // Qt::FillRule (1) QtOddEvenFill, QtWindingFill ); QtMaskMode = ( // Qt::MaskMode (1) QtMaskInColor, QtMaskOutColor ); QtClipOperation = ( // Qt::ClipOperation (1) QtNoClip, QtReplaceClip, QtIntersectClip, QtUniteClip ); QtTransformationMode = ( // Qt::TransformationMode (1) QtFastTransformation, QtSmoothTransformation ); QtAxis = ( // Qt::Axis (1) QtXAxis, QtYAxis, QtZAxis ); QtFocusReason = ( // Qt::FocusReason (1) QtMouseFocusReason, QtTabFocusReason, QtBacktabFocusReason, QtActiveWindowFocusReason, QtPopupFocusReason, QtShortcutFocusReason, QtMenuBarFocusReason, QtOtherFocusReason, QtNoFocusReason ); QtContextMenuPolicy = ( // Qt::ContextMenuPolicy (1) QtNoContextMenu, QtDefaultContextMenu, QtActionsContextMenu, QtCustomContextMenu, QtPreventContextMenu ); QtInputMethodQuery = ( // Qt::InputMethodQuery (1) QtImMicroFocus, QtImFont, QtImCursorPosition, QtImSurroundingText, QtImCurrentSelection ); QtToolButtonStyle = ( // Qt::ToolButtonStyle (1) QtToolButtonIconOnly, QtToolButtonTextOnly, QtToolButtonTextBesideIcon, QtToolButtonTextUnderIcon ); QtLayoutDirection = ( // Qt::LayoutDirection (1) QtLeftToRight, QtRightToLeft, QtLayoutDirectionAuto); QtCheckState = ( // Qt::CheckState (1) QtUnchecked, QtPartiallyChecked, QtChecked ); QtWindowModality = ( // Qt::WindowModality (1) QtNonModal, QtWindowModal, QtApplicationModal ); QtSizeHint = ( // Qt::SizeHint (1) QtMinimumSize, QtPreferredSize, QtMaximumSize, QtMinimumDescent, QtNSizeHints ); QtWindowFrameSection = ( // Qt::WindowFrameSection (1) QtNoSection, QtLeftSection, QtTopLeftSection, QtTopSection, QtTopRightSection, QtRightSection, QtBottomRightSection, QtBottomSection, QtBottomLeftSection, QtTitleBarArea ); QtHitTestAccuracy = ( // Qt::HitTestAccuracy (1) QtHitTestAccuracy_dummy ); type QtKeyboardModifier = cardinal; // Qt::KeyboardModifier QtKeyboardModifiers = QtKeyboardModifier; //QFlags<> (3) const QtNoModifier = $00000000; QtShiftModifier = $02000000; QtControlModifier = $04000000; QtAltModifier = $08000000; QtMetaModifier = $10000000; QtKeypadModifier = $20000000; QtGroupSwitchModifier = $40000000; QtKeyboardModifierMask = $fe000000; type QtMouseButton = cardinal; // Qt::MouseButton QtMouseButtons = QtMouseButton; //QFlags<> (3) const QtNoButton = $00000000; QtLeftButton = $00000001; QtRightButton = $00000002; QtMidButton = $00000004; QtXButton1 = $00000008; QtXButton2 = $00000010; QtMouseButtonMask = $000000ff; type QtOrientation = cardinal; // Qt::Orientation QtOrientations = QtOrientation; //QFlags<> (3) const QtHorizontal = $1; QtVertical = $2; type QtWindowState = cardinal; // Qt::WindowState QtWindowStates = QtWindowState; //QFlags<> (3) const QtWindowNoState = $00000000; QtWindowMinimized = $00000001; QtWindowMaximized = $00000002; QtWindowFullScreen = $00000004; QtWindowActive = $00000008; type QtApplicationAttribute = ( //Qt::ApplicationAttribute (2) QtAA_ImmediateWidgetCreation = 0, QtAA_MSWindowsUseDirect3DByDefault = 1, QtAA_DontShowIconsInMenus = 2, QtAA_NativeWindows = 3, QtAA_DontCreateNativeWidgetSiblings = 4, QtAA_MacPluginApplication = 5, {$IFDEF DARWIN} QtAA_DontUseNativeMenuBar = 6, {$note QtAA_DontUseNativeMenuBar added for darwin and wince qt >=4.6 compat issue #20897} QtAA_MacDontSwapCtrlAndMeta = 7, {$note QtAA_MacDontSwapCtrlAndMeta added for darwin qt >=4.6 compat issue #20897} {$ENDIF} QtAA_AttributeCount ); type QtImageConversionFlag = cardinal; // Qt::ImageConversionFlag QtImageConversionFlags = QtImageConversionFlag; //QFlags<> (3) const QtColorMode_Mask = $00000003; QtAutoColor = $00000000; QtColorOnly = $00000003; QtMonoOnly = $00000002; QtAlphaDither_Mask = $0000000c; QtThresholdAlphaDither = $00000000; QtOrderedAlphaDither = $00000004; QtDiffuseAlphaDither = $00000008; QtNoAlpha = $0000000c; QtDither_Mask = $00000030; QtDiffuseDither = $00000000; QtOrderedDither = $00000010; QtThresholdDither = $00000020; QtDitherMode_Mask = $000000c0; QtAutoDither = $00000000; QtPreferDither = $00000040; QtAvoidDither = $00000080; QtNoOpaqueDetection = $00000100; type QtPenCapStyle = ( //Qt::PenCapStyle (2) QtFlatCap = $00, QtSquareCap = $10, QtRoundCap = $20, QtMPenCapStyle = $30 ); QtPenJoinStyle = ( //Qt::PenJoinStyle (2) QtMiterJoin = $00, QtBevelJoin = $40, QtRoundJoin = $80, QtSvgMiterJoin = $100, QtMPenJoinStyle = $1c0 ); QtBrushStyle = ( //Qt::BrushStyle (2) QtNoBrush, QtSolidPattern, QtDense1Pattern, QtDense2Pattern, QtDense3Pattern, QtDense4Pattern, QtDense5Pattern, QtDense6Pattern, QtDense7Pattern, QtHorPattern, QtVerPattern, QtCrossPattern, QtBDiagPattern, QtFDiagPattern, QtDiagCrossPattern, QtLinearGradientPattern, QtRadialGradientPattern, QtConicalGradientPattern, QtTexturePattern = 24 ); QtDockWidgetAreaSizes = ( //Qt::DockWidgetAreaSizes (2) QtNDockWidgetAreas = 4 ); QtToolBarAreaSizes = ( //Qt::ToolBarAreaSizes (2) QtNToolBarAreas = 4 ); QtDayOfWeek = ( //Qt::DayOfWeek (2) QtMonday = 1, QtTuesday = 2, QtWednesday = 3, QtThursday = 4, QtFriday = 5, QtSaturday = 6, QtSunday = 7 ); QtCorner = ( //Qt::Corner (2) QtTopLeftCorner = $00000, QtTopRightCorner = $00001, QtBottomLeftCorner = $00002, QtBottomRightCorner = $00003 ); QtItemSelectionMode = ( //Qt::ItemSelectionMode (2) QtContainsItemShape = $0, QtIntersectsItemShape = $1, QtContainsItemBoundingRect = $2, QtIntersectsItemBoundingRect = $3 ); type QtDropAction = cardinal; // Qt::DropAction QtDropActions = QtDropAction; //QFlags<> (3) const QtCopyAction = $1; QtMoveAction = $2; QtLinkAction = $4; QtActionMask = $ff; QtTargetMoveAction = $8002; QtIgnoreAction = $0; type QtItemDataRole = ( //Qt::ItemDataRole (2) QtDisplayRole = 0, QtDecorationRole = 1, QtEditRole = 2, QtToolTipRole = 3, QtStatusTipRole = 4, QtWhatsThisRole = 5, QtFontRole = 6, QtTextAlignmentRole = 7, QtBackgroundColorRole = 8, // QtBackgroundRole = 8 {duplicate}, QtForegroundRole = 9, // QtTextColorRole = 9 {duplicate}, QtCheckStateRole = 10, QtAccessibleTextRole = 11, QtAccessibleDescriptionRole = 12, QtSizeHintRole = 13, QtDisplayPropertyRole = 27, QtDecorationPropertyRole = 28, QtToolTipPropertyRole = 29, QtStatusTipPropertyRole = 30, QtWhatsThisPropertyRole = 31, QtUserRole = 32 ); type QtItemFlag = cardinal; // Qt::ItemFlag QtItemFlags = QtItemFlag; //QFlags<> (3) const QtNoItemFlags = 0; QtItemIsSelectable = 1; QtItemIsEditable = 2; QtItemIsDragEnabled = 4; QtItemIsDropEnabled = 8; QtItemIsUserCheckable = 16; QtItemIsEnabled = 32; QtItemIsTristate = 64; type QtMatchFlag = cardinal; // Qt::MatchFlag QtMatchFlags = QtMatchFlag; //QFlags<> (3) const QtMatchExactly = 0; QtMatchContains = 1; QtMatchStartsWith = 2; QtMatchEndsWith = 3; QtMatchRegExp = 4; QtMatchWildcard = 5; QtMatchFixedString = 8; QtMatchCaseSensitive = 16; QtMatchWrap = 32; QtMatchRecursive = 64; type QtEventPriority = ( //Qt::EventPriority (2) QtLowEventPriority = -1, QtNormalEventPriority = 0, QtHighEventPriority = 1 ); type QInternalRelayoutType = ( // QInternal::RelayoutType (1) QInternalRelayoutNormal, QInternalRelayoutDragging, QInternalRelayoutDropped ); QInternalCallback = ( // QInternal::Callback (1) QInternalConnectCallback, QInternalDisconnectCallback, QInternalAdoptCurrentThread, QInternalEventNotifyCallback, QInternalLastCallback ); QInternalInternalFunction = ( // QInternal::InternalFunction (1) QInternalCreateThreadForAdoption, QInternalRefAdoptedThread, QInternalDerefAdoptedThread, QInternalSetCurrentThreadToMainThread, QInternalSetQObjectSender, QInternalGetQObjectSender, QInternalResetQObjectSender, QInternalLastInternalFunction ); QInternalDockPosition = ( // QInternal::DockPosition (1) QInternalLeftDock, QInternalRightDock, QInternalTopDock, QInternalBottomDock, QInternalDockCount ); QInternalPaintDeviceFlags = ( //QInternal::PaintDeviceFlags (2) QInternalUnknownDevice = $00, QInternalWidget = $01, QInternalPixmap = $02, QInternalImage = $03, QInternalPrinter = $04, QInternalPicture = $05, QInternalPbuffer = $06, QInternalFramebufferObject = $07, QInternalCustomRaster = $08, QInternalMacQuartz = $09 ); type QtModifier = cardinal; // Qt::Modifier (4) const QtMETA = 268435456 { $10000000 }; QtSHIFT = 33554432 { $2000000 }; QtCTRL = 67108864 { $4000000 }; QtALT = 134217728 { $8000000 }; QtMODIFIER_MASK = 4261412864 { $fe000000 }; QtUNICODE_ACCEL = 0 { $0 }; type QtFocusPolicy = cardinal; // Qt::FocusPolicy (4) const QtNoFocus = 0 { $0 }; QtTabFocus = 1 { $1 }; QtClickFocus = 2 { $2 }; QtStrongFocus = 11 { $b }; QtWheelFocus = 15 { $f }; type QtAlignmentFlag = cardinal; // Qt::AlignmentFlag (4) QtAlignment = QtAlignmentFlag; // QFlags<> const QtAlignLeft = 1 { $1 }; QtAlignLeading = 1 { $1 }; QtAlignRight = 2 { $2 }; QtAlignTrailing = 2 { $2 }; QtAlignHCenter = 4 { $4 }; QtAlignJustify = 8 { $8 }; QtAlignAbsolute = 16 { $10 }; QtAlignHorizontal_Mask = 31 { $1f }; QtAlignTop = 32 { $20 }; QtAlignBottom = 64 { $40 }; QtAlignVCenter = 128 { $80 }; QtAlignVertical_Mask = 224 { $e0 }; QtAlignCenter = 132 { $84 }; type QtWindowType = cardinal; // Qt::WindowType (4) QtWindowFlags = QtWindowType; // QFlags<> const QtWidget = 0 { $0 }; QtWindow = 1 { $1 }; QtDialog = 3 { $3 }; QtSheet = 5 { $5 }; QtDrawer = 7 { $7 }; QtPopup = 9 { $9 }; QtTool = 11 { $b }; QtToolTip = 13 { $d }; QtSplashScreen = 15 { $f }; QtDesktop = 17 { $11 }; QtSubWindow = 18 { $12 }; QtWindowType_Mask = 255 { $ff }; QtMSWindowsFixedSizeDialogHint = 256 { $100 }; QtMSWindowsOwnDC = 512 { $200 }; QtX11BypassWindowManagerHint = 1024 { $400 }; QtFramelessWindowHint = 2048 { $800 }; QtWindowTitleHint = 4096 { $1000 }; QtWindowSystemMenuHint = 8192 { $2000 }; QtWindowMinimizeButtonHint = 16384 { $4000 }; QtWindowMaximizeButtonHint = 32768 { $8000 }; QtWindowMinMaxButtonsHint = 49152 { $c000 }; QtWindowContextHelpButtonHint = 65536 { $10000 }; QtWindowShadeButtonHint = 131072 { $20000 }; QtWindowStaysOnTopHint = 262144 { $40000 }; QtCustomizeWindowHint = 33554432 { $2000000 }; QtWindowStaysOnBottomHint = 67108864 { $4000000 }; QtWindowCloseButtonHint = 134217728 { $8000000 }; QtMacWindowToolBarButtonHint = 268435456 { $10000000 }; QtBypassGraphicsProxyWidget = 536870912 { $20000000 }; QtWindowOkButtonHint = 524288 { $80000 }; QtWindowCancelButtonHint = 1048576 { $100000 }; type QtWidgetAttribute = cardinal; // Qt::WidgetAttribute (4) const QtWA_Disabled = 0 { $0 }; QtWA_UnderMouse = 1 { $1 }; QtWA_MouseTracking = 2 { $2 }; QtWA_ContentsPropagated = 3 { $3 }; QtWA_OpaquePaintEvent = 4 { $4 }; QtWA_NoBackground = 4 { $4 }; QtWA_StaticContents = 5 { $5 }; QtWA_LaidOut = 7 { $7 }; QtWA_PaintOnScreen = 8 { $8 }; QtWA_NoSystemBackground = 9 { $9 }; QtWA_UpdatesDisabled = 10 { $a }; QtWA_Mapped = 11 { $b }; QtWA_MacNoClickThrough = 12 { $c }; QtWA_PaintOutsidePaintEvent = 13 { $d }; QtWA_InputMethodEnabled = 14 { $e }; QtWA_WState_Visible = 15 { $f }; QtWA_WState_Hidden = 16 { $10 }; QtWA_ForceDisabled = 32 { $20 }; QtWA_KeyCompression = 33 { $21 }; QtWA_PendingMoveEvent = 34 { $22 }; QtWA_PendingResizeEvent = 35 { $23 }; QtWA_SetPalette = 36 { $24 }; QtWA_SetFont = 37 { $25 }; QtWA_SetCursor = 38 { $26 }; QtWA_NoChildEventsFromChildren = 39 { $27 }; QtWA_WindowModified = 41 { $29 }; QtWA_Resized = 42 { $2a }; QtWA_Moved = 43 { $2b }; QtWA_PendingUpdate = 44 { $2c }; QtWA_InvalidSize = 45 { $2d }; QtWA_MacBrushedMetal = 46 { $2e }; QtWA_MacMetalStyle = 46 { $2e }; QtWA_CustomWhatsThis = 47 { $2f }; QtWA_LayoutOnEntireRect = 48 { $30 }; QtWA_OutsideWSRange = 49 { $31 }; QtWA_GrabbedShortcut = 50 { $32 }; QtWA_TransparentForMouseEvents = 51 { $33 }; QtWA_PaintUnclipped = 52 { $34 }; QtWA_SetWindowIcon = 53 { $35 }; QtWA_NoMouseReplay = 54 { $36 }; QtWA_DeleteOnClose = 55 { $37 }; QtWA_RightToLeft = 56 { $38 }; QtWA_SetLayoutDirection = 57 { $39 }; QtWA_NoChildEventsForParent = 58 { $3a }; QtWA_ForceUpdatesDisabled = 59 { $3b }; QtWA_WState_Created = 60 { $3c }; QtWA_WState_CompressKeys = 61 { $3d }; QtWA_WState_InPaintEvent = 62 { $3e }; QtWA_WState_Reparented = 63 { $3f }; QtWA_WState_ConfigPending = 64 { $40 }; QtWA_WState_Polished = 66 { $42 }; QtWA_WState_DND = 67 { $43 }; QtWA_WState_OwnSizePolicy = 68 { $44 }; QtWA_WState_ExplicitShowHide = 69 { $45 }; QtWA_ShowModal = 70 { $46 }; QtWA_MouseNoMask = 71 { $47 }; QtWA_GroupLeader = 72 { $48 }; QtWA_NoMousePropagation = 73 { $49 }; QtWA_Hover = 74 { $4a }; QtWA_InputMethodTransparent = 75 { $4b }; QtWA_QuitOnClose = 76 { $4c }; QtWA_KeyboardFocusChange = 77 { $4d }; QtWA_AcceptDrops = 78 { $4e }; QtWA_DropSiteRegistered = 79 { $4f }; QtWA_ForceAcceptDrops = 79 { $4f }; QtWA_WindowPropagation = 80 { $50 }; QtWA_NoX11EventCompression = 81 { $51 }; QtWA_TintedBackground = 82 { $52 }; QtWA_X11OpenGLOverlay = 83 { $53 }; QtWA_AlwaysShowToolTips = 84 { $54 }; QtWA_MacOpaqueSizeGrip = 85 { $55 }; QtWA_SetStyle = 86 { $56 }; QtWA_SetLocale = 87 { $57 }; QtWA_MacShowFocusRect = 88 { $58 }; QtWA_MacNormalSize = 89 { $59 }; QtWA_MacSmallSize = 90 { $5a }; QtWA_MacMiniSize = 91 { $5b }; QtWA_LayoutUsesWidgetRect = 92 { $5c }; QtWA_StyledBackground = 93 { $5d }; QtWA_MSWindowsUseDirect3D = 94 { $5e }; QtWA_CanHostQMdiSubWindowTitleBar = 95 { $5f }; QtWA_MacAlwaysShowToolWindow = 96 { $60 }; QtWA_StyleSheet = 97 { $61 }; QtWA_ShowWithoutActivating = 98 { $62 }; QtWA_X11BypassTransientForHint = 99 { $63 }; QtWA_NativeWindow = 100 { $64 }; QtWA_DontCreateNativeAncestors = 101 { $65 }; QtWA_MacVariableSize = 102 { $66 }; QtWA_DontShowOnScreen = 103 { $67 }; QtWA_X11NetWmWindowTypeDesktop = 104 { $68 }; QtWA_X11NetWmWindowTypeDock = 105 { $69 }; QtWA_X11NetWmWindowTypeToolBar = 106 { $6a }; QtWA_X11NetWmWindowTypeMenu = 107 { $6b }; QtWA_X11NetWmWindowTypeUtility = 108 { $6c }; QtWA_X11NetWmWindowTypeSplash = 109 { $6d }; QtWA_X11NetWmWindowTypeDialog = 110 { $6e }; QtWA_X11NetWmWindowTypeDropDownMenu = 111 { $6f }; QtWA_X11NetWmWindowTypePopupMenu = 112 { $70 }; QtWA_X11NetWmWindowTypeToolTip = 113 { $71 }; QtWA_X11NetWmWindowTypeNotification = 114 { $72 }; QtWA_X11NetWmWindowTypeCombo = 115 { $73 }; QtWA_X11NetWmWindowTypeDND = 116 { $74 }; QtWA_MacFrameworkScaled = 117 { $75 }; QtWA_SetWindowModality = 118 { $76 }; QtWA_WState_WindowOpacitySet = 119 { $77 }; QtWA_TranslucentBackground = 120 { $78 }; QtWA_AttributeCount = 121 { $79 }; type QtKey = cardinal; // Qt::Key (4) const QtKey_Escape = 16777216 { $1000000 }; QtKey_Tab = 16777217 { $1000001 }; QtKey_Backtab = 16777218 { $1000002 }; QtKey_Backspace = 16777219 { $1000003 }; QtKey_Return = 16777220 { $1000004 }; QtKey_Enter = 16777221 { $1000005 }; QtKey_Insert = 16777222 { $1000006 }; QtKey_Delete = 16777223 { $1000007 }; QtKey_Pause = 16777224 { $1000008 }; QtKey_Print = 16777225 { $1000009 }; QtKey_SysReq = 16777226 { $100000a }; QtKey_Clear = 16777227 { $100000b }; QtKey_Home = 16777232 { $1000010 }; QtKey_End = 16777233 { $1000011 }; QtKey_Left = 16777234 { $1000012 }; QtKey_Up = 16777235 { $1000013 }; QtKey_Right = 16777236 { $1000014 }; QtKey_Down = 16777237 { $1000015 }; QtKey_PageUp = 16777238 { $1000016 }; QtKey_PageDown = 16777239 { $1000017 }; QtKey_Shift = 16777248 { $1000020 }; QtKey_Control = 16777249 { $1000021 }; QtKey_Meta = 16777250 { $1000022 }; QtKey_Alt = 16777251 { $1000023 }; QtKey_CapsLock = 16777252 { $1000024 }; QtKey_NumLock = 16777253 { $1000025 }; QtKey_ScrollLock = 16777254 { $1000026 }; QtKey_F1 = 16777264 { $1000030 }; QtKey_F2 = 16777265 { $1000031 }; QtKey_F3 = 16777266 { $1000032 }; QtKey_F4 = 16777267 { $1000033 }; QtKey_F5 = 16777268 { $1000034 }; QtKey_F6 = 16777269 { $1000035 }; QtKey_F7 = 16777270 { $1000036 }; QtKey_F8 = 16777271 { $1000037 }; QtKey_F9 = 16777272 { $1000038 }; QtKey_F10 = 16777273 { $1000039 }; QtKey_F11 = 16777274 { $100003a }; QtKey_F12 = 16777275 { $100003b }; QtKey_F13 = 16777276 { $100003c }; QtKey_F14 = 16777277 { $100003d }; QtKey_F15 = 16777278 { $100003e }; QtKey_F16 = 16777279 { $100003f }; QtKey_F17 = 16777280 { $1000040 }; QtKey_F18 = 16777281 { $1000041 }; QtKey_F19 = 16777282 { $1000042 }; QtKey_F20 = 16777283 { $1000043 }; QtKey_F21 = 16777284 { $1000044 }; QtKey_F22 = 16777285 { $1000045 }; QtKey_F23 = 16777286 { $1000046 }; QtKey_F24 = 16777287 { $1000047 }; QtKey_F25 = 16777288 { $1000048 }; QtKey_F26 = 16777289 { $1000049 }; QtKey_F27 = 16777290 { $100004a }; QtKey_F28 = 16777291 { $100004b }; QtKey_F29 = 16777292 { $100004c }; QtKey_F30 = 16777293 { $100004d }; QtKey_F31 = 16777294 { $100004e }; QtKey_F32 = 16777295 { $100004f }; QtKey_F33 = 16777296 { $1000050 }; QtKey_F34 = 16777297 { $1000051 }; QtKey_F35 = 16777298 { $1000052 }; QtKey_Super_L = 16777299 { $1000053 }; QtKey_Super_R = 16777300 { $1000054 }; QtKey_Menu = 16777301 { $1000055 }; QtKey_Hyper_L = 16777302 { $1000056 }; QtKey_Hyper_R = 16777303 { $1000057 }; QtKey_Help = 16777304 { $1000058 }; QtKey_Direction_L = 16777305 { $1000059 }; QtKey_Direction_R = 16777312 { $1000060 }; QtKey_Space = 32 { $20 }; QtKey_Any = 32 { $20 }; QtKey_Exclam = 33 { $21 }; QtKey_QuoteDbl = 34 { $22 }; QtKey_NumberSign = 35 { $23 }; QtKey_Dollar = 36 { $24 }; QtKey_Percent = 37 { $25 }; QtKey_Ampersand = 38 { $26 }; QtKey_Apostrophe = 39 { $27 }; QtKey_ParenLeft = 40 { $28 }; QtKey_ParenRight = 41 { $29 }; QtKey_Asterisk = 42 { $2a }; QtKey_Plus = 43 { $2b }; QtKey_Comma = 44 { $2c }; QtKey_Minus = 45 { $2d }; QtKey_Period = 46 { $2e }; QtKey_Slash = 47 { $2f }; QtKey_0 = 48 { $30 }; QtKey_1 = 49 { $31 }; QtKey_2 = 50 { $32 }; QtKey_3 = 51 { $33 }; QtKey_4 = 52 { $34 }; QtKey_5 = 53 { $35 }; QtKey_6 = 54 { $36 }; QtKey_7 = 55 { $37 }; QtKey_8 = 56 { $38 }; QtKey_9 = 57 { $39 }; QtKey_Colon = 58 { $3a }; QtKey_Semicolon = 59 { $3b }; QtKey_Less = 60 { $3c }; QtKey_Equal = 61 { $3d }; QtKey_Greater = 62 { $3e }; QtKey_Question = 63 { $3f }; QtKey_At = 64 { $40 }; QtKey_A = 65 { $41 }; QtKey_B = 66 { $42 }; QtKey_C = 67 { $43 }; QtKey_D = 68 { $44 }; QtKey_E = 69 { $45 }; QtKey_F = 70 { $46 }; QtKey_G = 71 { $47 }; QtKey_H = 72 { $48 }; QtKey_I = 73 { $49 }; QtKey_J = 74 { $4a }; QtKey_K = 75 { $4b }; QtKey_L = 76 { $4c }; QtKey_M = 77 { $4d }; QtKey_N = 78 { $4e }; QtKey_O = 79 { $4f }; QtKey_P = 80 { $50 }; QtKey_Q = 81 { $51 }; QtKey_R = 82 { $52 }; QtKey_S = 83 { $53 }; QtKey_T = 84 { $54 }; QtKey_U = 85 { $55 }; QtKey_V = 86 { $56 }; QtKey_W = 87 { $57 }; QtKey_X = 88 { $58 }; QtKey_Y = 89 { $59 }; QtKey_Z = 90 { $5a }; QtKey_BracketLeft = 91 { $5b }; QtKey_Backslash = 92 { $5c }; QtKey_BracketRight = 93 { $5d }; QtKey_AsciiCircum = 94 { $5e }; QtKey_Underscore = 95 { $5f }; QtKey_QuoteLeft = 96 { $60 }; QtKey_BraceLeft = 123 { $7b }; QtKey_Bar = 124 { $7c }; QtKey_BraceRight = 125 { $7d }; QtKey_AsciiTilde = 126 { $7e }; QtKey_nobreakspace = 160 { $a0 }; QtKey_exclamdown = 161 { $a1 }; QtKey_cent = 162 { $a2 }; QtKey_sterling = 163 { $a3 }; QtKey_currency = 164 { $a4 }; QtKey_yen = 165 { $a5 }; QtKey_brokenbar = 166 { $a6 }; QtKey_section = 167 { $a7 }; QtKey_diaeresis = 168 { $a8 }; QtKey_copyright = 169 { $a9 }; QtKey_ordfeminine = 170 { $aa }; QtKey_guillemotleft = 171 { $ab }; QtKey_notsign = 172 { $ac }; QtKey_hyphen = 173 { $ad }; QtKey_registered = 174 { $ae }; QtKey_macron = 175 { $af }; QtKey_degree = 176 { $b0 }; QtKey_plusminus = 177 { $b1 }; QtKey_twosuperior = 178 { $b2 }; QtKey_threesuperior = 179 { $b3 }; QtKey_acute = 180 { $b4 }; QtKey_mu = 181 { $b5 }; QtKey_paragraph = 182 { $b6 }; QtKey_periodcentered = 183 { $b7 }; QtKey_cedilla = 184 { $b8 }; QtKey_onesuperior = 185 { $b9 }; QtKey_masculine = 186 { $ba }; QtKey_guillemotright = 187 { $bb }; QtKey_onequarter = 188 { $bc }; QtKey_onehalf = 189 { $bd }; QtKey_threequarters = 190 { $be }; QtKey_questiondown = 191 { $bf }; QtKey_Agrave = 192 { $c0 }; QtKey_Aacute = 193 { $c1 }; QtKey_Acircumflex = 194 { $c2 }; QtKey_Atilde = 195 { $c3 }; QtKey_Adiaeresis = 196 { $c4 }; QtKey_Aring = 197 { $c5 }; QtKey_AE = 198 { $c6 }; QtKey_Ccedilla = 199 { $c7 }; QtKey_Egrave = 200 { $c8 }; QtKey_Eacute = 201 { $c9 }; QtKey_Ecircumflex = 202 { $ca }; QtKey_Ediaeresis = 203 { $cb }; QtKey_Igrave = 204 { $cc }; QtKey_Iacute = 205 { $cd }; QtKey_Icircumflex = 206 { $ce }; QtKey_Idiaeresis = 207 { $cf }; QtKey_ETH = 208 { $d0 }; QtKey_Ntilde = 209 { $d1 }; QtKey_Ograve = 210 { $d2 }; QtKey_Oacute = 211 { $d3 }; QtKey_Ocircumflex = 212 { $d4 }; QtKey_Otilde = 213 { $d5 }; QtKey_Odiaeresis = 214 { $d6 }; QtKey_multiply = 215 { $d7 }; QtKey_Ooblique = 216 { $d8 }; QtKey_Ugrave = 217 { $d9 }; QtKey_Uacute = 218 { $da }; QtKey_Ucircumflex = 219 { $db }; QtKey_Udiaeresis = 220 { $dc }; QtKey_Yacute = 221 { $dd }; QtKey_THORN = 222 { $de }; QtKey_ssharp = 223 { $df }; QtKey_division = 247 { $f7 }; QtKey_ydiaeresis = 255 { $ff }; QtKey_AltGr = 16781571 { $1001103 }; QtKey_Multi_key = 16781600 { $1001120 }; QtKey_Codeinput = 16781623 { $1001137 }; QtKey_SingleCandidate = 16781628 { $100113c }; QtKey_MultipleCandidate = 16781629 { $100113d }; QtKey_PreviousCandidate = 16781630 { $100113e }; QtKey_Mode_switch = 16781694 { $100117e }; QtKey_Kanji = 16781601 { $1001121 }; QtKey_Muhenkan = 16781602 { $1001122 }; QtKey_Henkan = 16781603 { $1001123 }; QtKey_Romaji = 16781604 { $1001124 }; QtKey_Hiragana = 16781605 { $1001125 }; QtKey_Katakana = 16781606 { $1001126 }; QtKey_Hiragana_Katakana = 16781607 { $1001127 }; QtKey_Zenkaku = 16781608 { $1001128 }; QtKey_Hankaku = 16781609 { $1001129 }; QtKey_Zenkaku_Hankaku = 16781610 { $100112a }; QtKey_Touroku = 16781611 { $100112b }; QtKey_Massyo = 16781612 { $100112c }; QtKey_Kana_Lock = 16781613 { $100112d }; QtKey_Kana_Shift = 16781614 { $100112e }; QtKey_Eisu_Shift = 16781615 { $100112f }; QtKey_Eisu_toggle = 16781616 { $1001130 }; QtKey_Hangul = 16781617 { $1001131 }; QtKey_Hangul_Start = 16781618 { $1001132 }; QtKey_Hangul_End = 16781619 { $1001133 }; QtKey_Hangul_Hanja = 16781620 { $1001134 }; QtKey_Hangul_Jamo = 16781621 { $1001135 }; QtKey_Hangul_Romaja = 16781622 { $1001136 }; QtKey_Hangul_Jeonja = 16781624 { $1001138 }; QtKey_Hangul_Banja = 16781625 { $1001139 }; QtKey_Hangul_PreHanja = 16781626 { $100113a }; QtKey_Hangul_PostHanja = 16781627 { $100113b }; QtKey_Hangul_Special = 16781631 { $100113f }; QtKey_Dead_Grave = 16781904 { $1001250 }; QtKey_Dead_Acute = 16781905 { $1001251 }; QtKey_Dead_Circumflex = 16781906 { $1001252 }; QtKey_Dead_Tilde = 16781907 { $1001253 }; QtKey_Dead_Macron = 16781908 { $1001254 }; QtKey_Dead_Breve = 16781909 { $1001255 }; QtKey_Dead_Abovedot = 16781910 { $1001256 }; QtKey_Dead_Diaeresis = 16781911 { $1001257 }; QtKey_Dead_Abovering = 16781912 { $1001258 }; QtKey_Dead_Doubleacute = 16781913 { $1001259 }; QtKey_Dead_Caron = 16781914 { $100125a }; QtKey_Dead_Cedilla = 16781915 { $100125b }; QtKey_Dead_Ogonek = 16781916 { $100125c }; QtKey_Dead_Iota = 16781917 { $100125d }; QtKey_Dead_Voiced_Sound = 16781918 { $100125e }; QtKey_Dead_Semivoiced_Sound = 16781919 { $100125f }; QtKey_Dead_Belowdot = 16781920 { $1001260 }; QtKey_Dead_Hook = 16781921 { $1001261 }; QtKey_Dead_Horn = 16781922 { $1001262 }; QtKey_Back = 16777313 { $1000061 }; QtKey_Forward = 16777314 { $1000062 }; QtKey_Stop = 16777315 { $1000063 }; QtKey_Refresh = 16777316 { $1000064 }; QtKey_VolumeDown = 16777328 { $1000070 }; QtKey_VolumeMute = 16777329 { $1000071 }; QtKey_VolumeUp = 16777330 { $1000072 }; QtKey_BassBoost = 16777331 { $1000073 }; QtKey_BassUp = 16777332 { $1000074 }; QtKey_BassDown = 16777333 { $1000075 }; QtKey_TrebleUp = 16777334 { $1000076 }; QtKey_TrebleDown = 16777335 { $1000077 }; QtKey_MediaPlay = 16777344 { $1000080 }; QtKey_MediaStop = 16777345 { $1000081 }; QtKey_MediaPrevious = 16777346 { $1000082 }; QtKey_MediaNext = 16777347 { $1000083 }; QtKey_MediaRecord = 16777348 { $1000084 }; QtKey_HomePage = 16777360 { $1000090 }; QtKey_Favorites = 16777361 { $1000091 }; QtKey_Search = 16777362 { $1000092 }; QtKey_Standby = 16777363 { $1000093 }; QtKey_OpenUrl = 16777364 { $1000094 }; QtKey_LaunchMail = 16777376 { $10000a0 }; QtKey_LaunchMedia = 16777377 { $10000a1 }; QtKey_Launch0 = 16777378 { $10000a2 }; QtKey_Launch1 = 16777379 { $10000a3 }; QtKey_Launch2 = 16777380 { $10000a4 }; QtKey_Launch3 = 16777381 { $10000a5 }; QtKey_Launch4 = 16777382 { $10000a6 }; QtKey_Launch5 = 16777383 { $10000a7 }; QtKey_Launch6 = 16777384 { $10000a8 }; QtKey_Launch7 = 16777385 { $10000a9 }; QtKey_Launch8 = 16777386 { $10000aa }; QtKey_Launch9 = 16777387 { $10000ab }; QtKey_LaunchA = 16777388 { $10000ac }; QtKey_LaunchB = 16777389 { $10000ad }; QtKey_LaunchC = 16777390 { $10000ae }; QtKey_LaunchD = 16777391 { $10000af }; QtKey_LaunchE = 16777392 { $10000b0 }; QtKey_LaunchF = 16777393 { $10000b1 }; QtKey_MediaLast = 16842751 { $100ffff }; QtKey_Select = 16842752 { $1010000 }; QtKey_Yes = 16842753 { $1010001 }; QtKey_No = 16842754 { $1010002 }; QtKey_Cancel = 16908289 { $1020001 }; QtKey_Printer = 16908290 { $1020002 }; QtKey_Execute = 16908291 { $1020003 }; QtKey_Sleep = 16908292 { $1020004 }; QtKey_Play = 16908293 { $1020005 }; QtKey_Zoom = 16908294 { $1020006 }; QtKey_Context1 = 17825792 { $1100000 }; QtKey_Context2 = 17825793 { $1100001 }; QtKey_Context3 = 17825794 { $1100002 }; QtKey_Context4 = 17825795 { $1100003 }; QtKey_Call = 17825796 { $1100004 }; QtKey_Hangup = 17825797 { $1100005 }; QtKey_Flip = 17825798 { $1100006 }; QtKey_unknown = 33554431 { $1ffffff }; type QtCursorShape = cardinal; // Qt::CursorShape (4) const QtArrowCursor = 0 { $0 }; QtUpArrowCursor = 1 { $1 }; QtCrossCursor = 2 { $2 }; QtWaitCursor = 3 { $3 }; QtIBeamCursor = 4 { $4 }; QtSizeVerCursor = 5 { $5 }; QtSizeHorCursor = 6 { $6 }; QtSizeBDiagCursor = 7 { $7 }; QtSizeFDiagCursor = 8 { $8 }; QtSizeAllCursor = 9 { $9 }; QtBlankCursor = 10 { $a }; QtSplitVCursor = 11 { $b }; QtSplitHCursor = 12 { $c }; QtPointingHandCursor = 13 { $d }; QtForbiddenCursor = 14 { $e }; QtWhatsThisCursor = 15 { $f }; QtBusyCursor = 16 { $10 }; QtOpenHandCursor = 17 { $11 }; QtClosedHandCursor = 18 { $12 }; QtLastCursor = 18 { $12 }; QtBitmapCursor = 24 { $18 }; QtCustomCursor = 25 { $19 }; type QtDockWidgetArea = cardinal; // Qt::DockWidgetArea (4) QtDockWidgetAreas = QtDockWidgetArea; // QFlags<> const QtLeftDockWidgetArea = 1 { $1 }; QtRightDockWidgetArea = 2 { $2 }; QtTopDockWidgetArea = 4 { $4 }; QtBottomDockWidgetArea = 8 { $8 }; QtDockWidgetArea_Mask = 15 { $f }; QtAllDockWidgetAreas = 15 { $f }; QtNoDockWidgetArea = 0 { $0 }; type QtToolBarArea = cardinal; // Qt::ToolBarArea (4) QtToolBarAreas = QtToolBarArea; // QFlags<> const QtLeftToolBarArea = 1 { $1 }; QtRightToolBarArea = 2 { $2 }; QtTopToolBarArea = 4 { $4 }; QtBottomToolBarArea = 8 { $8 }; QtToolBarArea_Mask = 15 { $f }; QtAllToolBarAreas = 15 { $f }; QtNoToolBarArea = 0 { $0 }; type QtDateFormat = cardinal; // Qt::DateFormat (4) const QtTextDate = 0 { $0 }; QtISODate = 1 { $1 }; QtSystemLocaleDate = 2 { $2 }; QtLocalDate = 2 { $2 }; QtLocaleDate = 3 { $3 }; QtSystemLocaleShortDate = 4 { $4 }; QtSystemLocaleLongDate = 5 { $5 }; QtDefaultLocaleShortDate = 6 { $6 }; QtDefaultLocaleLongDate = 7 { $7 }; type QtTextInteractionFlag = cardinal; // Qt::TextInteractionFlag (4) QtTextInteractionFlags = QtTextInteractionFlag; // QFlags<> const QtNoTextInteraction = 0 { $0 }; QtTextSelectableByMouse = 1 { $1 }; QtTextSelectableByKeyboard = 2 { $2 }; QtLinksAccessibleByMouse = 4 { $4 }; QtLinksAccessibleByKeyboard = 8 { $8 }; QtTextEditable = 16 { $10 }; QtTextEditorInteraction = 19 { $13 }; QtTextBrowserInteraction = 13 { $d }; function QObject_create(parent: QObjectH = nil): QObjectH; cdecl; external Qt4PasLib name 'QObject_create'; procedure QObject_destroy(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_destroy'; function QObject_event(handle: QObjectH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QObject_event'; function QObject_eventFilter(handle: QObjectH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QObject_eventFilter'; procedure QObject_tr(retval: PWideString; sourceText: PAnsiChar; comment: PAnsiChar = nil; n: Integer = -1); cdecl; external Qt4PasLib name 'QObject_tr'; procedure QObject_trUtf8(retval: PWideString; sourceText: PAnsiChar; comment: PAnsiChar = nil; n: Integer = -1); cdecl; external Qt4PasLib name 'QObject_trUtf8'; function QObject_metaObject(handle: QObjectH): QMetaObjectH; cdecl; external Qt4PasLib name 'QObject_metaObject'; procedure QObject_objectName(handle: QObjectH; retval: PWideString); cdecl; external Qt4PasLib name 'QObject_objectName'; procedure QObject_setObjectName(handle: QObjectH; name: PWideString); cdecl; external Qt4PasLib name 'QObject_setObjectName'; function QObject_isWidgetType(handle: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QObject_isWidgetType'; function QObject_signalsBlocked(handle: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QObject_signalsBlocked'; function QObject_blockSignals(handle: QObjectH; b: Boolean): Boolean; cdecl; external Qt4PasLib name 'QObject_blockSignals'; function QObject_thread(handle: QObjectH): QThreadH; cdecl; external Qt4PasLib name 'QObject_thread'; procedure QObject_moveToThread(handle: QObjectH; thread: QThreadH); cdecl; external Qt4PasLib name 'QObject_moveToThread'; function QObject_startTimer(handle: QObjectH; interval: Integer): Integer; cdecl; external Qt4PasLib name 'QObject_startTimer'; procedure QObject_killTimer(handle: QObjectH; id: Integer); cdecl; external Qt4PasLib name 'QObject_killTimer'; procedure QObject_children(handle: QObjectH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QObject_children'; procedure QObject_setParent(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_setParent'; procedure QObject_installEventFilter(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_installEventFilter'; procedure QObject_removeEventFilter(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_removeEventFilter'; function QObject_connect(sender: QObjectH; signal: PAnsiChar; receiver: QObjectH; member: PAnsiChar; AnonParam5: QtConnectionType = QtAutoConnection): Boolean; cdecl; external Qt4PasLib name 'QObject_connect'; function QObject_connect(handle: QObjectH; sender: QObjectH; signal: PAnsiChar; member: PAnsiChar; _type: QtConnectionType = QtAutoConnection): Boolean; cdecl; external Qt4PasLib name 'QObject_connect2'; function QObject_disconnect(sender: QObjectH; signal: PAnsiChar; receiver: QObjectH; member: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QObject_disconnect'; function QObject_disconnect(handle: QObjectH; receiver: QObjectH; member: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QObject_disconnect3'; procedure QObject_dumpObjectTree(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_dumpObjectTree'; procedure QObject_dumpObjectInfo(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_dumpObjectInfo'; function QObject_setProperty(handle: QObjectH; name: PAnsiChar; value: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QObject_setProperty'; procedure QObject_property(handle: QObjectH; retval: QVariantH; name: PAnsiChar); cdecl; external Qt4PasLib name 'QObject_property'; function QObject_registerUserData(): LongWord; cdecl; external Qt4PasLib name 'QObject_registerUserData'; function QObject_parent(handle: QObjectH): QObjectH; cdecl; external Qt4PasLib name 'QObject_parent'; function QObject_inherits(handle: QObjectH; classname: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QObject_inherits'; procedure QObject_deleteLater(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_deleteLater'; type QEventType = cardinal; // QEvent::Type (4) const QEventNone = 0 { $0 }; QEventTimer = 1 { $1 }; QEventMouseButtonPress = 2 { $2 }; QEventMouseButtonRelease = 3 { $3 }; QEventMouseButtonDblClick = 4 { $4 }; QEventMouseMove = 5 { $5 }; QEventKeyPress = 6 { $6 }; QEventKeyRelease = 7 { $7 }; QEventFocusIn = 8 { $8 }; QEventFocusOut = 9 { $9 }; QEventEnter = 10 { $a }; QEventLeave = 11 { $b }; QEventPaint = 12 { $c }; QEventMove = 13 { $d }; QEventResize = 14 { $e }; QEventCreate = 15 { $f }; QEventDestroy = 16 { $10 }; QEventShow = 17 { $11 }; QEventHide = 18 { $12 }; QEventClose = 19 { $13 }; QEventQuit = 20 { $14 }; QEventParentChange = 21 { $15 }; QEventParentAboutToChange = 131 { $83 }; QEventThreadChange = 22 { $16 }; QEventWindowActivate = 24 { $18 }; QEventWindowDeactivate = 25 { $19 }; QEventShowToParent = 26 { $1a }; QEventHideToParent = 27 { $1b }; QEventWheel = 31 { $1f }; QEventWindowTitleChange = 33 { $21 }; QEventWindowIconChange = 34 { $22 }; QEventApplicationWindowIconChange = 35 { $23 }; QEventApplicationFontChange = 36 { $24 }; QEventApplicationLayoutDirectionChange = 37 { $25 }; QEventApplicationPaletteChange = 38 { $26 }; QEventPaletteChange = 39 { $27 }; QEventClipboard = 40 { $28 }; QEventSpeech = 42 { $2a }; QEventMetaCall = 43 { $2b }; QEventSockAct = 50 { $32 }; QEventWinEventAct = 132 { $84 }; QEventDeferredDelete = 52 { $34 }; QEventDragEnter = 60 { $3c }; QEventDragMove = 61 { $3d }; QEventDragLeave = 62 { $3e }; QEventDrop = 63 { $3f }; QEventDragResponse = 64 { $40 }; QEventChildAdded = 68 { $44 }; QEventChildPolished = 69 { $45 }; QEventChildRemoved = 71 { $47 }; QEventShowWindowRequest = 73 { $49 }; QEventPolishRequest = 74 { $4a }; QEventPolish = 75 { $4b }; QEventLayoutRequest = 76 { $4c }; QEventUpdateRequest = 77 { $4d }; QEventUpdateLater = 78 { $4e }; QEventEmbeddingControl = 79 { $4f }; QEventActivateControl = 80 { $50 }; QEventDeactivateControl = 81 { $51 }; QEventContextMenu = 82 { $52 }; QEventInputMethod = 83 { $53 }; QEventAccessibilityPrepare = 86 { $56 }; QEventTabletMove = 87 { $57 }; QEventLocaleChange = 88 { $58 }; QEventLanguageChange = 89 { $59 }; QEventLayoutDirectionChange = 90 { $5a }; QEventStyle = 91 { $5b }; QEventTabletPress = 92 { $5c }; QEventTabletRelease = 93 { $5d }; QEventOkRequest = 94 { $5e }; QEventHelpRequest = 95 { $5f }; QEventIconDrag = 96 { $60 }; QEventFontChange = 97 { $61 }; QEventEnabledChange = 98 { $62 }; QEventActivationChange = 99 { $63 }; QEventStyleChange = 100 { $64 }; QEventIconTextChange = 101 { $65 }; QEventModifiedChange = 102 { $66 }; QEventMouseTrackingChange = 109 { $6d }; QEventWindowBlocked = 103 { $67 }; QEventWindowUnblocked = 104 { $68 }; QEventWindowStateChange = 105 { $69 }; QEventToolTip = 110 { $6e }; QEventWhatsThis = 111 { $6f }; QEventStatusTip = 112 { $70 }; QEventActionChanged = 113 { $71 }; QEventActionAdded = 114 { $72 }; QEventActionRemoved = 115 { $73 }; QEventFileOpen = 116 { $74 }; QEventShortcut = 117 { $75 }; QEventShortcutOverride = 51 { $33 }; QEventWhatsThisClicked = 118 { $76 }; QEventToolBarChange = 120 { $78 }; QEventApplicationActivate = 121 { $79 }; QEventApplicationActivated = 121 { $79 }; QEventApplicationDeactivate = 122 { $7a }; QEventApplicationDeactivated = 122 { $7a }; QEventQueryWhatsThis = 123 { $7b }; QEventEnterWhatsThisMode = 124 { $7c }; QEventLeaveWhatsThisMode = 125 { $7d }; QEventZOrderChange = 126 { $7e }; QEventHoverEnter = 127 { $7f }; QEventHoverLeave = 128 { $80 }; QEventHoverMove = 129 { $81 }; QEventAccessibilityHelp = 119 { $77 }; QEventAccessibilityDescription = 130 { $82 }; QEventAcceptDropsChange = 152 { $98 }; QEventMenubarUpdated = 153 { $99 }; QEventZeroTimerEvent = 154 { $9a }; QEventGraphicsSceneMouseMove = 155 { $9b }; QEventGraphicsSceneMousePress = 156 { $9c }; QEventGraphicsSceneMouseRelease = 157 { $9d }; QEventGraphicsSceneMouseDoubleClick = 158 { $9e }; QEventGraphicsSceneContextMenu = 159 { $9f }; QEventGraphicsSceneHoverEnter = 160 { $a0 }; QEventGraphicsSceneHoverMove = 161 { $a1 }; QEventGraphicsSceneHoverLeave = 162 { $a2 }; QEventGraphicsSceneHelp = 163 { $a3 }; QEventGraphicsSceneDragEnter = 164 { $a4 }; QEventGraphicsSceneDragMove = 165 { $a5 }; QEventGraphicsSceneDragLeave = 166 { $a6 }; QEventGraphicsSceneDrop = 167 { $a7 }; QEventGraphicsSceneWheel = 168 { $a8 }; QEventKeyboardLayoutChange = 169 { $a9 }; QEventDynamicPropertyChange = 170 { $aa }; QEventTabletEnterProximity = 171 { $ab }; QEventTabletLeaveProximity = 172 { $ac }; QEventNonClientAreaMouseMove = 173 { $ad }; QEventNonClientAreaMouseButtonPress = 174 { $ae }; QEventNonClientAreaMouseButtonRelease = 175 { $af }; QEventNonClientAreaMouseButtonDblClick = 176 { $b0 }; QEventMacSizeChange = 177 { $b1 }; QEventContentsRectChange = 178 { $b2 }; QEventMacGLWindowChange = 179 { $b3 }; QEventFutureCallOut = 180 { $b4 }; QEventGraphicsSceneResize = 181 { $b5 }; QEventGraphicsSceneMove = 182 { $b6 }; QEventCursorChange = 183 { $b7 }; QEventToolTipChange = 184 { $b8 }; QEventNetworkReplyUpdated = 185 { $b9 }; QEventGrabMouse = 186 { $ba }; QEventUngrabMouse = 187 { $bb }; QEventGrabKeyboard = 188 { $bc }; QEventUngrabKeyboard = 189 { $bd }; QEventCocoaRequestModal = 190 { $be }; QEventMacGLClearDrawable = 191 { $bf }; QEventUser = 1000 { $3e8 }; QEventMaxUser = 65535 { $ffff }; function QEvent_create(_type: QEventType): QEventH; cdecl; external Qt4PasLib name 'QEvent_create'; procedure QEvent_destroy(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_destroy'; function QEvent_type(handle: QEventH): QEventType; cdecl; external Qt4PasLib name 'QEvent_type'; function QEvent_spontaneous(handle: QEventH): Boolean; cdecl; external Qt4PasLib name 'QEvent_spontaneous'; procedure QEvent_setAccepted(handle: QEventH; accepted: Boolean); cdecl; external Qt4PasLib name 'QEvent_setAccepted'; function QEvent_isAccepted(handle: QEventH): Boolean; cdecl; external Qt4PasLib name 'QEvent_isAccepted'; procedure QEvent_accept(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_accept'; procedure QEvent_ignore(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_ignore'; function QEvent_registerEventType(hint: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QEvent_registerEventType'; function QTimerEvent_create(timerId: Integer): QTimerEventH; cdecl; external Qt4PasLib name 'QTimerEvent_create'; procedure QTimerEvent_destroy(handle: QTimerEventH); cdecl; external Qt4PasLib name 'QTimerEvent_destroy'; function QTimerEvent_timerId(handle: QTimerEventH): Integer; cdecl; external Qt4PasLib name 'QTimerEvent_timerId'; function QChildEvent_create(_type: QEventType; child: QObjectH): QChildEventH; cdecl; external Qt4PasLib name 'QChildEvent_create'; procedure QChildEvent_destroy(handle: QChildEventH); cdecl; external Qt4PasLib name 'QChildEvent_destroy'; function QChildEvent_child(handle: QChildEventH): QObjectH; cdecl; external Qt4PasLib name 'QChildEvent_child'; function QChildEvent_added(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_added'; function QChildEvent_polished(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_polished'; function QChildEvent_removed(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_removed'; function QDynamicPropertyChangeEvent_create(name: QByteArrayH): QDynamicPropertyChangeEventH; cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_create'; procedure QDynamicPropertyChangeEvent_destroy(handle: QDynamicPropertyChangeEventH); cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_destroy'; procedure QDynamicPropertyChangeEvent_propertyName(handle: QDynamicPropertyChangeEventH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_propertyName'; type QEventLoopProcessEventsFlag = cardinal; // QEventLoop::ProcessEventsFlag QEventLoopProcessEventsFlags = QEventLoopProcessEventsFlag; //QFlags<> (3) const QEventLoopAllEvents = $00; QEventLoopExcludeUserInputEvents = $01; QEventLoopExcludeSocketNotifiers = $02; QEventLoopWaitForMoreEvents = $04; QEventLoopX11ExcludeTimers = $08; QEventLoopEventLoopExec = $20; QEventLoopDialogExec = $40; function QEventLoop_create(parent: QObjectH = nil): QEventLoopH; cdecl; external Qt4PasLib name 'QEventLoop_create'; procedure QEventLoop_destroy(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_destroy'; function QEventLoop_processEvents(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents): Boolean; cdecl; external Qt4PasLib name 'QEventLoop_processEvents'; procedure QEventLoop_processEvents(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags; maximumTime: Integer); cdecl; external Qt4PasLib name 'QEventLoop_processEvents2'; function QEventLoop_exec(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents): Integer; cdecl; external Qt4PasLib name 'QEventLoop_exec'; procedure QEventLoop_exit(handle: QEventLoopH; returnCode: Integer = 0); cdecl; external Qt4PasLib name 'QEventLoop_exit'; function QEventLoop_isRunning(handle: QEventLoopH): Boolean; cdecl; external Qt4PasLib name 'QEventLoop_isRunning'; procedure QEventLoop_wakeUp(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_wakeUp'; procedure QEventLoop_quit(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_quit'; type QCoreApplicationEncoding = cardinal; // QCoreApplication::Encoding (4) const QCoreApplicationCodecForTr = 0 { $0 }; QCoreApplicationUnicodeUTF8 = 1 { $1 }; QCoreApplicationDefaultCodec = 0 { $0 }; function QCoreApplication_create(argc: PInteger; argv: PPAnsiChar): QCoreApplicationH; cdecl; external Qt4PasLib name 'QCoreApplication_create'; procedure QCoreApplication_destroy(handle: QCoreApplicationH); cdecl; external Qt4PasLib name 'QCoreApplication_destroy'; procedure QCoreApplication_arguments(retval: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_arguments'; procedure QCoreApplication_setAttribute(attribute: QtApplicationAttribute; _on: Boolean = True); cdecl; external Qt4PasLib name 'QCoreApplication_setAttribute'; function QCoreApplication_testAttribute(attribute: QtApplicationAttribute): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_testAttribute'; procedure QCoreApplication_setOrganizationDomain(orgDomain: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setOrganizationDomain'; procedure QCoreApplication_organizationDomain(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_organizationDomain'; procedure QCoreApplication_setOrganizationName(orgName: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setOrganizationName'; procedure QCoreApplication_organizationName(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_organizationName'; procedure QCoreApplication_setApplicationName(application: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setApplicationName'; procedure QCoreApplication_applicationName(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationName'; procedure QCoreApplication_setApplicationVersion(version: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setApplicationVersion'; procedure QCoreApplication_applicationVersion(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationVersion'; function QCoreApplication_instance(): QCoreApplicationH; cdecl; external Qt4PasLib name 'QCoreApplication_instance'; function QCoreApplication_exec(): Integer; cdecl; external Qt4PasLib name 'QCoreApplication_exec'; procedure QCoreApplication_processEvents(flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents); cdecl; external Qt4PasLib name 'QCoreApplication_processEvents'; procedure QCoreApplication_processEvents(flags: QEventLoopProcessEventsFlags; maxtime: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_processEvents2'; procedure QCoreApplication_exit(retcode: Integer = 0); cdecl; external Qt4PasLib name 'QCoreApplication_exit'; function QCoreApplication_sendEvent(receiver: QObjectH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_sendEvent'; procedure QCoreApplication_postEvent(receiver: QObjectH; event: QEventH); cdecl; external Qt4PasLib name 'QCoreApplication_postEvent'; procedure QCoreApplication_postEvent(receiver: QObjectH; event: QEventH; priority: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_postEvent2'; procedure QCoreApplication_sendPostedEvents(receiver: QObjectH; event_type: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_sendPostedEvents'; procedure QCoreApplication_sendPostedEvents(); cdecl; external Qt4PasLib name 'QCoreApplication_sendPostedEvents2'; procedure QCoreApplication_removePostedEvents(receiver: QObjectH); cdecl; external Qt4PasLib name 'QCoreApplication_removePostedEvents'; procedure QCoreApplication_removePostedEvents(receiver: QObjectH; eventType: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_removePostedEvents2'; function QCoreApplication_hasPendingEvents(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_hasPendingEvents'; function QCoreApplication_notify(handle: QCoreApplicationH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_notify'; function QCoreApplication_startingUp(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_startingUp'; function QCoreApplication_closingDown(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_closingDown'; procedure QCoreApplication_applicationDirPath(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationDirPath'; procedure QCoreApplication_applicationFilePath(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationFilePath'; function QCoreApplication_applicationPid(): int64; cdecl; external Qt4PasLib name 'QCoreApplication_applicationPid'; procedure QCoreApplication_setLibraryPaths(AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_setLibraryPaths'; procedure QCoreApplication_libraryPaths(retval: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_libraryPaths'; procedure QCoreApplication_addLibraryPath(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_addLibraryPath'; procedure QCoreApplication_removeLibraryPath(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_removeLibraryPath'; procedure QCoreApplication_installTranslator(messageFile: QTranslatorH); cdecl; external Qt4PasLib name 'QCoreApplication_installTranslator'; procedure QCoreApplication_removeTranslator(messageFile: QTranslatorH); cdecl; external Qt4PasLib name 'QCoreApplication_removeTranslator'; procedure QCoreApplication_translate(retval: PWideString; context: PAnsiChar; key: PAnsiChar; disambiguation: PAnsiChar = nil; encoding: QCoreApplicationEncoding = QCoreApplicationCodecForTr); cdecl; external Qt4PasLib name 'QCoreApplication_translate'; procedure QCoreApplication_translate(retval: PWideString; context: PAnsiChar; key: PAnsiChar; disambiguation: PAnsiChar; encoding: QCoreApplicationEncoding; n: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_translate2'; procedure QCoreApplication_flush(); cdecl; external Qt4PasLib name 'QCoreApplication_flush'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QCoreApplication_watchUnixSignal(signal: Integer; watch: Boolean); cdecl; external Qt4PasLib name 'QCoreApplication_watchUnixSignal'; {$endif} function QCoreApplication_setEventFilter(handle: QCoreApplicationH; filter: QCoreApplicationEventFilter): QCoreApplicationEventFilter; cdecl; external Qt4PasLib name 'QCoreApplication_setEventFilter'; function QCoreApplication_filterEvent(handle: QCoreApplicationH; message: Pointer; result: PLong): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_filterEvent'; procedure QCoreApplication_quit(); cdecl; external Qt4PasLib name 'QCoreApplication_quit'; {$ifdef MSWINDOWS } function QCoreApplication_winEventFilter(handle: QCoreApplicationH; message: PMsg; result: PLong): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_winEventFilter'; {$endif} type QCoreApplication_aboutToQuit_Event = procedure () of object cdecl; QCoreApplication_unixSignal_Event = procedure (AnonParam1: Integer) of object cdecl; function QTranslator_create(parent: QObjectH = nil): QTranslatorH; cdecl; external Qt4PasLib name 'QTranslator_create'; procedure QTranslator_destroy(handle: QTranslatorH); cdecl; external Qt4PasLib name 'QTranslator_destroy'; procedure QTranslator_translate(handle: QTranslatorH; retval: PWideString; context: PAnsiChar; sourceText: PAnsiChar; disambiguation: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QTranslator_translate'; procedure QTranslator_translate(handle: QTranslatorH; retval: PWideString; context: PAnsiChar; sourceText: PAnsiChar; disambiguation: PAnsiChar; n: Integer); cdecl; external Qt4PasLib name 'QTranslator_translate2'; function QTranslator_isEmpty(handle: QTranslatorH): Boolean; cdecl; external Qt4PasLib name 'QTranslator_isEmpty'; function QTranslator_load(handle: QTranslatorH; filename: PWideString; directory: PWideString = nil; search_delimiters: PWideString = nil; suffix: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QTranslator_load'; function QTranslator_load(handle: QTranslatorH; data: PByte; len: Integer): Boolean; cdecl; external Qt4PasLib name 'QTranslator_load2'; function QTimer_create(parent: QObjectH = nil): QTimerH; cdecl; external Qt4PasLib name 'QTimer_create'; procedure QTimer_destroy(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_destroy'; function QTimer_isActive(handle: QTimerH): Boolean; cdecl; external Qt4PasLib name 'QTimer_isActive'; function QTimer_timerId(handle: QTimerH): Integer; cdecl; external Qt4PasLib name 'QTimer_timerId'; procedure QTimer_setInterval(handle: QTimerH; msec: Integer); cdecl; external Qt4PasLib name 'QTimer_setInterval'; function QTimer_interval(handle: QTimerH): Integer; cdecl; external Qt4PasLib name 'QTimer_interval'; procedure QTimer_setSingleShot(handle: QTimerH; singleShot: Boolean); cdecl; external Qt4PasLib name 'QTimer_setSingleShot'; function QTimer_isSingleShot(handle: QTimerH): Boolean; cdecl; external Qt4PasLib name 'QTimer_isSingleShot'; procedure QTimer_singleShot(msec: Integer; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QTimer_singleShot'; procedure QTimer_start(handle: QTimerH; msec: Integer); cdecl; external Qt4PasLib name 'QTimer_start'; procedure QTimer_start(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_start2'; procedure QTimer_stop(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_stop'; type QTimer_timeout_Event = procedure () of object cdecl; type QVariantType = cardinal; // QVariant::Type (4) const QVariantInvalid = 0 { $0 }; QVariantBool = 1 { $1 }; QVariantInt = 2 { $2 }; QVariantUInt = 3 { $3 }; QVariantLongLong = 4 { $4 }; QVariantULongLong = 5 { $5 }; QVariantDouble = 6 { $6 }; QVariantChar = 7 { $7 }; QVariantMap = 8 { $8 }; QVariantList = 9 { $9 }; QVariantString = 10 { $a }; QVariantStringList = 11 { $b }; QVariantByteArray = 12 { $c }; QVariantBitArray = 13 { $d }; QVariantDate = 14 { $e }; QVariantTime = 15 { $f }; QVariantDateTime = 16 { $10 }; QVariantUrl = 17 { $11 }; QVariantLocale = 18 { $12 }; QVariantRect = 19 { $13 }; QVariantRectF = 20 { $14 }; QVariantSize = 21 { $15 }; QVariantSizeF = 22 { $16 }; QVariantLine = 23 { $17 }; QVariantLineF = 24 { $18 }; QVariantPoint = 25 { $19 }; QVariantPointF = 26 { $1a }; QVariantRegExp = 27 { $1b }; QVariantHash = 28 { $1c }; QVariantLastCoreType = 28 { $1c }; QVariantFont = 64 { $40 }; QVariantPixmap = 65 { $41 }; QVariantBrush = 66 { $42 }; QVariantColor = 67 { $43 }; QVariantPalette = 68 { $44 }; QVariantIcon = 69 { $45 }; QVariantImage = 70 { $46 }; QVariantPolygon = 71 { $47 }; QVariantRegion = 72 { $48 }; QVariantBitmap = 73 { $49 }; QVariantCursor = 74 { $4a }; QVariantSizePolicy = 75 { $4b }; QVariantKeySequence = 76 { $4c }; QVariantPen = 77 { $4d }; QVariantTextLength = 78 { $4e }; QVariantTextFormat = 79 { $4f }; QVariantMatrix = 80 { $50 }; QVariantTransform = 81 { $51 }; QVariantLastGuiType = 81 { $51 }; QVariantUserType = 127 { $7f }; QVariantLastType = 4294967295 { $ffffffff }; function QVariant_create(): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create'; procedure QVariant_destroy(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_destroy'; function QVariant_create(typeOrUserType: Integer; copy: Pointer): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create3'; function QVariant_create(other: QVariantH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create4'; function QVariant_create(s: QDataStreamH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create5'; function QVariant_create(i: Integer): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create6'; function QVariant_create(ll: int64): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create8'; function QVariant_create(ull: qword): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create9'; function QVariant_create(b: Boolean): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create10'; function QVariant_create(d: Double): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create11'; function QVariant_create(str: PAnsiChar): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create12'; function QVariant_create(bytearray: QByteArrayH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create13'; function QVariant_create(bitarray: QBitArrayH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create14'; function QVariant_create(_string: PWideString): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create15'; function QVariant_create(_string: QLatin1StringH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create16'; function QVariant_create(stringlist: QStringListH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create17'; function QVariant_create(qchar: PWideChar): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create18'; function QVariant_create(date: QDateH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create19'; function QVariant_create(time: QTimeH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create20'; function QVariant_create(datetime: QDateTimeH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create21'; function QVariant_create(pt: PQtPointF): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create25'; function QVariant_create(line: QLineH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create26'; function QVariant_create(line: QLineFH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create27'; function QVariant_create(rect: PRect): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create28'; function QVariant_create(rect: QRectFH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create29'; function QVariant_create(url: QUrlH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create30'; function QVariant_create(locale: QLocaleH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create31'; function QVariant_create(regExp: QRegExpH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create32'; function QVariant_create(color: QtGlobalColor): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create33'; function QVariant_type(handle: QVariantH): QVariantType; cdecl; external Qt4PasLib name 'QVariant_type'; function QVariant_userType(handle: QVariantH): Integer; cdecl; external Qt4PasLib name 'QVariant_userType'; function QVariant_typeName(handle: QVariantH): PAnsiChar; cdecl; external Qt4PasLib name 'QVariant_typeName'; function QVariant_canConvert(handle: QVariantH; t: QVariantType): Boolean; cdecl; external Qt4PasLib name 'QVariant_canConvert'; function QVariant_convert(handle: QVariantH; t: QVariantType): Boolean; cdecl; external Qt4PasLib name 'QVariant_convert'; function QVariant_isValid(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isValid'; function QVariant_isNull(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isNull'; procedure QVariant_clear(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_clear'; procedure QVariant_detach(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_detach'; function QVariant_isDetached(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isDetached'; function QVariant_toInt(handle: QVariantH; ok: PBoolean = nil): Integer; cdecl; external Qt4PasLib name 'QVariant_toInt'; function QVariant_toUInt(handle: QVariantH; ok: PBoolean = nil): LongWord; cdecl; external Qt4PasLib name 'QVariant_toUInt'; function QVariant_toLongLong(handle: QVariantH; ok: PBoolean = nil): int64; cdecl; external Qt4PasLib name 'QVariant_toLongLong'; function QVariant_toULongLong(handle: QVariantH; ok: PBoolean = nil): qword; cdecl; external Qt4PasLib name 'QVariant_toULongLong'; function QVariant_toBool(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_toBool'; function QVariant_toDouble(handle: QVariantH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QVariant_toDouble'; procedure QVariant_toByteArray(handle: QVariantH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QVariant_toByteArray'; procedure QVariant_toBitArray(handle: QVariantH; retval: QBitArrayH); cdecl; external Qt4PasLib name 'QVariant_toBitArray'; procedure QVariant_toString(handle: QVariantH; retval: PWideString); cdecl; external Qt4PasLib name 'QVariant_toString'; procedure QVariant_toStringList(handle: QVariantH; retval: QStringListH); cdecl; external Qt4PasLib name 'QVariant_toStringList'; procedure QVariant_toChar(handle: QVariantH; retval: PWideChar); cdecl; external Qt4PasLib name 'QVariant_toChar'; procedure QVariant_toDate(handle: QVariantH; retval: QDateH); cdecl; external Qt4PasLib name 'QVariant_toDate'; procedure QVariant_toTime(handle: QVariantH; retval: QTimeH); cdecl; external Qt4PasLib name 'QVariant_toTime'; procedure QVariant_toDateTime(handle: QVariantH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QVariant_toDateTime'; procedure QVariant_toPoint(handle: QVariantH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QVariant_toPoint'; procedure QVariant_toPointF(handle: QVariantH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QVariant_toPointF'; procedure QVariant_toRect(handle: QVariantH; retval: PRect); cdecl; external Qt4PasLib name 'QVariant_toRect'; procedure QVariant_toSize(handle: QVariantH; retval: PSize); cdecl; external Qt4PasLib name 'QVariant_toSize'; procedure QVariant_toSizeF(handle: QVariantH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QVariant_toSizeF'; procedure QVariant_toLine(handle: QVariantH; retval: QLineH); cdecl; external Qt4PasLib name 'QVariant_toLine'; procedure QVariant_toLineF(handle: QVariantH; retval: QLineFH); cdecl; external Qt4PasLib name 'QVariant_toLineF'; procedure QVariant_toRectF(handle: QVariantH; retval: QRectFH); cdecl; external Qt4PasLib name 'QVariant_toRectF'; procedure QVariant_toUrl(handle: QVariantH; retval: QUrlH); cdecl; external Qt4PasLib name 'QVariant_toUrl'; procedure QVariant_toLocale(handle: QVariantH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QVariant_toLocale'; procedure QVariant_toRegExp(handle: QVariantH; retval: QRegExpH); cdecl; external Qt4PasLib name 'QVariant_toRegExp'; procedure QVariant_load(handle: QVariantH; ds: QDataStreamH); cdecl; external Qt4PasLib name 'QVariant_load'; procedure QVariant_save(handle: QVariantH; ds: QDataStreamH); cdecl; external Qt4PasLib name 'QVariant_save'; function QVariant_typeToName(_type: QVariantType): PAnsiChar; cdecl; external Qt4PasLib name 'QVariant_typeToName'; function QVariant_nameToType(name: PAnsiChar): QVariantType; cdecl; external Qt4PasLib name 'QVariant_nameToType'; function QVariant_constData(handle: QVariantH): Pointer; cdecl; external Qt4PasLib name 'QVariant_constData'; type QMetaMethodAccess = ( // QMetaMethod::Access (1) QMetaMethodPrivate, QMetaMethodProtected, QMetaMethodPublic ); QMetaMethodMethodType = ( // QMetaMethod::MethodType (1) QMetaMethodMethod, QMetaMethodSignal, QMetaMethodSlot, QMetaMethodConstructor ); QMetaMethodAttributes = ( //QMetaMethod::Attributes (2) QMetaMethodCompatibility = $1, QMetaMethodCloned = $2, QMetaMethodScriptable = $4 ); function QMetaMethod_create(): QMetaMethodH; cdecl; external Qt4PasLib name 'QMetaMethod_create'; procedure QMetaMethod_destroy(handle: QMetaMethodH); cdecl; external Qt4PasLib name 'QMetaMethod_destroy'; function QMetaMethod_signature(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_signature'; function QMetaMethod_typeName(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_typeName'; function QMetaMethod_tag(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_tag'; function QMetaMethod_access(handle: QMetaMethodH): QMetaMethodAccess; cdecl; external Qt4PasLib name 'QMetaMethod_access'; function QMetaMethod_methodType(handle: QMetaMethodH): QMetaMethodMethodType; cdecl; external Qt4PasLib name 'QMetaMethod_methodType'; function QMetaMethod_attributes(handle: QMetaMethodH): Integer; cdecl; external Qt4PasLib name 'QMetaMethod_attributes'; function QMetaMethod_enclosingMetaObject(handle: QMetaMethodH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaMethod_enclosingMetaObject'; function QMetaEnum_create(): QMetaEnumH; cdecl; external Qt4PasLib name 'QMetaEnum_create'; procedure QMetaEnum_destroy(handle: QMetaEnumH); cdecl; external Qt4PasLib name 'QMetaEnum_destroy'; function QMetaEnum_name(handle: QMetaEnumH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_name'; function QMetaEnum_isFlag(handle: QMetaEnumH): Boolean; cdecl; external Qt4PasLib name 'QMetaEnum_isFlag'; function QMetaEnum_keyCount(handle: QMetaEnumH): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keyCount'; function QMetaEnum_key(handle: QMetaEnumH; index: Integer): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_key'; function QMetaEnum_value(handle: QMetaEnumH; index: Integer): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_value'; function QMetaEnum_scope(handle: QMetaEnumH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_scope'; function QMetaEnum_keyToValue(handle: QMetaEnumH; key: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keyToValue'; function QMetaEnum_valueToKey(handle: QMetaEnumH; value: Integer): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_valueToKey'; function QMetaEnum_keysToValue(handle: QMetaEnumH; keys: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keysToValue'; procedure QMetaEnum_valueToKeys(handle: QMetaEnumH; retval: QByteArrayH; value: Integer); cdecl; external Qt4PasLib name 'QMetaEnum_valueToKeys'; function QMetaEnum_enclosingMetaObject(handle: QMetaEnumH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaEnum_enclosingMetaObject'; function QMetaEnum_isValid(handle: QMetaEnumH): Boolean; cdecl; external Qt4PasLib name 'QMetaEnum_isValid'; function QMetaProperty_create(): QMetaPropertyH; cdecl; external Qt4PasLib name 'QMetaProperty_create'; procedure QMetaProperty_destroy(handle: QMetaPropertyH); cdecl; external Qt4PasLib name 'QMetaProperty_destroy'; function QMetaProperty_name(handle: QMetaPropertyH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaProperty_name'; function QMetaProperty_typeName(handle: QMetaPropertyH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaProperty_typeName'; function QMetaProperty_type(handle: QMetaPropertyH): QVariantType; cdecl; external Qt4PasLib name 'QMetaProperty_type'; function QMetaProperty_userType(handle: QMetaPropertyH): Integer; cdecl; external Qt4PasLib name 'QMetaProperty_userType'; function QMetaProperty_isReadable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isReadable'; function QMetaProperty_isWritable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isWritable'; function QMetaProperty_isResettable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isResettable'; function QMetaProperty_isDesignable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isDesignable'; function QMetaProperty_isScriptable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isScriptable'; function QMetaProperty_isStored(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isStored'; function QMetaProperty_isEditable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isEditable'; function QMetaProperty_isUser(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isUser'; function QMetaProperty_isFlagType(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isFlagType'; function QMetaProperty_isEnumType(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isEnumType'; procedure QMetaProperty_enumerator(handle: QMetaPropertyH; retval: QMetaEnumH); cdecl; external Qt4PasLib name 'QMetaProperty_enumerator'; function QMetaProperty_hasNotifySignal(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_hasNotifySignal'; procedure QMetaProperty_notifySignal(handle: QMetaPropertyH; retval: QMetaMethodH); cdecl; external Qt4PasLib name 'QMetaProperty_notifySignal'; function QMetaProperty_notifySignalIndex(handle: QMetaPropertyH): Integer; cdecl; external Qt4PasLib name 'QMetaProperty_notifySignalIndex'; procedure QMetaProperty_read(handle: QMetaPropertyH; retval: QVariantH; obj: QObjectH); cdecl; external Qt4PasLib name 'QMetaProperty_read'; function QMetaProperty_write(handle: QMetaPropertyH; obj: QObjectH; value: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_write'; function QMetaProperty_reset(handle: QMetaPropertyH; obj: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_reset'; function QMetaProperty_hasStdCppSet(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_hasStdCppSet'; function QMetaProperty_isValid(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isValid'; function QMetaProperty_enclosingMetaObject(handle: QMetaPropertyH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaProperty_enclosingMetaObject'; function QMetaClassInfo_create(): QMetaClassInfoH; cdecl; external Qt4PasLib name 'QMetaClassInfo_create'; procedure QMetaClassInfo_destroy(handle: QMetaClassInfoH); cdecl; external Qt4PasLib name 'QMetaClassInfo_destroy'; function QMetaClassInfo_name(handle: QMetaClassInfoH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaClassInfo_name'; function QMetaClassInfo_value(handle: QMetaClassInfoH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaClassInfo_value'; function QMetaClassInfo_enclosingMetaObject(handle: QMetaClassInfoH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaClassInfo_enclosingMetaObject'; function QModelIndex_create(): QModelIndexH; cdecl; external Qt4PasLib name 'QModelIndex_create'; procedure QModelIndex_destroy(handle: QModelIndexH); cdecl; external Qt4PasLib name 'QModelIndex_destroy'; function QModelIndex_create(other: QModelIndexH): QModelIndexH; cdecl; external Qt4PasLib name 'QModelIndex_create2'; function QModelIndex_row(handle: QModelIndexH): Integer; cdecl; external Qt4PasLib name 'QModelIndex_row'; function QModelIndex_column(handle: QModelIndexH): Integer; cdecl; external Qt4PasLib name 'QModelIndex_column'; function QModelIndex_internalPointer(handle: QModelIndexH): Pointer; cdecl; external Qt4PasLib name 'QModelIndex_internalPointer'; function QModelIndex_internalId(handle: QModelIndexH): int64; cdecl; external Qt4PasLib name 'QModelIndex_internalId'; procedure QModelIndex_parent(handle: QModelIndexH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QModelIndex_parent'; procedure QModelIndex_sibling(handle: QModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QModelIndex_sibling'; procedure QModelIndex_child(handle: QModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QModelIndex_child'; procedure QModelIndex_data(handle: QModelIndexH; retval: QVariantH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QModelIndex_data'; function QModelIndex_flags(handle: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QModelIndex_flags'; function QModelIndex_model(handle: QModelIndexH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QModelIndex_model'; function QModelIndex_isValid(handle: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QModelIndex_isValid'; function QPersistentModelIndex_create(): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create'; procedure QPersistentModelIndex_destroy(handle: QPersistentModelIndexH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_destroy'; function QPersistentModelIndex_create(index: QModelIndexH): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create2'; function QPersistentModelIndex_create(other: QPersistentModelIndexH): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create3'; function QPersistentModelIndex_row(handle: QPersistentModelIndexH): Integer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_row'; function QPersistentModelIndex_column(handle: QPersistentModelIndexH): Integer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_column'; function QPersistentModelIndex_internalPointer(handle: QPersistentModelIndexH): Pointer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_internalPointer'; function QPersistentModelIndex_internalId(handle: QPersistentModelIndexH): int64; cdecl; external Qt4PasLib name 'QPersistentModelIndex_internalId'; procedure QPersistentModelIndex_parent(handle: QPersistentModelIndexH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_parent'; procedure QPersistentModelIndex_sibling(handle: QPersistentModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QPersistentModelIndex_sibling'; procedure QPersistentModelIndex_child(handle: QPersistentModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QPersistentModelIndex_child'; procedure QPersistentModelIndex_data(handle: QPersistentModelIndexH; retval: QVariantH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QPersistentModelIndex_data'; function QPersistentModelIndex_flags(handle: QPersistentModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QPersistentModelIndex_flags'; function QPersistentModelIndex_model(handle: QPersistentModelIndexH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_model'; function QPersistentModelIndex_isValid(handle: QPersistentModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QPersistentModelIndex_isValid'; function QAbstractItemModel_hasIndex(handle: QAbstractItemModelH; row: Integer; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_hasIndex'; procedure QAbstractItemModel_index(handle: QAbstractItemModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractItemModel_index'; procedure QAbstractItemModel_parent(handle: QAbstractItemModelH; retval: QModelIndexH; child: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_parent'; procedure QAbstractItemModel_sibling(handle: QAbstractItemModelH; retval: QModelIndexH; row: Integer; column: Integer; idx: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_sibling'; function QAbstractItemModel_rowCount(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QAbstractItemModel_rowCount'; function QAbstractItemModel_columnCount(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QAbstractItemModel_columnCount'; function QAbstractItemModel_hasChildren(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_hasChildren'; procedure QAbstractItemModel_data(handle: QAbstractItemModelH; retval: QVariantH; index: QModelIndexH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QAbstractItemModel_data'; function QAbstractItemModel_setData(handle: QAbstractItemModelH; index: QModelIndexH; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_setData'; procedure QAbstractItemModel_headerData(handle: QAbstractItemModelH; retval: QVariantH; section: Integer; orientation: QtOrientation; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QAbstractItemModel_headerData'; function QAbstractItemModel_setHeaderData(handle: QAbstractItemModelH; section: Integer; orientation: QtOrientation; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_setHeaderData'; procedure QAbstractItemModel_mimeTypes(handle: QAbstractItemModelH; retval: QStringListH); cdecl; external Qt4PasLib name 'QAbstractItemModel_mimeTypes'; function QAbstractItemModel_dropMimeData(handle: QAbstractItemModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_dropMimeData'; function QAbstractItemModel_supportedDropActions(handle: QAbstractItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QAbstractItemModel_supportedDropActions'; function QAbstractItemModel_supportedDragActions(handle: QAbstractItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QAbstractItemModel_supportedDragActions'; procedure QAbstractItemModel_setSupportedDragActions(handle: QAbstractItemModelH; AnonParam1: QtDropActions); cdecl; external Qt4PasLib name 'QAbstractItemModel_setSupportedDragActions'; function QAbstractItemModel_insertRows(handle: QAbstractItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertRows'; function QAbstractItemModel_insertColumns(handle: QAbstractItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertColumns'; function QAbstractItemModel_removeRows(handle: QAbstractItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeRows'; function QAbstractItemModel_removeColumns(handle: QAbstractItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeColumns'; function QAbstractItemModel_insertRow(handle: QAbstractItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertRow'; function QAbstractItemModel_insertColumn(handle: QAbstractItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertColumn'; function QAbstractItemModel_removeRow(handle: QAbstractItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeRow'; function QAbstractItemModel_removeColumn(handle: QAbstractItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeColumn'; procedure QAbstractItemModel_fetchMore(handle: QAbstractItemModelH; parent: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_fetchMore'; function QAbstractItemModel_canFetchMore(handle: QAbstractItemModelH; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_canFetchMore'; function QAbstractItemModel_flags(handle: QAbstractItemModelH; index: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QAbstractItemModel_flags'; procedure QAbstractItemModel_sort(handle: QAbstractItemModelH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QAbstractItemModel_sort'; procedure QAbstractItemModel_buddy(handle: QAbstractItemModelH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_buddy'; procedure QAbstractItemModel_match(handle: QAbstractItemModelH; retval: PPtrIntArray; start: QModelIndexH; role: Integer; value: QVariantH; hits: Integer; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QAbstractItemModel_match'; procedure QAbstractItemModel_span(handle: QAbstractItemModelH; retval: PSize; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_span'; function QAbstractItemModel_submit(handle: QAbstractItemModelH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_submit'; procedure QAbstractItemModel_revert(handle: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QAbstractItemModel_revert'; procedure QAbstractTableModel_index(handle: QAbstractTableModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractTableModel_index'; function QAbstractTableModel_dropMimeData(handle: QAbstractTableModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractTableModel_dropMimeData'; procedure QAbstractListModel_index(handle: QAbstractListModelH; retval: QModelIndexH; row: Integer; column: Integer = 0; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractListModel_index'; function QAbstractListModel_dropMimeData(handle: QAbstractListModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractListModel_dropMimeData'; type QAbstractItemModel_dataChanged_Event = procedure (topLeft: QModelIndexH; bottomRight: QModelIndexH) of object cdecl; QAbstractItemModel_headerDataChanged_Event = procedure (orientation: QtOrientation; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_layoutChanged_Event = procedure () of object cdecl; QAbstractItemModel_layoutAboutToBeChanged_Event = procedure () of object cdecl; QAbstractItemModel_rowsAboutToBeInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsAboutToBeRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsAboutToBeInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsAboutToBeRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_modelAboutToBeReset_Event = procedure () of object cdecl; QAbstractItemModel_modelReset_Event = procedure () of object cdecl; function QAbstractEventDispatcher_instance(thread: QThreadH = nil): QAbstractEventDispatcherH; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_instance'; function QAbstractEventDispatcher_processEvents(handle: QAbstractEventDispatcherH; flags: QEventLoopProcessEventsFlags): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_processEvents'; function QAbstractEventDispatcher_hasPendingEvents(handle: QAbstractEventDispatcherH): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_hasPendingEvents'; procedure QAbstractEventDispatcher_registerSocketNotifier(handle: QAbstractEventDispatcherH; notifier: QSocketNotifierH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerSocketNotifier'; procedure QAbstractEventDispatcher_unregisterSocketNotifier(handle: QAbstractEventDispatcherH; notifier: QSocketNotifierH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterSocketNotifier'; function QAbstractEventDispatcher_registerTimer(handle: QAbstractEventDispatcherH; interval: Integer; _object: QObjectH): Integer; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerTimer'; procedure QAbstractEventDispatcher_registerTimer(handle: QAbstractEventDispatcherH; timerId: Integer; interval: Integer; _object: QObjectH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerTimer2'; function QAbstractEventDispatcher_unregisterTimer(handle: QAbstractEventDispatcherH; timerId: Integer): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterTimer'; function QAbstractEventDispatcher_unregisterTimers(handle: QAbstractEventDispatcherH; _object: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterTimers'; procedure QAbstractEventDispatcher_wakeUp(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_wakeUp'; procedure QAbstractEventDispatcher_interrupt(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_interrupt'; procedure QAbstractEventDispatcher_flush(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_flush'; procedure QAbstractEventDispatcher_startingUp(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_startingUp'; procedure QAbstractEventDispatcher_closingDown(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_closingDown'; function QAbstractEventDispatcher_setEventFilter(handle: QAbstractEventDispatcherH; filter: QAbstractEventDispatcherEventFilter): QAbstractEventDispatcherEventFilter; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_setEventFilter'; function QAbstractEventDispatcher_filterEvent(handle: QAbstractEventDispatcherH; message: Pointer): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_filterEvent'; function QMimeData_create(): QMimeDataH; cdecl; external Qt4PasLib name 'QMimeData_create'; procedure QMimeData_destroy(handle: QMimeDataH); cdecl; external Qt4PasLib name 'QMimeData_destroy'; function QMimeData_hasUrls(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasUrls'; procedure QMimeData_text(handle: QMimeDataH; retval: PWideString); cdecl; external Qt4PasLib name 'QMimeData_text'; procedure QMimeData_setText(handle: QMimeDataH; text: PWideString); cdecl; external Qt4PasLib name 'QMimeData_setText'; function QMimeData_hasText(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasText'; procedure QMimeData_html(handle: QMimeDataH; retval: PWideString); cdecl; external Qt4PasLib name 'QMimeData_html'; procedure QMimeData_setHtml(handle: QMimeDataH; html: PWideString); cdecl; external Qt4PasLib name 'QMimeData_setHtml'; function QMimeData_hasHtml(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasHtml'; procedure QMimeData_imageData(handle: QMimeDataH; retval: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_imageData'; procedure QMimeData_setImageData(handle: QMimeDataH; image: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_setImageData'; function QMimeData_hasImage(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasImage'; procedure QMimeData_colorData(handle: QMimeDataH; retval: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_colorData'; procedure QMimeData_setColorData(handle: QMimeDataH; color: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_setColorData'; function QMimeData_hasColor(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasColor'; procedure QMimeData_data(handle: QMimeDataH; retval: QByteArrayH; mimetype: PWideString); cdecl; external Qt4PasLib name 'QMimeData_data'; procedure QMimeData_setData(handle: QMimeDataH; mimetype: PWideString; data: QByteArrayH); cdecl; external Qt4PasLib name 'QMimeData_setData'; procedure QMimeData_removeFormat(handle: QMimeDataH; mimetype: PWideString); cdecl; external Qt4PasLib name 'QMimeData_removeFormat'; function QMimeData_hasFormat(handle: QMimeDataH; mimetype: PWideString): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasFormat'; procedure QMimeData_formats(handle: QMimeDataH; retval: QStringListH); cdecl; external Qt4PasLib name 'QMimeData_formats'; procedure QMimeData_clear(handle: QMimeDataH); cdecl; external Qt4PasLib name 'QMimeData_clear'; type QSocketNotifierType = ( // QSocketNotifier::Type (1) QSocketNotifierRead, QSocketNotifierWrite, QSocketNotifierException ); function QSocketNotifier_create(socket: Integer; AnonParam2: QSocketNotifierType; parent: QObjectH = nil): QSocketNotifierH; cdecl; external Qt4PasLib name 'QSocketNotifier_create'; procedure QSocketNotifier_destroy(handle: QSocketNotifierH); cdecl; external Qt4PasLib name 'QSocketNotifier_destroy'; function QSocketNotifier_socket(handle: QSocketNotifierH): Integer; cdecl; external Qt4PasLib name 'QSocketNotifier_socket'; function QSocketNotifier_type(handle: QSocketNotifierH): QSocketNotifierType; cdecl; external Qt4PasLib name 'QSocketNotifier_type'; function QSocketNotifier_isEnabled(handle: QSocketNotifierH): Boolean; cdecl; external Qt4PasLib name 'QSocketNotifier_isEnabled'; procedure QSocketNotifier_setEnabled(handle: QSocketNotifierH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSocketNotifier_setEnabled'; type QSocketNotifier_activated_Event = procedure (socket: Integer) of object cdecl; type QThreadPriority = ( // QThread::Priority (1) QThreadIdlePriority, QThreadLowestPriority, QThreadLowPriority, QThreadNormalPriority, QThreadHighPriority, QThreadHighestPriority, QThreadTimeCriticalPriority, QThreadInheritPriority ); function QThread_currentThreadId(): QtHANDLE; cdecl; external Qt4PasLib name 'QThread_currentThreadId'; function QThread_currentThread(): QThreadH; cdecl; external Qt4PasLib name 'QThread_currentThread'; function QThread_idealThreadCount(): Integer; cdecl; external Qt4PasLib name 'QThread_idealThreadCount'; procedure QThread_yieldCurrentThread(); cdecl; external Qt4PasLib name 'QThread_yieldCurrentThread'; function QThread_create(parent: QObjectH = nil): QThreadH; cdecl; external Qt4PasLib name 'QThread_create'; procedure QThread_destroy(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_destroy'; procedure QThread_setPriority(handle: QThreadH; priority: QThreadPriority); cdecl; external Qt4PasLib name 'QThread_setPriority'; function QThread_priority(handle: QThreadH): QThreadPriority; cdecl; external Qt4PasLib name 'QThread_priority'; function QThread_isFinished(handle: QThreadH): Boolean; cdecl; external Qt4PasLib name 'QThread_isFinished'; function QThread_isRunning(handle: QThreadH): Boolean; cdecl; external Qt4PasLib name 'QThread_isRunning'; procedure QThread_setStackSize(handle: QThreadH; stackSize: LongWord); cdecl; external Qt4PasLib name 'QThread_setStackSize'; function QThread_stackSize(handle: QThreadH): LongWord; cdecl; external Qt4PasLib name 'QThread_stackSize'; procedure QThread_exit(handle: QThreadH; retcode: Integer = 0); cdecl; external Qt4PasLib name 'QThread_exit'; procedure QThread_start(handle: QThreadH; AnonParam1: QThreadPriority = QThreadInheritPriority); cdecl; external Qt4PasLib name 'QThread_start'; procedure QThread_terminate(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_terminate'; procedure QThread_quit(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_quit'; function QThread_wait(handle: QThreadH; time: Longword): Boolean; cdecl; external Qt4PasLib name 'QThread_wait'; type QThread_started_Event = procedure () of object cdecl; QThread_finished_Event = procedure () of object cdecl; QThread_terminated_Event = procedure () of object cdecl; function QLCLThread_create(parent: QObjectH = nil): QLCLThreadH; cdecl; external Qt4PasLib name 'QLCLThread_create'; procedure QLCLThread_destroy(handle: QLCLThreadH); cdecl; external Qt4PasLib name 'QLCLThread_destroy'; procedure QLCLThread_override_run(handle: QLCLThreadH; hook: QLCLThread_run_Override); cdecl; external Qt4PasLib name 'QLCLThread_override_run'; function QLCLThread_exec(handle: QLCLThreadH): Integer; cdecl; external Qt4PasLib name 'QLCLThread_exec'; type QCharDirection = ( // QChar::Direction (1) QCharDirL, QCharDirR, QCharDirEN, QCharDirES, QCharDirET, QCharDirAN, QCharDirCS, QCharDirB, QCharDirS, QCharDirWS, QCharDirON, QCharDirLRE, QCharDirLRO, QCharDirAL, QCharDirRLE, QCharDirRLO, QCharDirPDF, QCharDirNSM, QCharDirBN ); QCharDecomposition = ( // QChar::Decomposition (1) QCharNoDecomposition, QCharCanonical, QCharFont, QCharNoBreak, QCharInitial, QCharMedial, QCharFinal, QCharIsolated, QCharCircle, QCharSuper, QCharSub, QCharVertical, QCharWide, QCharNarrow, QCharSmall, QCharSquare, QCharCompat, QCharFraction ); QCharJoining = ( // QChar::Joining (1) QCharOtherJoining, QCharDual, QCharRight, QCharCenter ); QCharUnicodeVersion = ( // QChar::UnicodeVersion (1) QCharUnicode_Unassigned, QCharUnicode_1_1, QCharUnicode_2_0, QCharUnicode_2_1_2, QCharUnicode_3_0, QCharUnicode_3_1, QCharUnicode_3_2, QCharUnicode_4_0, QCharUnicode_4_1, QCharUnicode_5_0 ); QCharSpecialCharacter = ( //QChar::SpecialCharacter (2) QCharNull = $0000, QCharNbsp = $00a0, QCharLineSeparator = $2028, QCharParagraphSeparator = $2029, QCharByteOrderMark = $feff, QCharObjectReplacementCharacter = $fffc, QCharReplacementCharacter = $fffd, QCharByteOrderSwapped = $fffe ); QCharCombiningClass = ( //QChar::CombiningClass (2) QCharCombining_BelowLeftAttached = 200, QCharCombining_BelowAttached = 202, QCharCombining_BelowRightAttached = 204, QCharCombining_LeftAttached = 208, QCharCombining_RightAttached = 210, QCharCombining_AboveLeftAttached = 212, QCharCombining_AboveAttached = 214, QCharCombining_AboveRightAttached = 216, QCharCombining_BelowLeft = 218, QCharCombining_Below = 220, QCharCombining_BelowRight = 222, QCharCombining_Left = 224, QCharCombining_Right = 226, QCharCombining_AboveLeft = 228, QCharCombining_Above = 230, QCharCombining_AboveRight = 232, QCharCombining_DoubleBelow = 233, QCharCombining_DoubleAbove = 234, QCharCombining_IotaSubscript = 240 ); type QCharCategory = cardinal; // QChar::Category (4) const QCharNoCategory = 0 { $0 }; QCharMark_NonSpacing = 1 { $1 }; QCharMark_SpacingCombining = 2 { $2 }; QCharMark_Enclosing = 3 { $3 }; QCharNumber_DecimalDigit = 4 { $4 }; QCharNumber_Letter = 5 { $5 }; QCharNumber_Other = 6 { $6 }; QCharSeparator_Space = 7 { $7 }; QCharSeparator_Line = 8 { $8 }; QCharSeparator_Paragraph = 9 { $9 }; QCharOther_Control = 10 { $a }; QCharOther_Format = 11 { $b }; QCharOther_Surrogate = 12 { $c }; QCharOther_PrivateUse = 13 { $d }; QCharOther_NotAssigned = 14 { $e }; QCharLetter_Uppercase = 15 { $f }; QCharLetter_Lowercase = 16 { $10 }; QCharLetter_Titlecase = 17 { $11 }; QCharLetter_Modifier = 18 { $12 }; QCharLetter_Other = 19 { $13 }; QCharPunctuation_Connector = 20 { $14 }; QCharPunctuation_Dash = 21 { $15 }; QCharPunctuation_Open = 22 { $16 }; QCharPunctuation_Close = 23 { $17 }; QCharPunctuation_InitialQuote = 24 { $18 }; QCharPunctuation_FinalQuote = 25 { $19 }; QCharPunctuation_Other = 26 { $1a }; QCharSymbol_Math = 27 { $1b }; QCharSymbol_Currency = 28 { $1c }; QCharSymbol_Modifier = 29 { $1d }; QCharSymbol_Other = 30 { $1e }; QCharPunctuation_Dask = 21 { $15 }; function QChar_create(): QCharH; cdecl; external Qt4PasLib name 'QChar_create'; procedure QChar_destroy(handle: QCharH); cdecl; external Qt4PasLib name 'QChar_destroy'; function QChar_create(c: char): QCharH; cdecl; external Qt4PasLib name 'QChar_create2'; function QChar_create(c: char; r: char): QCharH; cdecl; external Qt4PasLib name 'QChar_create4'; function QChar_create(rc: Word): QCharH; cdecl; external Qt4PasLib name 'QChar_create5'; function QChar_create(rc: ShortInt): QCharH; cdecl; external Qt4PasLib name 'QChar_create6'; function QChar_create(rc: LongWord): QCharH; cdecl; external Qt4PasLib name 'QChar_create7'; function QChar_create(rc: Integer): QCharH; cdecl; external Qt4PasLib name 'QChar_create8'; function QChar_create(sc: QCharSpecialCharacter): QCharH; cdecl; external Qt4PasLib name 'QChar_create9'; function QChar_category(handle: QCharH): QCharCategory; cdecl; external Qt4PasLib name 'QChar_category'; function QChar_direction(handle: QCharH): QCharDirection; cdecl; external Qt4PasLib name 'QChar_direction'; function QChar_joining(handle: QCharH): QCharJoining; cdecl; external Qt4PasLib name 'QChar_joining'; function QChar_hasMirrored(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_hasMirrored'; function QChar_combiningClass(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_combiningClass'; procedure QChar_mirroredChar(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_mirroredChar'; procedure QChar_decomposition(handle: QCharH; retval: PWideString); cdecl; external Qt4PasLib name 'QChar_decomposition'; function QChar_decompositionTag(handle: QCharH): QCharDecomposition; cdecl; external Qt4PasLib name 'QChar_decompositionTag'; function QChar_digitValue(handle: QCharH): Integer; cdecl; external Qt4PasLib name 'QChar_digitValue'; procedure QChar_toLower(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toLower'; procedure QChar_toUpper(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toUpper'; procedure QChar_toTitleCase(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toTitleCase'; procedure QChar_toCaseFolded(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toCaseFolded'; function QChar_unicodeVersion(handle: QCharH): QCharUnicodeVersion; cdecl; external Qt4PasLib name 'QChar_unicodeVersion'; function QChar_toAscii(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_toAscii'; function QChar_toLatin1(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_toLatin1'; function QChar_unicode(handle: QCharH): Word; cdecl; external Qt4PasLib name 'QChar_unicode'; procedure QChar_fromAscii(retval: PWideChar; c: char); cdecl; external Qt4PasLib name 'QChar_fromAscii'; procedure QChar_fromLatin1(retval: PWideChar; c: char); cdecl; external Qt4PasLib name 'QChar_fromLatin1'; function QChar_isNull(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isNull'; function QChar_isPrint(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isPrint'; function QChar_isPunct(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isPunct'; function QChar_isSpace(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isSpace'; function QChar_isMark(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isMark'; function QChar_isLetter(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLetter'; function QChar_isNumber(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isNumber'; function QChar_isLetterOrNumber(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLetterOrNumber'; function QChar_isDigit(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isDigit'; function QChar_isSymbol(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isSymbol'; function QChar_isLower(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLower'; function QChar_isUpper(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isUpper'; function QChar_isTitleCase(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isTitleCase'; function QChar_isHighSurrogate(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isHighSurrogate'; function QChar_isLowSurrogate(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLowSurrogate'; function QChar_cell(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_cell'; function QChar_row(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_row'; procedure QChar_setCell(handle: QCharH; cell: char); cdecl; external Qt4PasLib name 'QChar_setCell'; procedure QChar_setRow(handle: QCharH; row: char); cdecl; external Qt4PasLib name 'QChar_setRow'; function QChar_surrogateToUcs4(high: Word; low: Word): LongWord; cdecl; external Qt4PasLib name 'QChar_surrogateToUcs4'; function QChar_surrogateToUcs4(high: PWideChar; low: PWideChar): LongWord; cdecl; external Qt4PasLib name 'QChar_surrogateToUcs42'; function QChar_highSurrogate(ucs4: LongWord): Word; cdecl; external Qt4PasLib name 'QChar_highSurrogate'; function QChar_lowSurrogate(ucs4: LongWord): Word; cdecl; external Qt4PasLib name 'QChar_lowSurrogate'; function QSize_create(): QSizeH; cdecl; external Qt4PasLib name 'QSize_create'; procedure QSize_destroy(handle: QSizeH); cdecl; external Qt4PasLib name 'QSize_destroy'; function QSize_create(w: Integer; h: Integer): QSizeH; cdecl; external Qt4PasLib name 'QSize_create2'; function QSize_isNull(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isNull'; function QSize_isEmpty(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isEmpty'; function QSize_isValid(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isValid'; function QSize_width(handle: QSizeH): Integer; cdecl; external Qt4PasLib name 'QSize_width'; function QSize_height(handle: QSizeH): Integer; cdecl; external Qt4PasLib name 'QSize_height'; procedure QSize_setWidth(handle: QSizeH; w: Integer); cdecl; external Qt4PasLib name 'QSize_setWidth'; procedure QSize_setHeight(handle: QSizeH; h: Integer); cdecl; external Qt4PasLib name 'QSize_setHeight'; procedure QSize_transpose(handle: QSizeH); cdecl; external Qt4PasLib name 'QSize_transpose'; procedure QSize_scale(handle: QSizeH; w: Integer; h: Integer; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSize_scale'; procedure QSize_scale(handle: QSizeH; s: PSize; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSize_scale2'; procedure QSize_expandedTo(handle: QSizeH; retval: PSize; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QSize_expandedTo'; procedure QSize_boundedTo(handle: QSizeH; retval: PSize; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QSize_boundedTo'; function QSize_rwidth(handle: QSizeH): PInteger; cdecl; external Qt4PasLib name 'QSize_rwidth'; function QSize_rheight(handle: QSizeH): PInteger; cdecl; external Qt4PasLib name 'QSize_rheight'; function QSizeF_create(): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create'; procedure QSizeF_destroy(handle: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_destroy'; function QSizeF_create(sz: PSize): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create2'; function QSizeF_create(w: qreal; h: qreal): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create3'; function QSizeF_isNull(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isNull'; function QSizeF_isEmpty(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isEmpty'; function QSizeF_isValid(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isValid'; function QSizeF_width(handle: QSizeFH): qreal; cdecl; external Qt4PasLib name 'QSizeF_width'; function QSizeF_height(handle: QSizeFH): qreal; cdecl; external Qt4PasLib name 'QSizeF_height'; procedure QSizeF_setWidth(handle: QSizeFH; w: qreal); cdecl; external Qt4PasLib name 'QSizeF_setWidth'; procedure QSizeF_setHeight(handle: QSizeFH; h: qreal); cdecl; external Qt4PasLib name 'QSizeF_setHeight'; procedure QSizeF_transpose(handle: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_transpose'; procedure QSizeF_scale(handle: QSizeFH; w: qreal; h: qreal; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSizeF_scale'; procedure QSizeF_scale(handle: QSizeFH; s: QSizeFH; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSizeF_scale2'; procedure QSizeF_expandedTo(handle: QSizeFH; retval: QSizeFH; AnonParam1: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_expandedTo'; procedure QSizeF_boundedTo(handle: QSizeFH; retval: QSizeFH; AnonParam1: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_boundedTo'; function QSizeF_rwidth(handle: QSizeFH): PQReal; cdecl; external Qt4PasLib name 'QSizeF_rwidth'; function QSizeF_rheight(handle: QSizeFH): PQReal; cdecl; external Qt4PasLib name 'QSizeF_rheight'; procedure QSizeF_toSize(handle: QSizeFH; retval: PSize); cdecl; external Qt4PasLib name 'QSizeF_toSize'; type QStringSplitBehavior = ( // QString::SplitBehavior (1) QStringKeepEmptyParts, QStringSkipEmptyParts ); QStringNormalizationForm = ( // QString::NormalizationForm (1) QStringNormalizationForm_D, QStringNormalizationForm_C, QStringNormalizationForm_KD, QStringNormalizationForm_KC ); type QStringSectionFlag = cardinal; // QString::SectionFlag QStringSectionFlags = QStringSectionFlag; //QFlags<> (3) const QStringSectionDefault = $00; QStringSectionSkipEmpty = $01; QStringSectionIncludeLeadingSep = $02; QStringSectionIncludeTrailingSep = $04; QStringSectionCaseInsensitiveSeps = $08; function QString_create(): QStringH; cdecl; external Qt4PasLib name 'QString_create'; procedure QString_destroy(handle: QStringH); cdecl; external Qt4PasLib name 'QString_destroy'; function QString_create(unicode: PWideChar; size: Integer): QStringH; cdecl; external Qt4PasLib name 'QString_create2'; function QString_create(c: PWideChar): QStringH; cdecl; external Qt4PasLib name 'QString_create3'; function QString_create(latin1: QLatin1StringH): QStringH; cdecl; external Qt4PasLib name 'QString_create5'; function QString_create(AnonParam1: PWideString): QStringH; cdecl; external Qt4PasLib name 'QString_create6'; function QString_size(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_size'; function QString_count(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_count'; function QString_length(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_length'; function QString_isEmpty(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isEmpty'; procedure QString_resize(handle: QStringH; size: Integer); cdecl; external Qt4PasLib name 'QString_resize'; procedure QString_fill(handle: QStringH; retval: PWideString; c: PWideChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fill'; procedure QString_truncate(handle: QStringH; pos: Integer); cdecl; external Qt4PasLib name 'QString_truncate'; procedure QString_chop(handle: QStringH; n: Integer); cdecl; external Qt4PasLib name 'QString_chop'; function QString_capacity(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_capacity'; procedure QString_reserve(handle: QStringH; size: Integer); cdecl; external Qt4PasLib name 'QString_reserve'; procedure QString_squeeze(handle: QStringH); cdecl; external Qt4PasLib name 'QString_squeeze'; function QString_unicode(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_unicode'; function QString_data(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_data'; function QString_constData(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_constData'; procedure QString_detach(handle: QStringH); cdecl; external Qt4PasLib name 'QString_detach'; function QString_isDetached(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isDetached'; procedure QString_clear(handle: QStringH); cdecl; external Qt4PasLib name 'QString_clear'; procedure QString_at(handle: QStringH; retval: PWideChar; i: Integer); cdecl; external Qt4PasLib name 'QString_at'; procedure QString_arg(handle: QStringH; retval: PWideString; a: int64; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg'; procedure QString_arg(handle: QStringH; retval: PWideString; a: qword; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg2'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Longword; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg4'; procedure QString_arg(handle: QStringH; retval: PWideString; a: ShortInt; fieldWidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg7'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Word; fieldWidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg8'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Double; fieldWidth: Integer; fmt: char; prec: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg9'; procedure QString_arg(handle: QStringH; retval: PWideString; a: char; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg10'; procedure QString_arg(handle: QStringH; retval: PWideString; a: PWideChar; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg11'; procedure QString_arg(handle: QStringH; retval: PWideString; a: PWideString; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg12'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString); cdecl; external Qt4PasLib name 'QString_arg13'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString); cdecl; external Qt4PasLib name 'QString_arg14'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString); cdecl; external Qt4PasLib name 'QString_arg15'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString); cdecl; external Qt4PasLib name 'QString_arg16'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString); cdecl; external Qt4PasLib name 'QString_arg17'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString); cdecl; external Qt4PasLib name 'QString_arg18'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString; a8: PWideString); cdecl; external Qt4PasLib name 'QString_arg19'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString; a8: PWideString; a9: PWideString); cdecl; external Qt4PasLib name 'QString_arg20'; function QString_indexOf(handle: QStringH; c: PWideChar; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf'; function QString_indexOf(handle: QStringH; s: PWideString; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf2'; function QString_indexOf(handle: QStringH; s: QLatin1StringH; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf3'; function QString_lastIndexOf(handle: QStringH; c: PWideChar; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf'; function QString_lastIndexOf(handle: QStringH; s: PWideString; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf2'; function QString_lastIndexOf(handle: QStringH; s: QLatin1StringH; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf3'; function QString_contains(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QString_contains'; function QString_contains(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QString_contains2'; function QString_count(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_count2'; function QString_count(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_count3'; function QString_indexOf(handle: QStringH; AnonParam1: QRegExpH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QString_indexOf4'; function QString_lastIndexOf(handle: QStringH; AnonParam1: QRegExpH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf4'; function QString_contains(handle: QStringH; rx: QRegExpH): boolean; cdecl; external Qt4PasLib name 'QString_contains3'; function QString_count(handle: QStringH; AnonParam1: QRegExpH): Integer; cdecl; external Qt4PasLib name 'QString_count4'; procedure QString_section(handle: QStringH; retval: PWideString; sep: PWideChar; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section'; procedure QString_section(handle: QStringH; retval: PWideString; in_sep: PWideString; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section2'; procedure QString_section(handle: QStringH; retval: PWideString; reg: QRegExpH; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section3'; procedure QString_left(handle: QStringH; retval: PWideString; n: Integer); cdecl; external Qt4PasLib name 'QString_left'; procedure QString_right(handle: QStringH; retval: PWideString; n: Integer); cdecl; external Qt4PasLib name 'QString_right'; procedure QString_mid(handle: QStringH; retval: PWideString; position: Integer; n: Integer = -1); cdecl; external Qt4PasLib name 'QString_mid'; function QString_startsWith(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith'; function QString_startsWith(handle: QStringH; s: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith2'; function QString_startsWith(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith3'; function QString_endsWith(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith'; function QString_endsWith(handle: QStringH; s: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith2'; function QString_endsWith(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith3'; procedure QString_leftJustified(handle: QStringH; retval: PWideString; width: Integer; fill: PWideChar; trunc: Boolean = False); cdecl; external Qt4PasLib name 'QString_leftJustified'; procedure QString_rightJustified(handle: QStringH; retval: PWideString; width: Integer; fill: PWideChar; trunc: Boolean = False); cdecl; external Qt4PasLib name 'QString_rightJustified'; procedure QString_toLower(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toLower'; procedure QString_toUpper(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toUpper'; procedure QString_toCaseFolded(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toCaseFolded'; procedure QString_trimmed(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_trimmed'; procedure QString_simplified(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_simplified'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; c: PWideChar); cdecl; external Qt4PasLib name 'QString_insert'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; uc: PWideChar; len: Integer); cdecl; external Qt4PasLib name 'QString_insert2'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QString_insert3'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_insert4'; procedure QString_append(handle: QStringH; retval: PWideString; c: PWideChar); cdecl; external Qt4PasLib name 'QString_append'; procedure QString_append(handle: QStringH; retval: PWideString; s: PWideString); cdecl; external Qt4PasLib name 'QString_append2'; procedure QString_append(handle: QStringH; retval: PWideString; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_append3'; procedure QString_prepend(handle: QStringH; retval: PWideString; c: PWideChar); cdecl; external Qt4PasLib name 'QString_prepend'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: PWideString); cdecl; external Qt4PasLib name 'QString_prepend2'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_prepend3'; procedure QString_remove(handle: QStringH; retval: PWideString; i: Integer; len: Integer); cdecl; external Qt4PasLib name 'QString_remove'; procedure QString_remove(handle: QStringH; retval: PWideString; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_remove2'; procedure QString_remove(handle: QStringH; retval: PWideString; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_remove3'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; after: PWideChar); cdecl; external Qt4PasLib name 'QString_replace'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; s: PWideChar; slen: Integer); cdecl; external Qt4PasLib name 'QString_replace2'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; after: PWideString); cdecl; external Qt4PasLib name 'QString_replace3'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideChar; after: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace4'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideChar; blen: Integer; after: PWideChar; alen: Integer; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace5'; procedure QString_replace(handle: QStringH; retval: PWideString; before: QLatin1StringH; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace6'; procedure QString_replace(handle: QStringH; retval: PWideString; before: QLatin1StringH; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace7'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideString; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace8'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideString; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace9'; procedure QString_replace(handle: QStringH; retval: PWideString; c: PWideChar; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace10'; procedure QString_replace(handle: QStringH; retval: PWideString; c: PWideChar; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace11'; procedure QString_replace(handle: QStringH; retval: PWideString; rx: QRegExpH; after: PWideString); cdecl; external Qt4PasLib name 'QString_replace12'; procedure QString_remove(handle: QStringH; retval: PWideString; rx: QRegExpH); cdecl; external Qt4PasLib name 'QString_remove4'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: PWideString; behavior: QStringSplitBehavior = QStringKeepEmptyParts; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_split'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: PWideChar; behavior: QStringSplitBehavior = QStringKeepEmptyParts; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_split2'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: QRegExpH; behavior: QStringSplitBehavior = QStringKeepEmptyParts); cdecl; external Qt4PasLib name 'QString_split3'; procedure QString_normalized(handle: QStringH; retval: PWideString; mode: QStringNormalizationForm); cdecl; external Qt4PasLib name 'QString_normalized'; procedure QString_normalized(handle: QStringH; retval: PWideString; mode: QStringNormalizationForm; version: QCharUnicodeVersion); cdecl; external Qt4PasLib name 'QString_normalized2'; procedure QString_repeated(handle: QStringH; retval: PWideString; times: Integer); cdecl; external Qt4PasLib name 'QString_repeated'; function QString_utf16(handle: QStringH): PWord; cdecl; external Qt4PasLib name 'QString_utf16'; procedure QString_toAscii(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toAscii'; procedure QString_toLatin1(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toLatin1'; procedure QString_toUtf8(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toUtf8'; procedure QString_toLocal8Bit(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toLocal8Bit'; procedure QString_fromAscii(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromAscii'; procedure QString_fromLatin1(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromLatin1'; procedure QString_fromUtf8(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUtf8'; procedure QString_fromLocal8Bit(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromLocal8Bit'; procedure QString_fromUtf16(retval: PWideString; AnonParam1: PWord; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUtf16'; procedure QString_fromUcs4(retval: PWideString; AnonParam1: PLongWord; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUcs4'; procedure QString_fromRawData(retval: PWideString; AnonParam1: PWideChar; size: Integer); cdecl; external Qt4PasLib name 'QString_fromRawData'; function QString_toWCharArray(handle: QStringH; _array: PWideChar): Integer; cdecl; external Qt4PasLib name 'QString_toWCharArray'; procedure QString_fromWCharArray(retval: PWideString; AnonParam1: PWideChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromWCharArray'; procedure QString_setUnicode(handle: QStringH; retval: PWideString; unicode: PWideChar; size: Integer); cdecl; external Qt4PasLib name 'QString_setUnicode'; procedure QString_setUtf16(handle: QStringH; retval: PWideString; utf16: PWord; size: Integer); cdecl; external Qt4PasLib name 'QString_setUtf16'; function QString_compare(handle: QStringH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_compare'; function QString_compare(handle: QStringH; s: PWideString; cs: QtCaseSensitivity): Integer; cdecl; external Qt4PasLib name 'QString_compare2'; function QString_compare(handle: QStringH; other: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare3'; function QString_compare(s1: PWideString; s2: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_compare4'; function QString_compare(s1: PWideString; s2: PWideString; cs: QtCaseSensitivity): Integer; cdecl; external Qt4PasLib name 'QString_compare5'; function QString_compare(s1: PWideString; s2: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare6'; function QString_compare(s1: QLatin1StringH; s2: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare7'; function QString_localeAwareCompare(handle: QStringH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_localeAwareCompare'; function QString_localeAwareCompare(s1: PWideString; s2: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_localeAwareCompare2'; function QString_toShort(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): ShortInt; cdecl; external Qt4PasLib name 'QString_toShort'; function QString_toUShort(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Word; cdecl; external Qt4PasLib name 'QString_toUShort'; function QString_toInt(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Integer; cdecl; external Qt4PasLib name 'QString_toInt'; function QString_toUInt(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): LongWord; cdecl; external Qt4PasLib name 'QString_toUInt'; function QString_toLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Long; cdecl; external Qt4PasLib name 'QString_toLong'; function QString_toULong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Longword; cdecl; external Qt4PasLib name 'QString_toULong'; function QString_toLongLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): int64; cdecl; external Qt4PasLib name 'QString_toLongLong'; function QString_toULongLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): qword; cdecl; external Qt4PasLib name 'QString_toULongLong'; function QString_toFloat(handle: QStringH; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QString_toFloat'; function QString_toDouble(handle: QStringH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QString_toDouble'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: ShortInt; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Word; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum2'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum3'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum4'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum7'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum8'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Single; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_setNum9'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_setNum10'; procedure QString_number(retval: PWideString; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number'; procedure QString_number(retval: PWideString; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number2'; procedure QString_number(retval: PWideString; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number5'; procedure QString_number(retval: PWideString; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number6'; procedure QString_number(retval: PWideString; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_number7'; function QString_create(ch: PAnsiChar): QStringH; cdecl; external Qt4PasLib name 'QString_create7'; function QString_create(a: QByteArrayH): QStringH; cdecl; external Qt4PasLib name 'QString_create8'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: PAnsiChar); cdecl; external Qt4PasLib name 'QString_prepend4'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: QByteArrayH); cdecl; external Qt4PasLib name 'QString_prepend5'; procedure QString_append(handle: QStringH; retval: PWideString; s: PAnsiChar); cdecl; external Qt4PasLib name 'QString_append4'; procedure QString_append(handle: QStringH; retval: PWideString; s: QByteArrayH); cdecl; external Qt4PasLib name 'QString_append5'; procedure QString_push_back(handle: QStringH; c: PWideChar); cdecl; external Qt4PasLib name 'QString_push_back'; procedure QString_push_back(handle: QStringH; s: PWideString); cdecl; external Qt4PasLib name 'QString_push_back2'; procedure QString_push_front(handle: QStringH; c: PWideChar); cdecl; external Qt4PasLib name 'QString_push_front'; procedure QString_push_front(handle: QStringH; s: PWideString); cdecl; external Qt4PasLib name 'QString_push_front2'; function QString_isNull(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isNull'; function QString_isSimpleText(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isSimpleText'; function QString_isRightToLeft(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isRightToLeft'; function QLatin1String_create(s: PAnsiChar): QLatin1StringH; cdecl; external Qt4PasLib name 'QLatin1String_create'; procedure QLatin1String_destroy(handle: QLatin1StringH); cdecl; external Qt4PasLib name 'QLatin1String_destroy'; function QLatin1String_latin1(handle: QLatin1StringH): PAnsiChar; cdecl; external Qt4PasLib name 'QLatin1String_latin1'; function QStringList_create(): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create'; procedure QStringList_destroy(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_destroy'; function QStringList_create(i: PWideString): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create2'; function QStringList_create(l: QStringListH): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create3'; procedure QStringList_sort(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_sort'; function QStringList_removeDuplicates(handle: QStringListH): Integer; cdecl; external Qt4PasLib name 'QStringList_removeDuplicates'; procedure QStringList_join(handle: QStringListH; retval: PWideString; sep: PWideString); cdecl; external Qt4PasLib name 'QStringList_join'; procedure QStringList_filter(handle: QStringListH; retval: QStringListH; str: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QStringList_filter'; function QStringList_contains(handle: QStringListH; str: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QStringList_contains'; function QStringList_replaceInStrings(handle: QStringListH; before: PWideString; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): QStringListH; cdecl; external Qt4PasLib name 'QStringList_replaceInStrings'; procedure QStringList_filter(handle: QStringListH; retval: QStringListH; rx: QRegExpH); cdecl; external Qt4PasLib name 'QStringList_filter2'; function QStringList_replaceInStrings(handle: QStringListH; rx: QRegExpH; after: PWideString): QStringListH; cdecl; external Qt4PasLib name 'QStringList_replaceInStrings2'; function QStringList_indexOf(handle: QStringListH; rx: QRegExpH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStringList_indexOf'; function QStringList_lastIndexOf(handle: QStringListH; rx: QRegExpH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QStringList_lastIndexOf'; function QStringList_size(handle: QStringListH): Integer; cdecl; external Qt4PasLib name 'QStringList_size'; function QStringList_isEmpty(handle: QStringListH): Boolean; cdecl; external Qt4PasLib name 'QStringList_isEmpty'; procedure QStringList_clear(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_clear'; procedure QStringList_at(handle: QStringListH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QStringList_at'; procedure QStringList_append(handle: QStringListH; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_append'; procedure QStringList_prepend(handle: QStringListH; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_prepend'; procedure QStringList_insert(handle: QStringListH; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_insert'; procedure QStringList_replace(handle: QStringListH; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_replace'; procedure QStringList_removeAt(handle: QStringListH; i: Integer); cdecl; external Qt4PasLib name 'QStringList_removeAt'; function QStringList_removeAll(handle: QStringListH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QStringList_removeAll'; procedure QStringList_takeAt(handle: QStringListH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QStringList_takeAt'; procedure QStringList_takeFirst(handle: QStringListH; retval: PWideString); cdecl; external Qt4PasLib name 'QStringList_takeFirst'; procedure QStringList_takeLast(handle: QStringListH; retval: PWideString); cdecl; external Qt4PasLib name 'QStringList_takeLast'; procedure QStringList_move(handle: QStringListH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QStringList_move'; procedure QStringList_swap(handle: QStringListH; i: Integer; j: Integer); cdecl; external Qt4PasLib name 'QStringList_swap'; function QRect_create(): QRectH; cdecl; external Qt4PasLib name 'QRect_create'; procedure QRect_destroy(handle: QRectH); cdecl; external Qt4PasLib name 'QRect_destroy'; function QRect_create(topleft: PQtPoint; bottomright: PQtPoint): QRectH; cdecl; external Qt4PasLib name 'QRect_create2'; function QRect_create(topleft: PQtPoint; size: PSize): QRectH; cdecl; external Qt4PasLib name 'QRect_create3'; function QRect_create(left: Integer; top: Integer; width: Integer; height: Integer): QRectH; cdecl; external Qt4PasLib name 'QRect_create4'; function QRect_isNull(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isNull'; function QRect_isEmpty(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isEmpty'; function QRect_isValid(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isValid'; function QRect_left(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_left'; function QRect_top(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_top'; function QRect_right(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_right'; function QRect_bottom(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_bottom'; procedure QRect_normalized(handle: QRectH; retval: PRect); cdecl; external Qt4PasLib name 'QRect_normalized'; function QRect_x(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_x'; function QRect_y(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_y'; procedure QRect_setLeft(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setLeft'; procedure QRect_setTop(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setTop'; procedure QRect_setRight(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setRight'; procedure QRect_setBottom(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setBottom'; procedure QRect_setX(handle: QRectH; x: Integer); cdecl; external Qt4PasLib name 'QRect_setX'; procedure QRect_setY(handle: QRectH; y: Integer); cdecl; external Qt4PasLib name 'QRect_setY'; procedure QRect_setTopLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setTopLeft'; procedure QRect_setBottomRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setBottomRight'; procedure QRect_setTopRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setTopRight'; procedure QRect_setBottomLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setBottomLeft'; procedure QRect_topLeft(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_topLeft'; procedure QRect_bottomRight(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_bottomRight'; procedure QRect_topRight(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_topRight'; procedure QRect_bottomLeft(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_bottomLeft'; procedure QRect_center(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_center'; procedure QRect_moveLeft(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveLeft'; procedure QRect_moveTop(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveTop'; procedure QRect_moveRight(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveRight'; procedure QRect_moveBottom(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveBottom'; procedure QRect_moveTopLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTopLeft'; procedure QRect_moveBottomRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveBottomRight'; procedure QRect_moveTopRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTopRight'; procedure QRect_moveBottomLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveBottomLeft'; procedure QRect_moveCenter(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveCenter'; procedure QRect_translate(handle: QRectH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRect_translate'; procedure QRect_translate(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_translate2'; procedure QRect_translated(handle: QRectH; retval: PRect; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRect_translated'; procedure QRect_translated(handle: QRectH; retval: PRect; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_translated2'; procedure QRect_moveTo(handle: QRectH; x: Integer; t: Integer); cdecl; external Qt4PasLib name 'QRect_moveTo'; procedure QRect_moveTo(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTo2'; procedure QRect_setRect(handle: QRectH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRect_setRect'; procedure QRect_getRect(handle: QRectH; x: PInteger; y: PInteger; w: PInteger; h: PInteger); cdecl; external Qt4PasLib name 'QRect_getRect'; procedure QRect_setCoords(handle: QRectH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_setCoords'; procedure QRect_getCoords(handle: QRectH; x1: PInteger; y1: PInteger; x2: PInteger; y2: PInteger); cdecl; external Qt4PasLib name 'QRect_getCoords'; procedure QRect_adjust(handle: QRectH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_adjust'; procedure QRect_adjusted(handle: QRectH; retval: PRect; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_adjusted'; procedure QRect_size(handle: QRectH; retval: PSize); cdecl; external Qt4PasLib name 'QRect_size'; function QRect_width(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_width'; function QRect_height(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_height'; procedure QRect_setWidth(handle: QRectH; w: Integer); cdecl; external Qt4PasLib name 'QRect_setWidth'; procedure QRect_setHeight(handle: QRectH; h: Integer); cdecl; external Qt4PasLib name 'QRect_setHeight'; procedure QRect_setSize(handle: QRectH; s: PSize); cdecl; external Qt4PasLib name 'QRect_setSize'; function QRect_contains(handle: QRectH; p: PQtPoint; proper: Boolean = False): Boolean; cdecl; external Qt4PasLib name 'QRect_contains'; function QRect_contains(handle: QRectH; x: Integer; y: Integer): Boolean; cdecl; external Qt4PasLib name 'QRect_contains2'; function QRect_contains(handle: QRectH; x: Integer; y: Integer; proper: Boolean): Boolean; cdecl; external Qt4PasLib name 'QRect_contains3'; function QRect_contains(handle: QRectH; r: PRect; proper: Boolean = False): Boolean; cdecl; external Qt4PasLib name 'QRect_contains4'; procedure QRect_unite(handle: QRectH; retval: PRect; r: PRect); cdecl; external Qt4PasLib name 'QRect_unite'; procedure QRect_united(handle: QRectH; retval: PRect; other: PRect); cdecl; external Qt4PasLib name 'QRect_united'; procedure QRect_intersect(handle: QRectH; retval: PRect; r: PRect); cdecl; external Qt4PasLib name 'QRect_intersect'; procedure QRect_intersected(handle: QRectH; retval: PRect; other: PRect); cdecl; external Qt4PasLib name 'QRect_intersected'; function QRect_intersects(handle: QRectH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRect_intersects'; function QRectF_create(): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create'; procedure QRectF_destroy(handle: QRectFH); cdecl; external Qt4PasLib name 'QRectF_destroy'; function QRectF_create(topleft: PQtPointF; size: QSizeFH): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create2'; function QRectF_create(topleft: PQtPointF; bottomRight: PQtPointF): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create3'; function QRectF_create(left: qreal; top: qreal; width: qreal; height: qreal): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create4'; function QRectF_create(rect: PRect): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create5'; function QRectF_isNull(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isNull'; function QRectF_isEmpty(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isEmpty'; function QRectF_isValid(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isValid'; procedure QRectF_normalized(handle: QRectFH; retval: QRectFH); cdecl; external Qt4PasLib name 'QRectF_normalized'; function QRectF_left(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_left'; function QRectF_top(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_top'; function QRectF_right(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_right'; function QRectF_bottom(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_bottom'; function QRectF_x(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_x'; function QRectF_y(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_y'; procedure QRectF_setLeft(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setLeft'; procedure QRectF_setTop(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setTop'; procedure QRectF_setRight(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setRight'; procedure QRectF_setBottom(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setBottom'; procedure QRectF_setX(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setX'; procedure QRectF_setY(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setY'; procedure QRectF_topLeft(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_topLeft'; procedure QRectF_bottomRight(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_bottomRight'; procedure QRectF_topRight(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_topRight'; procedure QRectF_bottomLeft(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_bottomLeft'; procedure QRectF_center(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_center'; procedure QRectF_setTopLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setTopLeft'; procedure QRectF_setBottomRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setBottomRight'; procedure QRectF_setTopRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setTopRight'; procedure QRectF_setBottomLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setBottomLeft'; procedure QRectF_moveLeft(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveLeft'; procedure QRectF_moveTop(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveTop'; procedure QRectF_moveRight(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveRight'; procedure QRectF_moveBottom(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveBottom'; procedure QRectF_moveTopLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTopLeft'; procedure QRectF_moveBottomRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveBottomRight'; procedure QRectF_moveTopRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTopRight'; procedure QRectF_moveBottomLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveBottomLeft'; procedure QRectF_moveCenter(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveCenter'; procedure QRectF_translate(handle: QRectFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QRectF_translate'; procedure QRectF_translate(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_translate2'; procedure QRectF_translated(handle: QRectFH; retval: QRectFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QRectF_translated'; procedure QRectF_translated(handle: QRectFH; retval: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_translated2'; procedure QRectF_moveTo(handle: QRectFH; x: qreal; t: qreal); cdecl; external Qt4PasLib name 'QRectF_moveTo'; procedure QRectF_moveTo(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTo2'; procedure QRectF_setRect(handle: QRectFH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QRectF_setRect'; procedure QRectF_getRect(handle: QRectFH; x: PQReal; y: PQReal; w: PQReal; h: PQReal); cdecl; external Qt4PasLib name 'QRectF_getRect'; procedure QRectF_setCoords(handle: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_setCoords'; procedure QRectF_getCoords(handle: QRectFH; x1: PQReal; y1: PQReal; x2: PQReal; y2: PQReal); cdecl; external Qt4PasLib name 'QRectF_getCoords'; procedure QRectF_adjust(handle: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_adjust'; procedure QRectF_adjusted(handle: QRectFH; retval: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_adjusted'; procedure QRectF_size(handle: QRectFH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QRectF_size'; function QRectF_width(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_width'; function QRectF_height(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_height'; procedure QRectF_setWidth(handle: QRectFH; w: qreal); cdecl; external Qt4PasLib name 'QRectF_setWidth'; procedure QRectF_setHeight(handle: QRectFH; h: qreal); cdecl; external Qt4PasLib name 'QRectF_setHeight'; procedure QRectF_setSize(handle: QRectFH; s: QSizeFH); cdecl; external Qt4PasLib name 'QRectF_setSize'; function QRectF_contains(handle: QRectFH; p: PQtPointF): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains'; function QRectF_contains(handle: QRectFH; x: qreal; y: qreal): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains2'; function QRectF_contains(handle: QRectFH; r: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains3'; procedure QRectF_unite(handle: QRectFH; retval: QRectFH; r: QRectFH); cdecl; external Qt4PasLib name 'QRectF_unite'; procedure QRectF_united(handle: QRectFH; retval: QRectFH; other: QRectFH); cdecl; external Qt4PasLib name 'QRectF_united'; procedure QRectF_intersect(handle: QRectFH; retval: QRectFH; r: QRectFH); cdecl; external Qt4PasLib name 'QRectF_intersect'; procedure QRectF_intersected(handle: QRectFH; retval: QRectFH; other: QRectFH); cdecl; external Qt4PasLib name 'QRectF_intersected'; function QRectF_intersects(handle: QRectFH; r: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_intersects'; procedure QRectF_toRect(handle: QRectFH; retval: PRect); cdecl; external Qt4PasLib name 'QRectF_toRect'; procedure QRectF_toAlignedRect(handle: QRectFH; retval: PRect); cdecl; external Qt4PasLib name 'QRectF_toAlignedRect'; type QDateMonthNameType = ( //QDate::MonthNameType (2) QDateDateFormat = 0, QDateStandaloneFormat ); function QDate_create(): QDateH; cdecl; external Qt4PasLib name 'QDate_create'; procedure QDate_destroy(handle: QDateH); cdecl; external Qt4PasLib name 'QDate_destroy'; function QDate_create(y: Integer; m: Integer; d: Integer): QDateH; cdecl; external Qt4PasLib name 'QDate_create2'; function QDate_isNull(handle: QDateH): Boolean; cdecl; external Qt4PasLib name 'QDate_isNull'; function QDate_isValid(handle: QDateH): Boolean; cdecl; external Qt4PasLib name 'QDate_isValid'; function QDate_year(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_year'; function QDate_month(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_month'; function QDate_day(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_day'; function QDate_dayOfWeek(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_dayOfWeek'; function QDate_dayOfYear(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_dayOfYear'; function QDate_daysInMonth(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysInMonth'; function QDate_daysInYear(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysInYear'; function QDate_weekNumber(handle: QDateH; yearNum: PInteger = nil): Integer; cdecl; external Qt4PasLib name 'QDate_weekNumber'; procedure QDate_shortMonthName(retval: PWideString; month: Integer); cdecl; external Qt4PasLib name 'QDate_shortMonthName'; procedure QDate_shortMonthName(retval: PWideString; month: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_shortMonthName2'; procedure QDate_shortDayName(retval: PWideString; weekday: Integer); cdecl; external Qt4PasLib name 'QDate_shortDayName'; procedure QDate_shortDayName(retval: PWideString; weekday: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_shortDayName2'; procedure QDate_longMonthName(retval: PWideString; month: Integer); cdecl; external Qt4PasLib name 'QDate_longMonthName'; procedure QDate_longMonthName(retval: PWideString; month: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_longMonthName2'; procedure QDate_longDayName(retval: PWideString; weekday: Integer); cdecl; external Qt4PasLib name 'QDate_longDayName'; procedure QDate_longDayName(retval: PWideString; weekday: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_longDayName2'; procedure QDate_toString(handle: QDateH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDate_toString'; procedure QDate_toString(handle: QDateH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDate_toString2'; function QDate_setYMD(handle: QDateH; y: Integer; m: Integer; d: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_setYMD'; function QDate_setDate(handle: QDateH; year: Integer; month: Integer; day: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_setDate'; procedure QDate_getDate(handle: QDateH; year: PInteger; month: PInteger; day: PInteger); cdecl; external Qt4PasLib name 'QDate_getDate'; procedure QDate_addDays(handle: QDateH; retval: QDateH; days: Integer); cdecl; external Qt4PasLib name 'QDate_addDays'; procedure QDate_addMonths(handle: QDateH; retval: QDateH; months: Integer); cdecl; external Qt4PasLib name 'QDate_addMonths'; procedure QDate_addYears(handle: QDateH; retval: QDateH; years: Integer); cdecl; external Qt4PasLib name 'QDate_addYears'; function QDate_daysTo(handle: QDateH; AnonParam1: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysTo'; procedure QDate_currentDate(retval: QDateH); cdecl; external Qt4PasLib name 'QDate_currentDate'; procedure QDate_fromString(retval: QDateH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDate_fromString'; procedure QDate_fromString(retval: QDateH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDate_fromString2'; function QDate_isValid(y: Integer; m: Integer; d: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_isValid2'; function QDate_isLeapYear(year: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_isLeapYear'; function QDate_gregorianToJulian(y: Integer; m: Integer; d: Integer): LongWord; cdecl; external Qt4PasLib name 'QDate_gregorianToJulian'; procedure QDate_julianToGregorian(jd: LongWord; y: PInteger; m: PInteger; d: PInteger); cdecl; external Qt4PasLib name 'QDate_julianToGregorian'; procedure QDate_fromJulianDay(retval: QDateH; jd: Integer); cdecl; external Qt4PasLib name 'QDate_fromJulianDay'; function QDate_toJulianDay(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_toJulianDay'; function QTime_create(): QTimeH; cdecl; external Qt4PasLib name 'QTime_create'; procedure QTime_destroy(handle: QTimeH); cdecl; external Qt4PasLib name 'QTime_destroy'; function QTime_create(h: Integer; m: Integer; s: Integer = 0; ms: Integer = 0): QTimeH; cdecl; external Qt4PasLib name 'QTime_create2'; function QTime_isNull(handle: QTimeH): Boolean; cdecl; external Qt4PasLib name 'QTime_isNull'; function QTime_isValid(handle: QTimeH): Boolean; cdecl; external Qt4PasLib name 'QTime_isValid'; function QTime_hour(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_hour'; function QTime_minute(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_minute'; function QTime_second(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_second'; function QTime_msec(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_msec'; procedure QTime_toString(handle: QTimeH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QTime_toString'; procedure QTime_toString(handle: QTimeH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QTime_toString2'; function QTime_setHMS(handle: QTimeH; h: Integer; m: Integer; s: Integer; ms: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QTime_setHMS'; procedure QTime_addSecs(handle: QTimeH; retval: QTimeH; secs: Integer); cdecl; external Qt4PasLib name 'QTime_addSecs'; function QTime_secsTo(handle: QTimeH; AnonParam1: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_secsTo'; procedure QTime_addMSecs(handle: QTimeH; retval: QTimeH; ms: Integer); cdecl; external Qt4PasLib name 'QTime_addMSecs'; function QTime_msecsTo(handle: QTimeH; AnonParam1: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_msecsTo'; procedure QTime_currentTime(retval: QTimeH); cdecl; external Qt4PasLib name 'QTime_currentTime'; procedure QTime_fromString(retval: QTimeH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QTime_fromString'; procedure QTime_fromString(retval: QTimeH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QTime_fromString2'; function QTime_isValid(h: Integer; m: Integer; s: Integer; ms: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QTime_isValid2'; procedure QTime_start(handle: QTimeH); cdecl; external Qt4PasLib name 'QTime_start'; function QTime_restart(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_restart'; function QTime_elapsed(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_elapsed'; function QDateTime_create(): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create'; procedure QDateTime_destroy(handle: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_destroy'; function QDateTime_create(AnonParam1: QDateH): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create2'; function QDateTime_create(AnonParam1: QDateH; AnonParam2: QTimeH; spec: QtTimeSpec = QtLocalTime): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create3'; function QDateTime_create(other: QDateTimeH): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create4'; function QDateTime_isNull(handle: QDateTimeH): Boolean; cdecl; external Qt4PasLib name 'QDateTime_isNull'; function QDateTime_isValid(handle: QDateTimeH): Boolean; cdecl; external Qt4PasLib name 'QDateTime_isValid'; procedure QDateTime_date(handle: QDateTimeH; retval: QDateH); cdecl; external Qt4PasLib name 'QDateTime_date'; procedure QDateTime_time(handle: QDateTimeH; retval: QTimeH); cdecl; external Qt4PasLib name 'QDateTime_time'; function QDateTime_timeSpec(handle: QDateTimeH): QtTimeSpec; cdecl; external Qt4PasLib name 'QDateTime_timeSpec'; function QDateTime_toTime_t(handle: QDateTimeH): LongWord; cdecl; external Qt4PasLib name 'QDateTime_toTime_t'; procedure QDateTime_setDate(handle: QDateTimeH; date: QDateH); cdecl; external Qt4PasLib name 'QDateTime_setDate'; procedure QDateTime_setTime(handle: QDateTimeH; time: QTimeH); cdecl; external Qt4PasLib name 'QDateTime_setTime'; procedure QDateTime_setTimeSpec(handle: QDateTimeH; spec: QtTimeSpec); cdecl; external Qt4PasLib name 'QDateTime_setTimeSpec'; procedure QDateTime_setTime_t(handle: QDateTimeH; secsSince1Jan1970UTC: LongWord); cdecl; external Qt4PasLib name 'QDateTime_setTime_t'; procedure QDateTime_toString(handle: QDateTimeH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDateTime_toString'; procedure QDateTime_toString(handle: QDateTimeH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDateTime_toString2'; procedure QDateTime_addDays(handle: QDateTimeH; retval: QDateTimeH; days: Integer); cdecl; external Qt4PasLib name 'QDateTime_addDays'; procedure QDateTime_addMonths(handle: QDateTimeH; retval: QDateTimeH; months: Integer); cdecl; external Qt4PasLib name 'QDateTime_addMonths'; procedure QDateTime_addYears(handle: QDateTimeH; retval: QDateTimeH; years: Integer); cdecl; external Qt4PasLib name 'QDateTime_addYears'; procedure QDateTime_addSecs(handle: QDateTimeH; retval: QDateTimeH; secs: Integer); cdecl; external Qt4PasLib name 'QDateTime_addSecs'; procedure QDateTime_addMSecs(handle: QDateTimeH; retval: QDateTimeH; msecs: int64); cdecl; external Qt4PasLib name 'QDateTime_addMSecs'; procedure QDateTime_toTimeSpec(handle: QDateTimeH; retval: QDateTimeH; spec: QtTimeSpec); cdecl; external Qt4PasLib name 'QDateTime_toTimeSpec'; procedure QDateTime_toLocalTime(handle: QDateTimeH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_toLocalTime'; procedure QDateTime_toUTC(handle: QDateTimeH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_toUTC'; function QDateTime_daysTo(handle: QDateTimeH; AnonParam1: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_daysTo'; function QDateTime_secsTo(handle: QDateTimeH; AnonParam1: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_secsTo'; procedure QDateTime_setUtcOffset(handle: QDateTimeH; seconds: Integer); cdecl; external Qt4PasLib name 'QDateTime_setUtcOffset'; function QDateTime_utcOffset(handle: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_utcOffset'; procedure QDateTime_currentDateTime(retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_currentDateTime'; procedure QDateTime_fromString(retval: QDateTimeH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDateTime_fromString'; procedure QDateTime_fromString(retval: QDateTimeH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDateTime_fromString2'; procedure QDateTime_fromTime_t(retval: QDateTimeH; secsSince1Jan1970UTC: LongWord); cdecl; external Qt4PasLib name 'QDateTime_fromTime_t'; function QByteArray_create(): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create'; procedure QByteArray_destroy(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_destroy'; function QByteArray_create(AnonParam1: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create2'; function QByteArray_create(AnonParam1: PAnsiChar; size: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create3'; function QByteArray_create(size: Integer; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create4'; function QByteArray_create(AnonParam1: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create5'; function QByteArray_size(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_size'; function QByteArray_isEmpty(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isEmpty'; procedure QByteArray_resize(handle: QByteArrayH; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_resize'; function QByteArray_fill(handle: QByteArrayH; c: char; size: Integer = -1): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_fill'; function QByteArray_capacity(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_capacity'; procedure QByteArray_reserve(handle: QByteArrayH; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_reserve'; procedure QByteArray_squeeze(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_squeeze'; function QByteArray_data(handle: QByteArrayH): PAnsiChar; cdecl; external Qt4PasLib name 'QByteArray_data'; function QByteArray_constData(handle: QByteArrayH): PAnsiChar; cdecl; external Qt4PasLib name 'QByteArray_constData'; procedure QByteArray_detach(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_detach'; function QByteArray_isDetached(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isDetached'; procedure QByteArray_clear(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_clear'; function QByteArray_at(handle: QByteArrayH; i: Integer): char; cdecl; external Qt4PasLib name 'QByteArray_at'; function QByteArray_indexOf(handle: QByteArrayH; c: char; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf'; function QByteArray_indexOf(handle: QByteArrayH; c: PAnsiChar; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf2'; function QByteArray_indexOf(handle: QByteArrayH; a: QByteArrayH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf3'; function QByteArray_lastIndexOf(handle: QByteArrayH; c: char; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf'; function QByteArray_lastIndexOf(handle: QByteArrayH; c: PAnsiChar; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf2'; function QByteArray_lastIndexOf(handle: QByteArrayH; a: QByteArrayH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf3'; function QByteArray_contains(handle: QByteArrayH; c: char): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains'; function QByteArray_contains(handle: QByteArrayH; a: PAnsiChar): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains2'; function QByteArray_contains(handle: QByteArrayH; a: QByteArrayH): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains3'; function QByteArray_count(handle: QByteArrayH; c: char): Integer; cdecl; external Qt4PasLib name 'QByteArray_count'; function QByteArray_count(handle: QByteArrayH; a: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QByteArray_count2'; function QByteArray_count(handle: QByteArrayH; a: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_count3'; procedure QByteArray_left(handle: QByteArrayH; retval: QByteArrayH; len: Integer); cdecl; external Qt4PasLib name 'QByteArray_left'; procedure QByteArray_right(handle: QByteArrayH; retval: QByteArrayH; len: Integer); cdecl; external Qt4PasLib name 'QByteArray_right'; procedure QByteArray_mid(handle: QByteArrayH; retval: QByteArrayH; index: Integer; len: Integer = -1); cdecl; external Qt4PasLib name 'QByteArray_mid'; function QByteArray_startsWith(handle: QByteArrayH; a: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith'; function QByteArray_startsWith(handle: QByteArrayH; c: char): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith2'; function QByteArray_startsWith(handle: QByteArrayH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith3'; function QByteArray_endsWith(handle: QByteArrayH; a: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith'; function QByteArray_endsWith(handle: QByteArrayH; c: char): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith2'; function QByteArray_endsWith(handle: QByteArrayH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith3'; procedure QByteArray_truncate(handle: QByteArrayH; pos: Integer); cdecl; external Qt4PasLib name 'QByteArray_truncate'; procedure QByteArray_chop(handle: QByteArrayH; n: Integer); cdecl; external Qt4PasLib name 'QByteArray_chop'; procedure QByteArray_toLower(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toLower'; procedure QByteArray_toUpper(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toUpper'; procedure QByteArray_trimmed(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_trimmed'; procedure QByteArray_simplified(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_simplified'; procedure QByteArray_leftJustified(handle: QByteArrayH; retval: QByteArrayH; width: Integer; fill: char; truncate: Boolean = False); cdecl; external Qt4PasLib name 'QByteArray_leftJustified'; procedure QByteArray_rightJustified(handle: QByteArrayH; retval: QByteArrayH; width: Integer; fill: char; truncate: Boolean = False); cdecl; external Qt4PasLib name 'QByteArray_rightJustified'; function QByteArray_prepend(handle: QByteArrayH; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend'; function QByteArray_prepend(handle: QByteArrayH; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend2'; function QByteArray_prepend(handle: QByteArrayH; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend3'; function QByteArray_append(handle: QByteArrayH; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append'; function QByteArray_append(handle: QByteArrayH; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append2'; function QByteArray_append(handle: QByteArrayH; s: PAnsiChar; len: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append3'; function QByteArray_append(handle: QByteArrayH; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append4'; function QByteArray_insert(handle: QByteArrayH; i: Integer; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert'; function QByteArray_insert(handle: QByteArrayH; i: Integer; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert2'; function QByteArray_insert(handle: QByteArrayH; i: Integer; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert3'; function QByteArray_remove(handle: QByteArrayH; index: Integer; len: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_remove'; function QByteArray_replace(handle: QByteArrayH; index: Integer; len: Integer; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace'; function QByteArray_replace(handle: QByteArrayH; index: Integer; len: Integer; s: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace2'; function QByteArray_replace(handle: QByteArrayH; before: char; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace3'; function QByteArray_replace(handle: QByteArrayH; before: char; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace4'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace5'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; bsize: Integer; after: PAnsiChar; asize: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace6'; function QByteArray_replace(handle: QByteArrayH; before: QByteArrayH; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace7'; function QByteArray_replace(handle: QByteArrayH; before: QByteArrayH; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace8'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace9'; function QByteArray_replace(handle: QByteArrayH; before: char; after: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace10'; procedure QByteArray_repeated(handle: QByteArrayH; retval: QByteArrayH; times: Integer); cdecl; external Qt4PasLib name 'QByteArray_repeated'; function QByteArray_append(handle: QByteArrayH; s: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append5'; function QByteArray_insert(handle: QByteArrayH; i: Integer; s: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert4'; function QByteArray_replace(handle: QByteArrayH; before: PWideString; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace11'; function QByteArray_replace(handle: QByteArrayH; c: char; after: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace12'; function QByteArray_replace(handle: QByteArrayH; before: PWideString; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace13'; function QByteArray_indexOf(handle: QByteArrayH; s: PWideString; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf4'; function QByteArray_lastIndexOf(handle: QByteArrayH; s: PWideString; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf4'; function QByteArray_toShort(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): ShortInt; cdecl; external Qt4PasLib name 'QByteArray_toShort'; function QByteArray_toUShort(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Word; cdecl; external Qt4PasLib name 'QByteArray_toUShort'; function QByteArray_toInt(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Integer; cdecl; external Qt4PasLib name 'QByteArray_toInt'; function QByteArray_toUInt(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): LongWord; cdecl; external Qt4PasLib name 'QByteArray_toUInt'; function QByteArray_toLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Long; cdecl; external Qt4PasLib name 'QByteArray_toLong'; function QByteArray_toULong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Longword; cdecl; external Qt4PasLib name 'QByteArray_toULong'; function QByteArray_toLongLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): int64; cdecl; external Qt4PasLib name 'QByteArray_toLongLong'; function QByteArray_toULongLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): qword; cdecl; external Qt4PasLib name 'QByteArray_toULongLong'; function QByteArray_toFloat(handle: QByteArrayH; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QByteArray_toFloat'; function QByteArray_toDouble(handle: QByteArrayH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QByteArray_toDouble'; procedure QByteArray_toBase64(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toBase64'; procedure QByteArray_toHex(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toHex'; procedure QByteArray_toPercentEncoding(handle: QByteArrayH; retval: QByteArrayH; exclude: QByteArrayH; include: QByteArrayH; percent: char); cdecl; external Qt4PasLib name 'QByteArray_toPercentEncoding'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: ShortInt; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Word; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum2'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Integer; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum3'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: LongWord; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum4'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: int64; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum5'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: qword; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum6'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Single; f: char; prec: Integer = 6): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum7'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Double; f: char; prec: Integer = 6): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum8'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number2'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number3'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number4'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QByteArray_number5'; procedure QByteArray_fromRawData(retval: QByteArrayH; AnonParam1: PAnsiChar; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_fromRawData'; procedure QByteArray_fromBase64(retval: QByteArrayH; base64: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_fromBase64'; procedure QByteArray_fromHex(retval: QByteArrayH; hexEncoded: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_fromHex'; procedure QByteArray_fromPercentEncoding(retval: QByteArrayH; pctEncoded: QByteArrayH; percent: char); cdecl; external Qt4PasLib name 'QByteArray_fromPercentEncoding'; procedure QByteArray_push_back(handle: QByteArrayH; c: char); cdecl; external Qt4PasLib name 'QByteArray_push_back'; procedure QByteArray_push_back(handle: QByteArrayH; c: PAnsiChar); cdecl; external Qt4PasLib name 'QByteArray_push_back2'; procedure QByteArray_push_back(handle: QByteArrayH; a: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_push_back3'; procedure QByteArray_push_front(handle: QByteArrayH; c: char); cdecl; external Qt4PasLib name 'QByteArray_push_front'; procedure QByteArray_push_front(handle: QByteArrayH; c: PAnsiChar); cdecl; external Qt4PasLib name 'QByteArray_push_front2'; procedure QByteArray_push_front(handle: QByteArrayH; a: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_push_front3'; function QByteArray_count(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_count4'; function QByteArray_length(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_length'; function QByteArray_isNull(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isNull'; type QSystemLocaleQueryType = ( // QSystemLocale::QueryType (1) QSystemLocaleLanguageId, QSystemLocaleCountryId, QSystemLocaleDecimalPoint, QSystemLocaleGroupSeparator, QSystemLocaleZeroDigit, QSystemLocaleNegativeSign, QSystemLocaleDateFormatLong, QSystemLocaleDateFormatShort, QSystemLocaleTimeFormatLong, QSystemLocaleTimeFormatShort, QSystemLocaleDayNameLong, QSystemLocaleDayNameShort, QSystemLocaleMonthNameLong, QSystemLocaleMonthNameShort, QSystemLocaleDateToStringLong, QSystemLocaleDateToStringShort, QSystemLocaleTimeToStringLong, QSystemLocaleTimeToStringShort, QSystemLocaleDateTimeFormatLong, QSystemLocaleDateTimeFormatShort, QSystemLocaleDateTimeToStringLong, QSystemLocaleDateTimeToStringShort, QSystemLocaleMeasurementSystem, QSystemLocalePositiveSign, QSystemLocaleAMText, QSystemLocalePMText ); type QLocaleMeasurementSystem = ( // QLocale::MeasurementSystem (1) QLocaleMetricSystem, QLocaleImperialSystem ); QLocaleFormatType = ( // QLocale::FormatType (1) QLocaleLongFormat, QLocaleShortFormat, QLocaleNarrowFormat ); type QLocaleNumberOption = cardinal; // QLocale::NumberOption QLocaleNumberOptions = QLocaleNumberOption; //QFlags<> (3) const QLocaleOmitGroupSeparator = $01; QLocaleRejectGroupSeparator = $02; type QLocaleLanguage = cardinal; // QLocale::Language (4) const QLocaleC = 1 { $1 }; QLocaleAbkhazian = 2 { $2 }; QLocaleAfan = 3 { $3 }; QLocaleAfar = 4 { $4 }; QLocaleAfrikaans = 5 { $5 }; QLocaleAlbanian = 6 { $6 }; QLocaleAmharic = 7 { $7 }; QLocaleArabic = 8 { $8 }; QLocaleArmenian = 9 { $9 }; QLocaleAssamese = 10 { $a }; QLocaleAymara = 11 { $b }; QLocaleAzerbaijani = 12 { $c }; QLocaleBashkir = 13 { $d }; QLocaleBasque = 14 { $e }; QLocaleBengali = 15 { $f }; QLocaleBhutani = 16 { $10 }; QLocaleBihari = 17 { $11 }; QLocaleBislama = 18 { $12 }; QLocaleBreton = 19 { $13 }; QLocaleBulgarian = 20 { $14 }; QLocaleBurmese = 21 { $15 }; QLocaleByelorussian = 22 { $16 }; QLocaleCambodian = 23 { $17 }; QLocaleCatalan = 24 { $18 }; QLocaleChinese = 25 { $19 }; QLocaleCorsican = 26 { $1a }; QLocaleCroatian = 27 { $1b }; QLocaleCzech = 28 { $1c }; QLocaleDanish = 29 { $1d }; QLocaleDutch = 30 { $1e }; QLocaleEnglish = 31 { $1f }; QLocaleEsperanto = 32 { $20 }; QLocaleEstonian = 33 { $21 }; QLocaleFaroese = 34 { $22 }; QLocaleFijiLanguage = 35 { $23 }; QLocaleFinnish = 36 { $24 }; QLocaleFrench = 37 { $25 }; QLocaleFrisian = 38 { $26 }; QLocaleGaelic = 39 { $27 }; QLocaleGalician = 40 { $28 }; QLocaleGeorgian = 41 { $29 }; QLocaleGerman = 42 { $2a }; QLocaleGreek = 43 { $2b }; QLocaleGreenlandic = 44 { $2c }; QLocaleGuarani = 45 { $2d }; QLocaleGujarati = 46 { $2e }; QLocaleHausa = 47 { $2f }; QLocaleHebrew = 48 { $30 }; QLocaleHindi = 49 { $31 }; QLocaleHungarian = 50 { $32 }; QLocaleIcelandic = 51 { $33 }; QLocaleIndonesian = 52 { $34 }; QLocaleInterlingua = 53 { $35 }; QLocaleInterlingue = 54 { $36 }; QLocaleInuktitut = 55 { $37 }; QLocaleInupiak = 56 { $38 }; QLocaleIrish = 57 { $39 }; QLocaleItalian = 58 { $3a }; QLocaleJapanese = 59 { $3b }; QLocaleJavanese = 60 { $3c }; QLocaleKannada = 61 { $3d }; QLocaleKashmiri = 62 { $3e }; QLocaleKazakh = 63 { $3f }; QLocaleKinyarwanda = 64 { $40 }; QLocaleKirghiz = 65 { $41 }; QLocaleKorean = 66 { $42 }; QLocaleKurdish = 67 { $43 }; QLocaleKurundi = 68 { $44 }; QLocaleLaothian = 69 { $45 }; QLocaleLatin = 70 { $46 }; QLocaleLatvian = 71 { $47 }; QLocaleLingala = 72 { $48 }; QLocaleLithuanian = 73 { $49 }; QLocaleMacedonian = 74 { $4a }; QLocaleMalagasy = 75 { $4b }; QLocaleMalay = 76 { $4c }; QLocaleMalayalam = 77 { $4d }; QLocaleMaltese = 78 { $4e }; QLocaleMaori = 79 { $4f }; QLocaleMarathi = 80 { $50 }; QLocaleMoldavian = 81 { $51 }; QLocaleMongolian = 82 { $52 }; QLocaleNauruLanguage = 83 { $53 }; QLocaleNepali = 84 { $54 }; QLocaleNorwegian = 85 { $55 }; QLocaleNorwegianBokmal = 85 { $55 }; QLocaleOccitan = 86 { $56 }; QLocaleOriya = 87 { $57 }; QLocalePashto = 88 { $58 }; QLocalePersian = 89 { $59 }; QLocalePolish = 90 { $5a }; QLocalePortuguese = 91 { $5b }; QLocalePunjabi = 92 { $5c }; QLocaleQuechua = 93 { $5d }; QLocaleRhaetoRomance = 94 { $5e }; QLocaleRomanian = 95 { $5f }; QLocaleRussian = 96 { $60 }; QLocaleSamoan = 97 { $61 }; QLocaleSangho = 98 { $62 }; QLocaleSanskrit = 99 { $63 }; QLocaleSerbian = 100 { $64 }; QLocaleSerboCroatian = 101 { $65 }; QLocaleSesotho = 102 { $66 }; QLocaleSetswana = 103 { $67 }; QLocaleShona = 104 { $68 }; QLocaleSindhi = 105 { $69 }; QLocaleSinghalese = 106 { $6a }; QLocaleSiswati = 107 { $6b }; QLocaleSlovak = 108 { $6c }; QLocaleSlovenian = 109 { $6d }; QLocaleSomali = 110 { $6e }; QLocaleSpanish = 111 { $6f }; QLocaleSundanese = 112 { $70 }; QLocaleSwahili = 113 { $71 }; QLocaleSwedish = 114 { $72 }; QLocaleTagalog = 115 { $73 }; QLocaleTajik = 116 { $74 }; QLocaleTamil = 117 { $75 }; QLocaleTatar = 118 { $76 }; QLocaleTelugu = 119 { $77 }; QLocaleThai = 120 { $78 }; QLocaleTibetan = 121 { $79 }; QLocaleTigrinya = 122 { $7a }; QLocaleTongaLanguage = 123 { $7b }; QLocaleTsonga = 124 { $7c }; QLocaleTurkish = 125 { $7d }; QLocaleTurkmen = 126 { $7e }; QLocaleTwi = 127 { $7f }; QLocaleUigur = 128 { $80 }; QLocaleUkrainian = 129 { $81 }; QLocaleUrdu = 130 { $82 }; QLocaleUzbek = 131 { $83 }; QLocaleVietnamese = 132 { $84 }; QLocaleVolapuk = 133 { $85 }; QLocaleWelsh = 134 { $86 }; QLocaleWolof = 135 { $87 }; QLocaleXhosa = 136 { $88 }; QLocaleYiddish = 137 { $89 }; QLocaleYoruba = 138 { $8a }; QLocaleZhuang = 139 { $8b }; QLocaleZulu = 140 { $8c }; QLocaleNorwegianNynorsk = 141 { $8d }; QLocaleNynorsk = 141 { $8d }; QLocaleBosnian = 142 { $8e }; QLocaleDivehi = 143 { $8f }; QLocaleManx = 144 { $90 }; QLocaleCornish = 145 { $91 }; QLocaleAkan = 146 { $92 }; QLocaleKonkani = 147 { $93 }; QLocaleGa = 148 { $94 }; QLocaleIgbo = 149 { $95 }; QLocaleKamba = 150 { $96 }; QLocaleSyriac = 151 { $97 }; QLocaleBlin = 152 { $98 }; QLocaleGeez = 153 { $99 }; QLocaleKoro = 154 { $9a }; QLocaleSidamo = 155 { $9b }; QLocaleAtsam = 156 { $9c }; QLocaleTigre = 157 { $9d }; QLocaleJju = 158 { $9e }; QLocaleFriulian = 159 { $9f }; QLocaleVenda = 160 { $a0 }; QLocaleEwe = 161 { $a1 }; QLocaleWalamo = 162 { $a2 }; QLocaleHawaiian = 163 { $a3 }; QLocaleTyap = 164 { $a4 }; QLocaleChewa = 165 { $a5 }; QLocaleLastLanguage = 165 { $a5 }; type QLocaleCountry = cardinal; // QLocale::Country (4) const QLocaleAnyCountry = 0 { $0 }; QLocaleAfghanistan = 1 { $1 }; QLocaleAlbania = 2 { $2 }; QLocaleAlgeria = 3 { $3 }; QLocaleAmericanSamoa = 4 { $4 }; QLocaleAndorra = 5 { $5 }; QLocaleAngola = 6 { $6 }; QLocaleAnguilla = 7 { $7 }; QLocaleAntarctica = 8 { $8 }; QLocaleAntiguaAndBarbuda = 9 { $9 }; QLocaleArgentina = 10 { $a }; QLocaleArmenia = 11 { $b }; QLocaleAruba = 12 { $c }; QLocaleAustralia = 13 { $d }; QLocaleAustria = 14 { $e }; QLocaleAzerbaijan = 15 { $f }; QLocaleBahamas = 16 { $10 }; QLocaleBahrain = 17 { $11 }; QLocaleBangladesh = 18 { $12 }; QLocaleBarbados = 19 { $13 }; QLocaleBelarus = 20 { $14 }; QLocaleBelgium = 21 { $15 }; QLocaleBelize = 22 { $16 }; QLocaleBenin = 23 { $17 }; QLocaleBermuda = 24 { $18 }; QLocaleBhutan = 25 { $19 }; QLocaleBolivia = 26 { $1a }; QLocaleBosniaAndHerzegowina = 27 { $1b }; QLocaleBotswana = 28 { $1c }; QLocaleBouvetIsland = 29 { $1d }; QLocaleBrazil = 30 { $1e }; QLocaleBritishIndianOceanTerritory = 31 { $1f }; QLocaleBruneiDarussalam = 32 { $20 }; QLocaleBulgaria = 33 { $21 }; QLocaleBurkinaFaso = 34 { $22 }; QLocaleBurundi = 35 { $23 }; QLocaleCambodia = 36 { $24 }; QLocaleCameroon = 37 { $25 }; QLocaleCanada = 38 { $26 }; QLocaleCapeVerde = 39 { $27 }; QLocaleCaymanIslands = 40 { $28 }; QLocaleCentralAfricanRepublic = 41 { $29 }; QLocaleChad = 42 { $2a }; QLocaleChile = 43 { $2b }; QLocaleChina = 44 { $2c }; QLocaleChristmasIsland = 45 { $2d }; QLocaleCocosIslands = 46 { $2e }; QLocaleColombia = 47 { $2f }; QLocaleComoros = 48 { $30 }; QLocaleDemocraticRepublicOfCongo = 49 { $31 }; QLocalePeoplesRepublicOfCongo = 50 { $32 }; QLocaleCookIslands = 51 { $33 }; QLocaleCostaRica = 52 { $34 }; QLocaleIvoryCoast = 53 { $35 }; QLocaleCroatia = 54 { $36 }; QLocaleCuba = 55 { $37 }; QLocaleCyprus = 56 { $38 }; QLocaleCzechRepublic = 57 { $39 }; QLocaleDenmark = 58 { $3a }; QLocaleDjibouti = 59 { $3b }; QLocaleDominica = 60 { $3c }; QLocaleDominicanRepublic = 61 { $3d }; QLocaleEastTimor = 62 { $3e }; QLocaleEcuador = 63 { $3f }; QLocaleEgypt = 64 { $40 }; QLocaleElSalvador = 65 { $41 }; QLocaleEquatorialGuinea = 66 { $42 }; QLocaleEritrea = 67 { $43 }; QLocaleEstonia = 68 { $44 }; QLocaleEthiopia = 69 { $45 }; QLocaleFalklandIslands = 70 { $46 }; QLocaleFaroeIslands = 71 { $47 }; QLocaleFijiCountry = 72 { $48 }; QLocaleFinland = 73 { $49 }; QLocaleFrance = 74 { $4a }; QLocaleMetropolitanFrance = 75 { $4b }; QLocaleFrenchGuiana = 76 { $4c }; QLocaleFrenchPolynesia = 77 { $4d }; QLocaleFrenchSouthernTerritories = 78 { $4e }; QLocaleGabon = 79 { $4f }; QLocaleGambia = 80 { $50 }; QLocaleGeorgia = 81 { $51 }; QLocaleGermany = 82 { $52 }; QLocaleGhana = 83 { $53 }; QLocaleGibraltar = 84 { $54 }; QLocaleGreece = 85 { $55 }; QLocaleGreenland = 86 { $56 }; QLocaleGrenada = 87 { $57 }; QLocaleGuadeloupe = 88 { $58 }; QLocaleGuam = 89 { $59 }; QLocaleGuatemala = 90 { $5a }; QLocaleGuinea = 91 { $5b }; QLocaleGuineaBissau = 92 { $5c }; QLocaleGuyana = 93 { $5d }; QLocaleHaiti = 94 { $5e }; QLocaleHeardAndMcDonaldIslands = 95 { $5f }; QLocaleHonduras = 96 { $60 }; QLocaleHongKong = 97 { $61 }; QLocaleHungary = 98 { $62 }; QLocaleIceland = 99 { $63 }; QLocaleIndia = 100 { $64 }; QLocaleIndonesia = 101 { $65 }; QLocaleIran = 102 { $66 }; QLocaleIraq = 103 { $67 }; QLocaleIreland = 104 { $68 }; QLocaleIsrael = 105 { $69 }; QLocaleItaly = 106 { $6a }; QLocaleJamaica = 107 { $6b }; QLocaleJapan = 108 { $6c }; QLocaleJordan = 109 { $6d }; QLocaleKazakhstan = 110 { $6e }; QLocaleKenya = 111 { $6f }; QLocaleKiribati = 112 { $70 }; QLocaleDemocraticRepublicOfKorea = 113 { $71 }; QLocaleRepublicOfKorea = 114 { $72 }; QLocaleKuwait = 115 { $73 }; QLocaleKyrgyzstan = 116 { $74 }; QLocaleLao = 117 { $75 }; QLocaleLatvia = 118 { $76 }; QLocaleLebanon = 119 { $77 }; QLocaleLesotho = 120 { $78 }; QLocaleLiberia = 121 { $79 }; QLocaleLibyanArabJamahiriya = 122 { $7a }; QLocaleLiechtenstein = 123 { $7b }; QLocaleLithuania = 124 { $7c }; QLocaleLuxembourg = 125 { $7d }; QLocaleMacau = 126 { $7e }; QLocaleMacedonia = 127 { $7f }; QLocaleMadagascar = 128 { $80 }; QLocaleMalawi = 129 { $81 }; QLocaleMalaysia = 130 { $82 }; QLocaleMaldives = 131 { $83 }; QLocaleMali = 132 { $84 }; QLocaleMalta = 133 { $85 }; QLocaleMarshallIslands = 134 { $86 }; QLocaleMartinique = 135 { $87 }; QLocaleMauritania = 136 { $88 }; QLocaleMauritius = 137 { $89 }; QLocaleMayotte = 138 { $8a }; QLocaleMexico = 139 { $8b }; QLocaleMicronesia = 140 { $8c }; QLocaleMoldova = 141 { $8d }; QLocaleMonaco = 142 { $8e }; QLocaleMongolia = 143 { $8f }; QLocaleMontserrat = 144 { $90 }; QLocaleMorocco = 145 { $91 }; QLocaleMozambique = 146 { $92 }; QLocaleMyanmar = 147 { $93 }; QLocaleNamibia = 148 { $94 }; QLocaleNauruCountry = 149 { $95 }; QLocaleNepal = 150 { $96 }; QLocaleNetherlands = 151 { $97 }; QLocaleNetherlandsAntilles = 152 { $98 }; QLocaleNewCaledonia = 153 { $99 }; QLocaleNewZealand = 154 { $9a }; QLocaleNicaragua = 155 { $9b }; QLocaleNiger = 156 { $9c }; QLocaleNigeria = 157 { $9d }; QLocaleNiue = 158 { $9e }; QLocaleNorfolkIsland = 159 { $9f }; QLocaleNorthernMarianaIslands = 160 { $a0 }; QLocaleNorway = 161 { $a1 }; QLocaleOman = 162 { $a2 }; QLocalePakistan = 163 { $a3 }; QLocalePalau = 164 { $a4 }; QLocalePalestinianTerritory = 165 { $a5 }; QLocalePanama = 166 { $a6 }; QLocalePapuaNewGuinea = 167 { $a7 }; QLocaleParaguay = 168 { $a8 }; QLocalePeru = 169 { $a9 }; QLocalePhilippines = 170 { $aa }; QLocalePitcairn = 171 { $ab }; QLocalePoland = 172 { $ac }; QLocalePortugal = 173 { $ad }; QLocalePuertoRico = 174 { $ae }; QLocaleQatar = 175 { $af }; QLocaleReunion = 176 { $b0 }; QLocaleRomania = 177 { $b1 }; QLocaleRussianFederation = 178 { $b2 }; QLocaleRwanda = 179 { $b3 }; QLocaleSaintKittsAndNevis = 180 { $b4 }; QLocaleStLucia = 181 { $b5 }; QLocaleStVincentAndTheGrenadines = 182 { $b6 }; QLocaleSamoa = 183 { $b7 }; QLocaleSanMarino = 184 { $b8 }; QLocaleSaoTomeAndPrincipe = 185 { $b9 }; QLocaleSaudiArabia = 186 { $ba }; QLocaleSenegal = 187 { $bb }; QLocaleSeychelles = 188 { $bc }; QLocaleSierraLeone = 189 { $bd }; QLocaleSingapore = 190 { $be }; QLocaleSlovakia = 191 { $bf }; QLocaleSlovenia = 192 { $c0 }; QLocaleSolomonIslands = 193 { $c1 }; QLocaleSomalia = 194 { $c2 }; QLocaleSouthAfrica = 195 { $c3 }; QLocaleSouthGeorgiaAndTheSouthSandwichIslands = 196 { $c4 }; QLocaleSpain = 197 { $c5 }; QLocaleSriLanka = 198 { $c6 }; QLocaleStHelena = 199 { $c7 }; QLocaleStPierreAndMiquelon = 200 { $c8 }; QLocaleSudan = 201 { $c9 }; QLocaleSuriname = 202 { $ca }; QLocaleSvalbardAndJanMayenIslands = 203 { $cb }; QLocaleSwaziland = 204 { $cc }; QLocaleSweden = 205 { $cd }; QLocaleSwitzerland = 206 { $ce }; QLocaleSyrianArabRepublic = 207 { $cf }; QLocaleTaiwan = 208 { $d0 }; QLocaleTajikistan = 209 { $d1 }; QLocaleTanzania = 210 { $d2 }; QLocaleThailand = 211 { $d3 }; QLocaleTogo = 212 { $d4 }; QLocaleTokelau = 213 { $d5 }; QLocaleTongaCountry = 214 { $d6 }; QLocaleTrinidadAndTobago = 215 { $d7 }; QLocaleTunisia = 216 { $d8 }; QLocaleTurkey = 217 { $d9 }; QLocaleTurkmenistan = 218 { $da }; QLocaleTurksAndCaicosIslands = 219 { $db }; QLocaleTuvalu = 220 { $dc }; QLocaleUganda = 221 { $dd }; QLocaleUkraine = 222 { $de }; QLocaleUnitedArabEmirates = 223 { $df }; QLocaleUnitedKingdom = 224 { $e0 }; QLocaleUnitedStates = 225 { $e1 }; QLocaleUnitedStatesMinorOutlyingIslands = 226 { $e2 }; QLocaleUruguay = 227 { $e3 }; QLocaleUzbekistan = 228 { $e4 }; QLocaleVanuatu = 229 { $e5 }; QLocaleVaticanCityState = 230 { $e6 }; QLocaleVenezuela = 231 { $e7 }; QLocaleVietNam = 232 { $e8 }; QLocaleBritishVirginIslands = 233 { $e9 }; QLocaleUSVirginIslands = 234 { $ea }; QLocaleWallisAndFutunaIslands = 235 { $eb }; QLocaleWesternSahara = 236 { $ec }; QLocaleYemen = 237 { $ed }; QLocaleYugoslavia = 238 { $ee }; QLocaleZambia = 239 { $ef }; QLocaleZimbabwe = 240 { $f0 }; QLocaleSerbiaAndMontenegro = 241 { $f1 }; QLocaleLastCountry = 241 { $f1 }; function QSystemLocale_create(): QSystemLocaleH; cdecl; external Qt4PasLib name 'QSystemLocale_create'; procedure QSystemLocale_destroy(handle: QSystemLocaleH); cdecl; external Qt4PasLib name 'QSystemLocale_destroy'; procedure QSystemLocale_fallbackLocale(handle: QSystemLocaleH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QSystemLocale_fallbackLocale'; function QLocale_create(): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create'; procedure QLocale_destroy(handle: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_destroy'; function QLocale_create(name: PWideString): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create2'; function QLocale_create(language: QLocaleLanguage; country: QLocaleCountry = QLocaleAnyCountry): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create3'; function QLocale_create(other: QLocaleH): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create4'; function QLocale_language(handle: QLocaleH): QLocaleLanguage; cdecl; external Qt4PasLib name 'QLocale_language'; function QLocale_country(handle: QLocaleH): QLocaleCountry; cdecl; external Qt4PasLib name 'QLocale_country'; procedure QLocale_name(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_name'; function QLocale_toShort(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): ShortInt; cdecl; external Qt4PasLib name 'QLocale_toShort'; function QLocale_toUShort(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): Word; cdecl; external Qt4PasLib name 'QLocale_toUShort'; function QLocale_toInt(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QLocale_toInt'; function QLocale_toUInt(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): LongWord; cdecl; external Qt4PasLib name 'QLocale_toUInt'; function QLocale_toLongLong(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): int64; cdecl; external Qt4PasLib name 'QLocale_toLongLong'; function QLocale_toULongLong(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): int64; cdecl; external Qt4PasLib name 'QLocale_toULongLong'; function QLocale_toFloat(handle: QLocaleH; s: PWideString; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QLocale_toFloat'; function QLocale_toDouble(handle: QLocaleH; s: PWideString; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QLocale_toDouble'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: int64); cdecl; external Qt4PasLib name 'QLocale_toString'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: qword); cdecl; external Qt4PasLib name 'QLocale_toString2'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: ShortInt); cdecl; external Qt4PasLib name 'QLocale_toString3'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Word); cdecl; external Qt4PasLib name 'QLocale_toString4'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QLocale_toString5'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: LongWord); cdecl; external Qt4PasLib name 'QLocale_toString6'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QLocale_toString7'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Single; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QLocale_toString8'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; date: QDateH; formatStr: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString9'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; date: QDateH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString10'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; time: QTimeH; formatStr: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString11'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; time: QTimeH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString12'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; dateTime: QDateTimeH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString13'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; dateTime: QDateTimeH; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString14'; procedure QLocale_dateFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dateFormat'; procedure QLocale_timeFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_timeFormat'; procedure QLocale_dateTimeFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dateTimeFormat'; procedure QLocale_toDate(handle: QLocaleH; retval: QDateH; _string: PWideString; AnonParam2: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toDate'; procedure QLocale_toTime(handle: QLocaleH; retval: QTimeH; _string: PWideString; AnonParam2: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toTime'; procedure QLocale_toDateTime(handle: QLocaleH; retval: QDateTimeH; _string: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toDateTime'; procedure QLocale_toDate(handle: QLocaleH; retval: QDateH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toDate2'; procedure QLocale_toTime(handle: QLocaleH; retval: QTimeH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toTime2'; procedure QLocale_toDateTime(handle: QLocaleH; retval: QDateTimeH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toDateTime2'; procedure QLocale_decimalPoint(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_decimalPoint'; procedure QLocale_groupSeparator(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_groupSeparator'; procedure QLocale_percent(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_percent'; procedure QLocale_zeroDigit(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_zeroDigit'; procedure QLocale_negativeSign(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_negativeSign'; procedure QLocale_positiveSign(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_positiveSign'; procedure QLocale_exponential(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_exponential'; procedure QLocale_monthName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_monthName'; procedure QLocale_standaloneMonthName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_standaloneMonthName'; procedure QLocale_dayName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dayName'; procedure QLocale_standaloneDayName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_standaloneDayName'; procedure QLocale_amText(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_amText'; procedure QLocale_pmText(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_pmText'; function QLocale_measurementSystem(handle: QLocaleH): QLocaleMeasurementSystem; cdecl; external Qt4PasLib name 'QLocale_measurementSystem'; procedure QLocale_languageToString(retval: PWideString; language: QLocaleLanguage); cdecl; external Qt4PasLib name 'QLocale_languageToString'; procedure QLocale_countryToString(retval: PWideString; country: QLocaleCountry); cdecl; external Qt4PasLib name 'QLocale_countryToString'; procedure QLocale_setDefault(locale: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_setDefault'; procedure QLocale_c(retval: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_c'; procedure QLocale_system(retval: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_system'; procedure QLocale_setNumberOptions(handle: QLocaleH; options: QLocaleNumberOptions); cdecl; external Qt4PasLib name 'QLocale_setNumberOptions'; function QLocale_numberOptions(handle: QLocaleH): QLocaleNumberOptions; cdecl; external Qt4PasLib name 'QLocale_numberOptions'; type QIODeviceOpenModeFlag = cardinal; // QIODevice::OpenModeFlag (4) QIODeviceOpenMode = QIODeviceOpenModeFlag; // QFlags<> const QIODeviceNotOpen = 0 { $0 }; QIODeviceReadOnly = 1 { $1 }; QIODeviceWriteOnly = 2 { $2 }; QIODeviceReadWrite = 3 { $3 }; QIODeviceAppend = 4 { $4 }; QIODeviceTruncate = 8 { $8 }; QIODeviceText = 16 { $10 }; QIODeviceUnbuffered = 32 { $20 }; function QIODevice_openMode(handle: QIODeviceH): QIODeviceOpenMode; cdecl; external Qt4PasLib name 'QIODevice_openMode'; procedure QIODevice_setTextModeEnabled(handle: QIODeviceH; enabled: Boolean); cdecl; external Qt4PasLib name 'QIODevice_setTextModeEnabled'; function QIODevice_isTextModeEnabled(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isTextModeEnabled'; function QIODevice_isOpen(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isOpen'; function QIODevice_isReadable(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isReadable'; function QIODevice_isWritable(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isWritable'; function QIODevice_isSequential(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isSequential'; function QIODevice_open(handle: QIODeviceH; mode: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QIODevice_open'; procedure QIODevice_close(handle: QIODeviceH); cdecl; external Qt4PasLib name 'QIODevice_close'; function QIODevice_pos(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_pos'; function QIODevice_size(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_size'; function QIODevice_seek(handle: QIODeviceH; pos: int64): Boolean; cdecl; external Qt4PasLib name 'QIODevice_seek'; function QIODevice_atEnd(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_atEnd'; function QIODevice_reset(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_reset'; function QIODevice_bytesAvailable(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_bytesAvailable'; function QIODevice_bytesToWrite(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_bytesToWrite'; function QIODevice_read(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_read'; procedure QIODevice_read(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64); cdecl; external Qt4PasLib name 'QIODevice_read2'; procedure QIODevice_readAll(handle: QIODeviceH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QIODevice_readAll'; function QIODevice_readLine(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_readLine'; procedure QIODevice_readLine(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64 = 0); cdecl; external Qt4PasLib name 'QIODevice_readLine2'; function QIODevice_canReadLine(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_canReadLine'; function QIODevice_write(handle: QIODeviceH; data: PAnsiChar; len: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_write'; function QIODevice_write(handle: QIODeviceH; data: PAnsiChar): int64; cdecl; external Qt4PasLib name 'QIODevice_write2'; function QIODevice_write(handle: QIODeviceH; data: QByteArrayH): int64; cdecl; external Qt4PasLib name 'QIODevice_write3'; function QIODevice_peek(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_peek'; procedure QIODevice_peek(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64); cdecl; external Qt4PasLib name 'QIODevice_peek2'; function QIODevice_waitForReadyRead(handle: QIODeviceH; msecs: Integer): Boolean; cdecl; external Qt4PasLib name 'QIODevice_waitForReadyRead'; function QIODevice_waitForBytesWritten(handle: QIODeviceH; msecs: Integer): Boolean; cdecl; external Qt4PasLib name 'QIODevice_waitForBytesWritten'; procedure QIODevice_ungetChar(handle: QIODeviceH; c: char); cdecl; external Qt4PasLib name 'QIODevice_ungetChar'; function QIODevice_putChar(handle: QIODeviceH; c: char): Boolean; cdecl; external Qt4PasLib name 'QIODevice_putChar'; function QIODevice_getChar(handle: QIODeviceH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QIODevice_getChar'; procedure QIODevice_errorString(handle: QIODeviceH; retval: PWideString); cdecl; external Qt4PasLib name 'QIODevice_errorString'; type QIODevice_readyRead_Event = procedure () of object cdecl; QIODevice_bytesWritten_Event = procedure (bytes: int64) of object cdecl; QIODevice_aboutToClose_Event = procedure () of object cdecl; QIODevice_readChannelFinished_Event = procedure () of object cdecl; type QProcessProcessError = ( // QProcess::ProcessError (1) QProcessFailedToStart, QProcessCrashed, QProcessTimedout, QProcessReadError, QProcessWriteError, QProcessUnknownError ); QProcessProcessState = ( // QProcess::ProcessState (1) QProcessNotRunning, QProcessStarting, QProcessRunning ); QProcessProcessChannel = ( // QProcess::ProcessChannel (1) QProcessStandardOutput, QProcessStandardError ); QProcessProcessChannelMode = ( // QProcess::ProcessChannelMode (1) QProcessSeparateChannels, QProcessMergedChannels, QProcessForwardedChannels ); QProcessExitStatus = ( // QProcess::ExitStatus (1) QProcessNormalExit, QProcessCrashExit ); function QProcess_create(parent: QObjectH = nil): QProcessH; cdecl; external Qt4PasLib name 'QProcess_create'; procedure QProcess_destroy(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_destroy'; procedure QProcess_start(handle: QProcessH; _program: PWideString; arguments: QStringListH; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_start'; procedure QProcess_start(handle: QProcessH; _program: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_start2'; function QProcess_readChannelMode(handle: QProcessH): QProcessProcessChannelMode; cdecl; external Qt4PasLib name 'QProcess_readChannelMode'; procedure QProcess_setReadChannelMode(handle: QProcessH; mode: QProcessProcessChannelMode); cdecl; external Qt4PasLib name 'QProcess_setReadChannelMode'; function QProcess_processChannelMode(handle: QProcessH): QProcessProcessChannelMode; cdecl; external Qt4PasLib name 'QProcess_processChannelMode'; procedure QProcess_setProcessChannelMode(handle: QProcessH; mode: QProcessProcessChannelMode); cdecl; external Qt4PasLib name 'QProcess_setProcessChannelMode'; function QProcess_readChannel(handle: QProcessH): QProcessProcessChannel; cdecl; external Qt4PasLib name 'QProcess_readChannel'; procedure QProcess_setReadChannel(handle: QProcessH; channel: QProcessProcessChannel); cdecl; external Qt4PasLib name 'QProcess_setReadChannel'; procedure QProcess_closeReadChannel(handle: QProcessH; channel: QProcessProcessChannel); cdecl; external Qt4PasLib name 'QProcess_closeReadChannel'; procedure QProcess_closeWriteChannel(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_closeWriteChannel'; procedure QProcess_setStandardInputFile(handle: QProcessH; fileName: PWideString); cdecl; external Qt4PasLib name 'QProcess_setStandardInputFile'; procedure QProcess_setStandardOutputFile(handle: QProcessH; fileName: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_setStandardOutputFile'; procedure QProcess_setStandardErrorFile(handle: QProcessH; fileName: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_setStandardErrorFile'; procedure QProcess_setStandardOutputProcess(handle: QProcessH; destination: QProcessH); cdecl; external Qt4PasLib name 'QProcess_setStandardOutputProcess'; procedure QProcess_workingDirectory(handle: QProcessH; retval: PWideString); cdecl; external Qt4PasLib name 'QProcess_workingDirectory'; procedure QProcess_setWorkingDirectory(handle: QProcessH; dir: PWideString); cdecl; external Qt4PasLib name 'QProcess_setWorkingDirectory'; procedure QProcess_setEnvironment(handle: QProcessH; environment: QStringListH); cdecl; external Qt4PasLib name 'QProcess_setEnvironment'; procedure QProcess_environment(handle: QProcessH; retval: QStringListH); cdecl; external Qt4PasLib name 'QProcess_environment'; function QProcess_error(handle: QProcessH): QProcessProcessError; cdecl; external Qt4PasLib name 'QProcess_error'; function QProcess_state(handle: QProcessH): QProcessProcessState; cdecl; external Qt4PasLib name 'QProcess_state'; function QProcess_pid(handle: QProcessH): Q_PID; cdecl; external Qt4PasLib name 'QProcess_pid'; function QProcess_waitForStarted(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForStarted'; function QProcess_waitForReadyRead(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForReadyRead'; function QProcess_waitForBytesWritten(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForBytesWritten'; function QProcess_waitForFinished(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForFinished'; procedure QProcess_readAllStandardOutput(handle: QProcessH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QProcess_readAllStandardOutput'; procedure QProcess_readAllStandardError(handle: QProcessH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QProcess_readAllStandardError'; function QProcess_exitCode(handle: QProcessH): Integer; cdecl; external Qt4PasLib name 'QProcess_exitCode'; function QProcess_exitStatus(handle: QProcessH): QProcessExitStatus; cdecl; external Qt4PasLib name 'QProcess_exitStatus'; function QProcess_bytesAvailable(handle: QProcessH): int64; cdecl; external Qt4PasLib name 'QProcess_bytesAvailable'; function QProcess_bytesToWrite(handle: QProcessH): int64; cdecl; external Qt4PasLib name 'QProcess_bytesToWrite'; function QProcess_isSequential(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_isSequential'; function QProcess_canReadLine(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_canReadLine'; procedure QProcess_close(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_close'; function QProcess_atEnd(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_atEnd'; function QProcess_execute(_program: PWideString; arguments: QStringListH): Integer; cdecl; external Qt4PasLib name 'QProcess_execute'; function QProcess_execute(_program: PWideString): Integer; cdecl; external Qt4PasLib name 'QProcess_execute2'; function QProcess_startDetached(_program: PWideString; arguments: QStringListH; workingDirectory: PWideString; pid: pint64 = nil): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached'; function QProcess_startDetached(_program: PWideString; arguments: QStringListH): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached2'; function QProcess_startDetached(_program: PWideString): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached3'; procedure QProcess_systemEnvironment(retval: QStringListH); cdecl; external Qt4PasLib name 'QProcess_systemEnvironment'; procedure QProcess_terminate(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_terminate'; procedure QProcess_kill(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_kill'; type QProcess_started_Event = procedure () of object cdecl; QProcess_finished_Event = procedure (exitCode: Integer) of object cdecl; QProcess_finished2_Event = procedure (exitCode: Integer; exitStatus: QProcessExitStatus) of object cdecl; QProcess_error_Event = procedure (error: QProcessProcessError) of object cdecl; QProcess_stateChanged_Event = procedure (state: QProcessProcessState) of object cdecl; QProcess_readyReadStandardOutput_Event = procedure () of object cdecl; QProcess_readyReadStandardError_Event = procedure () of object cdecl; type QFileFileError = ( //QFile::FileError (2) QFileNoError = 0, QFileReadError = 1, QFileWriteError = 2, QFileFatalError = 3, QFileResourceError = 4, QFileOpenError = 5, QFileAbortError = 6, QFileTimeOutError = 7, QFileUnspecifiedError = 8, QFileRemoveError = 9, QFileRenameError = 10, QFilePositionError = 11, QFileResizeError = 12, QFilePermissionsError = 13, QFileCopyError = 14 ); type QFilePermission = cardinal; // QFile::Permission QFilePermissions = QFilePermission; //QFlags<> (3) const QFileReadOwner = $4000; QFileWriteOwner = $2000; QFileExeOwner = $1000; QFileReadUser = $0400; QFileWriteUser = $0200; QFileExeUser = $0100; QFileReadGroup = $0040; QFileWriteGroup = $0020; QFileExeGroup = $0010; QFileReadOther = $0004; QFileWriteOther = $0002; QFileExeOther = $0001; type QFileMemoryMapFlags = ( //QFile::MemoryMapFlags (2) QFileNoOptions = 0 ); function QFile_create(): QFileH; cdecl; external Qt4PasLib name 'QFile_create'; procedure QFile_destroy(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_destroy'; function QFile_create(name: PWideString): QFileH; cdecl; external Qt4PasLib name 'QFile_create2'; function QFile_create(parent: QObjectH): QFileH; cdecl; external Qt4PasLib name 'QFile_create3'; function QFile_create(name: PWideString; parent: QObjectH): QFileH; cdecl; external Qt4PasLib name 'QFile_create4'; function QFile_error(handle: QFileH): QFileFileError; cdecl; external Qt4PasLib name 'QFile_error'; procedure QFile_unsetError(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_unsetError'; procedure QFile_fileName(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_fileName'; procedure QFile_setFileName(handle: QFileH; name: PWideString); cdecl; external Qt4PasLib name 'QFile_setFileName'; procedure QFile_encodeName(retval: QByteArrayH; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_encodeName'; procedure QFile_decodeName(retval: PWideString; localFileName: QByteArrayH); cdecl; external Qt4PasLib name 'QFile_decodeName'; procedure QFile_decodeName(retval: PWideString; localFileName: PAnsiChar); cdecl; external Qt4PasLib name 'QFile_decodeName2'; function QFile_exists(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_exists'; function QFile_exists(fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_exists2'; procedure QFile_readLink(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_readLink'; procedure QFile_readLink(retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_readLink2'; procedure QFile_symLinkTarget(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_symLinkTarget'; procedure QFile_symLinkTarget(retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_symLinkTarget2'; function QFile_remove(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_remove'; function QFile_remove(fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_remove2'; function QFile_rename(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_rename'; function QFile_rename(oldName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_rename2'; function QFile_link(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_link'; function QFile_link(oldname: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_link2'; function QFile_copy(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_copy'; function QFile_copy(fileName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_copy2'; function QFile_isSequential(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_isSequential'; function QFile_open(handle: QFileH; flags: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QFile_open'; function QFile_open(handle: QFileH; fd: Integer; flags: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QFile_open2'; procedure QFile_close(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_close'; function QFile_size(handle: QFileH): int64; cdecl; external Qt4PasLib name 'QFile_size'; function QFile_pos(handle: QFileH): int64; cdecl; external Qt4PasLib name 'QFile_pos'; function QFile_seek(handle: QFileH; offset: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_seek'; function QFile_atEnd(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_atEnd'; function QFile_flush(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_flush'; function QFile_resize(handle: QFileH; sz: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_resize'; function QFile_resize(filename: PWideString; sz: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_resize2'; function QFile_permissions(handle: QFileH): QFilePermissions; cdecl; external Qt4PasLib name 'QFile_permissions'; function QFile_permissions(filename: PWideString): QFilePermissions; cdecl; external Qt4PasLib name 'QFile_permissions2'; function QFile_setPermissions(handle: QFileH; permissionSpec: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFile_setPermissions'; function QFile_setPermissions(filename: PWideString; permissionSpec: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFile_setPermissions2'; function QFile_handle(handle: QFileH): Integer; cdecl; external Qt4PasLib name 'QFile_handle'; function QFile_map(handle: QFileH; offset: int64; size: int64; flags: QFileMemoryMapFlags = QFileNoOptions): PByte; cdecl; external Qt4PasLib name 'QFile_map'; function QFile_unmap(handle: QFileH; address: PByte): Boolean; cdecl; external Qt4PasLib name 'QFile_unmap'; function QFile_fileEngine(handle: QFileH): QAbstractFileEngineH; cdecl; external Qt4PasLib name 'QFile_fileEngine'; function QFileInfo_create(): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create'; procedure QFileInfo_destroy(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_destroy'; function QFileInfo_create(_file: PWideString): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create2'; function QFileInfo_create(_file: QFileH): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create3'; function QFileInfo_create(dir: QDirH; _file: PWideString): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create4'; function QFileInfo_create(fileinfo: QFileInfoH): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create5'; procedure QFileInfo_setFile(handle: QFileInfoH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_setFile'; procedure QFileInfo_setFile(handle: QFileInfoH; _file: QFileH); cdecl; external Qt4PasLib name 'QFileInfo_setFile2'; procedure QFileInfo_setFile(handle: QFileInfoH; dir: QDirH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_setFile3'; function QFileInfo_exists(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_exists'; procedure QFileInfo_refresh(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_refresh'; procedure QFileInfo_filePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_filePath'; procedure QFileInfo_absoluteFilePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_absoluteFilePath'; procedure QFileInfo_canonicalFilePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_canonicalFilePath'; procedure QFileInfo_fileName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_fileName'; procedure QFileInfo_baseName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_baseName'; procedure QFileInfo_completeBaseName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_completeBaseName'; procedure QFileInfo_suffix(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_suffix'; procedure QFileInfo_bundleName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_bundleName'; procedure QFileInfo_completeSuffix(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_completeSuffix'; procedure QFileInfo_path(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_path'; procedure QFileInfo_absolutePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_absolutePath'; procedure QFileInfo_canonicalPath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_canonicalPath'; procedure QFileInfo_dir(handle: QFileInfoH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileInfo_dir'; procedure QFileInfo_absoluteDir(handle: QFileInfoH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileInfo_absoluteDir'; function QFileInfo_isReadable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isReadable'; function QFileInfo_isWritable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isWritable'; function QFileInfo_isExecutable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isExecutable'; function QFileInfo_isHidden(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isHidden'; function QFileInfo_isRelative(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isRelative'; function QFileInfo_isAbsolute(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isAbsolute'; function QFileInfo_makeAbsolute(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_makeAbsolute'; function QFileInfo_isFile(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isFile'; function QFileInfo_isDir(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isDir'; function QFileInfo_isSymLink(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isSymLink'; function QFileInfo_isRoot(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isRoot'; function QFileInfo_isBundle(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isBundle'; procedure QFileInfo_readLink(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_readLink'; procedure QFileInfo_symLinkTarget(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_symLinkTarget'; procedure QFileInfo_owner(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_owner'; function QFileInfo_ownerId(handle: QFileInfoH): LongWord; cdecl; external Qt4PasLib name 'QFileInfo_ownerId'; procedure QFileInfo_group(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_group'; function QFileInfo_groupId(handle: QFileInfoH): LongWord; cdecl; external Qt4PasLib name 'QFileInfo_groupId'; function QFileInfo_permission(handle: QFileInfoH; permissions: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_permission'; function QFileInfo_permissions(handle: QFileInfoH): QFilePermissions; cdecl; external Qt4PasLib name 'QFileInfo_permissions'; function QFileInfo_size(handle: QFileInfoH): int64; cdecl; external Qt4PasLib name 'QFileInfo_size'; procedure QFileInfo_created(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_created'; procedure QFileInfo_lastModified(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_lastModified'; procedure QFileInfo_lastRead(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_lastRead'; procedure QFileInfo_detach(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_detach'; function QFileInfo_caching(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_caching'; procedure QFileInfo_setCaching(handle: QFileInfoH; _on: Boolean); cdecl; external Qt4PasLib name 'QFileInfo_setCaching'; type QDirSortFlag = cardinal; // QDir::SortFlag QDirSortFlags = QDirSortFlag; //QFlags<> (3) const QDirName = $00; QDirTime = $01; QDirSize = $02; QDirUnsorted = $03; QDirSortByMask = $03; QDirDirsFirst = $04; QDirReversed = $08; QDirIgnoreCase = $10; QDirDirsLast = $20; QDirLocaleAware = $40; QDirType = $80; QDirNoSort = -1; type QDirFilter = cardinal; // QDir::Filter (4) QDirFilters = QDirFilter; // QFlags<> const QDirDirs = 1 { $1 }; QDirFiles = 2 { $2 }; QDirDrives = 4 { $4 }; QDirNoSymLinks = 8 { $8 }; QDirAllEntries = 7 { $7 }; QDirTypeMask = 15 { $f }; QDirReadable = 16 { $10 }; QDirWritable = 32 { $20 }; QDirExecutable = 64 { $40 }; QDirPermissionMask = 112 { $70 }; QDirModified = 128 { $80 }; QDirHidden = 256 { $100 }; QDirSystem = 512 { $200 }; QDirAccessMask = 1008 { $3f0 }; QDirAllDirs = 1024 { $400 }; QDirCaseSensitive = 2048 { $800 }; QDirNoDotAndDotDot = 4096 { $1000 }; QDirNoFilter = 4294967295 { $ffffffff }; function QDir_create(AnonParam1: QDirH): QDirH; cdecl; external Qt4PasLib name 'QDir_create'; procedure QDir_destroy(handle: QDirH); cdecl; external Qt4PasLib name 'QDir_destroy'; function QDir_create(path: PWideString = nil): QDirH; cdecl; external Qt4PasLib name 'QDir_create2'; function QDir_create(path: PWideString; nameFilter: PWideString; sort: QDirSortFlags; filter: QDirFilters = QDirAllEntries): QDirH; cdecl; external Qt4PasLib name 'QDir_create3'; procedure QDir_setPath(handle: QDirH; path: PWideString); cdecl; external Qt4PasLib name 'QDir_setPath'; procedure QDir_path(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_path'; procedure QDir_absolutePath(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_absolutePath'; procedure QDir_canonicalPath(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_canonicalPath'; procedure QDir_addResourceSearchPath(path: PWideString); cdecl; external Qt4PasLib name 'QDir_addResourceSearchPath'; procedure QDir_setSearchPaths(prefix: PWideString; searchPaths: QStringListH); cdecl; external Qt4PasLib name 'QDir_setSearchPaths'; procedure QDir_addSearchPath(prefix: PWideString; path: PWideString); cdecl; external Qt4PasLib name 'QDir_addSearchPath'; procedure QDir_searchPaths(retval: QStringListH; prefix: PWideString); cdecl; external Qt4PasLib name 'QDir_searchPaths'; procedure QDir_dirName(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_dirName'; procedure QDir_filePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_filePath'; procedure QDir_absoluteFilePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_absoluteFilePath'; procedure QDir_relativeFilePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_relativeFilePath'; procedure QDir_toNativeSeparators(retval: PWideString; pathName: PWideString); cdecl; external Qt4PasLib name 'QDir_toNativeSeparators'; procedure QDir_fromNativeSeparators(retval: PWideString; pathName: PWideString); cdecl; external Qt4PasLib name 'QDir_fromNativeSeparators'; function QDir_cd(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_cd'; function QDir_cdUp(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_cdUp'; procedure QDir_nameFilters(handle: QDirH; retval: QStringListH); cdecl; external Qt4PasLib name 'QDir_nameFilters'; procedure QDir_setNameFilters(handle: QDirH; nameFilters: QStringListH); cdecl; external Qt4PasLib name 'QDir_setNameFilters'; function QDir_filter(handle: QDirH): QDirFilters; cdecl; external Qt4PasLib name 'QDir_filter'; procedure QDir_setFilter(handle: QDirH; filter: QDirFilters); cdecl; external Qt4PasLib name 'QDir_setFilter'; function QDir_sorting(handle: QDirH): QDirSortFlags; cdecl; external Qt4PasLib name 'QDir_sorting'; procedure QDir_setSorting(handle: QDirH; sort: QDirSortFlags); cdecl; external Qt4PasLib name 'QDir_setSorting'; function QDir_count(handle: QDirH): LongWord; cdecl; external Qt4PasLib name 'QDir_count'; procedure QDir_nameFiltersFromString(retval: QStringListH; nameFilter: PWideString); cdecl; external Qt4PasLib name 'QDir_nameFiltersFromString'; procedure QDir_entryList(handle: QDirH; retval: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryList'; procedure QDir_entryList(handle: QDirH; retval: QStringListH; nameFilters: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryList2'; procedure QDir_entryInfoList(handle: QDirH; retval: PPtrIntArray; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryInfoList'; procedure QDir_entryInfoList(handle: QDirH; retval: PPtrIntArray; nameFilters: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryInfoList2'; function QDir_mkdir(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_mkdir'; function QDir_rmdir(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rmdir'; function QDir_mkpath(handle: QDirH; dirPath: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_mkpath'; function QDir_rmpath(handle: QDirH; dirPath: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rmpath'; function QDir_isReadable(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isReadable'; function QDir_exists(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_exists'; function QDir_isRoot(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isRoot'; function QDir_isRelativePath(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_isRelativePath'; function QDir_isAbsolutePath(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_isAbsolutePath'; function QDir_isRelative(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isRelative'; function QDir_isAbsolute(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isAbsolute'; function QDir_makeAbsolute(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_makeAbsolute'; function QDir_remove(handle: QDirH; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_remove'; function QDir_rename(handle: QDirH; oldName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rename'; function QDir_exists(handle: QDirH; name: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_exists2'; procedure QDir_drives(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QDir_drives'; procedure QDir_separator(retval: PWideChar); cdecl; external Qt4PasLib name 'QDir_separator'; function QDir_setCurrent(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_setCurrent'; procedure QDir_current(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_current'; procedure QDir_currentPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_currentPath'; procedure QDir_home(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_home'; procedure QDir_homePath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_homePath'; procedure QDir_root(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_root'; procedure QDir_rootPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_rootPath'; procedure QDir_temp(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_temp'; procedure QDir_tempPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_tempPath'; function QDir_match(filters: QStringListH; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_match'; function QDir_match(filter: PWideString; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_match2'; procedure QDir_cleanPath(retval: PWideString; path: PWideString); cdecl; external Qt4PasLib name 'QDir_cleanPath'; procedure QDir_refresh(handle: QDirH); cdecl; external Qt4PasLib name 'QDir_refresh'; type QUrlParsingMode = ( // QUrl::ParsingMode (1) QUrlTolerantMode, QUrlStrictMode ); type QUrlFormattingOption = cardinal; // QUrl::FormattingOption (4) QUrlFormattingOptions = QUrlFormattingOption; // QFlags<> const QUrlNone = 0 { $0 }; QUrlRemoveScheme = 1 { $1 }; QUrlRemovePassword = 2 { $2 }; QUrlRemoveUserInfo = 6 { $6 }; QUrlRemovePort = 8 { $8 }; QUrlRemoveAuthority = 30 { $1e }; QUrlRemovePath = 32 { $20 }; QUrlRemoveQuery = 64 { $40 }; QUrlRemoveFragment = 128 { $80 }; QUrlStripTrailingSlash = 65536 { $10000 }; function QUrl_create(): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create'; procedure QUrl_destroy(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_destroy'; function QUrl_create(url: PWideString): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create2'; function QUrl_create(url: PWideString; mode: QUrlParsingMode): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create3'; function QUrl_create(copy: QUrlH): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create4'; procedure QUrl_setUrl(handle: QUrlH; url: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUrl'; procedure QUrl_setUrl(handle: QUrlH; url: PWideString; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_setUrl2'; procedure QUrl_setEncodedUrl(handle: QUrlH; url: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedUrl'; procedure QUrl_setEncodedUrl(handle: QUrlH; url: QByteArrayH; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_setEncodedUrl2'; function QUrl_isValid(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isValid'; function QUrl_isEmpty(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isEmpty'; procedure QUrl_clear(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_clear'; procedure QUrl_setScheme(handle: QUrlH; scheme: PWideString); cdecl; external Qt4PasLib name 'QUrl_setScheme'; procedure QUrl_scheme(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_scheme'; procedure QUrl_setAuthority(handle: QUrlH; authority: PWideString); cdecl; external Qt4PasLib name 'QUrl_setAuthority'; procedure QUrl_authority(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_authority'; procedure QUrl_setUserInfo(handle: QUrlH; userInfo: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUserInfo'; procedure QUrl_userInfo(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_userInfo'; procedure QUrl_setUserName(handle: QUrlH; userName: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUserName'; procedure QUrl_userName(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_userName'; procedure QUrl_setEncodedUserName(handle: QUrlH; userName: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedUserName'; procedure QUrl_encodedUserName(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedUserName'; procedure QUrl_setPassword(handle: QUrlH; password: PWideString); cdecl; external Qt4PasLib name 'QUrl_setPassword'; procedure QUrl_password(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_password'; procedure QUrl_setEncodedPassword(handle: QUrlH; password: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedPassword'; procedure QUrl_encodedPassword(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedPassword'; procedure QUrl_setHost(handle: QUrlH; host: PWideString); cdecl; external Qt4PasLib name 'QUrl_setHost'; procedure QUrl_host(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_host'; procedure QUrl_setEncodedHost(handle: QUrlH; host: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedHost'; procedure QUrl_encodedHost(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedHost'; procedure QUrl_setPort(handle: QUrlH; port: Integer); cdecl; external Qt4PasLib name 'QUrl_setPort'; function QUrl_port(handle: QUrlH): Integer; cdecl; external Qt4PasLib name 'QUrl_port'; function QUrl_port(handle: QUrlH; defaultPort: Integer): Integer; cdecl; external Qt4PasLib name 'QUrl_port2'; procedure QUrl_setPath(handle: QUrlH; path: PWideString); cdecl; external Qt4PasLib name 'QUrl_setPath'; procedure QUrl_path(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_path'; procedure QUrl_setEncodedPath(handle: QUrlH; path: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedPath'; procedure QUrl_encodedPath(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedPath'; function QUrl_hasQuery(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasQuery'; procedure QUrl_setEncodedQuery(handle: QUrlH; query: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedQuery'; procedure QUrl_encodedQuery(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedQuery'; procedure QUrl_setQueryDelimiters(handle: QUrlH; valueDelimiter: char; pairDelimiter: char); cdecl; external Qt4PasLib name 'QUrl_setQueryDelimiters'; function QUrl_queryValueDelimiter(handle: QUrlH): char; cdecl; external Qt4PasLib name 'QUrl_queryValueDelimiter'; function QUrl_queryPairDelimiter(handle: QUrlH): char; cdecl; external Qt4PasLib name 'QUrl_queryPairDelimiter'; procedure QUrl_addQueryItem(handle: QUrlH; key: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QUrl_addQueryItem'; function QUrl_hasQueryItem(handle: QUrlH; key: PWideString): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasQueryItem'; procedure QUrl_queryItemValue(handle: QUrlH; retval: PWideString; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_queryItemValue'; procedure QUrl_allQueryItemValues(handle: QUrlH; retval: QStringListH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_allQueryItemValues'; procedure QUrl_removeQueryItem(handle: QUrlH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_removeQueryItem'; procedure QUrl_removeAllQueryItems(handle: QUrlH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_removeAllQueryItems'; procedure QUrl_addEncodedQueryItem(handle: QUrlH; key: QByteArrayH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_addEncodedQueryItem'; function QUrl_hasEncodedQueryItem(handle: QUrlH; key: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasEncodedQueryItem'; procedure QUrl_encodedQueryItemValue(handle: QUrlH; retval: QByteArrayH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedQueryItemValue'; procedure QUrl_removeEncodedQueryItem(handle: QUrlH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_removeEncodedQueryItem'; procedure QUrl_removeAllEncodedQueryItems(handle: QUrlH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_removeAllEncodedQueryItems'; procedure QUrl_setFragment(handle: QUrlH; fragment: PWideString); cdecl; external Qt4PasLib name 'QUrl_setFragment'; procedure QUrl_fragment(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_fragment'; procedure QUrl_setEncodedFragment(handle: QUrlH; fragment: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedFragment'; procedure QUrl_encodedFragment(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedFragment'; function QUrl_hasFragment(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasFragment'; procedure QUrl_resolved(handle: QUrlH; retval: QUrlH; relative: QUrlH); cdecl; external Qt4PasLib name 'QUrl_resolved'; function QUrl_isRelative(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isRelative'; function QUrl_isParentOf(handle: QUrlH; url: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isParentOf'; procedure QUrl_fromLocalFile(retval: QUrlH; localfile: PWideString); cdecl; external Qt4PasLib name 'QUrl_fromLocalFile'; procedure QUrl_toLocalFile(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_toLocalFile'; procedure QUrl_toString(handle: QUrlH; retval: PWideString; options: QUrlFormattingOptions = QUrlNone); cdecl; external Qt4PasLib name 'QUrl_toString'; procedure QUrl_toEncoded(handle: QUrlH; retval: QByteArrayH; options: QUrlFormattingOptions = QUrlNone); cdecl; external Qt4PasLib name 'QUrl_toEncoded'; procedure QUrl_fromEncoded(retval: QUrlH; url: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromEncoded'; procedure QUrl_fromEncoded(retval: QUrlH; url: QByteArrayH; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_fromEncoded2'; procedure QUrl_detach(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_detach'; function QUrl_isDetached(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isDetached'; procedure QUrl_fromPercentEncoding(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromPercentEncoding'; procedure QUrl_toPercentEncoding(retval: QByteArrayH; AnonParam1: PWideString; exclude: QByteArrayH = nil; include: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QUrl_toPercentEncoding'; procedure QUrl_fromPunycode(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromPunycode'; procedure QUrl_toPunycode(retval: QByteArrayH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QUrl_toPunycode'; procedure QUrl_fromAce(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromAce'; procedure QUrl_toAce(retval: QByteArrayH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QUrl_toAce'; procedure QUrl_idnWhitelist(retval: QStringListH); cdecl; external Qt4PasLib name 'QUrl_idnWhitelist'; procedure QUrl_setIdnWhitelist(AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QUrl_setIdnWhitelist'; procedure QUrl_errorString(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_errorString'; function QFileSystemWatcher_create(parent: QObjectH = nil): QFileSystemWatcherH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_create'; procedure QFileSystemWatcher_destroy(handle: QFileSystemWatcherH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_destroy'; function QFileSystemWatcher_create(paths: QStringListH; parent: QObjectH = nil): QFileSystemWatcherH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_create2'; procedure QFileSystemWatcher_addPath(handle: QFileSystemWatcherH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileSystemWatcher_addPath'; procedure QFileSystemWatcher_addPaths(handle: QFileSystemWatcherH; files: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_addPaths'; procedure QFileSystemWatcher_removePath(handle: QFileSystemWatcherH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileSystemWatcher_removePath'; procedure QFileSystemWatcher_removePaths(handle: QFileSystemWatcherH; files: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_removePaths'; procedure QFileSystemWatcher_files(handle: QFileSystemWatcherH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_files'; procedure QFileSystemWatcher_directories(handle: QFileSystemWatcherH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_directories'; type QFileSystemWatcher_fileChanged_Event = procedure (path: PWideString) of object cdecl; QFileSystemWatcher_directoryChanged_Event = procedure (path: PWideString) of object cdecl; type QApplicationType = ( // QApplication::Type (1) QApplicationTty, QApplicationGuiClient, QApplicationGuiServer ); QApplicationColorSpec = ( //QApplication::ColorSpec (2) QApplicationNormalColor = 0, QApplicationCustomColor = 1, QApplicationManyColor = 2 ); function QApplication_create(argc: PInteger; argv: PPAnsiChar; AnonParam3: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create'; procedure QApplication_destroy(handle: QApplicationH); cdecl; external Qt4PasLib name 'QApplication_destroy'; function QApplication_create(argc: PInteger; argv: PPAnsiChar; GUIenabled: Boolean; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create2'; function QApplication_create(argc: PInteger; argv: PPAnsiChar; AnonParam3: QApplicationType; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create3'; {$ifdef BINUX } function QApplication_create(dpy: PDisplay; visual: QtHANDLE = 0; cmap: QtHANDLE = 0; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create4'; function QApplication_create(dpy: PDisplay; argc: PInteger; argv: PPAnsiChar; visual: QtHANDLE = 0; cmap: QtHANDLE = 0; AnonParam6: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create5'; {$endif} function QApplication_type(): QApplicationType; cdecl; external Qt4PasLib name 'QApplication_type'; function QApplication_style(): QStyleH; cdecl; external Qt4PasLib name 'QApplication_style'; procedure QApplication_setStyle(AnonParam1: QStyleH); cdecl; external Qt4PasLib name 'QApplication_setStyle'; function QApplication_setStyle(AnonParam1: PWideString): QStyleH; cdecl; external Qt4PasLib name 'QApplication_setStyle2'; function QApplication_colorSpec(): Integer; cdecl; external Qt4PasLib name 'QApplication_colorSpec'; procedure QApplication_setColorSpec(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setColorSpec'; procedure QApplication_setGraphicsSystem(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QApplication_setGraphicsSystem'; function QApplication_overrideCursor(): QCursorH; cdecl; external Qt4PasLib name 'QApplication_overrideCursor'; procedure QApplication_setOverrideCursor(AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QApplication_setOverrideCursor'; procedure QApplication_changeOverrideCursor(AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QApplication_changeOverrideCursor'; procedure QApplication_restoreOverrideCursor(); cdecl; external Qt4PasLib name 'QApplication_restoreOverrideCursor'; procedure QApplication_palette(retval: QPaletteH); cdecl; external Qt4PasLib name 'QApplication_palette'; procedure QApplication_palette(retval: QPaletteH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_palette2'; procedure QApplication_palette(retval: QPaletteH; className: PAnsiChar); cdecl; external Qt4PasLib name 'QApplication_palette3'; procedure QApplication_setPalette(AnonParam1: QPaletteH; className: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QApplication_setPalette'; procedure QApplication_font(retval: QFontH); cdecl; external Qt4PasLib name 'QApplication_font'; procedure QApplication_font(retval: QFontH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_font2'; procedure QApplication_font(retval: QFontH; className: PAnsiChar); cdecl; external Qt4PasLib name 'QApplication_font3'; procedure QApplication_setFont(AnonParam1: QFontH; className: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QApplication_setFont'; procedure QApplication_fontMetrics(retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QApplication_fontMetrics'; procedure QApplication_setWindowIcon(icon: QIconH); cdecl; external Qt4PasLib name 'QApplication_setWindowIcon'; procedure QApplication_windowIcon(retval: QIconH); cdecl; external Qt4PasLib name 'QApplication_windowIcon'; function QApplication_desktop(): QDesktopWidgetH; cdecl; external Qt4PasLib name 'QApplication_desktop'; function QApplication_activePopupWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activePopupWidget'; function QApplication_activeModalWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activeModalWidget'; function QApplication_clipboard(): QClipboardH; cdecl; external Qt4PasLib name 'QApplication_clipboard'; function QApplication_focusWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_focusWidget'; function QApplication_activeWindow(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activeWindow'; procedure QApplication_setActiveWindow(act: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_setActiveWindow'; function QApplication_widgetAt(p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_widgetAt'; function QApplication_widgetAt(x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_widgetAt2'; function QApplication_topLevelAt(p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_topLevelAt'; function QApplication_topLevelAt(x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_topLevelAt2'; procedure QApplication_syncX(); cdecl; external Qt4PasLib name 'QApplication_syncX'; procedure QApplication_beep(); cdecl; external Qt4PasLib name 'QApplication_beep'; procedure QApplication_alert(widget: QWidgetH; duration: Integer = 0); cdecl; external Qt4PasLib name 'QApplication_alert'; function QApplication_keyboardModifiers(): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QApplication_keyboardModifiers'; function QApplication_mouseButtons(): QtMouseButtons; cdecl; external Qt4PasLib name 'QApplication_mouseButtons'; procedure QApplication_setDesktopSettingsAware(AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QApplication_setDesktopSettingsAware'; function QApplication_desktopSettingsAware(): Boolean; cdecl; external Qt4PasLib name 'QApplication_desktopSettingsAware'; procedure QApplication_setCursorFlashTime(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setCursorFlashTime'; function QApplication_cursorFlashTime(): Integer; cdecl; external Qt4PasLib name 'QApplication_cursorFlashTime'; procedure QApplication_setDoubleClickInterval(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setDoubleClickInterval'; function QApplication_doubleClickInterval(): Integer; cdecl; external Qt4PasLib name 'QApplication_doubleClickInterval'; procedure QApplication_setKeyboardInputInterval(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setKeyboardInputInterval'; function QApplication_keyboardInputInterval(): Integer; cdecl; external Qt4PasLib name 'QApplication_keyboardInputInterval'; procedure QApplication_setWheelScrollLines(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setWheelScrollLines'; function QApplication_wheelScrollLines(): Integer; cdecl; external Qt4PasLib name 'QApplication_wheelScrollLines'; procedure QApplication_setGlobalStrut(AnonParam1: PSize); cdecl; external Qt4PasLib name 'QApplication_setGlobalStrut'; procedure QApplication_globalStrut(retval: PSize); cdecl; external Qt4PasLib name 'QApplication_globalStrut'; procedure QApplication_setStartDragTime(ms: Integer); cdecl; external Qt4PasLib name 'QApplication_setStartDragTime'; function QApplication_startDragTime(): Integer; cdecl; external Qt4PasLib name 'QApplication_startDragTime'; procedure QApplication_setStartDragDistance(l: Integer); cdecl; external Qt4PasLib name 'QApplication_setStartDragDistance'; function QApplication_startDragDistance(): Integer; cdecl; external Qt4PasLib name 'QApplication_startDragDistance'; procedure QApplication_setLayoutDirection(direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QApplication_setLayoutDirection'; function QApplication_layoutDirection(): QtLayoutDirection; cdecl; external Qt4PasLib name 'QApplication_layoutDirection'; function QApplication_isRightToLeft(): Boolean; cdecl; external Qt4PasLib name 'QApplication_isRightToLeft'; function QApplication_isLeftToRight(): Boolean; cdecl; external Qt4PasLib name 'QApplication_isLeftToRight'; function QApplication_isEffectEnabled(AnonParam1: QtUIEffect): Boolean; cdecl; external Qt4PasLib name 'QApplication_isEffectEnabled'; procedure QApplication_setEffectEnabled(AnonParam1: QtUIEffect; enable: Boolean = True); cdecl; external Qt4PasLib name 'QApplication_setEffectEnabled'; {$ifdef BINUX } function QApplication_x11EventFilter(handle: QApplicationH; AnonParam1: PEvent): Boolean; cdecl; external Qt4PasLib name 'QApplication_x11EventFilter'; function QApplication_x11ClientMessage(handle: QApplicationH; AnonParam1: QWidgetH; AnonParam2: PEvent; passive_only: Boolean): Integer; cdecl; external Qt4PasLib name 'QApplication_x11ClientMessage'; function QApplication_x11ProcessEvent(handle: QApplicationH; AnonParam1: PEvent): Integer; cdecl; external Qt4PasLib name 'QApplication_x11ProcessEvent'; {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} function QApplication_isSessionRestored(handle: QApplicationH): Boolean; cdecl; external Qt4PasLib name 'QApplication_isSessionRestored'; procedure QApplication_sessionId(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_sessionId'; procedure QApplication_sessionKey(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_sessionKey'; procedure QApplication_commitData(handle: QApplicationH; sm: QSessionManagerH); cdecl; external Qt4PasLib name 'QApplication_commitData'; procedure QApplication_saveState(handle: QApplicationH; sm: QSessionManagerH); cdecl; external Qt4PasLib name 'QApplication_saveState'; {$endif} procedure QApplication_setInputContext(handle: QApplicationH; AnonParam1: QInputContextH); cdecl; external Qt4PasLib name 'QApplication_setInputContext'; function QApplication_inputContext(handle: QApplicationH): QInputContextH; cdecl; external Qt4PasLib name 'QApplication_inputContext'; procedure QApplication_keyboardInputLocale(retval: QLocaleH); cdecl; external Qt4PasLib name 'QApplication_keyboardInputLocale'; function QApplication_keyboardInputDirection(): QtLayoutDirection; cdecl; external Qt4PasLib name 'QApplication_keyboardInputDirection'; function QApplication_exec(): Integer; cdecl; external Qt4PasLib name 'QApplication_exec'; function QApplication_notify(handle: QApplicationH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QApplication_notify'; procedure QApplication_setQuitOnLastWindowClosed(quit: Boolean); cdecl; external Qt4PasLib name 'QApplication_setQuitOnLastWindowClosed'; function QApplication_quitOnLastWindowClosed(): Boolean; cdecl; external Qt4PasLib name 'QApplication_quitOnLastWindowClosed'; procedure QApplication_styleSheet(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_styleSheet'; procedure QApplication_setStyleSheet(handle: QApplicationH; sheet: PWideString); cdecl; external Qt4PasLib name 'QApplication_setStyleSheet'; procedure QApplication_closeAllWindows(); cdecl; external Qt4PasLib name 'QApplication_closeAllWindows'; procedure QApplication_aboutQt(); cdecl; external Qt4PasLib name 'QApplication_aboutQt'; {$ifdef MSWINDOWS } procedure QApplication_winFocus(handle: QApplicationH; AnonParam1: QWidgetH; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QApplication_winFocus'; procedure QApplication_winMouseButtonUp(); cdecl; external Qt4PasLib name 'QApplication_winMouseButtonUp'; {$endif} {$ifdef DARWIN } function QApplication_macEventFilter(handle: QApplicationH; AnonParam1: EventHandlerCallRef; AnonParam2: EventRef): Boolean; cdecl; external Qt4PasLib name 'QApplication_macEventFilter'; {$endif} {$ifdef QTOPIA } function QApplication_qwsEventFilter(handle: QApplicationH; AnonParam1: QWSEventH): Boolean; cdecl; external Qt4PasLib name 'QApplication_qwsEventFilter'; function QApplication_qwsProcessEvent(handle: QApplicationH; AnonParam1: QWSEventH): Integer; cdecl; external Qt4PasLib name 'QApplication_qwsProcessEvent'; procedure QApplication_qwsSetCustomColors(handle: QApplicationH; colortable: PQRgb; start: Integer; numColors: Integer); cdecl; external Qt4PasLib name 'QApplication_qwsSetCustomColors'; function QApplication_qwsDecoration(): QDecorationH; cdecl; external Qt4PasLib name 'QApplication_qwsDecoration'; procedure QApplication_qwsSetDecoration(AnonParam1: QDecorationH); cdecl; external Qt4PasLib name 'QApplication_qwsSetDecoration'; function QApplication_qwsSetDecoration(decoration: PWideString): QDecorationH; cdecl; external Qt4PasLib name 'QApplication_qwsSetDecoration2'; {$endif} type QApplication_lastWindowClosed_Event = procedure () of object cdecl; QApplication_focusChanged_Event = procedure (old: QWidgetH; now: QWidgetH) of object cdecl; QApplication_fontDatabaseChanged_Event = procedure () of object cdecl; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN) } QApplication_commitDataRequest_Event = procedure (sessionManager: QSessionManagerH) of object cdecl; QApplication_saveStateRequest_Event = procedure (sessionManager: QSessionManagerH) of object cdecl; {$endif} procedure QWhatsThis_enterWhatsThisMode(); cdecl; external Qt4PasLib name 'QWhatsThis_enterWhatsThisMode'; function QWhatsThis_inWhatsThisMode(): Boolean; cdecl; external Qt4PasLib name 'QWhatsThis_inWhatsThisMode'; procedure QWhatsThis_leaveWhatsThisMode(); cdecl; external Qt4PasLib name 'QWhatsThis_leaveWhatsThisMode'; procedure QWhatsThis_showText(pos: PQtPoint; text: PWideString; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QWhatsThis_showText'; procedure QWhatsThis_hideText(); cdecl; external Qt4PasLib name 'QWhatsThis_hideText'; function QWhatsThis_createAction(parent: QObjectH = nil): QActionH; cdecl; external Qt4PasLib name 'QWhatsThis_createAction'; type QPaletteColorGroup = cardinal; // QPalette::ColorGroup (4) const QPaletteActive = 0 { $0 }; QPaletteDisabled = 1 { $1 }; QPaletteInactive = 2 { $2 }; QPaletteNColorGroups = 3 { $3 }; QPaletteCurrent = 4 { $4 }; QPaletteAll = 5 { $5 }; QPaletteNormal = 0 { $0 }; type QPaletteColorRole = cardinal; // QPalette::ColorRole (4) const QPaletteWindowText = 0 { $0 }; QPaletteButton = 1 { $1 }; QPaletteLight = 2 { $2 }; QPaletteMidlight = 3 { $3 }; QPaletteDark = 4 { $4 }; QPaletteMid = 5 { $5 }; QPaletteText = 6 { $6 }; QPaletteBrightText = 7 { $7 }; QPaletteButtonText = 8 { $8 }; QPaletteBase = 9 { $9 }; QPaletteWindow = 10 { $a }; QPaletteShadow = 11 { $b }; QPaletteHighlight = 12 { $c }; QPaletteHighlightedText = 13 { $d }; QPaletteLink = 14 { $e }; QPaletteLinkVisited = 15 { $f }; QPaletteAlternateBase = 16 { $10 }; QPaletteNoRole = 17 { $11 }; QPaletteToolTipBase = 18 { $12 }; QPaletteToolTipText = 19 { $13 }; QPaletteNColorRoles = 20 { $14 }; QPaletteForeground = 0 { $0 }; QPaletteBackground = 10 { $a }; function QPalette_create(): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create'; procedure QPalette_destroy(handle: QPaletteH); cdecl; external Qt4PasLib name 'QPalette_destroy'; function QPalette_create(button: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create2'; function QPalette_create(button: QtGlobalColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create3'; function QPalette_create(button: PQColor; window: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create4'; function QPalette_create(windowText: QBrushH; button: QBrushH; light: QBrushH; dark: QBrushH; mid: QBrushH; text: QBrushH; bright_text: QBrushH; base: QBrushH; window: QBrushH): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create5'; function QPalette_create(windowText: PQColor; window: PQColor; light: PQColor; dark: PQColor; mid: PQColor; text: PQColor; base: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create6'; function QPalette_create(palette: QPaletteH): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create7'; function QPalette_currentColorGroup(handle: QPaletteH): QPaletteColorGroup; cdecl; external Qt4PasLib name 'QPalette_currentColorGroup'; procedure QPalette_setCurrentColorGroup(handle: QPaletteH; cg: QPaletteColorGroup); cdecl; external Qt4PasLib name 'QPalette_setCurrentColorGroup'; function QPalette_color(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): PQColor; cdecl; external Qt4PasLib name 'QPalette_color'; function QPalette_brush(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brush'; procedure QPalette_setColor(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole; color: PQColor); cdecl; external Qt4PasLib name 'QPalette_setColor'; procedure QPalette_setColor(handle: QPaletteH; cr: QPaletteColorRole; color: PQColor); cdecl; external Qt4PasLib name 'QPalette_setColor2'; procedure QPalette_setBrush(handle: QPaletteH; cr: QPaletteColorRole; brush: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setBrush'; function QPalette_isBrushSet(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): Boolean; cdecl; external Qt4PasLib name 'QPalette_isBrushSet'; procedure QPalette_setBrush(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole; brush: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setBrush2'; procedure QPalette_setColorGroup(handle: QPaletteH; cr: QPaletteColorGroup; windowText: QBrushH; button: QBrushH; light: QBrushH; dark: QBrushH; mid: QBrushH; text: QBrushH; bright_text: QBrushH; base: QBrushH; window: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setColorGroup'; function QPalette_isEqual(handle: QPaletteH; cr1: QPaletteColorGroup; cr2: QPaletteColorGroup): Boolean; cdecl; external Qt4PasLib name 'QPalette_isEqual'; function QPalette_color(handle: QPaletteH; cr: QPaletteColorRole): PQColor; cdecl; external Qt4PasLib name 'QPalette_color2'; function QPalette_brush(handle: QPaletteH; cr: QPaletteColorRole): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brush2'; function QPalette_foreground(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_foreground'; function QPalette_windowText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_windowText'; function QPalette_button(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_button'; function QPalette_light(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_light'; function QPalette_dark(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_dark'; function QPalette_mid(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_mid'; function QPalette_text(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_text'; function QPalette_base(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_base'; function QPalette_alternateBase(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_alternateBase'; function QPalette_toolTipBase(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_toolTipBase'; function QPalette_toolTipText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_toolTipText'; function QPalette_background(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_background'; function QPalette_window(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_window'; function QPalette_midlight(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_midlight'; function QPalette_brightText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brightText'; function QPalette_buttonText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_buttonText'; function QPalette_shadow(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_shadow'; function QPalette_highlight(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_highlight'; function QPalette_highlightedText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_highlightedText'; function QPalette_link(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_link'; function QPalette_linkVisited(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_linkVisited'; function QPalette_isCopyOf(handle: QPaletteH; p: QPaletteH): Boolean; cdecl; external Qt4PasLib name 'QPalette_isCopyOf'; function QPalette_serialNumber(handle: QPaletteH): Integer; cdecl; external Qt4PasLib name 'QPalette_serialNumber'; function QPalette_cacheKey(handle: QPaletteH): int64; cdecl; external Qt4PasLib name 'QPalette_cacheKey'; procedure QPalette_resolve(handle: QPaletteH; retval: QPaletteH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QPalette_resolve'; function QPalette_resolve(handle: QPaletteH): LongWord; cdecl; external Qt4PasLib name 'QPalette_resolve2'; procedure QPalette_resolve(handle: QPaletteH; mask: LongWord); cdecl; external Qt4PasLib name 'QPalette_resolve3'; type QSizePolicyPolicyFlag = ( //QSizePolicy::PolicyFlag (2) QSizePolicyGrowFlag = 1, QSizePolicyExpandFlag = 2, QSizePolicyShrinkFlag = 4, QSizePolicyIgnoreFlag = 8 ); type QSizePolicyControlType = cardinal; // QSizePolicy::ControlType QSizePolicyControlTypes = QSizePolicyControlType; //QFlags<> (3) const QSizePolicyDefaultType = $00000001; QSizePolicyButtonBox = $00000002; QSizePolicyCheckBox = $00000004; QSizePolicyComboBox = $00000008; QSizePolicyFrame = $00000010; QSizePolicyGroupBox = $00000020; QSizePolicyLabel = $00000040; QSizePolicyLine = $00000080; QSizePolicyLineEdit = $00000100; QSizePolicyPushButton = $00000200; QSizePolicyRadioButton = $00000400; QSizePolicySlider = $00000800; QSizePolicySpinBox = $00001000; QSizePolicyTabWidget = $00002000; QSizePolicyToolButton = $00004000; type QSizePolicyPolicy = cardinal; // QSizePolicy::Policy (4) const QSizePolicyFixed = 0 { $0 }; QSizePolicyMinimum = 1 { $1 }; QSizePolicyMaximum = 4 { $4 }; QSizePolicyPreferred = 5 { $5 }; QSizePolicyMinimumExpanding = 3 { $3 }; QSizePolicyExpanding = 7 { $7 }; QSizePolicyIgnored = 13 { $d }; function QSizePolicy_create(): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create'; procedure QSizePolicy_destroy(handle: QSizePolicyH); cdecl; external Qt4PasLib name 'QSizePolicy_destroy'; function QSizePolicy_create(horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create2'; function QSizePolicy_create(horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy; _type: QSizePolicyControlType): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create3'; function QSizePolicy_horizontalPolicy(handle: QSizePolicyH): QSizePolicyPolicy; cdecl; external Qt4PasLib name 'QSizePolicy_horizontalPolicy'; function QSizePolicy_verticalPolicy(handle: QSizePolicyH): QSizePolicyPolicy; cdecl; external Qt4PasLib name 'QSizePolicy_verticalPolicy'; function QSizePolicy_controlType(handle: QSizePolicyH): QSizePolicyControlType; cdecl; external Qt4PasLib name 'QSizePolicy_controlType'; procedure QSizePolicy_setHorizontalPolicy(handle: QSizePolicyH; d: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QSizePolicy_setHorizontalPolicy'; procedure QSizePolicy_setVerticalPolicy(handle: QSizePolicyH; d: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QSizePolicy_setVerticalPolicy'; procedure QSizePolicy_setControlType(handle: QSizePolicyH; _type: QSizePolicyControlType); cdecl; external Qt4PasLib name 'QSizePolicy_setControlType'; function QSizePolicy_expandingDirections(handle: QSizePolicyH): QtOrientations; cdecl; external Qt4PasLib name 'QSizePolicy_expandingDirections'; procedure QSizePolicy_setHeightForWidth(handle: QSizePolicyH; b: Boolean); cdecl; external Qt4PasLib name 'QSizePolicy_setHeightForWidth'; function QSizePolicy_hasHeightForWidth(handle: QSizePolicyH): Boolean; cdecl; external Qt4PasLib name 'QSizePolicy_hasHeightForWidth'; function QSizePolicy_horizontalStretch(handle: QSizePolicyH): Integer; cdecl; external Qt4PasLib name 'QSizePolicy_horizontalStretch'; function QSizePolicy_verticalStretch(handle: QSizePolicyH): Integer; cdecl; external Qt4PasLib name 'QSizePolicy_verticalStretch'; procedure QSizePolicy_setHorizontalStretch(handle: QSizePolicyH; stretchFactor: char); cdecl; external Qt4PasLib name 'QSizePolicy_setHorizontalStretch'; procedure QSizePolicy_setVerticalStretch(handle: QSizePolicyH; stretchFactor: char); cdecl; external Qt4PasLib name 'QSizePolicy_setVerticalStretch'; procedure QSizePolicy_transpose(handle: QSizePolicyH); cdecl; external Qt4PasLib name 'QSizePolicy_transpose'; type QKeySequenceStandardKey = ( // QKeySequence::StandardKey (1) QKeySequenceUnknownKey, QKeySequenceHelpContents, QKeySequenceWhatsThis, QKeySequenceOpen, QKeySequenceClose, QKeySequenceSave, QKeySequenceNew, QKeySequenceDelete, QKeySequenceCut, QKeySequenceCopy, QKeySequencePaste, QKeySequenceUndo, QKeySequenceRedo, QKeySequenceBack, QKeySequenceForward, QKeySequenceRefresh, QKeySequenceZoomIn, QKeySequenceZoomOut, QKeySequencePrint, QKeySequenceAddTab, QKeySequenceNextChild, QKeySequencePreviousChild, QKeySequenceFind, QKeySequenceFindNext, QKeySequenceFindPrevious, QKeySequenceReplace, QKeySequenceSelectAll, QKeySequenceBold, QKeySequenceItalic, QKeySequenceUnderline, QKeySequenceMoveToNextChar, QKeySequenceMoveToPreviousChar, QKeySequenceMoveToNextWord, QKeySequenceMoveToPreviousWord, QKeySequenceMoveToNextLine, QKeySequenceMoveToPreviousLine, QKeySequenceMoveToNextPage, QKeySequenceMoveToPreviousPage, QKeySequenceMoveToStartOfLine, QKeySequenceMoveToEndOfLine, QKeySequenceMoveToStartOfBlock, QKeySequenceMoveToEndOfBlock, QKeySequenceMoveToStartOfDocument, QKeySequenceMoveToEndOfDocument, QKeySequenceSelectNextChar, QKeySequenceSelectPreviousChar, QKeySequenceSelectNextWord, QKeySequenceSelectPreviousWord, QKeySequenceSelectNextLine, QKeySequenceSelectPreviousLine, QKeySequenceSelectNextPage, QKeySequenceSelectPreviousPage, QKeySequenceSelectStartOfLine, QKeySequenceSelectEndOfLine, QKeySequenceSelectStartOfBlock, QKeySequenceSelectEndOfBlock, QKeySequenceSelectStartOfDocument, QKeySequenceSelectEndOfDocument, QKeySequenceDeleteStartOfWord, QKeySequenceDeleteEndOfWord, QKeySequenceDeleteEndOfLine, QKeySequenceInsertParagraphSeparator, QKeySequenceInsertLineSeparator, QKeySequenceSaveAs ); QKeySequenceSequenceMatch = ( // QKeySequence::SequenceMatch (1) QKeySequenceNoMatch, QKeySequencePartialMatch, QKeySequenceExactMatch ); QKeySequenceSequenceFormat = ( // QKeySequence::SequenceFormat (1) QKeySequenceNativeText, QKeySequencePortableText ); function QKeySequence_create(): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create'; procedure QKeySequence_destroy(handle: QKeySequenceH); cdecl; external Qt4PasLib name 'QKeySequence_destroy'; function QKeySequence_create(key: PWideString): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create2'; function QKeySequence_create(k1: Integer; k2: Integer = 0; k3: Integer = 0; k4: Integer = 0): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create3'; function QKeySequence_create(ks: QKeySequenceH): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create4'; function QKeySequence_create(key: QKeySequenceStandardKey): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create5'; function QKeySequence_count(handle: QKeySequenceH): LongWord; cdecl; external Qt4PasLib name 'QKeySequence_count'; function QKeySequence_isEmpty(handle: QKeySequenceH): Boolean; cdecl; external Qt4PasLib name 'QKeySequence_isEmpty'; procedure QKeySequence_toString(handle: QKeySequenceH; retval: PWideString; format: QKeySequenceSequenceFormat = QKeySequencePortableText); cdecl; external Qt4PasLib name 'QKeySequence_toString'; procedure QKeySequence_fromString(retval: QKeySequenceH; str: PWideString; format: QKeySequenceSequenceFormat = QKeySequencePortableText); cdecl; external Qt4PasLib name 'QKeySequence_fromString'; function QKeySequence_matches(handle: QKeySequenceH; seq: QKeySequenceH): QKeySequenceSequenceMatch; cdecl; external Qt4PasLib name 'QKeySequence_matches'; procedure QKeySequence_mnemonic(retval: QKeySequenceH; text: PWideString); cdecl; external Qt4PasLib name 'QKeySequence_mnemonic'; function QKeySequence_isDetached(handle: QKeySequenceH): Boolean; cdecl; external Qt4PasLib name 'QKeySequence_isDetached'; type QWidgetRenderFlag = cardinal; // QWidget::RenderFlag QWidgetRenderFlags = QWidgetRenderFlag; //QFlags<> (3) const QWidgetDrawWindowBackground = $1; QWidgetDrawChildren = $2; QWidgetIgnoreMask = $4; function QWidget_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_create'; procedure QWidget_destroy(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_destroy'; function QWidget_devType(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_devType'; function QWidget_winId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_winId'; procedure QWidget_createWinId(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_createWinId'; function QWidget_internalWinId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_internalWinId'; function QWidget_effectiveWinId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_effectiveWinId'; function QWidget_style(handle: QWidgetH): QStyleH; cdecl; external Qt4PasLib name 'QWidget_style'; procedure QWidget_setStyle(handle: QWidgetH; AnonParam1: QStyleH); cdecl; external Qt4PasLib name 'QWidget_setStyle'; function QWidget_isTopLevel(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isTopLevel'; function QWidget_isWindow(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isWindow'; function QWidget_isModal(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isModal'; function QWidget_windowModality(handle: QWidgetH): QtWindowModality; cdecl; external Qt4PasLib name 'QWidget_windowModality'; procedure QWidget_setWindowModality(handle: QWidgetH; windowModality: QtWindowModality); cdecl; external Qt4PasLib name 'QWidget_setWindowModality'; function QWidget_isEnabled(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabled'; function QWidget_isEnabledTo(handle: QWidgetH; AnonParam1: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabledTo'; function QWidget_isEnabledToTLW(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabledToTLW'; procedure QWidget_setEnabled(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setEnabled'; procedure QWidget_setDisabled(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setDisabled'; procedure QWidget_setWindowModified(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setWindowModified'; procedure QWidget_frameGeometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_frameGeometry'; procedure QWidget_geometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_geometry'; procedure QWidget_normalGeometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_normalGeometry'; function QWidget_x(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_x'; function QWidget_y(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_y'; procedure QWidget_pos(handle: QWidgetH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_pos'; procedure QWidget_frameSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_frameSize'; procedure QWidget_size(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_size'; function QWidget_width(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_width'; function QWidget_height(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_height'; procedure QWidget_rect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_rect'; procedure QWidget_childrenRect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_childrenRect'; procedure QWidget_childrenRegion(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_childrenRegion'; procedure QWidget_minimumSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_minimumSize'; procedure QWidget_maximumSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_maximumSize'; function QWidget_minimumWidth(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_minimumWidth'; function QWidget_minimumHeight(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_minimumHeight'; function QWidget_maximumWidth(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_maximumWidth'; function QWidget_maximumHeight(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_maximumHeight'; procedure QWidget_setMinimumSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setMinimumSize'; procedure QWidget_setMinimumSize(handle: QWidgetH; minw: Integer; minh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumSize2'; procedure QWidget_setMaximumSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setMaximumSize'; procedure QWidget_setMaximumSize(handle: QWidgetH; maxw: Integer; maxh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumSize2'; procedure QWidget_setMinimumWidth(handle: QWidgetH; minw: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumWidth'; procedure QWidget_setMinimumHeight(handle: QWidgetH; minh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumHeight'; procedure QWidget_setMaximumWidth(handle: QWidgetH; maxw: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumWidth'; procedure QWidget_setMaximumHeight(handle: QWidgetH; maxh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumHeight'; procedure QWidget_sizeIncrement(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_sizeIncrement'; procedure QWidget_setSizeIncrement(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setSizeIncrement'; procedure QWidget_setSizeIncrement(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setSizeIncrement2'; procedure QWidget_baseSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_baseSize'; procedure QWidget_setBaseSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setBaseSize'; procedure QWidget_setBaseSize(handle: QWidgetH; basew: Integer; baseh: Integer); cdecl; external Qt4PasLib name 'QWidget_setBaseSize2'; procedure QWidget_setFixedSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setFixedSize'; procedure QWidget_setFixedSize(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedSize2'; procedure QWidget_setFixedWidth(handle: QWidgetH; w: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedWidth'; procedure QWidget_setFixedHeight(handle: QWidgetH; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedHeight'; procedure QWidget_mapToGlobal(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapToGlobal'; procedure QWidget_mapFromGlobal(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFromGlobal'; procedure QWidget_mapToParent(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapToParent'; procedure QWidget_mapFromParent(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFromParent'; procedure QWidget_mapTo(handle: QWidgetH; retval: PQtPoint; AnonParam1: QWidgetH; AnonParam2: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapTo'; procedure QWidget_mapFrom(handle: QWidgetH; retval: PQtPoint; AnonParam1: QWidgetH; AnonParam2: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFrom'; function QWidget_window(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_window'; function QWidget_nativeParentWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_nativeParentWidget'; function QWidget_topLevelWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_topLevelWidget'; function QWidget_palette(handle: QWidgetH): QPaletteH; cdecl; external Qt4PasLib name 'QWidget_palette'; procedure QWidget_setPalette(handle: QWidgetH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QWidget_setPalette'; procedure QWidget_setBackgroundRole(handle: QWidgetH; AnonParam1: QPaletteColorRole); cdecl; external Qt4PasLib name 'QWidget_setBackgroundRole'; function QWidget_backgroundRole(handle: QWidgetH): QPaletteColorRole; cdecl; external Qt4PasLib name 'QWidget_backgroundRole'; procedure QWidget_setForegroundRole(handle: QWidgetH; AnonParam1: QPaletteColorRole); cdecl; external Qt4PasLib name 'QWidget_setForegroundRole'; function QWidget_foregroundRole(handle: QWidgetH): QPaletteColorRole; cdecl; external Qt4PasLib name 'QWidget_foregroundRole'; function QWidget_font(handle: QWidgetH): QFontH; cdecl; external Qt4PasLib name 'QWidget_font'; procedure QWidget_setFont(handle: QWidgetH; AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QWidget_setFont'; procedure QWidget_fontMetrics(handle: QWidgetH; retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QWidget_fontMetrics'; procedure QWidget_fontInfo(handle: QWidgetH; retval: QFontInfoH); cdecl; external Qt4PasLib name 'QWidget_fontInfo'; procedure QWidget_cursor(handle: QWidgetH; retval: QCursorH); cdecl; external Qt4PasLib name 'QWidget_cursor'; procedure QWidget_setCursor(handle: QWidgetH; AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QWidget_setCursor'; procedure QWidget_unsetCursor(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetCursor'; procedure QWidget_setMouseTracking(handle: QWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QWidget_setMouseTracking'; function QWidget_hasMouseTracking(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_hasMouseTracking'; function QWidget_underMouse(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_underMouse'; procedure QWidget_setMask(handle: QWidgetH; AnonParam1: QBitmapH); cdecl; external Qt4PasLib name 'QWidget_setMask'; procedure QWidget_setMask(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_setMask2'; procedure QWidget_mask(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_mask'; procedure QWidget_clearMask(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_clearMask'; procedure QWidget_render(handle: QWidgetH; target: QPaintDeviceH; targetOffset: PQtPoint; sourceRegion: QRegionH; renderFlags: QWidgetRenderFlags); cdecl; external Qt4PasLib name 'QWidget_render'; procedure QWidget_render(handle: QWidgetH; painter: QPainterH; targetOffset: PQtPoint; sourceRegion: QRegionH; renderFlags: QWidgetRenderFlags); cdecl; external Qt4PasLib name 'QWidget_render2'; procedure QWidget_setWindowTitle(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowTitle'; procedure QWidget_setStyleSheet(handle: QWidgetH; styleSheet: PWideString); cdecl; external Qt4PasLib name 'QWidget_setStyleSheet'; procedure QWidget_styleSheet(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_styleSheet'; procedure QWidget_windowTitle(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowTitle'; procedure QWidget_setWindowIcon(handle: QWidgetH; icon: QIconH); cdecl; external Qt4PasLib name 'QWidget_setWindowIcon'; procedure QWidget_windowIcon(handle: QWidgetH; retval: QIconH); cdecl; external Qt4PasLib name 'QWidget_windowIcon'; procedure QWidget_setWindowIconText(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowIconText'; procedure QWidget_windowIconText(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowIconText'; procedure QWidget_setWindowRole(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowRole'; procedure QWidget_windowRole(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowRole'; procedure QWidget_setWindowFilePath(handle: QWidgetH; filePath: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowFilePath'; procedure QWidget_windowFilePath(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowFilePath'; procedure QWidget_setWindowOpacity(handle: QWidgetH; level: qreal); cdecl; external Qt4PasLib name 'QWidget_setWindowOpacity'; function QWidget_windowOpacity(handle: QWidgetH): qreal; cdecl; external Qt4PasLib name 'QWidget_windowOpacity'; function QWidget_isWindowModified(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isWindowModified'; procedure QWidget_setToolTip(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setToolTip'; procedure QWidget_toolTip(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_toolTip'; procedure QWidget_setStatusTip(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setStatusTip'; procedure QWidget_statusTip(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_statusTip'; procedure QWidget_setWhatsThis(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWhatsThis'; procedure QWidget_whatsThis(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_whatsThis'; procedure QWidget_accessibleName(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_accessibleName'; procedure QWidget_setAccessibleName(handle: QWidgetH; name: PWideString); cdecl; external Qt4PasLib name 'QWidget_setAccessibleName'; procedure QWidget_accessibleDescription(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_accessibleDescription'; procedure QWidget_setAccessibleDescription(handle: QWidgetH; description: PWideString); cdecl; external Qt4PasLib name 'QWidget_setAccessibleDescription'; procedure QWidget_setLayoutDirection(handle: QWidgetH; direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QWidget_setLayoutDirection'; function QWidget_layoutDirection(handle: QWidgetH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QWidget_layoutDirection'; procedure QWidget_unsetLayoutDirection(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetLayoutDirection'; procedure QWidget_setLocale(handle: QWidgetH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QWidget_setLocale'; procedure QWidget_locale(handle: QWidgetH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QWidget_locale'; procedure QWidget_unsetLocale(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetLocale'; function QWidget_isRightToLeft(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isRightToLeft'; function QWidget_isLeftToRight(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isLeftToRight'; procedure QWidget_setFocus(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setFocus'; function QWidget_isActiveWindow(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isActiveWindow'; procedure QWidget_activateWindow(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_activateWindow'; procedure QWidget_clearFocus(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_clearFocus'; procedure QWidget_setFocus(handle: QWidgetH; reason: QtFocusReason); cdecl; external Qt4PasLib name 'QWidget_setFocus2'; function QWidget_focusPolicy(handle: QWidgetH): QtFocusPolicy; cdecl; external Qt4PasLib name 'QWidget_focusPolicy'; procedure QWidget_setFocusPolicy(handle: QWidgetH; policy: QtFocusPolicy); cdecl; external Qt4PasLib name 'QWidget_setFocusPolicy'; function QWidget_hasFocus(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_hasFocus'; procedure QWidget_setTabOrder(AnonParam1: QWidgetH; AnonParam2: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setTabOrder'; procedure QWidget_setFocusProxy(handle: QWidgetH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setFocusProxy'; function QWidget_focusProxy(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_focusProxy'; function QWidget_contextMenuPolicy(handle: QWidgetH): QtContextMenuPolicy; cdecl; external Qt4PasLib name 'QWidget_contextMenuPolicy'; procedure QWidget_setContextMenuPolicy(handle: QWidgetH; policy: QtContextMenuPolicy); cdecl; external Qt4PasLib name 'QWidget_setContextMenuPolicy'; procedure QWidget_grabMouse(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_grabMouse'; procedure QWidget_grabMouse(handle: QWidgetH; AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QWidget_grabMouse2'; procedure QWidget_releaseMouse(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_releaseMouse'; procedure QWidget_grabKeyboard(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_grabKeyboard'; procedure QWidget_releaseKeyboard(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_releaseKeyboard'; function QWidget_grabShortcut(handle: QWidgetH; key: QKeySequenceH; context: QtShortcutContext = QtWindowShortcut): Integer; cdecl; external Qt4PasLib name 'QWidget_grabShortcut'; procedure QWidget_releaseShortcut(handle: QWidgetH; id: Integer); cdecl; external Qt4PasLib name 'QWidget_releaseShortcut'; procedure QWidget_setShortcutEnabled(handle: QWidgetH; id: Integer; enable: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setShortcutEnabled'; procedure QWidget_setShortcutAutoRepeat(handle: QWidgetH; id: Integer; enable: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setShortcutAutoRepeat'; function QWidget_mouseGrabber(): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_mouseGrabber'; function QWidget_keyboardGrabber(): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_keyboardGrabber'; function QWidget_updatesEnabled(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_updatesEnabled'; procedure QWidget_setUpdatesEnabled(handle: QWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QWidget_setUpdatesEnabled'; function QWidget_graphicsProxyWidget(handle: QWidgetH): QGraphicsProxyWidgetH; cdecl; external Qt4PasLib name 'QWidget_graphicsProxyWidget'; procedure QWidget_update(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_update'; procedure QWidget_repaint(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_repaint'; procedure QWidget_update(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_update2'; procedure QWidget_update(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_update3'; procedure QWidget_update(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_update4'; procedure QWidget_repaint(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_repaint2'; procedure QWidget_repaint(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_repaint3'; procedure QWidget_repaint(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_repaint4'; procedure QWidget_setVisible(handle: QWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QWidget_setVisible'; procedure QWidget_setHidden(handle: QWidgetH; hidden: Boolean); cdecl; external Qt4PasLib name 'QWidget_setHidden'; procedure QWidget_show(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_show'; procedure QWidget_hide(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_hide'; procedure QWidget_setShown(handle: QWidgetH; shown: Boolean); cdecl; external Qt4PasLib name 'QWidget_setShown'; procedure QWidget_showMinimized(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showMinimized'; procedure QWidget_showMaximized(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showMaximized'; procedure QWidget_showFullScreen(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showFullScreen'; procedure QWidget_showNormal(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showNormal'; function QWidget_close(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_close'; procedure QWidget_raise(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_raise'; procedure QWidget_lower(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_lower'; procedure QWidget_stackUnder(handle: QWidgetH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_stackUnder'; procedure QWidget_move(handle: QWidgetH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QWidget_move'; procedure QWidget_move(handle: QWidgetH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_move2'; procedure QWidget_resize(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_resize'; procedure QWidget_resize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_resize2'; procedure QWidget_setGeometry(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setGeometry'; procedure QWidget_setGeometry(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_setGeometry2'; procedure QWidget_saveGeometry(handle: QWidgetH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QWidget_saveGeometry'; function QWidget_restoreGeometry(handle: QWidgetH; geometry: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QWidget_restoreGeometry'; procedure QWidget_adjustSize(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_adjustSize'; function QWidget_isVisible(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isVisible'; function QWidget_isVisibleTo(handle: QWidgetH; AnonParam1: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isVisibleTo'; function QWidget_isHidden(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isHidden'; function QWidget_isMinimized(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isMinimized'; function QWidget_isMaximized(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isMaximized'; function QWidget_isFullScreen(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isFullScreen'; function QWidget_windowState(handle: QWidgetH): QtWindowStates; cdecl; external Qt4PasLib name 'QWidget_windowState'; procedure QWidget_setWindowState(handle: QWidgetH; state: QtWindowStates); cdecl; external Qt4PasLib name 'QWidget_setWindowState'; procedure QWidget_overrideWindowState(handle: QWidgetH; state: QtWindowStates); cdecl; external Qt4PasLib name 'QWidget_overrideWindowState'; procedure QWidget_sizeHint(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_sizeHint'; procedure QWidget_minimumSizeHint(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_minimumSizeHint'; procedure QWidget_sizePolicy(handle: QWidgetH; retval: PQSizePolicy); cdecl; external Qt4PasLib name 'QWidget_sizePolicy'; procedure QWidget_setSizePolicy(handle: QWidgetH; AnonParam1: PQSizePolicy); cdecl; external Qt4PasLib name 'QWidget_setSizePolicy'; procedure QWidget_setSizePolicy(handle: QWidgetH; horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QWidget_setSizePolicy2'; function QWidget_heightForWidth(handle: QWidgetH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QWidget_heightForWidth'; procedure QWidget_visibleRegion(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_visibleRegion'; procedure QWidget_setContentsMargins(handle: QWidgetH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QWidget_setContentsMargins'; procedure QWidget_getContentsMargins(handle: QWidgetH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QWidget_getContentsMargins'; procedure QWidget_contentsRect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_contentsRect'; function QWidget_layout(handle: QWidgetH): QLayoutH; cdecl; external Qt4PasLib name 'QWidget_layout'; procedure QWidget_setLayout(handle: QWidgetH; AnonParam1: QLayoutH); cdecl; external Qt4PasLib name 'QWidget_setLayout'; procedure QWidget_updateGeometry(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_updateGeometry'; procedure QWidget_setParent(handle: QWidgetH; parent: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setParent'; procedure QWidget_setParent(handle: QWidgetH; parent: QWidgetH; f: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_setParent2'; procedure QWidget_scroll(handle: QWidgetH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QWidget_scroll'; procedure QWidget_scroll(handle: QWidgetH; dx: Integer; dy: Integer; AnonParam3: PRect); cdecl; external Qt4PasLib name 'QWidget_scroll2'; function QWidget_focusWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_focusWidget'; function QWidget_nextInFocusChain(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_nextInFocusChain'; function QWidget_acceptDrops(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_acceptDrops'; procedure QWidget_setAcceptDrops(handle: QWidgetH; _on: Boolean); cdecl; external Qt4PasLib name 'QWidget_setAcceptDrops'; procedure QWidget_addAction(handle: QWidgetH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_addAction'; procedure QWidget_addActions(handle: QWidgetH; actions: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_addActions'; procedure QWidget_insertAction(handle: QWidgetH; before: QActionH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_insertAction'; procedure QWidget_insertActions(handle: QWidgetH; before: QActionH; actions: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_insertActions'; procedure QWidget_removeAction(handle: QWidgetH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_removeAction'; procedure QWidget_actions(handle: QWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_actions'; function QWidget_parentWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_parentWidget'; procedure QWidget_setWindowFlags(handle: QWidgetH; _type: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_setWindowFlags'; function QWidget_windowFlags(handle: QWidgetH): QtWindowFlags; cdecl; external Qt4PasLib name 'QWidget_windowFlags'; procedure QWidget_overrideWindowFlags(handle: QWidgetH; _type: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_overrideWindowFlags'; function QWidget_windowType(handle: QWidgetH): QtWindowType; cdecl; external Qt4PasLib name 'QWidget_windowType'; function QWidget_find(AnonParam1: LongWord): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_find'; function QWidget_childAt(handle: QWidgetH; x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_childAt'; function QWidget_childAt(handle: QWidgetH; p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_childAt2'; {$ifdef BINUX } function QWidget_x11Info(handle: QWidgetH): QX11InfoH; cdecl; external Qt4PasLib name 'QWidget_x11Info'; function QWidget_x11PictureHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_x11PictureHandle'; {$endif} {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} function QWidget_handle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_handle'; {$endif} procedure QWidget_setAttribute(handle: QWidgetH; AnonParam1: QtWidgetAttribute; _on: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setAttribute'; function QWidget_testAttribute(handle: QWidgetH; AnonParam1: QtWidgetAttribute): Boolean; cdecl; external Qt4PasLib name 'QWidget_testAttribute'; function QWidget_paintEngine(handle: QWidgetH): QPaintEngineH; cdecl; external Qt4PasLib name 'QWidget_paintEngine'; procedure QWidget_ensurePolished(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_ensurePolished'; function QWidget_inputContext(handle: QWidgetH): QInputContextH; cdecl; external Qt4PasLib name 'QWidget_inputContext'; procedure QWidget_setInputContext(handle: QWidgetH; AnonParam1: QInputContextH); cdecl; external Qt4PasLib name 'QWidget_setInputContext'; function QWidget_isAncestorOf(handle: QWidgetH; child: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isAncestorOf'; function QWidget_autoFillBackground(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_autoFillBackground'; procedure QWidget_setAutoFillBackground(handle: QWidgetH; enabled: Boolean); cdecl; external Qt4PasLib name 'QWidget_setAutoFillBackground'; procedure QWidget_inputMethodQuery(handle: QWidgetH; retval: QVariantH; AnonParam1: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWidget_inputMethodQuery'; {$ifdef MSWINDOWS } function QWidget_getDC(handle: QWidgetH): QHDC; cdecl; external Qt4PasLib name 'QWidget_getDC'; procedure QWidget_releaseDC(handle: QWidgetH; AnonParam1: QHDC); cdecl; external Qt4PasLib name 'QWidget_releaseDC'; {$endif} {$ifdef DARWIN } function QWidget_macQDHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_macQDHandle'; function QWidget_macCGHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_macCGHandle'; {$endif} function QWidget_to_QPaintDevice(handle: QWidgetH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QWidget_to_QPaintDevice'; type QWidget_customContextMenuRequested_Event = procedure (pos: PQtPoint) of object cdecl; procedure QLayoutItem_sizeHint(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_sizeHint'; procedure QLayoutItem_minimumSize(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_minimumSize'; procedure QLayoutItem_maximumSize(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_maximumSize'; function QLayoutItem_expandingDirections(handle: QLayoutItemH): QtOrientations; cdecl; external Qt4PasLib name 'QLayoutItem_expandingDirections'; procedure QLayoutItem_setGeometry(handle: QLayoutItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QLayoutItem_setGeometry'; procedure QLayoutItem_geometry(handle: QLayoutItemH; retval: PRect); cdecl; external Qt4PasLib name 'QLayoutItem_geometry'; function QLayoutItem_isEmpty(handle: QLayoutItemH): Boolean; cdecl; external Qt4PasLib name 'QLayoutItem_isEmpty'; function QLayoutItem_hasHeightForWidth(handle: QLayoutItemH): Boolean; cdecl; external Qt4PasLib name 'QLayoutItem_hasHeightForWidth'; function QLayoutItem_heightForWidth(handle: QLayoutItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLayoutItem_heightForWidth'; function QLayoutItem_minimumHeightForWidth(handle: QLayoutItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLayoutItem_minimumHeightForWidth'; procedure QLayoutItem_invalidate(handle: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayoutItem_invalidate'; function QLayoutItem_widget(handle: QLayoutItemH): QWidgetH; cdecl; external Qt4PasLib name 'QLayoutItem_widget'; function QLayoutItem_layout(handle: QLayoutItemH): QLayoutH; cdecl; external Qt4PasLib name 'QLayoutItem_layout'; function QLayoutItem_spacerItem(handle: QLayoutItemH): QSpacerItemH; cdecl; external Qt4PasLib name 'QLayoutItem_spacerItem'; function QLayoutItem_alignment(handle: QLayoutItemH): QtAlignment; cdecl; external Qt4PasLib name 'QLayoutItem_alignment'; procedure QLayoutItem_setAlignment(handle: QLayoutItemH; a: QtAlignment); cdecl; external Qt4PasLib name 'QLayoutItem_setAlignment'; function QLayoutItem_controlTypes(handle: QLayoutItemH): QSizePolicyControlTypes; cdecl; external Qt4PasLib name 'QLayoutItem_controlTypes'; function QSpacerItem_create(w: Integer; h: Integer; hData: QSizePolicyPolicy = QSizePolicyMinimum; vData: QSizePolicyPolicy = QSizePolicyMinimum): QSpacerItemH; cdecl; external Qt4PasLib name 'QSpacerItem_create'; procedure QSpacerItem_destroy(handle: QSpacerItemH); cdecl; external Qt4PasLib name 'QSpacerItem_destroy'; procedure QSpacerItem_changeSize(handle: QSpacerItemH; w: Integer; h: Integer; hData: QSizePolicyPolicy = QSizePolicyMinimum; vData: QSizePolicyPolicy = QSizePolicyMinimum); cdecl; external Qt4PasLib name 'QSpacerItem_changeSize'; procedure QSpacerItem_sizeHint(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_sizeHint'; procedure QSpacerItem_minimumSize(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_minimumSize'; procedure QSpacerItem_maximumSize(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_maximumSize'; function QSpacerItem_expandingDirections(handle: QSpacerItemH): QtOrientations; cdecl; external Qt4PasLib name 'QSpacerItem_expandingDirections'; function QSpacerItem_isEmpty(handle: QSpacerItemH): Boolean; cdecl; external Qt4PasLib name 'QSpacerItem_isEmpty'; procedure QSpacerItem_setGeometry(handle: QSpacerItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QSpacerItem_setGeometry'; procedure QSpacerItem_geometry(handle: QSpacerItemH; retval: PRect); cdecl; external Qt4PasLib name 'QSpacerItem_geometry'; function QSpacerItem_spacerItem(handle: QSpacerItemH): QSpacerItemH; cdecl; external Qt4PasLib name 'QSpacerItem_spacerItem'; function QWidgetItem_create(w: QWidgetH): QWidgetItemH; cdecl; external Qt4PasLib name 'QWidgetItem_create'; procedure QWidgetItem_destroy(handle: QWidgetItemH); cdecl; external Qt4PasLib name 'QWidgetItem_destroy'; procedure QWidgetItem_sizeHint(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_sizeHint'; procedure QWidgetItem_minimumSize(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_minimumSize'; procedure QWidgetItem_maximumSize(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_maximumSize'; function QWidgetItem_expandingDirections(handle: QWidgetItemH): QtOrientations; cdecl; external Qt4PasLib name 'QWidgetItem_expandingDirections'; function QWidgetItem_isEmpty(handle: QWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QWidgetItem_isEmpty'; procedure QWidgetItem_setGeometry(handle: QWidgetItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidgetItem_setGeometry'; procedure QWidgetItem_geometry(handle: QWidgetItemH; retval: PRect); cdecl; external Qt4PasLib name 'QWidgetItem_geometry'; function QWidgetItem_widget(handle: QWidgetItemH): QWidgetH; cdecl; external Qt4PasLib name 'QWidgetItem_widget'; function QWidgetItem_hasHeightForWidth(handle: QWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QWidgetItem_hasHeightForWidth'; function QWidgetItem_heightForWidth(handle: QWidgetItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QWidgetItem_heightForWidth'; type QLayoutSizeConstraint = ( // QLayout::SizeConstraint (1) QLayoutSetDefaultConstraint, QLayoutSetNoConstraint, QLayoutSetMinimumSize, QLayoutSetFixedSize, QLayoutSetMaximumSize, QLayoutSetMinAndMaxSize ); function QLayout_margin(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_margin'; function QLayout_spacing(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_spacing'; procedure QLayout_setMargin(handle: QLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLayout_setMargin'; procedure QLayout_setSpacing(handle: QLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLayout_setSpacing'; procedure QLayout_setContentsMargins(handle: QLayoutH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QLayout_setContentsMargins'; procedure QLayout_getContentsMargins(handle: QLayoutH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QLayout_getContentsMargins'; procedure QLayout_contentsRect(handle: QLayoutH; retval: PRect); cdecl; external Qt4PasLib name 'QLayout_contentsRect'; function QLayout_setAlignment(handle: QLayoutH; w: QWidgetH; alignment: QtAlignment): Boolean; cdecl; external Qt4PasLib name 'QLayout_setAlignment'; function QLayout_setAlignment(handle: QLayoutH; l: QLayoutH; alignment: QtAlignment): Boolean; cdecl; external Qt4PasLib name 'QLayout_setAlignment2'; procedure QLayout_setSizeConstraint(handle: QLayoutH; AnonParam1: QLayoutSizeConstraint); cdecl; external Qt4PasLib name 'QLayout_setSizeConstraint'; function QLayout_sizeConstraint(handle: QLayoutH): QLayoutSizeConstraint; cdecl; external Qt4PasLib name 'QLayout_sizeConstraint'; procedure QLayout_setMenuBar(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_setMenuBar'; function QLayout_menuBar(handle: QLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QLayout_menuBar'; function QLayout_parentWidget(handle: QLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QLayout_parentWidget'; procedure QLayout_invalidate(handle: QLayoutH); cdecl; external Qt4PasLib name 'QLayout_invalidate'; procedure QLayout_geometry(handle: QLayoutH; retval: PRect); cdecl; external Qt4PasLib name 'QLayout_geometry'; function QLayout_activate(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_activate'; procedure QLayout_update(handle: QLayoutH); cdecl; external Qt4PasLib name 'QLayout_update'; procedure QLayout_addWidget(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_addWidget'; procedure QLayout_addItem(handle: QLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayout_addItem'; procedure QLayout_removeWidget(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_removeWidget'; procedure QLayout_removeItem(handle: QLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayout_removeItem'; function QLayout_expandingDirections(handle: QLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QLayout_expandingDirections'; procedure QLayout_minimumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_minimumSize'; procedure QLayout_maximumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_maximumSize'; procedure QLayout_setGeometry(handle: QLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QLayout_setGeometry'; function QLayout_itemAt(handle: QLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_itemAt'; function QLayout_takeAt(handle: QLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_takeAt'; function QLayout_indexOf(handle: QLayoutH; AnonParam1: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QLayout_indexOf'; function QLayout_count(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_count'; function QLayout_isEmpty(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_isEmpty'; function QLayout_totalHeightForWidth(handle: QLayoutH; w: Integer): Integer; cdecl; external Qt4PasLib name 'QLayout_totalHeightForWidth'; procedure QLayout_totalMinimumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalMinimumSize'; procedure QLayout_totalMaximumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalMaximumSize'; procedure QLayout_totalSizeHint(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalSizeHint'; function QLayout_layout(handle: QLayoutH): QLayoutH; cdecl; external Qt4PasLib name 'QLayout_layout'; procedure QLayout_setEnabled(handle: QLayoutH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLayout_setEnabled'; function QLayout_isEnabled(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_isEnabled'; procedure QLayout_closestAcceptableSize(retval: PSize; w: QWidgetH; s: PSize); cdecl; external Qt4PasLib name 'QLayout_closestAcceptableSize'; function QLayout_to_QLayoutItem(handle: QLayoutH): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_to_QLayoutItem'; type QBoxLayoutDirection = cardinal; // QBoxLayout::Direction (4) const QBoxLayoutLeftToRight = 0 { $0 }; QBoxLayoutRightToLeft = 1 { $1 }; QBoxLayoutTopToBottom = 2 { $2 }; QBoxLayoutBottomToTop = 3 { $3 }; QBoxLayoutDown = 2 { $2 }; QBoxLayoutUp = 3 { $3 }; function QBoxLayout_create(AnonParam1: QBoxLayoutDirection; parent: QWidgetH = nil): QBoxLayoutH; cdecl; external Qt4PasLib name 'QBoxLayout_create'; procedure QBoxLayout_destroy(handle: QBoxLayoutH); cdecl; external Qt4PasLib name 'QBoxLayout_destroy'; function QBoxLayout_direction(handle: QBoxLayoutH): QBoxLayoutDirection; cdecl; external Qt4PasLib name 'QBoxLayout_direction'; procedure QBoxLayout_setDirection(handle: QBoxLayoutH; AnonParam1: QBoxLayoutDirection); cdecl; external Qt4PasLib name 'QBoxLayout_setDirection'; procedure QBoxLayout_addSpacing(handle: QBoxLayoutH; size: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_addSpacing'; procedure QBoxLayout_addStretch(handle: QBoxLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addStretch'; procedure QBoxLayout_addSpacerItem(handle: QBoxLayoutH; spacerItem: QSpacerItemH); cdecl; external Qt4PasLib name 'QBoxLayout_addSpacerItem'; procedure QBoxLayout_addWidget(handle: QBoxLayoutH; AnonParam1: QWidgetH; stretch: Integer = 0; alignment: QtAlignment = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addWidget'; procedure QBoxLayout_addLayout(handle: QBoxLayoutH; layout: QLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addLayout'; procedure QBoxLayout_addStrut(handle: QBoxLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_addStrut'; procedure QBoxLayout_addItem(handle: QBoxLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QBoxLayout_addItem'; procedure QBoxLayout_insertSpacing(handle: QBoxLayoutH; index: Integer; size: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_insertSpacing'; procedure QBoxLayout_insertStretch(handle: QBoxLayoutH; index: Integer; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertStretch'; procedure QBoxLayout_insertSpacerItem(handle: QBoxLayoutH; index: Integer; spacerItem: QSpacerItemH); cdecl; external Qt4PasLib name 'QBoxLayout_insertSpacerItem'; procedure QBoxLayout_insertWidget(handle: QBoxLayoutH; index: Integer; widget: QWidgetH; stretch: Integer = 0; alignment: QtAlignment = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertWidget'; procedure QBoxLayout_insertLayout(handle: QBoxLayoutH; index: Integer; layout: QLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertLayout'; function QBoxLayout_spacing(handle: QBoxLayoutH): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_spacing'; procedure QBoxLayout_setSpacing(handle: QBoxLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_setSpacing'; function QBoxLayout_setStretchFactor(handle: QBoxLayoutH; w: QWidgetH; stretch: Integer): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_setStretchFactor'; function QBoxLayout_setStretchFactor(handle: QBoxLayoutH; l: QLayoutH; stretch: Integer): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_setStretchFactor2'; procedure QBoxLayout_setStretch(handle: QBoxLayoutH; index: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_setStretch'; function QBoxLayout_stretch(handle: QBoxLayoutH; index: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_stretch'; procedure QBoxLayout_sizeHint(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_sizeHint'; procedure QBoxLayout_minimumSize(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_minimumSize'; procedure QBoxLayout_maximumSize(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_maximumSize'; function QBoxLayout_hasHeightForWidth(handle: QBoxLayoutH): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_hasHeightForWidth'; function QBoxLayout_heightForWidth(handle: QBoxLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_heightForWidth'; function QBoxLayout_minimumHeightForWidth(handle: QBoxLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_minimumHeightForWidth'; function QBoxLayout_expandingDirections(handle: QBoxLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QBoxLayout_expandingDirections'; procedure QBoxLayout_invalidate(handle: QBoxLayoutH); cdecl; external Qt4PasLib name 'QBoxLayout_invalidate'; function QBoxLayout_itemAt(handle: QBoxLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QBoxLayout_itemAt'; function QBoxLayout_takeAt(handle: QBoxLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QBoxLayout_takeAt'; function QBoxLayout_count(handle: QBoxLayoutH): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_count'; procedure QBoxLayout_setGeometry(handle: QBoxLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QBoxLayout_setGeometry'; function QHBoxLayout_create(): QHBoxLayoutH; cdecl; external Qt4PasLib name 'QHBoxLayout_create'; procedure QHBoxLayout_destroy(handle: QHBoxLayoutH); cdecl; external Qt4PasLib name 'QHBoxLayout_destroy'; function QHBoxLayout_create(parent: QWidgetH): QHBoxLayoutH; cdecl; external Qt4PasLib name 'QHBoxLayout_create2'; function QVBoxLayout_create(): QVBoxLayoutH; cdecl; external Qt4PasLib name 'QVBoxLayout_create'; procedure QVBoxLayout_destroy(handle: QVBoxLayoutH); cdecl; external Qt4PasLib name 'QVBoxLayout_destroy'; function QVBoxLayout_create(parent: QWidgetH): QVBoxLayoutH; cdecl; external Qt4PasLib name 'QVBoxLayout_create2'; type QStackedLayoutStackingMode = ( // QStackedLayout::StackingMode (1) QStackedLayoutStackOne, QStackedLayoutStackAll ); function QStackedLayout_create(): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create'; procedure QStackedLayout_destroy(handle: QStackedLayoutH); cdecl; external Qt4PasLib name 'QStackedLayout_destroy'; function QStackedLayout_create(parent: QWidgetH): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create2'; function QStackedLayout_create(parentLayout: QLayoutH): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create3'; function QStackedLayout_addWidget(handle: QStackedLayoutH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_addWidget'; function QStackedLayout_insertWidget(handle: QStackedLayoutH; index: Integer; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_insertWidget'; function QStackedLayout_currentWidget(handle: QStackedLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QStackedLayout_currentWidget'; function QStackedLayout_currentIndex(handle: QStackedLayoutH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_currentIndex'; function QStackedLayout_widget(handle: QStackedLayoutH; AnonParam1: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QStackedLayout_widget'; function QStackedLayout_count(handle: QStackedLayoutH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_count'; function QStackedLayout_stackingMode(handle: QStackedLayoutH): QStackedLayoutStackingMode; cdecl; external Qt4PasLib name 'QStackedLayout_stackingMode'; procedure QStackedLayout_setStackingMode(handle: QStackedLayoutH; stackingMode: QStackedLayoutStackingMode); cdecl; external Qt4PasLib name 'QStackedLayout_setStackingMode'; procedure QStackedLayout_addItem(handle: QStackedLayoutH; item: QLayoutItemH); cdecl; external Qt4PasLib name 'QStackedLayout_addItem'; procedure QStackedLayout_sizeHint(handle: QStackedLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QStackedLayout_sizeHint'; procedure QStackedLayout_minimumSize(handle: QStackedLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QStackedLayout_minimumSize'; function QStackedLayout_itemAt(handle: QStackedLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QStackedLayout_itemAt'; function QStackedLayout_takeAt(handle: QStackedLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QStackedLayout_takeAt'; procedure QStackedLayout_setGeometry(handle: QStackedLayoutH; rect: PRect); cdecl; external Qt4PasLib name 'QStackedLayout_setGeometry'; procedure QStackedLayout_setCurrentIndex(handle: QStackedLayoutH; index: Integer); cdecl; external Qt4PasLib name 'QStackedLayout_setCurrentIndex'; procedure QStackedLayout_setCurrentWidget(handle: QStackedLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedLayout_setCurrentWidget'; type QStackedLayout_widgetRemoved_Event = procedure (index: Integer) of object cdecl; QStackedLayout_currentChanged_Event = procedure (index: Integer) of object cdecl; type QActionMenuRole = ( // QAction::MenuRole (1) QActionNoRole, QActionTextHeuristicRole, QActionApplicationSpecificRole, QActionAboutQtRole, QActionAboutRole, QActionPreferencesRole, QActionQuitRole ); QActionActionEvent = ( // QAction::ActionEvent (1) QActionTrigger, QActionHover ); function QAction_create(parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create'; procedure QAction_destroy(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_destroy'; function QAction_create(text: PWideString; parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create2'; function QAction_create(icon: QIconH; text: PWideString; parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create3'; procedure QAction_setActionGroup(handle: QActionH; group: QActionGroupH); cdecl; external Qt4PasLib name 'QAction_setActionGroup'; function QAction_actionGroup(handle: QActionH): QActionGroupH; cdecl; external Qt4PasLib name 'QAction_actionGroup'; procedure QAction_setIcon(handle: QActionH; icon: QIconH); cdecl; external Qt4PasLib name 'QAction_setIcon'; procedure QAction_icon(handle: QActionH; retval: QIconH); cdecl; external Qt4PasLib name 'QAction_icon'; procedure QAction_setText(handle: QActionH; text: PWideString); cdecl; external Qt4PasLib name 'QAction_setText'; procedure QAction_text(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_text'; procedure QAction_setIconText(handle: QActionH; text: PWideString); cdecl; external Qt4PasLib name 'QAction_setIconText'; procedure QAction_iconText(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_iconText'; procedure QAction_setToolTip(handle: QActionH; tip: PWideString); cdecl; external Qt4PasLib name 'QAction_setToolTip'; procedure QAction_toolTip(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_toolTip'; procedure QAction_setStatusTip(handle: QActionH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QAction_setStatusTip'; procedure QAction_statusTip(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_statusTip'; procedure QAction_setWhatsThis(handle: QActionH; what: PWideString); cdecl; external Qt4PasLib name 'QAction_setWhatsThis'; procedure QAction_whatsThis(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_whatsThis'; function QAction_menu(handle: QActionH): QMenuH; cdecl; external Qt4PasLib name 'QAction_menu'; procedure QAction_setMenu(handle: QActionH; menu: QMenuH); cdecl; external Qt4PasLib name 'QAction_setMenu'; procedure QAction_setSeparator(handle: QActionH; b: Boolean); cdecl; external Qt4PasLib name 'QAction_setSeparator'; function QAction_isSeparator(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isSeparator'; procedure QAction_setShortcut(handle: QActionH; shortcut: QKeySequenceH); cdecl; external Qt4PasLib name 'QAction_setShortcut'; procedure QAction_shortcut(handle: QActionH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QAction_shortcut'; procedure QAction_setShortcuts(handle: QActionH; AnonParam1: QKeySequenceStandardKey); cdecl; external Qt4PasLib name 'QAction_setShortcuts2'; procedure QAction_setShortcutContext(handle: QActionH; context: QtShortcutContext); cdecl; external Qt4PasLib name 'QAction_setShortcutContext'; function QAction_shortcutContext(handle: QActionH): QtShortcutContext; cdecl; external Qt4PasLib name 'QAction_shortcutContext'; procedure QAction_setAutoRepeat(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setAutoRepeat'; function QAction_autoRepeat(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_autoRepeat'; procedure QAction_setFont(handle: QActionH; font: QFontH); cdecl; external Qt4PasLib name 'QAction_setFont'; procedure QAction_font(handle: QActionH; retval: QFontH); cdecl; external Qt4PasLib name 'QAction_font'; procedure QAction_setCheckable(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setCheckable'; function QAction_isCheckable(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isCheckable'; procedure QAction_data(handle: QActionH; retval: QVariantH); cdecl; external Qt4PasLib name 'QAction_data'; procedure QAction_setData(handle: QActionH; _var: QVariantH); cdecl; external Qt4PasLib name 'QAction_setData'; function QAction_isChecked(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isChecked'; function QAction_isEnabled(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isEnabled'; function QAction_isVisible(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isVisible'; procedure QAction_activate(handle: QActionH; event: QActionActionEvent); cdecl; external Qt4PasLib name 'QAction_activate'; function QAction_showStatusText(handle: QActionH; widget: QWidgetH = nil): Boolean; cdecl; external Qt4PasLib name 'QAction_showStatusText'; procedure QAction_setMenuRole(handle: QActionH; menuRole: QActionMenuRole); cdecl; external Qt4PasLib name 'QAction_setMenuRole'; function QAction_menuRole(handle: QActionH): QActionMenuRole; cdecl; external Qt4PasLib name 'QAction_menuRole'; procedure QAction_setIconVisibleInMenu(handle: QActionH; visible: Boolean); cdecl; external Qt4PasLib name 'QAction_setIconVisibleInMenu'; function QAction_isIconVisibleInMenu(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isIconVisibleInMenu'; function QAction_parentWidget(handle: QActionH): QWidgetH; cdecl; external Qt4PasLib name 'QAction_parentWidget'; procedure QAction_associatedWidgets(handle: QActionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QAction_associatedWidgets'; procedure QAction_associatedGraphicsWidgets(handle: QActionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QAction_associatedGraphicsWidgets'; procedure QAction_trigger(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_trigger'; procedure QAction_hover(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_hover'; procedure QAction_setChecked(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setChecked'; procedure QAction_toggle(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_toggle'; procedure QAction_setEnabled(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setEnabled'; procedure QAction_setDisabled(handle: QActionH; b: Boolean); cdecl; external Qt4PasLib name 'QAction_setDisabled'; procedure QAction_setVisible(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setVisible'; type QAction_changed_Event = procedure () of object cdecl; QAction_triggered_Event = procedure (checked: Boolean = False) of object cdecl; QAction_triggered2_Event = procedure () of object cdecl; QAction_hovered_Event = procedure () of object cdecl; QAction_toggled_Event = procedure (AnonParam1: Boolean) of object cdecl; function QActionGroup_create(parent: QObjectH): QActionGroupH; cdecl; external Qt4PasLib name 'QActionGroup_create'; procedure QActionGroup_destroy(handle: QActionGroupH); cdecl; external Qt4PasLib name 'QActionGroup_destroy'; function QActionGroup_addAction(handle: QActionGroupH; a: QActionH): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction'; function QActionGroup_addAction(handle: QActionGroupH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction2'; function QActionGroup_addAction(handle: QActionGroupH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction3'; procedure QActionGroup_removeAction(handle: QActionGroupH; a: QActionH); cdecl; external Qt4PasLib name 'QActionGroup_removeAction'; procedure QActionGroup_actions(handle: QActionGroupH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QActionGroup_actions'; function QActionGroup_checkedAction(handle: QActionGroupH): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_checkedAction'; function QActionGroup_isExclusive(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isExclusive'; function QActionGroup_isEnabled(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isEnabled'; function QActionGroup_isVisible(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isVisible'; procedure QActionGroup_setEnabled(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setEnabled'; procedure QActionGroup_setDisabled(handle: QActionGroupH; b: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setDisabled'; procedure QActionGroup_setVisible(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setVisible'; procedure QActionGroup_setExclusive(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setExclusive'; type QActionGroup_triggered_Event = procedure (AnonParam1: QActionH) of object cdecl; QActionGroup_selected_Event = procedure (AnonParam1: QActionH) of object cdecl; QActionGroup_hovered_Event = procedure (AnonParam1: QActionH) of object cdecl; type QTabletEventTabletDevice = ( // QTabletEvent::TabletDevice (1) QTabletEventNoDevice, QTabletEventPuck, QTabletEventStylus, QTabletEventAirbrush, QTabletEventFourDMouse, QTabletEventXFreeEraser, QTabletEventRotationStylus ); QTabletEventPointerType = ( // QTabletEvent::PointerType (1) QTabletEventUnknownPointer, QTabletEventPen, QTabletEventCursor, QTabletEventEraser ); type QContextMenuEventReason = ( // QContextMenuEvent::Reason (1) QContextMenuEventMouse, QContextMenuEventKeyboard, QContextMenuEventOther ); type QInputMethodEventAttributeType = ( // QInputMethodEvent::AttributeType (1) QInputMethodEventTextFormat, QInputMethodEventCursor, QInputMethodEventLanguage, QInputMethodEventRuby ); function QInputEvent_create(_type: QEventType; modifiers: QtKeyboardModifiers = QtNoModifier): QInputEventH; cdecl; external Qt4PasLib name 'QInputEvent_create'; procedure QInputEvent_destroy(handle: QInputEventH); cdecl; external Qt4PasLib name 'QInputEvent_destroy'; function QInputEvent_modifiers(handle: QInputEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QInputEvent_modifiers'; function QMouseEvent_create(_type: QEventType; pos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_create'; procedure QMouseEvent_destroy(handle: QMouseEventH); cdecl; external Qt4PasLib name 'QMouseEvent_destroy'; function QMouseEvent_create(_type: QEventType; pos: PQtPoint; globalPos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_create2'; function QMouseEvent_pos(handle: QMouseEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMouseEvent_pos'; function QMouseEvent_globalPos(handle: QMouseEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMouseEvent_globalPos'; function QMouseEvent_x(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_x'; function QMouseEvent_y(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_y'; function QMouseEvent_globalX(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_globalX'; function QMouseEvent_globalY(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_globalY'; function QMouseEvent_button(handle: QMouseEventH): QtMouseButton; cdecl; external Qt4PasLib name 'QMouseEvent_button'; function QMouseEvent_buttons(handle: QMouseEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QMouseEvent_buttons'; function QMouseEvent_createExtendedMouseEvent(_type: QEventType; pos: PQtPointF; globalPos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_createExtendedMouseEvent'; function QMouseEvent_hasExtendedInfo(handle: QMouseEventH): Boolean; cdecl; external Qt4PasLib name 'QMouseEvent_hasExtendedInfo'; procedure QMouseEvent_posF(handle: QMouseEventH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QMouseEvent_posF'; function QHoverEvent_create(_type: QEventType; pos: PQtPoint; oldPos: PQtPoint): QHoverEventH; cdecl; external Qt4PasLib name 'QHoverEvent_create'; procedure QHoverEvent_destroy(handle: QHoverEventH); cdecl; external Qt4PasLib name 'QHoverEvent_destroy'; function QHoverEvent_pos(handle: QHoverEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHoverEvent_pos'; function QHoverEvent_oldPos(handle: QHoverEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHoverEvent_oldPos'; function QWheelEvent_create(pos: PQtPoint; delta: Integer; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; orient: QtOrientation = QtVertical): QWheelEventH; cdecl; external Qt4PasLib name 'QWheelEvent_create'; procedure QWheelEvent_destroy(handle: QWheelEventH); cdecl; external Qt4PasLib name 'QWheelEvent_destroy'; function QWheelEvent_create(pos: PQtPoint; globalPos: PQtPoint; delta: Integer; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; orient: QtOrientation = QtVertical): QWheelEventH; cdecl; external Qt4PasLib name 'QWheelEvent_create2'; function QWheelEvent_delta(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_delta'; function QWheelEvent_pos(handle: QWheelEventH): PQtPoint; cdecl; external Qt4PasLib name 'QWheelEvent_pos'; function QWheelEvent_globalPos(handle: QWheelEventH): PQtPoint; cdecl; external Qt4PasLib name 'QWheelEvent_globalPos'; function QWheelEvent_x(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_x'; function QWheelEvent_y(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_y'; function QWheelEvent_globalX(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_globalX'; function QWheelEvent_globalY(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_globalY'; function QWheelEvent_buttons(handle: QWheelEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QWheelEvent_buttons'; function QWheelEvent_orientation(handle: QWheelEventH): QtOrientation; cdecl; external Qt4PasLib name 'QWheelEvent_orientation'; function QTabletEvent_create(t: QEventType; pos: PQtPoint; globalPos: PQtPoint; hiResGlobalPos: PQtPointF; device: Integer; pointerType: Integer; pressure: qreal; xTilt: Integer; yTilt: Integer; tangentialPressure: qreal; rotation: qreal; z: Integer; keyState: QtKeyboardModifiers; uniqueID: int64): QTabletEventH; cdecl; external Qt4PasLib name 'QTabletEvent_create'; procedure QTabletEvent_destroy(handle: QTabletEventH); cdecl; external Qt4PasLib name 'QTabletEvent_destroy'; function QTabletEvent_pos(handle: QTabletEventH): PQtPoint; cdecl; external Qt4PasLib name 'QTabletEvent_pos'; function QTabletEvent_globalPos(handle: QTabletEventH): PQtPoint; cdecl; external Qt4PasLib name 'QTabletEvent_globalPos'; function QTabletEvent_hiResGlobalPos(handle: QTabletEventH): PQtPointF; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalPos'; function QTabletEvent_x(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_x'; function QTabletEvent_y(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_y'; function QTabletEvent_globalX(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_globalX'; function QTabletEvent_globalY(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_globalY'; function QTabletEvent_hiResGlobalX(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalX'; function QTabletEvent_hiResGlobalY(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalY'; function QTabletEvent_device(handle: QTabletEventH): QTabletEventTabletDevice; cdecl; external Qt4PasLib name 'QTabletEvent_device'; function QTabletEvent_pointerType(handle: QTabletEventH): QTabletEventPointerType; cdecl; external Qt4PasLib name 'QTabletEvent_pointerType'; function QTabletEvent_uniqueId(handle: QTabletEventH): int64; cdecl; external Qt4PasLib name 'QTabletEvent_uniqueId'; function QTabletEvent_pressure(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_pressure'; function QTabletEvent_z(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_z'; function QTabletEvent_tangentialPressure(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_tangentialPressure'; function QTabletEvent_rotation(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_rotation'; function QTabletEvent_xTilt(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_xTilt'; function QTabletEvent_yTilt(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_yTilt'; function QKeyEvent_create(_type: QEventType; key: Integer; modifiers: QtKeyboardModifiers; text: PWideString = nil; autorep: Boolean = False; count: Word = 1): QKeyEventH; cdecl; external Qt4PasLib name 'QKeyEvent_create'; procedure QKeyEvent_destroy(handle: QKeyEventH); cdecl; external Qt4PasLib name 'QKeyEvent_destroy'; function QKeyEvent_key(handle: QKeyEventH): Integer; cdecl; external Qt4PasLib name 'QKeyEvent_key'; function QKeyEvent_matches(handle: QKeyEventH; key: QKeySequenceStandardKey): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_matches'; function QKeyEvent_modifiers(handle: QKeyEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QKeyEvent_modifiers'; procedure QKeyEvent_text(handle: QKeyEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QKeyEvent_text'; function QKeyEvent_isAutoRepeat(handle: QKeyEventH): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_isAutoRepeat'; function QKeyEvent_count(handle: QKeyEventH): Integer; cdecl; external Qt4PasLib name 'QKeyEvent_count'; function QKeyEvent_createExtendedKeyEvent(_type: QEventType; key: Integer; modifiers: QtKeyboardModifiers; nativeScanCode: LongWord; nativeVirtualKey: LongWord; nativeModifiers: LongWord; text: PWideString = nil; autorep: Boolean = False; count: Word = 1): QKeyEventH; cdecl; external Qt4PasLib name 'QKeyEvent_createExtendedKeyEvent'; function QKeyEvent_hasExtendedInfo(handle: QKeyEventH): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_hasExtendedInfo'; function QKeyEvent_nativeScanCode(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeScanCode'; function QKeyEvent_nativeVirtualKey(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeVirtualKey'; function QKeyEvent_nativeModifiers(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeModifiers'; function QFocusEvent_create(_type: QEventType; reason: QtFocusReason = QtOtherFocusReason): QFocusEventH; cdecl; external Qt4PasLib name 'QFocusEvent_create'; procedure QFocusEvent_destroy(handle: QFocusEventH); cdecl; external Qt4PasLib name 'QFocusEvent_destroy'; function QFocusEvent_gotFocus(handle: QFocusEventH): Boolean; cdecl; external Qt4PasLib name 'QFocusEvent_gotFocus'; function QFocusEvent_lostFocus(handle: QFocusEventH): Boolean; cdecl; external Qt4PasLib name 'QFocusEvent_lostFocus'; function QFocusEvent_reason(handle: QFocusEventH): QtFocusReason; cdecl; external Qt4PasLib name 'QFocusEvent_reason'; function QPaintEvent_create(paintRegion: QRegionH): QPaintEventH; cdecl; external Qt4PasLib name 'QPaintEvent_create'; procedure QPaintEvent_destroy(handle: QPaintEventH); cdecl; external Qt4PasLib name 'QPaintEvent_destroy'; function QPaintEvent_create(paintRect: PRect): QPaintEventH; cdecl; external Qt4PasLib name 'QPaintEvent_create2'; procedure QPaintEvent_rect(handle: QPaintEventH; retval: PRect); cdecl; external Qt4PasLib name 'QPaintEvent_rect'; function QPaintEvent_region(handle: QPaintEventH): QRegionH; cdecl; external Qt4PasLib name 'QPaintEvent_region'; function QMoveEvent_create(pos: PQtPoint; oldPos: PQtPoint): QMoveEventH; cdecl; external Qt4PasLib name 'QMoveEvent_create'; procedure QMoveEvent_destroy(handle: QMoveEventH); cdecl; external Qt4PasLib name 'QMoveEvent_destroy'; function QMoveEvent_pos(handle: QMoveEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMoveEvent_pos'; function QMoveEvent_oldPos(handle: QMoveEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMoveEvent_oldPos'; function QResizeEvent_create(size: PSize; oldSize: PSize): QResizeEventH; cdecl; external Qt4PasLib name 'QResizeEvent_create'; procedure QResizeEvent_destroy(handle: QResizeEventH); cdecl; external Qt4PasLib name 'QResizeEvent_destroy'; function QResizeEvent_size(handle: QResizeEventH): PSize; cdecl; external Qt4PasLib name 'QResizeEvent_size'; function QResizeEvent_oldSize(handle: QResizeEventH): PSize; cdecl; external Qt4PasLib name 'QResizeEvent_oldSize'; function QCloseEvent_create(): QCloseEventH; cdecl; external Qt4PasLib name 'QCloseEvent_create'; procedure QCloseEvent_destroy(handle: QCloseEventH); cdecl; external Qt4PasLib name 'QCloseEvent_destroy'; function QIconDragEvent_create(): QIconDragEventH; cdecl; external Qt4PasLib name 'QIconDragEvent_create'; procedure QIconDragEvent_destroy(handle: QIconDragEventH); cdecl; external Qt4PasLib name 'QIconDragEvent_destroy'; function QShowEvent_create(): QShowEventH; cdecl; external Qt4PasLib name 'QShowEvent_create'; procedure QShowEvent_destroy(handle: QShowEventH); cdecl; external Qt4PasLib name 'QShowEvent_destroy'; function QHideEvent_create(): QHideEventH; cdecl; external Qt4PasLib name 'QHideEvent_create'; procedure QHideEvent_destroy(handle: QHideEventH); cdecl; external Qt4PasLib name 'QHideEvent_destroy'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint; globalPos: PQtPoint; modifiers: QtKeyboardModifiers): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create'; procedure QContextMenuEvent_destroy(handle: QContextMenuEventH); cdecl; external Qt4PasLib name 'QContextMenuEvent_destroy'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint; globalPos: PQtPoint): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create2'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create3'; function QContextMenuEvent_x(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_x'; function QContextMenuEvent_y(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_y'; function QContextMenuEvent_globalX(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalX'; function QContextMenuEvent_globalY(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalY'; function QContextMenuEvent_pos(handle: QContextMenuEventH): PQtPoint; cdecl; external Qt4PasLib name 'QContextMenuEvent_pos'; function QContextMenuEvent_globalPos(handle: QContextMenuEventH): PQtPoint; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalPos'; function QContextMenuEvent_reason(handle: QContextMenuEventH): QContextMenuEventReason; cdecl; external Qt4PasLib name 'QContextMenuEvent_reason'; function QInputMethodEvent_create(): QInputMethodEventH; cdecl; external Qt4PasLib name 'QInputMethodEvent_create'; procedure QInputMethodEvent_destroy(handle: QInputMethodEventH); cdecl; external Qt4PasLib name 'QInputMethodEvent_destroy'; procedure QInputMethodEvent_setCommitString(handle: QInputMethodEventH; commitString: PWideString; replaceFrom: Integer = 0; replaceLength: Integer = 0); cdecl; external Qt4PasLib name 'QInputMethodEvent_setCommitString'; procedure QInputMethodEvent_preeditString(handle: QInputMethodEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputMethodEvent_preeditString'; procedure QInputMethodEvent_commitString(handle: QInputMethodEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputMethodEvent_commitString'; function QInputMethodEvent_replacementStart(handle: QInputMethodEventH): Integer; cdecl; external Qt4PasLib name 'QInputMethodEvent_replacementStart'; function QInputMethodEvent_replacementLength(handle: QInputMethodEventH): Integer; cdecl; external Qt4PasLib name 'QInputMethodEvent_replacementLength'; function QInputMethodEvent_create(other: QInputMethodEventH): QInputMethodEventH; cdecl; external Qt4PasLib name 'QInputMethodEvent_create3'; function QDropEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; _type: QEventType): QDropEventH; cdecl; external Qt4PasLib name 'QDropEvent_create'; procedure QDropEvent_destroy(handle: QDropEventH); cdecl; external Qt4PasLib name 'QDropEvent_destroy'; function QDropEvent_pos(handle: QDropEventH): PQtPoint; cdecl; external Qt4PasLib name 'QDropEvent_pos'; function QDropEvent_mouseButtons(handle: QDropEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QDropEvent_mouseButtons'; function QDropEvent_keyboardModifiers(handle: QDropEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QDropEvent_keyboardModifiers'; function QDropEvent_possibleActions(handle: QDropEventH): QtDropActions; cdecl; external Qt4PasLib name 'QDropEvent_possibleActions'; function QDropEvent_proposedAction(handle: QDropEventH): QtDropAction; cdecl; external Qt4PasLib name 'QDropEvent_proposedAction'; procedure QDropEvent_acceptProposedAction(handle: QDropEventH); cdecl; external Qt4PasLib name 'QDropEvent_acceptProposedAction'; function QDropEvent_dropAction(handle: QDropEventH): QtDropAction; cdecl; external Qt4PasLib name 'QDropEvent_dropAction'; procedure QDropEvent_setDropAction(handle: QDropEventH; action: QtDropAction); cdecl; external Qt4PasLib name 'QDropEvent_setDropAction'; function QDropEvent_source(handle: QDropEventH): QWidgetH; cdecl; external Qt4PasLib name 'QDropEvent_source'; function QDropEvent_mimeData(handle: QDropEventH): QMimeDataH; cdecl; external Qt4PasLib name 'QDropEvent_mimeData'; function QDropEvent_format(handle: QDropEventH; n: Integer = 0): PAnsiChar; cdecl; external Qt4PasLib name 'QDropEvent_format'; procedure QDropEvent_encodedData(handle: QDropEventH; retval: QByteArrayH; AnonParam1: PAnsiChar); cdecl; external Qt4PasLib name 'QDropEvent_encodedData'; function QDropEvent_provides(handle: QDropEventH; AnonParam1: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QDropEvent_provides'; function QDragMoveEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; _type: QEventType): QDragMoveEventH; cdecl; external Qt4PasLib name 'QDragMoveEvent_create'; procedure QDragMoveEvent_destroy(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_destroy'; procedure QDragMoveEvent_answerRect(handle: QDragMoveEventH; retval: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_answerRect'; procedure QDragMoveEvent_accept(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_accept'; procedure QDragMoveEvent_ignore(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_ignore'; procedure QDragMoveEvent_accept(handle: QDragMoveEventH; r: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_accept2'; procedure QDragMoveEvent_ignore(handle: QDragMoveEventH; r: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_ignore2'; function QDragEnterEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QDragEnterEventH; cdecl; external Qt4PasLib name 'QDragEnterEvent_create'; procedure QDragEnterEvent_destroy(handle: QDragEnterEventH); cdecl; external Qt4PasLib name 'QDragEnterEvent_destroy'; function QDragLeaveEvent_create(): QDragLeaveEventH; cdecl; external Qt4PasLib name 'QDragLeaveEvent_create'; procedure QDragLeaveEvent_destroy(handle: QDragLeaveEventH); cdecl; external Qt4PasLib name 'QDragLeaveEvent_destroy'; function QHelpEvent_create(_type: QEventType; pos: PQtPoint; globalPos: PQtPoint): QHelpEventH; cdecl; external Qt4PasLib name 'QHelpEvent_create'; procedure QHelpEvent_destroy(handle: QHelpEventH); cdecl; external Qt4PasLib name 'QHelpEvent_destroy'; function QHelpEvent_x(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_x'; function QHelpEvent_y(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_y'; function QHelpEvent_globalX(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_globalX'; function QHelpEvent_globalY(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_globalY'; function QHelpEvent_pos(handle: QHelpEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHelpEvent_pos'; function QHelpEvent_globalPos(handle: QHelpEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHelpEvent_globalPos'; function QStatusTipEvent_create(tip: PWideString): QStatusTipEventH; cdecl; external Qt4PasLib name 'QStatusTipEvent_create'; procedure QStatusTipEvent_destroy(handle: QStatusTipEventH); cdecl; external Qt4PasLib name 'QStatusTipEvent_destroy'; procedure QStatusTipEvent_tip(handle: QStatusTipEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QStatusTipEvent_tip'; function QWhatsThisClickedEvent_create(href: PWideString): QWhatsThisClickedEventH; cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_create'; procedure QWhatsThisClickedEvent_destroy(handle: QWhatsThisClickedEventH); cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_destroy'; procedure QWhatsThisClickedEvent_href(handle: QWhatsThisClickedEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_href'; function QActionEvent_create(_type: Integer; action: QActionH; before: QActionH = nil): QActionEventH; cdecl; external Qt4PasLib name 'QActionEvent_create'; procedure QActionEvent_destroy(handle: QActionEventH); cdecl; external Qt4PasLib name 'QActionEvent_destroy'; function QActionEvent_action(handle: QActionEventH): QActionH; cdecl; external Qt4PasLib name 'QActionEvent_action'; function QActionEvent_before(handle: QActionEventH): QActionH; cdecl; external Qt4PasLib name 'QActionEvent_before'; function QFileOpenEvent_create(_file: PWideString): QFileOpenEventH; cdecl; external Qt4PasLib name 'QFileOpenEvent_create'; procedure QFileOpenEvent_destroy(handle: QFileOpenEventH); cdecl; external Qt4PasLib name 'QFileOpenEvent_destroy'; procedure QFileOpenEvent_file(handle: QFileOpenEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileOpenEvent_file'; function QShortcutEvent_create(key: QKeySequenceH; id: Integer; ambiguous: Boolean = False): QShortcutEventH; cdecl; external Qt4PasLib name 'QShortcutEvent_create'; procedure QShortcutEvent_destroy(handle: QShortcutEventH); cdecl; external Qt4PasLib name 'QShortcutEvent_destroy'; function QShortcutEvent_key(handle: QShortcutEventH): QKeySequenceH; cdecl; external Qt4PasLib name 'QShortcutEvent_key'; function QShortcutEvent_shortcutId(handle: QShortcutEventH): Integer; cdecl; external Qt4PasLib name 'QShortcutEvent_shortcutId'; function QShortcutEvent_isAmbiguous(handle: QShortcutEventH): Boolean; cdecl; external Qt4PasLib name 'QShortcutEvent_isAmbiguous'; function QWindowStateChangeEvent_create(aOldState: QtWindowStates): QWindowStateChangeEventH; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_create'; procedure QWindowStateChangeEvent_destroy(handle: QWindowStateChangeEventH); cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_destroy'; function QWindowStateChangeEvent_create(aOldState: QtWindowStates; isOverride: Boolean): QWindowStateChangeEventH; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_create2'; function QWindowStateChangeEvent_oldState(handle: QWindowStateChangeEventH): QtWindowStates; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_oldState'; function QWindowStateChangeEvent_isOverride(handle: QWindowStateChangeEventH): Boolean; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_isOverride'; function QLCLMessageEvent_create(aType: QEventType): QLCLMessageEventH; cdecl; external Qt4PasLib name 'QLCLMessageEvent_create'; procedure QLCLMessageEvent_destroy(handle: QLCLMessageEventH); cdecl; external Qt4PasLib name 'QLCLMessageEvent_destroy'; function QLCLMessageEvent_create(aType: QEventType; aMsg: PTRUINT; aWParam: PTRUINT; aLParam: PTRUINT; aMsgResult: PTRUINT): QLCLMessageEventH; cdecl; external Qt4PasLib name 'QLCLMessageEvent_create2'; function QLCLMessageEvent_getMsg(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getMsg'; function QLCLMessageEvent_getWParam(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getWParam'; function QLCLMessageEvent_getLParam(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getLParam'; function QLCLMessageEvent_getMsgResult(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getMsgResult'; procedure QLCLMessageEvent_setMsg(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setMsg'; procedure QLCLMessageEvent_setWParam(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setWParam'; procedure QLCLMessageEvent_setLParam(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setLParam'; procedure QLCLMessageEvent_setMsgResult(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setMsgResult'; function QCursor_create(): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create'; procedure QCursor_destroy(handle: QCursorH); cdecl; external Qt4PasLib name 'QCursor_destroy'; function QCursor_create(shape: QtCursorShape): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create2'; function QCursor_create(bitmap: QBitmapH; mask: QBitmapH; hotX: Integer = -1; hotY: Integer = -1): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create3'; function QCursor_create(pixmap: QPixmapH; hotX: Integer = -1; hotY: Integer = -1): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create4'; function QCursor_create(cursor: QCursorH): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create5'; function QCursor_shape(handle: QCursorH): QtCursorShape; cdecl; external Qt4PasLib name 'QCursor_shape'; procedure QCursor_setShape(handle: QCursorH; newShape: QtCursorShape); cdecl; external Qt4PasLib name 'QCursor_setShape'; function QCursor_bitmap(handle: QCursorH): QBitmapH; cdecl; external Qt4PasLib name 'QCursor_bitmap'; function QCursor_mask(handle: QCursorH): QBitmapH; cdecl; external Qt4PasLib name 'QCursor_mask'; procedure QCursor_pixmap(handle: QCursorH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QCursor_pixmap'; procedure QCursor_hotSpot(handle: QCursorH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_hotSpot'; procedure QCursor_pos(retval: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_pos'; procedure QCursor_setPos(x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QCursor_setPos'; procedure QCursor_setPos(p: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_setPos2'; {$if defined(BINUX) or defined(DARWIN)} function QCursor_handle(handle: QCursorH): QtHANDLE; cdecl; external Qt4PasLib name 'QCursor_handle'; {$endif} {$ifdef BINUX } function QCursor_create(cursor: QtHANDLE): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create6'; function QCursor_x11Screen(): Integer; cdecl; external Qt4PasLib name 'QCursor_x11Screen'; {$endif} {$ifdef MSWINDOWS } function QCursor_handle(handle: QCursorH): QHCURSOR; cdecl; external Qt4PasLib name 'QCursor_handle2'; function QCursor_create(cursor: QHCURSOR): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create7'; {$endif} {$ifdef QTOPIA } function QCursor_handle(handle: QCursorH): Integer; cdecl; external Qt4PasLib name 'QCursor_handle3'; {$endif} function QGridLayout_create(parent: QWidgetH): QGridLayoutH; cdecl; external Qt4PasLib name 'QGridLayout_create'; procedure QGridLayout_destroy(handle: QGridLayoutH); cdecl; external Qt4PasLib name 'QGridLayout_destroy'; function QGridLayout_create(): QGridLayoutH; cdecl; external Qt4PasLib name 'QGridLayout_create2'; procedure QGridLayout_sizeHint(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_sizeHint'; procedure QGridLayout_minimumSize(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_minimumSize'; procedure QGridLayout_maximumSize(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_maximumSize'; procedure QGridLayout_setHorizontalSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setHorizontalSpacing'; function QGridLayout_horizontalSpacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_horizontalSpacing'; procedure QGridLayout_setVerticalSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setVerticalSpacing'; function QGridLayout_verticalSpacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_verticalSpacing'; procedure QGridLayout_setSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setSpacing'; function QGridLayout_spacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_spacing'; procedure QGridLayout_setRowStretch(handle: QGridLayoutH; row: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setRowStretch'; procedure QGridLayout_setColumnStretch(handle: QGridLayoutH; column: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setColumnStretch'; function QGridLayout_rowStretch(handle: QGridLayoutH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowStretch'; function QGridLayout_columnStretch(handle: QGridLayoutH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnStretch'; procedure QGridLayout_setRowMinimumHeight(handle: QGridLayoutH; row: Integer; minSize: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setRowMinimumHeight'; procedure QGridLayout_setColumnMinimumWidth(handle: QGridLayoutH; column: Integer; minSize: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setColumnMinimumWidth'; function QGridLayout_rowMinimumHeight(handle: QGridLayoutH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowMinimumHeight'; function QGridLayout_columnMinimumWidth(handle: QGridLayoutH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnMinimumWidth'; function QGridLayout_columnCount(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnCount'; function QGridLayout_rowCount(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowCount'; procedure QGridLayout_cellRect(handle: QGridLayoutH; retval: PRect; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QGridLayout_cellRect'; function QGridLayout_hasHeightForWidth(handle: QGridLayoutH): Boolean; cdecl; external Qt4PasLib name 'QGridLayout_hasHeightForWidth'; function QGridLayout_heightForWidth(handle: QGridLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_heightForWidth'; function QGridLayout_minimumHeightForWidth(handle: QGridLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_minimumHeightForWidth'; function QGridLayout_expandingDirections(handle: QGridLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QGridLayout_expandingDirections'; procedure QGridLayout_invalidate(handle: QGridLayoutH); cdecl; external Qt4PasLib name 'QGridLayout_invalidate'; procedure QGridLayout_addWidget(handle: QGridLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QGridLayout_addWidget'; procedure QGridLayout_addWidget(handle: QGridLayoutH; AnonParam1: QWidgetH; row: Integer; column: Integer; AnonParam4: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addWidget2'; procedure QGridLayout_addWidget(handle: QGridLayoutH; AnonParam1: QWidgetH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addWidget3'; procedure QGridLayout_addLayout(handle: QGridLayoutH; AnonParam1: QLayoutH; row: Integer; column: Integer; AnonParam4: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addLayout'; procedure QGridLayout_addLayout(handle: QGridLayoutH; AnonParam1: QLayoutH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addLayout2'; procedure QGridLayout_setOriginCorner(handle: QGridLayoutH; AnonParam1: QtCorner); cdecl; external Qt4PasLib name 'QGridLayout_setOriginCorner'; function QGridLayout_originCorner(handle: QGridLayoutH): QtCorner; cdecl; external Qt4PasLib name 'QGridLayout_originCorner'; function QGridLayout_itemAt(handle: QGridLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_itemAt'; function QGridLayout_itemAtPosition(handle: QGridLayoutH; row: Integer; column: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_itemAtPosition'; function QGridLayout_takeAt(handle: QGridLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_takeAt'; function QGridLayout_count(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_count'; procedure QGridLayout_setGeometry(handle: QGridLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QGridLayout_setGeometry'; procedure QGridLayout_addItem(handle: QGridLayoutH; item: QLayoutItemH; row: Integer; column: Integer; rowSpan: Integer = 1; columnSpan: Integer = 1; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addItem'; procedure QGridLayout_setDefaultPositioning(handle: QGridLayoutH; n: Integer; orient: QtOrientation); cdecl; external Qt4PasLib name 'QGridLayout_setDefaultPositioning'; procedure QGridLayout_getItemPosition(handle: QGridLayoutH; idx: Integer; row: PInteger; column: PInteger; rowSpan: PInteger; columnSpan: PInteger); cdecl; external Qt4PasLib name 'QGridLayout_getItemPosition'; type QClipboardMode = cardinal; // QClipboard::Mode (4) const QClipboardClipboard = 0 { $0 }; QClipboardSelection = 1 { $1 }; QClipboardFindBuffer = 2 { $2 }; QClipboardLastMode = 2 { $2 }; procedure QClipboard_clear(handle: QClipboardH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_clear'; function QClipboard_supportsSelection(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_supportsSelection'; function QClipboard_supportsFindBuffer(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_supportsFindBuffer'; function QClipboard_ownsSelection(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsSelection'; function QClipboard_ownsClipboard(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsClipboard'; function QClipboard_ownsFindBuffer(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsFindBuffer'; procedure QClipboard_text(handle: QClipboardH; retval: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_text'; procedure QClipboard_text(handle: QClipboardH; retval: PWideString; subtype: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_text2'; procedure QClipboard_setText(handle: QClipboardH; AnonParam1: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setText'; function QClipboard_mimeData(handle: QClipboardH; mode: QClipboardMode = QClipboardClipboard): QMimeDataH; cdecl; external Qt4PasLib name 'QClipboard_mimeData'; procedure QClipboard_setMimeData(handle: QClipboardH; data: QMimeDataH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setMimeData'; procedure QClipboard_image(handle: QClipboardH; retval: QImageH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_image'; procedure QClipboard_pixmap(handle: QClipboardH; retval: QPixmapH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_pixmap'; procedure QClipboard_setImage(handle: QClipboardH; AnonParam1: QImageH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setImage'; procedure QClipboard_setPixmap(handle: QClipboardH; AnonParam1: QPixmapH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setPixmap'; type QClipboard_changed_Event = procedure (mode: QClipboardMode) of object cdecl; QClipboard_selectionChanged_Event = procedure () of object cdecl; QClipboard_findBufferChanged_Event = procedure () of object cdecl; QClipboard_dataChanged_Event = procedure () of object cdecl; function QDesktopWidget_create(): QDesktopWidgetH; cdecl; external Qt4PasLib name 'QDesktopWidget_create'; procedure QDesktopWidget_destroy(handle: QDesktopWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_destroy'; function QDesktopWidget_isVirtualDesktop(handle: QDesktopWidgetH): Boolean; cdecl; external Qt4PasLib name 'QDesktopWidget_isVirtualDesktop'; function QDesktopWidget_numScreens(handle: QDesktopWidgetH): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_numScreens'; function QDesktopWidget_primaryScreen(handle: QDesktopWidgetH): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_primaryScreen'; function QDesktopWidget_screenNumber(handle: QDesktopWidgetH; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_screenNumber'; function QDesktopWidget_screenNumber(handle: QDesktopWidgetH; AnonParam1: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_screenNumber2'; function QDesktopWidget_screen(handle: QDesktopWidgetH; screen: Integer = -1): QWidgetH; cdecl; external Qt4PasLib name 'QDesktopWidget_screen'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; screen: Integer = -1); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry2'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; point: PQtPoint); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry3'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; screen: Integer = -1); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry2'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; point: PQtPoint); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry3'; type QDesktopWidget_resized_Event = procedure (AnonParam1: Integer) of object cdecl; QDesktopWidget_workAreaResized_Event = procedure (AnonParam1: Integer) of object cdecl; procedure QToolTip_showText(pos: PQtPoint; text: PWideString; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QToolTip_showText'; procedure QToolTip_showText(pos: PQtPoint; text: PWideString; w: QWidgetH; rect: PRect); cdecl; external Qt4PasLib name 'QToolTip_showText2'; procedure QToolTip_hideText(); cdecl; external Qt4PasLib name 'QToolTip_hideText'; function QToolTip_isVisible(): Boolean; cdecl; external Qt4PasLib name 'QToolTip_isVisible'; procedure QToolTip_text(retval: PWideString); cdecl; external Qt4PasLib name 'QToolTip_text'; procedure QToolTip_palette(retval: QPaletteH); cdecl; external Qt4PasLib name 'QToolTip_palette'; procedure QToolTip_setPalette(AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QToolTip_setPalette'; procedure QToolTip_font(retval: QFontH); cdecl; external Qt4PasLib name 'QToolTip_font'; procedure QToolTip_setFont(AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QToolTip_setFont'; {$ifdef BINUX } function QX11Info_create(): QX11InfoH; cdecl; external Qt4PasLib name 'QX11Info_create'; procedure QX11Info_destroy(handle: QX11InfoH); cdecl; external Qt4PasLib name 'QX11Info_destroy'; function QX11Info_create(other: QX11InfoH): QX11InfoH; cdecl; external Qt4PasLib name 'QX11Info_create2'; function QX11Info_display(): PDisplay; cdecl; external Qt4PasLib name 'QX11Info_display'; function QX11Info_appClass(): PAnsiChar; cdecl; external Qt4PasLib name 'QX11Info_appClass'; function QX11Info_screen(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_screen'; function QX11Info_depth(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_depth'; function QX11Info_cells(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_cells'; function QX11Info_colormap(handle: QX11InfoH): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_colormap'; function QX11Info_defaultColormap(handle: QX11InfoH): Boolean; cdecl; external Qt4PasLib name 'QX11Info_defaultColormap'; function QX11Info_visual(handle: QX11InfoH): Pointer; cdecl; external Qt4PasLib name 'QX11Info_visual'; function QX11Info_defaultVisual(handle: QX11InfoH): Boolean; cdecl; external Qt4PasLib name 'QX11Info_defaultVisual'; function QX11Info_appScreen(): Integer; cdecl; external Qt4PasLib name 'QX11Info_appScreen'; function QX11Info_appDepth(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDepth'; function QX11Info_appCells(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appCells'; function QX11Info_appColormap(screen: Integer = -1): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_appColormap'; function QX11Info_appVisual(screen: Integer = -1): Pointer; cdecl; external Qt4PasLib name 'QX11Info_appVisual'; function QX11Info_appRootWindow(screen: Integer = -1): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_appRootWindow'; function QX11Info_appDefaultColormap(screen: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QX11Info_appDefaultColormap'; function QX11Info_appDefaultVisual(screen: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QX11Info_appDefaultVisual'; function QX11Info_appDpiX(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDpiX'; function QX11Info_appDpiY(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDpiY'; procedure QX11Info_setAppDpiX(screen: Integer; dpi: Integer); cdecl; external Qt4PasLib name 'QX11Info_setAppDpiX'; procedure QX11Info_setAppDpiY(screen: Integer; dpi: Integer); cdecl; external Qt4PasLib name 'QX11Info_setAppDpiY'; function QX11Info_appTime(): Longword; cdecl; external Qt4PasLib name 'QX11Info_appTime'; function QX11Info_appUserTime(): Longword; cdecl; external Qt4PasLib name 'QX11Info_appUserTime'; procedure QX11Info_setAppTime(time: Longword); cdecl; external Qt4PasLib name 'QX11Info_setAppTime'; procedure QX11Info_setAppUserTime(time: Longword); cdecl; external Qt4PasLib name 'QX11Info_setAppUserTime'; function QX11Info_isCompositingManagerRunning(): Boolean; cdecl; external Qt4PasLib name 'QX11Info_isCompositingManagerRunning'; {$endif} function QDrag_create(dragSource: QWidgetH): QDragH; cdecl; external Qt4PasLib name 'QDrag_create'; procedure QDrag_destroy(handle: QDragH); cdecl; external Qt4PasLib name 'QDrag_destroy'; procedure QDrag_setMimeData(handle: QDragH; data: QMimeDataH); cdecl; external Qt4PasLib name 'QDrag_setMimeData'; function QDrag_mimeData(handle: QDragH): QMimeDataH; cdecl; external Qt4PasLib name 'QDrag_mimeData'; procedure QDrag_setPixmap(handle: QDragH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QDrag_setPixmap'; procedure QDrag_pixmap(handle: QDragH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QDrag_pixmap'; procedure QDrag_setHotSpot(handle: QDragH; hotspot: PQtPoint); cdecl; external Qt4PasLib name 'QDrag_setHotSpot'; procedure QDrag_hotSpot(handle: QDragH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QDrag_hotSpot'; function QDrag_source(handle: QDragH): QWidgetH; cdecl; external Qt4PasLib name 'QDrag_source'; function QDrag_target(handle: QDragH): QWidgetH; cdecl; external Qt4PasLib name 'QDrag_target'; function QDrag_start(handle: QDragH; supportedActions: QtDropActions = QtCopyAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_start'; function QDrag_exec(handle: QDragH; supportedActions: QtDropActions = QtMoveAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_exec'; function QDrag_exec(handle: QDragH; supportedActions: QtDropActions; defaultAction: QtDropAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_exec2'; procedure QDrag_setDragCursor(handle: QDragH; cursor: QPixmapH; action: QtDropAction); cdecl; external Qt4PasLib name 'QDrag_setDragCursor'; type QDrag_actionChanged_Event = procedure (action: QtDropAction) of object cdecl; QDrag_targetChanged_Event = procedure (newTarget: QWidgetH) of object cdecl; function QShortcut_create(parent: QWidgetH): QShortcutH; cdecl; external Qt4PasLib name 'QShortcut_create'; procedure QShortcut_destroy(handle: QShortcutH); cdecl; external Qt4PasLib name 'QShortcut_destroy'; function QShortcut_create(key: QKeySequenceH; parent: QWidgetH; member: PAnsiChar = nil; ambiguousMember: PAnsiChar = nil; context: QtShortcutContext = QtWindowShortcut): QShortcutH; cdecl; external Qt4PasLib name 'QShortcut_create2'; procedure QShortcut_setKey(handle: QShortcutH; key: QKeySequenceH); cdecl; external Qt4PasLib name 'QShortcut_setKey'; procedure QShortcut_key(handle: QShortcutH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QShortcut_key'; procedure QShortcut_setEnabled(handle: QShortcutH; enable: Boolean); cdecl; external Qt4PasLib name 'QShortcut_setEnabled'; function QShortcut_isEnabled(handle: QShortcutH): Boolean; cdecl; external Qt4PasLib name 'QShortcut_isEnabled'; procedure QShortcut_setContext(handle: QShortcutH; context: QtShortcutContext); cdecl; external Qt4PasLib name 'QShortcut_setContext'; function QShortcut_context(handle: QShortcutH): QtShortcutContext; cdecl; external Qt4PasLib name 'QShortcut_context'; procedure QShortcut_setWhatsThis(handle: QShortcutH; text: PWideString); cdecl; external Qt4PasLib name 'QShortcut_setWhatsThis'; procedure QShortcut_whatsThis(handle: QShortcutH; retval: PWideString); cdecl; external Qt4PasLib name 'QShortcut_whatsThis'; procedure QShortcut_setAutoRepeat(handle: QShortcutH; _on: Boolean); cdecl; external Qt4PasLib name 'QShortcut_setAutoRepeat'; function QShortcut_autoRepeat(handle: QShortcutH): Boolean; cdecl; external Qt4PasLib name 'QShortcut_autoRepeat'; function QShortcut_id(handle: QShortcutH): Integer; cdecl; external Qt4PasLib name 'QShortcut_id'; function QShortcut_parentWidget(handle: QShortcutH): QWidgetH; cdecl; external Qt4PasLib name 'QShortcut_parentWidget'; type QShortcut_activated_Event = procedure () of object cdecl; QShortcut_activatedAmbiguously_Event = procedure () of object cdecl; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} type QSessionManagerRestartHint = ( // QSessionManager::RestartHint (1) QSessionManagerRestartIfRunning, QSessionManagerRestartAnyway, QSessionManagerRestartImmediately, QSessionManagerRestartNever ); {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QSessionManager_sessionId(handle: QSessionManagerH; retval: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_sessionId'; procedure QSessionManager_sessionKey(handle: QSessionManagerH; retval: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_sessionKey'; {$endif} {$if defined(BINUX) or defined(DARWIN)} function QSessionManager_handle(handle: QSessionManagerH): Pointer; cdecl; external Qt4PasLib name 'QSessionManager_handle'; {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} function QSessionManager_allowsInteraction(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_allowsInteraction'; function QSessionManager_allowsErrorInteraction(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_allowsErrorInteraction'; procedure QSessionManager_release(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_release'; procedure QSessionManager_cancel(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_cancel'; procedure QSessionManager_setRestartHint(handle: QSessionManagerH; AnonParam1: QSessionManagerRestartHint); cdecl; external Qt4PasLib name 'QSessionManager_setRestartHint'; function QSessionManager_restartHint(handle: QSessionManagerH): QSessionManagerRestartHint; cdecl; external Qt4PasLib name 'QSessionManager_restartHint'; procedure QSessionManager_setRestartCommand(handle: QSessionManagerH; AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setRestartCommand'; procedure QSessionManager_restartCommand(handle: QSessionManagerH; retval: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_restartCommand'; procedure QSessionManager_setDiscardCommand(handle: QSessionManagerH; AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setDiscardCommand'; procedure QSessionManager_discardCommand(handle: QSessionManagerH; retval: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_discardCommand'; procedure QSessionManager_setManagerProperty(handle: QSessionManagerH; name: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_setManagerProperty'; procedure QSessionManager_setManagerProperty(handle: QSessionManagerH; name: PWideString; value: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setManagerProperty2'; function QSessionManager_isPhase2(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_isPhase2'; procedure QSessionManager_requestPhase2(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_requestPhase2'; {$endif} type QColorSpec = ( // QColor::Spec (1) QColorInvalid, QColorRgb, QColorHsv, QColorCmyk ); function QColor_create(): QColorH; cdecl; external Qt4PasLib name 'QColor_create'; procedure QColor_destroy(handle: QColorH); cdecl; external Qt4PasLib name 'QColor_destroy'; function QColor_create(color: QtGlobalColor): QColorH; cdecl; external Qt4PasLib name 'QColor_create2'; function QColor_create(r: Integer; g: Integer; b: Integer; a: Integer = 255): QColorH; cdecl; external Qt4PasLib name 'QColor_create3'; function QColor_create(rgb: QRgb): QColorH; cdecl; external Qt4PasLib name 'QColor_create4'; function QColor_create(name: PWideString): QColorH; cdecl; external Qt4PasLib name 'QColor_create5'; function QColor_create(name: PAnsiChar): QColorH; cdecl; external Qt4PasLib name 'QColor_create6'; function QColor_create(color: PQColor): QColorH; cdecl; external Qt4PasLib name 'QColor_create7'; function QColor_create(spec: QColorSpec): QColorH; cdecl; external Qt4PasLib name 'QColor_create8'; function QColor_isValid(handle: QColorH): Boolean; cdecl; external Qt4PasLib name 'QColor_isValid'; procedure QColor_name(handle: QColorH; retval: PWideString); cdecl; external Qt4PasLib name 'QColor_name'; procedure QColor_setNamedColor(handle: QColorH; name: PWideString); cdecl; external Qt4PasLib name 'QColor_setNamedColor'; procedure QColor_colorNames(retval: QStringListH); cdecl; external Qt4PasLib name 'QColor_colorNames'; function QColor_spec(handle: QColorH): QColorSpec; cdecl; external Qt4PasLib name 'QColor_spec'; function QColor_alpha(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_alpha'; procedure QColor_setAlpha(handle: QColorH; alpha: Integer); cdecl; external Qt4PasLib name 'QColor_setAlpha'; function QColor_alphaF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_alphaF'; procedure QColor_setAlphaF(handle: QColorH; alpha: qreal); cdecl; external Qt4PasLib name 'QColor_setAlphaF'; function QColor_red(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_red'; function QColor_green(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_green'; function QColor_blue(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_blue'; procedure QColor_setRed(handle: QColorH; red: Integer); cdecl; external Qt4PasLib name 'QColor_setRed'; procedure QColor_setGreen(handle: QColorH; green: Integer); cdecl; external Qt4PasLib name 'QColor_setGreen'; procedure QColor_setBlue(handle: QColorH; blue: Integer); cdecl; external Qt4PasLib name 'QColor_setBlue'; function QColor_redF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_redF'; function QColor_greenF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_greenF'; function QColor_blueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_blueF'; procedure QColor_setRedF(handle: QColorH; red: qreal); cdecl; external Qt4PasLib name 'QColor_setRedF'; procedure QColor_setGreenF(handle: QColorH; green: qreal); cdecl; external Qt4PasLib name 'QColor_setGreenF'; procedure QColor_setBlueF(handle: QColorH; blue: qreal); cdecl; external Qt4PasLib name 'QColor_setBlueF'; procedure QColor_getRgb(handle: QColorH; r: PInteger; g: PInteger; b: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getRgb'; procedure QColor_setRgb(handle: QColorH; r: Integer; g: Integer; b: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setRgb'; procedure QColor_getRgbF(handle: QColorH; r: PQReal; g: PQReal; b: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getRgbF'; procedure QColor_setRgbF(handle: QColorH; r: qreal; g: qreal; b: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setRgbF'; function QColor_rgba(handle: QColorH): QRgb; cdecl; external Qt4PasLib name 'QColor_rgba'; procedure QColor_setRgba(handle: QColorH; rgba: QRgb); cdecl; external Qt4PasLib name 'QColor_setRgba'; function QColor_rgb(handle: QColorH): QRgb; cdecl; external Qt4PasLib name 'QColor_rgb'; procedure QColor_setRgb(handle: QColorH; rgb: QRgb); cdecl; external Qt4PasLib name 'QColor_setRgb2'; function QColor_hue(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_hue'; function QColor_saturation(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_saturation'; function QColor_value(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_value'; function QColor_hueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_hueF'; function QColor_saturationF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_saturationF'; function QColor_valueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_valueF'; procedure QColor_getHsv(handle: QColorH; h: PInteger; s: PInteger; v: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getHsv'; procedure QColor_setHsv(handle: QColorH; h: Integer; s: Integer; v: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setHsv'; procedure QColor_getHsvF(handle: QColorH; h: PQReal; s: PQReal; v: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getHsvF'; procedure QColor_setHsvF(handle: QColorH; h: qreal; s: qreal; v: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setHsvF'; function QColor_cyan(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_cyan'; function QColor_magenta(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_magenta'; function QColor_yellow(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_yellow'; function QColor_black(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_black'; function QColor_cyanF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_cyanF'; function QColor_magentaF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_magentaF'; function QColor_yellowF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_yellowF'; function QColor_blackF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_blackF'; procedure QColor_getCmyk(handle: QColorH; c: PInteger; m: PInteger; y: PInteger; k: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getCmyk'; procedure QColor_setCmyk(handle: QColorH; c: Integer; m: Integer; y: Integer; k: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setCmyk'; procedure QColor_getCmykF(handle: QColorH; c: PQReal; m: PQReal; y: PQReal; k: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getCmykF'; procedure QColor_setCmykF(handle: QColorH; c: qreal; m: qreal; y: qreal; k: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setCmykF'; procedure QColor_toRgb(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toRgb'; procedure QColor_toHsv(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toHsv'; procedure QColor_toCmyk(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toCmyk'; procedure QColor_convertTo(handle: QColorH; retval: PQColor; colorSpec: QColorSpec); cdecl; external Qt4PasLib name 'QColor_convertTo'; procedure QColor_fromRgb(retval: PQColor; rgb: QRgb); cdecl; external Qt4PasLib name 'QColor_fromRgb'; procedure QColor_fromRgba(retval: PQColor; rgba: QRgb); cdecl; external Qt4PasLib name 'QColor_fromRgba'; procedure QColor_fromRgb(retval: PQColor; r: Integer; g: Integer; b: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromRgb2'; procedure QColor_fromRgbF(retval: PQColor; r: qreal; g: qreal; b: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromRgbF'; procedure QColor_fromHsv(retval: PQColor; h: Integer; s: Integer; v: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromHsv'; procedure QColor_fromHsvF(retval: PQColor; h: qreal; s: qreal; v: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromHsvF'; procedure QColor_fromCmyk(retval: PQColor; c: Integer; m: Integer; y: Integer; k: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromCmyk'; procedure QColor_fromCmykF(retval: PQColor; c: qreal; m: qreal; y: qreal; k: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromCmykF'; procedure QColor_light(handle: QColorH; retval: PQColor; f: Integer = 150); cdecl; external Qt4PasLib name 'QColor_light'; procedure QColor_lighter(handle: QColorH; retval: PQColor; f: Integer = 150); cdecl; external Qt4PasLib name 'QColor_lighter'; procedure QColor_dark(handle: QColorH; retval: PQColor; f: Integer = 200); cdecl; external Qt4PasLib name 'QColor_dark'; procedure QColor_darker(handle: QColorH; retval: PQColor; f: Integer = 200); cdecl; external Qt4PasLib name 'QColor_darker'; {$ifdef BINUX } function QColor_allowX11ColorNames(): Boolean; cdecl; external Qt4PasLib name 'QColor_allowX11ColorNames'; procedure QColor_setAllowX11ColorNames(enabled: Boolean); cdecl; external Qt4PasLib name 'QColor_setAllowX11ColorNames'; {$endif} function QMatrix_create(): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create'; procedure QMatrix_destroy(handle: QMatrixH); cdecl; external Qt4PasLib name 'QMatrix_destroy'; function QMatrix_create(m11: qreal; m12: qreal; m21: qreal; m22: qreal; dx: qreal; dy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create2'; function QMatrix_create(matrix: QMatrixH): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create3'; procedure QMatrix_setMatrix(handle: QMatrixH; m11: qreal; m12: qreal; m21: qreal; m22: qreal; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QMatrix_setMatrix'; function QMatrix_m11(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m11'; function QMatrix_m12(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m12'; function QMatrix_m21(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m21'; function QMatrix_m22(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m22'; function QMatrix_dx(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_dx'; function QMatrix_dy(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_dy'; procedure QMatrix_map(handle: QMatrixH; x: Integer; y: Integer; tx: PInteger; ty: PInteger); cdecl; external Qt4PasLib name 'QMatrix_map'; procedure QMatrix_map(handle: QMatrixH; x: qreal; y: qreal; tx: PQReal; ty: PQReal); cdecl; external Qt4PasLib name 'QMatrix_map2'; procedure QMatrix_mapRect(handle: QMatrixH; retval: PRect; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QMatrix_mapRect'; procedure QMatrix_mapRect(handle: QMatrixH; retval: QRectFH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QMatrix_mapRect2'; procedure QMatrix_map(handle: QMatrixH; retval: PQtPoint; p: PQtPoint); cdecl; external Qt4PasLib name 'QMatrix_map3'; procedure QMatrix_map(handle: QMatrixH; retval: PQtPointF; p: PQtPointF); cdecl; external Qt4PasLib name 'QMatrix_map4'; procedure QMatrix_map(handle: QMatrixH; retval: QLineH; l: QLineH); cdecl; external Qt4PasLib name 'QMatrix_map5'; procedure QMatrix_map(handle: QMatrixH; retval: QLineFH; l: QLineFH); cdecl; external Qt4PasLib name 'QMatrix_map6'; procedure QMatrix_map(handle: QMatrixH; retval: QPolygonFH; a: QPolygonFH); cdecl; external Qt4PasLib name 'QMatrix_map7'; procedure QMatrix_map(handle: QMatrixH; retval: QPolygonH; a: QPolygonH); cdecl; external Qt4PasLib name 'QMatrix_map8'; procedure QMatrix_map(handle: QMatrixH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QMatrix_map9'; procedure QMatrix_map(handle: QMatrixH; retval: QPainterPathH; p: QPainterPathH); cdecl; external Qt4PasLib name 'QMatrix_map10'; procedure QMatrix_mapToPolygon(handle: QMatrixH; retval: QPolygonH; r: PRect); cdecl; external Qt4PasLib name 'QMatrix_mapToPolygon'; procedure QMatrix_reset(handle: QMatrixH); cdecl; external Qt4PasLib name 'QMatrix_reset'; function QMatrix_isIdentity(handle: QMatrixH): Boolean; cdecl; external Qt4PasLib name 'QMatrix_isIdentity'; function QMatrix_translate(handle: QMatrixH; dx: qreal; dy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_translate'; function QMatrix_scale(handle: QMatrixH; sx: qreal; sy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_scale'; function QMatrix_shear(handle: QMatrixH; sh: qreal; sv: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_shear'; function QMatrix_rotate(handle: QMatrixH; a: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_rotate'; function QMatrix_isInvertible(handle: QMatrixH): Boolean; cdecl; external Qt4PasLib name 'QMatrix_isInvertible'; function QMatrix_det(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_det'; procedure QMatrix_inverted(handle: QMatrixH; retval: QMatrixH; invertible: PBoolean = nil); cdecl; external Qt4PasLib name 'QMatrix_inverted'; type QGradientType = ( // QGradient::Type (1) QGradientLinearGradient, QGradientRadialGradient, QGradientConicalGradient, QGradientNoGradient ); QGradientSpread = ( // QGradient::Spread (1) QGradientPadSpread, QGradientReflectSpread, QGradientRepeatSpread ); QGradientCoordinateMode = ( // QGradient::CoordinateMode (1) QGradientLogicalMode, QGradientStretchToDeviceMode, QGradientObjectBoundingMode ); QGradientInterpolationMode = ( // QGradient::InterpolationMode (1) QGradientColorInterpolation, QGradientComponentInterpolation ); function QBrush_create(): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create'; procedure QBrush_destroy(handle: QBrushH); cdecl; external Qt4PasLib name 'QBrush_destroy'; function QBrush_create(bs: QtBrushStyle): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create2'; function QBrush_create(color: PQColor; bs: QtBrushStyle = QtSolidPattern): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create3'; function QBrush_create(color: QtGlobalColor; bs: QtBrushStyle = QtSolidPattern): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create4'; function QBrush_create(color: PQColor; pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create5'; function QBrush_create(color: QtGlobalColor; pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create6'; function QBrush_create(pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create7'; function QBrush_create(image: QImageH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create8'; function QBrush_create(brush: QBrushH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create9'; function QBrush_create(gradient: QGradientH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create10'; function QBrush_style(handle: QBrushH): QtBrushStyle; cdecl; external Qt4PasLib name 'QBrush_style'; procedure QBrush_setStyle(handle: QBrushH; AnonParam1: QtBrushStyle); cdecl; external Qt4PasLib name 'QBrush_setStyle'; function QBrush_matrix(handle: QBrushH): QMatrixH; cdecl; external Qt4PasLib name 'QBrush_matrix'; procedure QBrush_setMatrix(handle: QBrushH; mat: QMatrixH); cdecl; external Qt4PasLib name 'QBrush_setMatrix'; procedure QBrush_transform(handle: QBrushH; retval: QTransformH); cdecl; external Qt4PasLib name 'QBrush_transform'; procedure QBrush_setTransform(handle: QBrushH; AnonParam1: QTransformH); cdecl; external Qt4PasLib name 'QBrush_setTransform'; procedure QBrush_texture(handle: QBrushH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QBrush_texture'; procedure QBrush_setTexture(handle: QBrushH; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QBrush_setTexture'; procedure QBrush_textureImage(handle: QBrushH; retval: QImageH); cdecl; external Qt4PasLib name 'QBrush_textureImage'; procedure QBrush_setTextureImage(handle: QBrushH; image: QImageH); cdecl; external Qt4PasLib name 'QBrush_setTextureImage'; function QBrush_color(handle: QBrushH): PQColor; cdecl; external Qt4PasLib name 'QBrush_color'; procedure QBrush_setColor(handle: QBrushH; color: PQColor); cdecl; external Qt4PasLib name 'QBrush_setColor'; procedure QBrush_setColor(handle: QBrushH; color: QtGlobalColor); cdecl; external Qt4PasLib name 'QBrush_setColor2'; function QBrush_gradient(handle: QBrushH): QGradientH; cdecl; external Qt4PasLib name 'QBrush_gradient'; function QBrush_isOpaque(handle: QBrushH): Boolean; cdecl; external Qt4PasLib name 'QBrush_isOpaque'; function QBrush_isDetached(handle: QBrushH): Boolean; cdecl; external Qt4PasLib name 'QBrush_isDetached'; function QGradient_create(): QGradientH; cdecl; external Qt4PasLib name 'QGradient_create'; procedure QGradient_destroy(handle: QGradientH); cdecl; external Qt4PasLib name 'QGradient_destroy'; function QGradient_type(handle: QGradientH): QGradientType; cdecl; external Qt4PasLib name 'QGradient_type'; procedure QGradient_setSpread(handle: QGradientH; spread: QGradientSpread); cdecl; external Qt4PasLib name 'QGradient_setSpread'; function QGradient_spread(handle: QGradientH): QGradientSpread; cdecl; external Qt4PasLib name 'QGradient_spread'; procedure QGradient_setColorAt(handle: QGradientH; pos: qreal; color: PQColor); cdecl; external Qt4PasLib name 'QGradient_setColorAt'; function QGradient_coordinateMode(handle: QGradientH): QGradientCoordinateMode; cdecl; external Qt4PasLib name 'QGradient_coordinateMode'; procedure QGradient_setCoordinateMode(handle: QGradientH; mode: QGradientCoordinateMode); cdecl; external Qt4PasLib name 'QGradient_setCoordinateMode'; function QGradient_interpolationMode(handle: QGradientH): QGradientInterpolationMode; cdecl; external Qt4PasLib name 'QGradient_interpolationMode'; procedure QGradient_setInterpolationMode(handle: QGradientH; mode: QGradientInterpolationMode); cdecl; external Qt4PasLib name 'QGradient_setInterpolationMode'; function QLinearGradient_create(): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create'; procedure QLinearGradient_destroy(handle: QLinearGradientH); cdecl; external Qt4PasLib name 'QLinearGradient_destroy'; function QLinearGradient_create(start: PQtPointF; finalStop: PQtPointF): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create2'; function QLinearGradient_create(xStart: qreal; yStart: qreal; xFinalStop: qreal; yFinalStop: qreal): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create3'; procedure QLinearGradient_start(handle: QLinearGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_start'; procedure QLinearGradient_setStart(handle: QLinearGradientH; start: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_setStart'; procedure QLinearGradient_setStart(handle: QLinearGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QLinearGradient_setStart2'; procedure QLinearGradient_finalStop(handle: QLinearGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_finalStop'; procedure QLinearGradient_setFinalStop(handle: QLinearGradientH; stop: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_setFinalStop'; procedure QLinearGradient_setFinalStop(handle: QLinearGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QLinearGradient_setFinalStop2'; function QRadialGradient_create(): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create'; procedure QRadialGradient_destroy(handle: QRadialGradientH); cdecl; external Qt4PasLib name 'QRadialGradient_destroy'; function QRadialGradient_create(center: PQtPointF; radius: qreal; focalPoint: PQtPointF): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create2'; function QRadialGradient_create(cx: qreal; cy: qreal; radius: qreal; fx: qreal; fy: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create3'; function QRadialGradient_create(center: PQtPointF; radius: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create4'; function QRadialGradient_create(cx: qreal; cy: qreal; radius: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create5'; procedure QRadialGradient_center(handle: QRadialGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_center'; procedure QRadialGradient_setCenter(handle: QRadialGradientH; center: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_setCenter'; procedure QRadialGradient_setCenter(handle: QRadialGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setCenter2'; procedure QRadialGradient_focalPoint(handle: QRadialGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_focalPoint'; procedure QRadialGradient_setFocalPoint(handle: QRadialGradientH; focalPoint: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_setFocalPoint'; procedure QRadialGradient_setFocalPoint(handle: QRadialGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setFocalPoint2'; function QRadialGradient_radius(handle: QRadialGradientH): qreal; cdecl; external Qt4PasLib name 'QRadialGradient_radius'; procedure QRadialGradient_setRadius(handle: QRadialGradientH; radius: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setRadius'; function QConicalGradient_create(): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create'; procedure QConicalGradient_destroy(handle: QConicalGradientH); cdecl; external Qt4PasLib name 'QConicalGradient_destroy'; function QConicalGradient_create(center: PQtPointF; startAngle: qreal): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create2'; function QConicalGradient_create(cx: qreal; cy: qreal; startAngle: qreal): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create3'; procedure QConicalGradient_center(handle: QConicalGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QConicalGradient_center'; procedure QConicalGradient_setCenter(handle: QConicalGradientH; center: PQtPointF); cdecl; external Qt4PasLib name 'QConicalGradient_setCenter'; procedure QConicalGradient_setCenter(handle: QConicalGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QConicalGradient_setCenter2'; function QConicalGradient_angle(handle: QConicalGradientH): qreal; cdecl; external Qt4PasLib name 'QConicalGradient_angle'; procedure QConicalGradient_setAngle(handle: QConicalGradientH; angle: qreal); cdecl; external Qt4PasLib name 'QConicalGradient_setAngle'; function QPen_create(): QPenH; cdecl; external Qt4PasLib name 'QPen_create'; procedure QPen_destroy(handle: QPenH); cdecl; external Qt4PasLib name 'QPen_destroy'; function QPen_create(AnonParam1: QtPenStyle): QPenH; cdecl; external Qt4PasLib name 'QPen_create2'; function QPen_create(color: PQColor): QPenH; cdecl; external Qt4PasLib name 'QPen_create3'; function QPen_create(brush: QBrushH; width: qreal; s: QtPenStyle = QtSolidLine; c: QtPenCapStyle = QtSquareCap; j: QtPenJoinStyle = QtBevelJoin): QPenH; cdecl; external Qt4PasLib name 'QPen_create4'; function QPen_create(pen: QPenH): QPenH; cdecl; external Qt4PasLib name 'QPen_create5'; function QPen_style(handle: QPenH): QtPenStyle; cdecl; external Qt4PasLib name 'QPen_style'; procedure QPen_setStyle(handle: QPenH; AnonParam1: QtPenStyle); cdecl; external Qt4PasLib name 'QPen_setStyle'; procedure QPen_dashPattern(handle: QPenH; retval: PQRealArray); cdecl; external Qt4PasLib name 'QPen_dashPattern'; procedure QPen_setDashPattern(handle: QPenH; pattern: PQRealArray); cdecl; external Qt4PasLib name 'QPen_setDashPattern'; function QPen_dashOffset(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_dashOffset'; procedure QPen_setDashOffset(handle: QPenH; doffset: qreal); cdecl; external Qt4PasLib name 'QPen_setDashOffset'; function QPen_miterLimit(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_miterLimit'; procedure QPen_setMiterLimit(handle: QPenH; limit: qreal); cdecl; external Qt4PasLib name 'QPen_setMiterLimit'; function QPen_widthF(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_widthF'; procedure QPen_setWidthF(handle: QPenH; width: qreal); cdecl; external Qt4PasLib name 'QPen_setWidthF'; function QPen_width(handle: QPenH): Integer; cdecl; external Qt4PasLib name 'QPen_width'; procedure QPen_setWidth(handle: QPenH; width: Integer); cdecl; external Qt4PasLib name 'QPen_setWidth'; procedure QPen_color(handle: QPenH; retval: PQColor); cdecl; external Qt4PasLib name 'QPen_color'; procedure QPen_setColor(handle: QPenH; color: PQColor); cdecl; external Qt4PasLib name 'QPen_setColor'; procedure QPen_brush(handle: QPenH; retval: QBrushH); cdecl; external Qt4PasLib name 'QPen_brush'; procedure QPen_setBrush(handle: QPenH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPen_setBrush'; function QPen_isSolid(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isSolid'; function QPen_capStyle(handle: QPenH): QtPenCapStyle; cdecl; external Qt4PasLib name 'QPen_capStyle'; procedure QPen_setCapStyle(handle: QPenH; pcs: QtPenCapStyle); cdecl; external Qt4PasLib name 'QPen_setCapStyle'; function QPen_joinStyle(handle: QPenH): QtPenJoinStyle; cdecl; external Qt4PasLib name 'QPen_joinStyle'; procedure QPen_setJoinStyle(handle: QPenH; pcs: QtPenJoinStyle); cdecl; external Qt4PasLib name 'QPen_setJoinStyle'; function QPen_isCosmetic(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isCosmetic'; procedure QPen_setCosmetic(handle: QPenH; cosmetic: Boolean); cdecl; external Qt4PasLib name 'QPen_setCosmetic'; function QPen_isDetached(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isDetached'; function QPolygon_create(): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create'; procedure QPolygon_destroy(handle: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_destroy'; function QPolygon_create(size: Integer): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create2'; function QPolygon_create(a: QPolygonH): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create3'; function QPolygon_create(r: PRect; closed: Boolean = False): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create4'; function QPolygon_create(nPoints: Integer; points: PInteger): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create5'; procedure QPolygon_translate(handle: QPolygonH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QPolygon_translate'; procedure QPolygon_translate(handle: QPolygonH; offset: PQtPoint); cdecl; external Qt4PasLib name 'QPolygon_translate2'; procedure QPolygon_boundingRect(handle: QPolygonH; retval: PRect); cdecl; external Qt4PasLib name 'QPolygon_boundingRect'; procedure QPolygon_point(handle: QPolygonH; i: Integer; x: PInteger; y: PInteger); cdecl; external Qt4PasLib name 'QPolygon_point'; procedure QPolygon_point(handle: QPolygonH; retval: PQtPoint; i: Integer); cdecl; external Qt4PasLib name 'QPolygon_point2'; procedure QPolygon_setPoint(handle: QPolygonH; index: Integer; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPolygon_setPoint'; procedure QPolygon_setPoint(handle: QPolygonH; index: Integer; p: PQtPoint); cdecl; external Qt4PasLib name 'QPolygon_setPoint2'; procedure QPolygon_setPoints(handle: QPolygonH; nPoints: Integer; points: PInteger); cdecl; external Qt4PasLib name 'QPolygon_setPoints'; procedure QPolygon_putPoints(handle: QPolygonH; index: Integer; nPoints: Integer; points: PInteger); cdecl; external Qt4PasLib name 'QPolygon_putPoints'; procedure QPolygon_putPoints(handle: QPolygonH; index: Integer; nPoints: Integer; from: QPolygonH; fromIndex: Integer = 0); cdecl; external Qt4PasLib name 'QPolygon_putPoints3'; function QPolygon_containsPoint(handle: QPolygonH; pt: PQtPoint; fillRule: QtFillRule): Boolean; cdecl; external Qt4PasLib name 'QPolygon_containsPoint'; procedure QPolygon_united(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_united'; procedure QPolygon_intersected(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_intersected'; procedure QPolygon_subtracted(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_subtracted'; function QPolygonF_create(): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create'; procedure QPolygonF_destroy(handle: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_destroy'; function QPolygonF_create(size: Integer): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create2'; function QPolygonF_create(a: QPolygonFH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create3'; function QPolygonF_create(r: QRectFH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create4'; function QPolygonF_create(a: QPolygonH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create5'; procedure QPolygonF_translate(handle: QPolygonFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QPolygonF_translate'; procedure QPolygonF_translate(handle: QPolygonFH; offset: PQtPointF); cdecl; external Qt4PasLib name 'QPolygonF_translate2'; procedure QPolygonF_toPolygon(handle: QPolygonFH; retval: QPolygonH); cdecl; external Qt4PasLib name 'QPolygonF_toPolygon'; function QPolygonF_isClosed(handle: QPolygonFH): Boolean; cdecl; external Qt4PasLib name 'QPolygonF_isClosed'; procedure QPolygonF_boundingRect(handle: QPolygonFH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPolygonF_boundingRect'; function QPolygonF_containsPoint(handle: QPolygonFH; pt: PQtPointF; fillRule: QtFillRule): Boolean; cdecl; external Qt4PasLib name 'QPolygonF_containsPoint'; procedure QPolygonF_united(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_united'; procedure QPolygonF_intersected(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_intersected'; procedure QPolygonF_subtracted(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_subtracted'; type QPainterCompositionMode = ( // QPainter::CompositionMode (1) QPainterCompositionMode_SourceOver, QPainterCompositionMode_DestinationOver, QPainterCompositionMode_Clear, QPainterCompositionMode_Source, QPainterCompositionMode_Destination, QPainterCompositionMode_SourceIn, QPainterCompositionMode_DestinationIn, QPainterCompositionMode_SourceOut, QPainterCompositionMode_DestinationOut, QPainterCompositionMode_SourceAtop, QPainterCompositionMode_DestinationAtop, QPainterCompositionMode_Xor, QPainterCompositionMode_Plus, QPainterCompositionMode_Multiply, QPainterCompositionMode_Screen, QPainterCompositionMode_Overlay, QPainterCompositionMode_Darken, QPainterCompositionMode_Lighten, QPainterCompositionMode_ColorDodge, QPainterCompositionMode_ColorBurn, QPainterCompositionMode_HardLight, QPainterCompositionMode_SoftLight, QPainterCompositionMode_Difference, QPainterCompositionMode_Exclusion, QPainterRasterOp_SourceOrDestination, QPainterRasterOp_SourceAndDestination, QPainterRasterOp_SourceXorDestination, QPainterRasterOp_NotSourceAndNotDestination, QPainterRasterOp_NotSourceOrNotDestination, QPainterRasterOp_NotSourceXorDestination, QPainterRasterOp_NotSource, QPainterRasterOp_NotSourceAndDestination, QPainterRasterOp_SourceAndNotDestination ); type QPainterRenderHint = cardinal; // QPainter::RenderHint QPainterRenderHints = QPainterRenderHint; //QFlags<> (3) const QPainterAntialiasing = $01; QPainterTextAntialiasing = $02; QPainterSmoothPixmapTransform = $04; QPainterHighQualityAntialiasing = $08; QPainterNonCosmeticDefaultPen = $10; function QPainter_create(): QPainterH; cdecl; external Qt4PasLib name 'QPainter_create'; procedure QPainter_destroy(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_destroy'; function QPainter_create(AnonParam1: QPaintDeviceH): QPainterH; cdecl; external Qt4PasLib name 'QPainter_create2'; function QPainter_device(handle: QPainterH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPainter_device'; function QPainter_begin(handle: QPainterH; AnonParam1: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPainter_begin'; function QPainter_end(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_end'; function QPainter_isActive(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_isActive'; procedure QPainter_initFrom(handle: QPainterH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QPainter_initFrom'; procedure QPainter_setCompositionMode(handle: QPainterH; mode: QPainterCompositionMode); cdecl; external Qt4PasLib name 'QPainter_setCompositionMode'; function QPainter_compositionMode(handle: QPainterH): QPainterCompositionMode; cdecl; external Qt4PasLib name 'QPainter_compositionMode'; function QPainter_font(handle: QPainterH): QFontH; cdecl; external Qt4PasLib name 'QPainter_font'; procedure QPainter_setFont(handle: QPainterH; f: QFontH); cdecl; external Qt4PasLib name 'QPainter_setFont'; procedure QPainter_fontMetrics(handle: QPainterH; retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QPainter_fontMetrics'; procedure QPainter_fontInfo(handle: QPainterH; retval: QFontInfoH); cdecl; external Qt4PasLib name 'QPainter_fontInfo'; procedure QPainter_setPen(handle: QPainterH; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_setPen'; procedure QPainter_setPen(handle: QPainterH; pen: QPenH); cdecl; external Qt4PasLib name 'QPainter_setPen2'; procedure QPainter_setPen(handle: QPainterH; style: QtPenStyle); cdecl; external Qt4PasLib name 'QPainter_setPen3'; function QPainter_pen(handle: QPainterH): QPenH; cdecl; external Qt4PasLib name 'QPainter_pen'; procedure QPainter_setBrush(handle: QPainterH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPainter_setBrush'; procedure QPainter_setBrush(handle: QPainterH; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_setBrush2'; function QPainter_brush(handle: QPainterH): QBrushH; cdecl; external Qt4PasLib name 'QPainter_brush'; procedure QPainter_setBackgroundMode(handle: QPainterH; mode: QtBGMode); cdecl; external Qt4PasLib name 'QPainter_setBackgroundMode'; function QPainter_backgroundMode(handle: QPainterH): QtBGMode; cdecl; external Qt4PasLib name 'QPainter_backgroundMode'; procedure QPainter_brushOrigin(handle: QPainterH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_brushOrigin'; procedure QPainter_setBrushOrigin(handle: QPainterH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin'; procedure QPainter_setBrushOrigin(handle: QPainterH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin2'; procedure QPainter_setBrushOrigin(handle: QPainterH; AnonParam1: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin3'; procedure QPainter_setBackground(handle: QPainterH; bg: QBrushH); cdecl; external Qt4PasLib name 'QPainter_setBackground'; function QPainter_background(handle: QPainterH): QBrushH; cdecl; external Qt4PasLib name 'QPainter_background'; function QPainter_opacity(handle: QPainterH): qreal; cdecl; external Qt4PasLib name 'QPainter_opacity'; procedure QPainter_setOpacity(handle: QPainterH; opacity: qreal); cdecl; external Qt4PasLib name 'QPainter_setOpacity'; procedure QPainter_clipRegion(handle: QPainterH; retval: QRegionH); cdecl; external Qt4PasLib name 'QPainter_clipRegion'; procedure QPainter_clipPath(handle: QPainterH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainter_clipPath'; procedure QPainter_setClipRect(handle: QPainterH; AnonParam1: QRectFH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect'; procedure QPainter_setClipRect(handle: QPainterH; AnonParam1: PRect; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect2'; procedure QPainter_setClipRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect3'; procedure QPainter_setClipRegion(handle: QPainterH; AnonParam1: QRegionH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRegion'; procedure QPainter_setClipPath(handle: QPainterH; path: QPainterPathH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipPath'; procedure QPainter_setClipping(handle: QPainterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPainter_setClipping'; function QPainter_hasClipping(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_hasClipping'; procedure QPainter_save(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_save'; procedure QPainter_restore(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_restore'; procedure QPainter_setMatrix(handle: QPainterH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setMatrix'; function QPainter_matrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_matrix'; function QPainter_deviceMatrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_deviceMatrix'; procedure QPainter_resetMatrix(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_resetMatrix'; procedure QPainter_setTransform(handle: QPainterH; transform: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setTransform'; function QPainter_transform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_transform'; function QPainter_deviceTransform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_deviceTransform'; procedure QPainter_resetTransform(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_resetTransform'; procedure QPainter_setWorldMatrix(handle: QPainterH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setWorldMatrix'; function QPainter_worldMatrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_worldMatrix'; procedure QPainter_setWorldTransform(handle: QPainterH; matrix: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setWorldTransform'; function QPainter_worldTransform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_worldTransform'; procedure QPainter_combinedMatrix(handle: QPainterH; retval: QMatrixH); cdecl; external Qt4PasLib name 'QPainter_combinedMatrix'; procedure QPainter_combinedTransform(handle: QPainterH; retval: QTransformH); cdecl; external Qt4PasLib name 'QPainter_combinedTransform'; procedure QPainter_setMatrixEnabled(handle: QPainterH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPainter_setMatrixEnabled'; function QPainter_matrixEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_matrixEnabled'; procedure QPainter_setWorldMatrixEnabled(handle: QPainterH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPainter_setWorldMatrixEnabled'; function QPainter_worldMatrixEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_worldMatrixEnabled'; procedure QPainter_scale(handle: QPainterH; sx: qreal; sy: qreal); cdecl; external Qt4PasLib name 'QPainter_scale'; procedure QPainter_shear(handle: QPainterH; sh: qreal; sv: qreal); cdecl; external Qt4PasLib name 'QPainter_shear'; procedure QPainter_rotate(handle: QPainterH; a: qreal); cdecl; external Qt4PasLib name 'QPainter_rotate'; procedure QPainter_translate(handle: QPainterH; offset: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_translate'; procedure QPainter_translate(handle: QPainterH; offset: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_translate2'; procedure QPainter_translate(handle: QPainterH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QPainter_translate3'; procedure QPainter_window(handle: QPainterH; retval: PRect); cdecl; external Qt4PasLib name 'QPainter_window'; procedure QPainter_setWindow(handle: QPainterH; window: PRect); cdecl; external Qt4PasLib name 'QPainter_setWindow'; procedure QPainter_setWindow(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_setWindow2'; procedure QPainter_viewport(handle: QPainterH; retval: PRect); cdecl; external Qt4PasLib name 'QPainter_viewport'; procedure QPainter_setViewport(handle: QPainterH; viewport: PRect); cdecl; external Qt4PasLib name 'QPainter_setViewport'; procedure QPainter_setViewport(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_setViewport2'; procedure QPainter_setViewTransformEnabled(handle: QPainterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPainter_setViewTransformEnabled'; function QPainter_viewTransformEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_viewTransformEnabled'; procedure QPainter_strokePath(handle: QPainterH; path: QPainterPathH; pen: QPenH); cdecl; external Qt4PasLib name 'QPainter_strokePath'; procedure QPainter_fillPath(handle: QPainterH; path: QPainterPathH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillPath'; procedure QPainter_drawPath(handle: QPainterH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainter_drawPath'; procedure QPainter_drawPoint(handle: QPainterH; pt: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_drawPoint'; procedure QPainter_drawPoint(handle: QPainterH; p: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_drawPoint2'; procedure QPainter_drawPoint(handle: QPainterH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoint3'; procedure QPainter_drawPoints(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoints'; procedure QPainter_drawPoints(handle: QPainterH; points: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawPoints2'; procedure QPainter_drawPoints(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoints3'; procedure QPainter_drawPoints(handle: QPainterH; points: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawPoints4'; procedure QPainter_drawLine(handle: QPainterH; line: QLineFH); cdecl; external Qt4PasLib name 'QPainter_drawLine'; procedure QPainter_drawLine(handle: QPainterH; line: QLineH); cdecl; external Qt4PasLib name 'QPainter_drawLine2'; procedure QPainter_drawLine(handle: QPainterH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLine3'; procedure QPainter_drawLine(handle: QPainterH; p1: PQtPoint; p2: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_drawLine4'; procedure QPainter_drawLine(handle: QPainterH; p1: PQtPointF; p2: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_drawLine5'; procedure QPainter_drawLines(handle: QPainterH; lines: QLineFH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines'; procedure QPainter_drawLines(handle: QPainterH; pointPairs: PQtPointF; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines2'; procedure QPainter_drawLines(handle: QPainterH; lines: QLineH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines3'; procedure QPainter_drawLines(handle: QPainterH; pointPairs: PQtPoint; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines4'; procedure QPainter_drawRect(handle: QPainterH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawRect'; procedure QPainter_drawRect(handle: QPainterH; x1: Integer; y1: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRect2'; procedure QPainter_drawRect(handle: QPainterH; rect: PRect); cdecl; external Qt4PasLib name 'QPainter_drawRect3'; procedure QPainter_drawRects(handle: QPainterH; rects: QRectFH; rectCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRects'; procedure QPainter_drawRects(handle: QPainterH; rects: PRect; rectCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRects2'; procedure QPainter_drawEllipse(handle: QPainterH; r: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawEllipse'; procedure QPainter_drawEllipse(handle: QPainterH; r: PRect); cdecl; external Qt4PasLib name 'QPainter_drawEllipse2'; procedure QPainter_drawEllipse(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_drawEllipse3'; procedure QPainter_drawEllipse(handle: QPainterH; center: PQtPointF; rx: qreal; ry: qreal); cdecl; external Qt4PasLib name 'QPainter_drawEllipse4'; procedure QPainter_drawEllipse(handle: QPainterH; center: PQtPoint; rx: Integer; ry: Integer); cdecl; external Qt4PasLib name 'QPainter_drawEllipse5'; procedure QPainter_drawPolyline(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPolyline'; procedure QPainter_drawPolyline(handle: QPainterH; polyline: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawPolyline2'; procedure QPainter_drawPolyline(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPolyline3'; procedure QPainter_drawPolyline(handle: QPainterH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawPolyline4'; procedure QPainter_drawPolygon(handle: QPainterH; points: PQtPointF; pointCount: Integer; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon'; procedure QPainter_drawPolygon(handle: QPainterH; polygon: QPolygonFH; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon2'; procedure QPainter_drawPolygon(handle: QPainterH; points: PQtPoint; pointCount: Integer; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon3'; procedure QPainter_drawPolygon(handle: QPainterH; polygon: QPolygonH; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon4'; procedure QPainter_drawConvexPolygon(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon'; procedure QPainter_drawConvexPolygon(handle: QPainterH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon2'; procedure QPainter_drawConvexPolygon(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon3'; procedure QPainter_drawConvexPolygon(handle: QPainterH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon4'; procedure QPainter_drawArc(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc'; procedure QPainter_drawArc(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc2'; procedure QPainter_drawArc(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc3'; procedure QPainter_drawPie(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie'; procedure QPainter_drawPie(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie2'; procedure QPainter_drawPie(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie3'; procedure QPainter_drawChord(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord'; procedure QPainter_drawChord(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord2'; procedure QPainter_drawChord(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord3'; procedure QPainter_drawRoundedRect(handle: QPainterH; rect: QRectFH; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect'; procedure QPainter_drawRoundedRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect2'; procedure QPainter_drawRoundedRect(handle: QPainterH; rect: PRect; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect3'; procedure QPainter_drawRoundRect(handle: QPainterH; r: QRectFH; xround: Integer = 25; yround: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect'; procedure QPainter_drawRoundRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: Integer = 25; AnonParam6: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect2'; procedure QPainter_drawRoundRect(handle: QPainterH; r: PRect; xround: Integer = 25; yround: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect3'; procedure QPainter_drawTiledPixmap(handle: QPainterH; rect: QRectFH; pm: QPixmapH; offset: PQtPointF = nil); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap'; procedure QPainter_drawTiledPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: QPixmapH; sx: Integer = 0; sy: Integer = 0); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap2'; procedure QPainter_drawTiledPixmap(handle: QPainterH; AnonParam1: PRect; AnonParam2: QPixmapH; AnonParam3: PQtPoint = nil); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap3'; procedure QPainter_drawPicture(handle: QPainterH; p: PQtPointF; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture'; procedure QPainter_drawPicture(handle: QPainterH; x: Integer; y: Integer; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture2'; procedure QPainter_drawPicture(handle: QPainterH; p: PQtPoint; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture3'; procedure QPainter_drawPixmap(handle: QPainterH; targetRect: QRectFH; pixmap: QPixmapH; sourceRect: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap'; procedure QPainter_drawPixmap(handle: QPainterH; targetRect: PRect; pixmap: QPixmapH; sourceRect: PRect); cdecl; external Qt4PasLib name 'QPainter_drawPixmap2'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pm: QPixmapH; sx: Integer; sy: Integer; sw: Integer; sh: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPixmap3'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; pm: QPixmapH; sx: Integer; sy: Integer; sw: Integer; sh: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPixmap4'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPointF; pm: QPixmapH; sr: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap5'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPoint; pm: QPixmapH; sr: PRect); cdecl; external Qt4PasLib name 'QPainter_drawPixmap6'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPointF; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap7'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPoint; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap8'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap9'; procedure QPainter_drawPixmap(handle: QPainterH; r: PRect; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap10'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap11'; procedure QPainter_drawImage(handle: QPainterH; targetRect: QRectFH; image: QImageH; sourceRect: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage'; procedure QPainter_drawImage(handle: QPainterH; targetRect: PRect; image: QImageH; sourceRect: PRect; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage2'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPointF; image: QImageH; sr: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage3'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPoint; image: QImageH; sr: PRect; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage4'; procedure QPainter_drawImage(handle: QPainterH; r: QRectFH; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage5'; procedure QPainter_drawImage(handle: QPainterH; r: PRect; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage6'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPointF; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage7'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPoint; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage8'; procedure QPainter_drawImage(handle: QPainterH; x: Integer; y: Integer; image: QImageH; sx: Integer = 0; sy: Integer = 0; sw: Integer = -1; sh: Integer = -1; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage9'; procedure QPainter_setLayoutDirection(handle: QPainterH; direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QPainter_setLayoutDirection'; function QPainter_layoutDirection(handle: QPainterH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QPainter_layoutDirection'; procedure QPainter_drawText(handle: QPainterH; p: PQtPointF; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText'; procedure QPainter_drawText(handle: QPainterH; p: PQtPoint; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText2'; procedure QPainter_drawText(handle: QPainterH; x: Integer; y: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText3'; procedure QPainter_drawText(handle: QPainterH; p: PQtPointF; str: PWideString; tf: Integer; justificationPadding: Integer); cdecl; external Qt4PasLib name 'QPainter_drawText4'; procedure QPainter_drawText(handle: QPainterH; r: QRectFH; flags: Integer; text: PWideString; br: QRectFH = nil); cdecl; external Qt4PasLib name 'QPainter_drawText5'; procedure QPainter_drawText(handle: QPainterH; r: PRect; flags: Integer; text: PWideString; br: PRect = nil); cdecl; external Qt4PasLib name 'QPainter_drawText6'; procedure QPainter_drawText(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString; br: PRect = nil); cdecl; external Qt4PasLib name 'QPainter_drawText7'; procedure QPainter_drawText(handle: QPainterH; r: QRectFH; text: PWideString; o: QTextOptionH = nil); cdecl; external Qt4PasLib name 'QPainter_drawText8'; procedure QPainter_boundingRect(handle: QPainterH; retval: QRectFH; rect: QRectFH; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect'; procedure QPainter_boundingRect(handle: QPainterH; retval: PRect; rect: PRect; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect2'; procedure QPainter_boundingRect(handle: QPainterH; retval: PRect; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect3'; procedure QPainter_boundingRect(handle: QPainterH; retval: QRectFH; rect: QRectFH; text: PWideString; o: QTextOptionH = nil); cdecl; external Qt4PasLib name 'QPainter_boundingRect4'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: QRectFH; AnonParam2: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect2'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: PRect; AnonParam2: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect3'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: QRectFH; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect4'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect5'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: PRect; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect6'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect7'; procedure QPainter_fillRect(handle: QPainterH; r: PRect; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect8'; procedure QPainter_fillRect(handle: QPainterH; r: QRectFH; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect9'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect10'; procedure QPainter_fillRect(handle: QPainterH; r: PRect; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect11'; procedure QPainter_fillRect(handle: QPainterH; r: QRectFH; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect12'; procedure QPainter_eraseRect(handle: QPainterH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QPainter_eraseRect'; procedure QPainter_eraseRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_eraseRect2'; procedure QPainter_eraseRect(handle: QPainterH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QPainter_eraseRect3'; procedure QPainter_setRenderHint(handle: QPainterH; hint: QPainterRenderHint; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPainter_setRenderHint'; procedure QPainter_setRenderHints(handle: QPainterH; hints: QPainterRenderHints; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPainter_setRenderHints'; function QPainter_renderHints(handle: QPainterH): QPainterRenderHints; cdecl; external Qt4PasLib name 'QPainter_renderHints'; function QPainter_testRenderHint(handle: QPainterH; hint: QPainterRenderHint): Boolean; cdecl; external Qt4PasLib name 'QPainter_testRenderHint'; function QPainter_paintEngine(handle: QPainterH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPainter_paintEngine'; procedure QPainter_setRedirected(device: QPaintDeviceH; replacement: QPaintDeviceH; offset: PQtPoint = nil); cdecl; external Qt4PasLib name 'QPainter_setRedirected'; function QPainter_redirected(device: QPaintDeviceH; offset: PQtPoint = nil): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPainter_redirected'; procedure QPainter_restoreRedirected(device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QPainter_restoreRedirected'; type QPaintEnginePolygonDrawMode = ( // QPaintEngine::PolygonDrawMode (1) QPaintEngineOddEvenMode, QPaintEngineWindingMode, QPaintEngineConvexMode, QPaintEnginePolylineMode ); type QPaintEnginePaintEngineFeature = cardinal; // QPaintEngine::PaintEngineFeature QPaintEnginePaintEngineFeatures = QPaintEnginePaintEngineFeature; //QFlags<> (3) const QPaintEnginePrimitiveTransform = $00000001; QPaintEnginePatternTransform = $00000002; QPaintEnginePixmapTransform = $00000004; QPaintEnginePatternBrush = $00000008; QPaintEngineLinearGradientFill = $00000010; QPaintEngineRadialGradientFill = $00000020; QPaintEngineConicalGradientFill = $00000040; QPaintEngineAlphaBlend = $00000080; QPaintEnginePorterDuff = $00000100; QPaintEnginePainterPaths = $00000200; QPaintEngineAntialiasing = $00000400; QPaintEngineBrushStroke = $00000800; QPaintEngineConstantOpacity = $00001000; QPaintEngineMaskedBrush = $00002000; QPaintEnginePerspectiveTransform = $00004000; QPaintEngineBlendModes = $00008000; QPaintEngineObjectBoundingModeGradients = $00010000; QPaintEngineRasterOpModes = $00020000; QPaintEnginePaintOutsidePaintEvent = $20000000; QPaintEngineAllFeatures = $ffffffff; type QPaintEngineDirtyFlag = cardinal; // QPaintEngine::DirtyFlag QPaintEngineDirtyFlags = QPaintEngineDirtyFlag; //QFlags<> (3) const QPaintEngineDirtyPen = $0001; QPaintEngineDirtyBrush = $0002; QPaintEngineDirtyBrushOrigin = $0004; QPaintEngineDirtyFont = $0008; QPaintEngineDirtyBackground = $0010; QPaintEngineDirtyBackgroundMode = $0020; QPaintEngineDirtyTransform = $0040; QPaintEngineDirtyClipRegion = $0080; QPaintEngineDirtyClipPath = $0100; QPaintEngineDirtyHints = $0200; QPaintEngineDirtyCompositionMode = $0400; QPaintEngineDirtyClipEnabled = $0800; QPaintEngineDirtyOpacity = $1000; QPaintEngineAllDirty = $ffff; type QPaintEngineType = ( //QPaintEngine::Type (2) QPaintEngineX11, QPaintEngineWindows, QPaintEngineQuickDraw, QPaintEngineCoreGraphics, QPaintEngineMacPrinter, QPaintEngineQWindowSystem, QPaintEnginePostScript, QPaintEngineOpenGL, QPaintEnginePicture, QPaintEngineSVG, QPaintEngineRaster, QPaintEngineDirect3D, QPaintEnginePdf, QPaintEngineOpenVG, QPaintEngineUser = 50, QPaintEngineMaxUser = 100 ); function QPaintEngine_isActive(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_isActive'; procedure QPaintEngine_setActive(handle: QPaintEngineH; newState: Boolean); cdecl; external Qt4PasLib name 'QPaintEngine_setActive'; function QPaintEngine_begin(handle: QPaintEngineH; pdev: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_begin'; function QPaintEngine_end(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_end'; procedure QPaintEngine_drawRects(handle: QPaintEngineH; rects: PRect; rectCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawRects'; procedure QPaintEngine_drawRects(handle: QPaintEngineH; rects: QRectFH; rectCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawRects2'; procedure QPaintEngine_drawLines(handle: QPaintEngineH; lines: QLineH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawLines'; procedure QPaintEngine_drawLines(handle: QPaintEngineH; lines: QLineFH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawLines2'; procedure QPaintEngine_drawEllipse(handle: QPaintEngineH; r: QRectFH); cdecl; external Qt4PasLib name 'QPaintEngine_drawEllipse'; procedure QPaintEngine_drawEllipse(handle: QPaintEngineH; r: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_drawEllipse2'; procedure QPaintEngine_drawPath(handle: QPaintEngineH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPaintEngine_drawPath'; procedure QPaintEngine_drawPoints(handle: QPaintEngineH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawPoints'; procedure QPaintEngine_drawPoints(handle: QPaintEngineH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawPoints2'; procedure QPaintEngine_drawPolygon(handle: QPaintEngineH; points: PQtPointF; pointCount: Integer; mode: QPaintEnginePolygonDrawMode); cdecl; external Qt4PasLib name 'QPaintEngine_drawPolygon'; procedure QPaintEngine_drawPolygon(handle: QPaintEngineH; points: PQtPoint; pointCount: Integer; mode: QPaintEnginePolygonDrawMode); cdecl; external Qt4PasLib name 'QPaintEngine_drawPolygon2'; procedure QPaintEngine_drawPixmap(handle: QPaintEngineH; r: QRectFH; pm: QPixmapH; sr: QRectFH); cdecl; external Qt4PasLib name 'QPaintEngine_drawPixmap'; procedure QPaintEngine_drawTiledPixmap(handle: QPaintEngineH; r: QRectFH; pixmap: QPixmapH; s: PQtPointF); cdecl; external Qt4PasLib name 'QPaintEngine_drawTiledPixmap'; procedure QPaintEngine_drawImage(handle: QPaintEngineH; r: QRectFH; pm: QImageH; sr: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPaintEngine_drawImage'; procedure QPaintEngine_setPaintDevice(handle: QPaintEngineH; device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QPaintEngine_setPaintDevice'; function QPaintEngine_paintDevice(handle: QPaintEngineH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPaintEngine_paintDevice'; procedure QPaintEngine_setSystemClip(handle: QPaintEngineH; baseClip: QRegionH); cdecl; external Qt4PasLib name 'QPaintEngine_setSystemClip'; procedure QPaintEngine_systemClip(handle: QPaintEngineH; retval: QRegionH); cdecl; external Qt4PasLib name 'QPaintEngine_systemClip'; procedure QPaintEngine_setSystemRect(handle: QPaintEngineH; rect: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_setSystemRect'; procedure QPaintEngine_systemRect(handle: QPaintEngineH; retval: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_systemRect'; procedure QPaintEngine_coordinateOffset(handle: QPaintEngineH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QPaintEngine_coordinateOffset'; function QPaintEngine_type(handle: QPaintEngineH): QPaintEngineType; cdecl; external Qt4PasLib name 'QPaintEngine_type'; procedure QPaintEngine_fix_neg_rect(handle: QPaintEngineH; x: PInteger; y: PInteger; w: PInteger; h: PInteger); cdecl; external Qt4PasLib name 'QPaintEngine_fix_neg_rect'; function QPaintEngine_testDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_testDirty'; procedure QPaintEngine_setDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags); cdecl; external Qt4PasLib name 'QPaintEngine_setDirty'; procedure QPaintEngine_clearDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags); cdecl; external Qt4PasLib name 'QPaintEngine_clearDirty'; function QPaintEngine_hasFeature(handle: QPaintEngineH; feature: QPaintEnginePaintEngineFeatures): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_hasFeature'; function QPaintEngine_painter(handle: QPaintEngineH): QPainterH; cdecl; external Qt4PasLib name 'QPaintEngine_painter'; procedure QPaintEngine_syncState(handle: QPaintEngineH); cdecl; external Qt4PasLib name 'QPaintEngine_syncState'; function QPaintEngine_isExtended(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_isExtended'; {$ifdef MSWINDOWS } function QPaintEngine_getDC(handle: QPaintEngineH): QHDC; cdecl; external Qt4PasLib name 'QPaintEngine_getDC'; procedure QPaintEngine_releaseDC(handle: QPaintEngineH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPaintEngine_releaseDC'; {$endif} type QPaintDevicePaintDeviceMetric = ( //QPaintDevice::PaintDeviceMetric (2) QPaintDevicePdmWidth = 1, QPaintDevicePdmHeight, QPaintDevicePdmWidthMM, QPaintDevicePdmHeightMM, QPaintDevicePdmNumColors, QPaintDevicePdmDepth, QPaintDevicePdmDpiX, QPaintDevicePdmDpiY, QPaintDevicePdmPhysicalDpiX, QPaintDevicePdmPhysicalDpiY ); function QPaintDevice_devType(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_devType'; function QPaintDevice_paintingActive(handle: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPaintDevice_paintingActive'; function QPaintDevice_paintEngine(handle: QPaintDeviceH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPaintDevice_paintEngine'; function QPaintDevice_width(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_width'; function QPaintDevice_height(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_height'; function QPaintDevice_widthMM(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_widthMM'; function QPaintDevice_heightMM(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_heightMM'; function QPaintDevice_logicalDpiX(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_logicalDpiX'; function QPaintDevice_logicalDpiY(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_logicalDpiY'; function QPaintDevice_physicalDpiX(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_physicalDpiX'; function QPaintDevice_physicalDpiY(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_physicalDpiY'; function QPaintDevice_numColors(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_numColors'; function QPaintDevice_depth(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_depth'; {$ifdef MSWINDOWS } function QPaintDevice_getDC(handle: QPaintDeviceH): QHDC; cdecl; external Qt4PasLib name 'QPaintDevice_getDC'; procedure QPaintDevice_releaseDC(handle: QPaintDeviceH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPaintDevice_releaseDC'; {$endif} type QRegionRegionType = ( // QRegion::RegionType (1) QRegionRectangle, QRegionEllipse ); function QRegion_create(): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create'; procedure QRegion_destroy(handle: QRegionH); cdecl; external Qt4PasLib name 'QRegion_destroy'; function QRegion_create(x: Integer; y: Integer; w: Integer; h: Integer; t: QRegionRegionType = QRegionRectangle): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create2'; function QRegion_create(r: PRect; t: QRegionRegionType = QRegionRectangle): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create3'; function QRegion_create(pa: QPolygonH; fillRule: QtFillRule = QtOddEvenFill): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create4'; function QRegion_create(region: QRegionH): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create5'; function QRegion_create(bitmap: QBitmapH): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create6'; function QRegion_isEmpty(handle: QRegionH): Boolean; cdecl; external Qt4PasLib name 'QRegion_isEmpty'; function QRegion_contains(handle: QRegionH; p: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QRegion_contains'; function QRegion_contains(handle: QRegionH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRegion_contains2'; procedure QRegion_translate(handle: QRegionH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRegion_translate'; procedure QRegion_translate(handle: QRegionH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRegion_translate2'; procedure QRegion_translated(handle: QRegionH; retval: QRegionH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRegion_translated'; procedure QRegion_translated(handle: QRegionH; retval: QRegionH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRegion_translated2'; procedure QRegion_unite(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_unite'; procedure QRegion_unite(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_unite2'; procedure QRegion_intersect(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_intersect'; procedure QRegion_intersect(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_intersect2'; procedure QRegion_subtract(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_subtract'; procedure QRegion_eor(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_eor'; procedure QRegion_united(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_united'; procedure QRegion_united(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_united2'; procedure QRegion_intersected(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_intersected'; procedure QRegion_intersected(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_intersected2'; procedure QRegion_subtracted(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_subtracted'; procedure QRegion_xored(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_xored'; function QRegion_intersects(handle: QRegionH; r: QRegionH): Boolean; cdecl; external Qt4PasLib name 'QRegion_intersects'; function QRegion_intersects(handle: QRegionH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRegion_intersects2'; procedure QRegion_boundingRect(handle: QRegionH; retval: PRect); cdecl; external Qt4PasLib name 'QRegion_boundingRect'; procedure QRegion_setRects(handle: QRegionH; rect: PRect; num: Integer); cdecl; external Qt4PasLib name 'QRegion_setRects'; function QRegion_numRects(handle: QRegionH): Integer; cdecl; external Qt4PasLib name 'QRegion_numRects'; {$ifdef BINUX } function QRegion_handle(handle: QRegionH): Region; cdecl; external Qt4PasLib name 'QRegion_handle'; {$endif} {$ifdef MSWINDOWS } function QRegion_handle(handle: QRegionH): QHRGN; cdecl; external Qt4PasLib name 'QRegion_handle2'; {$endif} {$ifdef DARWIN } function QRegion_handle(handle: QRegionH): RgnHandle; cdecl; external Qt4PasLib name 'QRegion_handle3'; function QRegion_handle(handle: QRegionH; AnonParam1: Boolean): RgnHandle; cdecl; external Qt4PasLib name 'QRegion_handle4'; function QRegion_toHIMutableShape(handle: QRegionH): Pointer; cdecl; external Qt4PasLib name 'QRegion_toHIMutableShape'; procedure QRegion_fromHIShapeRef(retval: QRegionH; shape: Pointer); cdecl; external Qt4PasLib name 'QRegion_fromHIShapeRef'; {$endif} {$ifdef QTOPIA } function QRegion_handle(handle: QRegionH): Pointer; cdecl; external Qt4PasLib name 'QRegion_handle5'; {$endif} type QPrinterPrinterMode = ( // QPrinter::PrinterMode (1) QPrinterScreenResolution, QPrinterPrinterResolution, QPrinterHighResolution ); QPrinterOrientation = ( // QPrinter::Orientation (1) QPrinterPortrait, QPrinterLandscape ); QPrinterPageOrder = ( // QPrinter::PageOrder (1) QPrinterFirstPageFirst, QPrinterLastPageFirst ); QPrinterColorMode = ( // QPrinter::ColorMode (1) QPrinterGrayScale, QPrinterColor ); QPrinterPaperSource = ( // QPrinter::PaperSource (1) QPrinterOnlyOne, QPrinterLower, QPrinterMiddle, QPrinterManual, QPrinterEnvelope, QPrinterEnvelopeManual, QPrinterAuto, QPrinterTractor, QPrinterSmallFormat, QPrinterLargeFormat, QPrinterLargeCapacity, QPrinterCassette, QPrinterFormSource, QPrinterMaxPageSource ); QPrinterPrinterState = ( // QPrinter::PrinterState (1) QPrinterIdle, QPrinterActive, QPrinterAborted, QPrinterError ); QPrinterOutputFormat = ( // QPrinter::OutputFormat (1) QPrinterNativeFormat, QPrinterPdfFormat, QPrinterPostScriptFormat ); QPrinterPrintRange = ( // QPrinter::PrintRange (1) QPrinterAllPages, QPrinterSelection, QPrinterPageRange ); QPrinterUnit = ( // QPrinter::Unit (1) QPrinterMillimeter, QPrinterPoint, QPrinterInch, QPrinterPica, QPrinterDidot, QPrinterCicero, QPrinterDevicePixel ); QPrinterDuplexMode = ( //QPrinter::DuplexMode (2) QPrinterDuplexNone = 0, QPrinterDuplexAuto, QPrinterDuplexLongSide, QPrinterDuplexShortSide ); type QPrinterPageSize = cardinal; // QPrinter::PageSize (4) const QPrinterA4 = 0 { $0 }; QPrinterB5 = 1 { $1 }; QPrinterLetter = 2 { $2 }; QPrinterLegal = 3 { $3 }; QPrinterExecutive = 4 { $4 }; QPrinterA0 = 5 { $5 }; QPrinterA1 = 6 { $6 }; QPrinterA2 = 7 { $7 }; QPrinterA3 = 8 { $8 }; QPrinterA5 = 9 { $9 }; QPrinterA6 = 10 { $a }; QPrinterA7 = 11 { $b }; QPrinterA8 = 12 { $c }; QPrinterA9 = 13 { $d }; QPrinterB0 = 14 { $e }; QPrinterB1 = 15 { $f }; QPrinterB10 = 16 { $10 }; QPrinterB2 = 17 { $11 }; QPrinterB3 = 18 { $12 }; QPrinterB4 = 19 { $13 }; QPrinterB6 = 20 { $14 }; QPrinterB7 = 21 { $15 }; QPrinterB8 = 22 { $16 }; QPrinterB9 = 23 { $17 }; QPrinterC5E = 24 { $18 }; QPrinterComm10E = 25 { $19 }; QPrinterDLE = 26 { $1a }; QPrinterFolio = 27 { $1b }; QPrinterLedger = 28 { $1c }; QPrinterTabloid = 29 { $1d }; QPrinterCustom = 30 { $1e }; QPrinterNPageSize = 30 { $1e }; QPrinterNPaperSize = 30 { $1e }; function QPrinter_create(mode: QPrinterPrinterMode = QPrinterScreenResolution): QPrinterH; cdecl; external Qt4PasLib name 'QPrinter_create'; procedure QPrinter_destroy(handle: QPrinterH); cdecl; external Qt4PasLib name 'QPrinter_destroy'; function QPrinter_create(printer: QPrinterInfoH; mode: QPrinterPrinterMode = QPrinterScreenResolution): QPrinterH; cdecl; external Qt4PasLib name 'QPrinter_create2'; function QPrinter_devType(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_devType'; procedure QPrinter_setOutputFormat(handle: QPrinterH; format: QPrinterOutputFormat); cdecl; external Qt4PasLib name 'QPrinter_setOutputFormat'; function QPrinter_outputFormat(handle: QPrinterH): QPrinterOutputFormat; cdecl; external Qt4PasLib name 'QPrinter_outputFormat'; procedure QPrinter_setPrinterName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrinterName'; procedure QPrinter_printerName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printerName'; function QPrinter_isValid(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_isValid'; procedure QPrinter_setOutputFileName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setOutputFileName'; procedure QPrinter_outputFileName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_outputFileName'; procedure QPrinter_setPrintProgram(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrintProgram'; procedure QPrinter_printProgram(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printProgram'; procedure QPrinter_setDocName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setDocName'; procedure QPrinter_docName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_docName'; procedure QPrinter_setCreator(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setCreator'; procedure QPrinter_creator(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_creator'; procedure QPrinter_setOrientation(handle: QPrinterH; AnonParam1: QPrinterOrientation); cdecl; external Qt4PasLib name 'QPrinter_setOrientation'; function QPrinter_orientation(handle: QPrinterH): QPrinterOrientation; cdecl; external Qt4PasLib name 'QPrinter_orientation'; procedure QPrinter_setPageSize(handle: QPrinterH; AnonParam1: QPrinterPageSize); cdecl; external Qt4PasLib name 'QPrinter_setPageSize'; function QPrinter_pageSize(handle: QPrinterH): QPrinterPageSize; cdecl; external Qt4PasLib name 'QPrinter_pageSize'; procedure QPrinter_setPaperSize(handle: QPrinterH; AnonParam1: QPrinterPageSize); cdecl; external Qt4PasLib name 'QPrinter_setPaperSize'; function QPrinter_paperSize(handle: QPrinterH): QPrinterPageSize; cdecl; external Qt4PasLib name 'QPrinter_paperSize'; procedure QPrinter_setPaperSize(handle: QPrinterH; paperSize: QSizeFH; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_setPaperSize2'; procedure QPrinter_paperSize(handle: QPrinterH; retval: QSizeFH; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_paperSize2'; procedure QPrinter_setPageOrder(handle: QPrinterH; AnonParam1: QPrinterPageOrder); cdecl; external Qt4PasLib name 'QPrinter_setPageOrder'; function QPrinter_pageOrder(handle: QPrinterH): QPrinterPageOrder; cdecl; external Qt4PasLib name 'QPrinter_pageOrder'; procedure QPrinter_setResolution(handle: QPrinterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QPrinter_setResolution'; function QPrinter_resolution(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_resolution'; procedure QPrinter_setColorMode(handle: QPrinterH; AnonParam1: QPrinterColorMode); cdecl; external Qt4PasLib name 'QPrinter_setColorMode'; function QPrinter_colorMode(handle: QPrinterH): QPrinterColorMode; cdecl; external Qt4PasLib name 'QPrinter_colorMode'; procedure QPrinter_setCollateCopies(handle: QPrinterH; collate: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setCollateCopies'; function QPrinter_collateCopies(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_collateCopies'; procedure QPrinter_setFullPage(handle: QPrinterH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setFullPage'; function QPrinter_fullPage(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_fullPage'; procedure QPrinter_setNumCopies(handle: QPrinterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QPrinter_setNumCopies'; function QPrinter_numCopies(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_numCopies'; procedure QPrinter_setPaperSource(handle: QPrinterH; AnonParam1: QPrinterPaperSource); cdecl; external Qt4PasLib name 'QPrinter_setPaperSource'; function QPrinter_paperSource(handle: QPrinterH): QPrinterPaperSource; cdecl; external Qt4PasLib name 'QPrinter_paperSource'; procedure QPrinter_setDuplex(handle: QPrinterH; duplex: QPrinterDuplexMode); cdecl; external Qt4PasLib name 'QPrinter_setDuplex'; function QPrinter_duplex(handle: QPrinterH): QPrinterDuplexMode; cdecl; external Qt4PasLib name 'QPrinter_duplex'; procedure QPrinter_supportedResolutions(handle: QPrinterH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinter_supportedResolutions'; procedure QPrinter_setFontEmbeddingEnabled(handle: QPrinterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setFontEmbeddingEnabled'; function QPrinter_fontEmbeddingEnabled(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_fontEmbeddingEnabled'; procedure QPrinter_setDoubleSidedPrinting(handle: QPrinterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setDoubleSidedPrinting'; function QPrinter_doubleSidedPrinting(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_doubleSidedPrinting'; procedure QPrinter_paperRect(handle: QPrinterH; retval: PRect); cdecl; external Qt4PasLib name 'QPrinter_paperRect'; procedure QPrinter_pageRect(handle: QPrinterH; retval: PRect); cdecl; external Qt4PasLib name 'QPrinter_pageRect'; procedure QPrinter_paperRect(handle: QPrinterH; retval: QRectFH; AnonParam1: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_paperRect2'; procedure QPrinter_pageRect(handle: QPrinterH; retval: QRectFH; AnonParam1: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_pageRect2'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QPrinter_printerSelectionOption(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printerSelectionOption'; procedure QPrinter_setPrinterSelectionOption(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrinterSelectionOption'; {$endif} function QPrinter_newPage(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_newPage'; function QPrinter_abort(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_abort'; function QPrinter_printerState(handle: QPrinterH): QPrinterPrinterState; cdecl; external Qt4PasLib name 'QPrinter_printerState'; function QPrinter_paintEngine(handle: QPrinterH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPrinter_paintEngine'; function QPrinter_printEngine(handle: QPrinterH): QPrintEngineH; cdecl; external Qt4PasLib name 'QPrinter_printEngine'; procedure QPrinter_setFromTo(handle: QPrinterH; fromPage: Integer; toPage: Integer); cdecl; external Qt4PasLib name 'QPrinter_setFromTo'; function QPrinter_fromPage(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_fromPage'; function QPrinter_toPage(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_toPage'; procedure QPrinter_setPrintRange(handle: QPrinterH; range: QPrinterPrintRange); cdecl; external Qt4PasLib name 'QPrinter_setPrintRange'; function QPrinter_printRange(handle: QPrinterH): QPrinterPrintRange; cdecl; external Qt4PasLib name 'QPrinter_printRange'; procedure QPrinter_setPageMargins(handle: QPrinterH; left: qreal; top: qreal; right: qreal; bottom: qreal; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_setPageMargins'; procedure QPrinter_getPageMargins(handle: QPrinterH; left: PQReal; top: PQReal; right: PQReal; bottom: PQReal; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_getPageMargins'; {$ifdef MSWINDOWS } procedure QPrinter_setWinPageSize(handle: QPrinterH; winPageSize: Integer); cdecl; external Qt4PasLib name 'QPrinter_setWinPageSize'; function QPrinter_winPageSize(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_winPageSize'; function QPrinter_getDC(handle: QPrinterH): QHDC; cdecl; external Qt4PasLib name 'QPrinter_getDC'; procedure QPrinter_releaseDC(handle: QPrinterH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPrinter_releaseDC'; {$endif} type QPainterPathElementType = ( // QPainterPath::ElementType (1) QPainterPathMoveToElement, QPainterPathLineToElement, QPainterPathCurveToElement, QPainterPathCurveToDataElement ); function QPainterPath_create(): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create'; procedure QPainterPath_destroy(handle: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_destroy'; function QPainterPath_create(startPoint: PQtPointF): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create2'; function QPainterPath_create(other: QPainterPathH): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create3'; procedure QPainterPath_closeSubpath(handle: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_closeSubpath'; procedure QPainterPath_moveTo(handle: QPainterPathH; p: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_moveTo'; procedure QPainterPath_moveTo(handle: QPainterPathH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_moveTo2'; procedure QPainterPath_lineTo(handle: QPainterPathH; p: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_lineTo'; procedure QPainterPath_lineTo(handle: QPainterPathH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_lineTo2'; procedure QPainterPath_arcMoveTo(handle: QPainterPathH; rect: QRectFH; angle: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcMoveTo'; procedure QPainterPath_arcMoveTo(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; angle: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcMoveTo2'; procedure QPainterPath_arcTo(handle: QPainterPathH; rect: QRectFH; startAngle: qreal; arcLength: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcTo'; procedure QPainterPath_arcTo(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; startAngle: qreal; arcLength: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcTo2'; procedure QPainterPath_cubicTo(handle: QPainterPathH; ctrlPt1: PQtPointF; ctrlPt2: PQtPointF; endPt: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_cubicTo'; procedure QPainterPath_cubicTo(handle: QPainterPathH; ctrlPt1x: qreal; ctrlPt1y: qreal; ctrlPt2x: qreal; ctrlPt2y: qreal; endPtx: qreal; endPty: qreal); cdecl; external Qt4PasLib name 'QPainterPath_cubicTo2'; procedure QPainterPath_quadTo(handle: QPainterPathH; ctrlPt: PQtPointF; endPt: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_quadTo'; procedure QPainterPath_quadTo(handle: QPainterPathH; ctrlPtx: qreal; ctrlPty: qreal; endPtx: qreal; endPty: qreal); cdecl; external Qt4PasLib name 'QPainterPath_quadTo2'; procedure QPainterPath_currentPosition(handle: QPainterPathH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_currentPosition'; procedure QPainterPath_addRect(handle: QPainterPathH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_addRect'; procedure QPainterPath_addRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addRect2'; procedure QPainterPath_addEllipse(handle: QPainterPathH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse'; procedure QPainterPath_addEllipse(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse2'; procedure QPainterPath_addEllipse(handle: QPainterPathH; center: PQtPointF; rx: qreal; ry: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse3'; procedure QPainterPath_addPolygon(handle: QPainterPathH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QPainterPath_addPolygon'; procedure QPainterPath_addText(handle: QPainterPathH; point: PQtPointF; f: QFontH; text: PWideString); cdecl; external Qt4PasLib name 'QPainterPath_addText'; procedure QPainterPath_addText(handle: QPainterPathH; x: qreal; y: qreal; f: QFontH; text: PWideString); cdecl; external Qt4PasLib name 'QPainterPath_addText2'; procedure QPainterPath_addPath(handle: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_addPath'; procedure QPainterPath_addRegion(handle: QPainterPathH; region: QRegionH); cdecl; external Qt4PasLib name 'QPainterPath_addRegion'; procedure QPainterPath_addRoundedRect(handle: QPainterPathH; rect: QRectFH; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainterPath_addRoundedRect'; procedure QPainterPath_addRoundedRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainterPath_addRoundedRect2'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; rect: QRectFH; xRnd: Integer; yRnd: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; xRnd: Integer; yRnd: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect2'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; rect: QRectFH; roundness: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect3'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; roundness: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect4'; procedure QPainterPath_connectPath(handle: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_connectPath'; function QPainterPath_contains(handle: QPainterPathH; pt: PQtPointF): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains'; function QPainterPath_contains(handle: QPainterPathH; rect: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains2'; function QPainterPath_intersects(handle: QPainterPathH; rect: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_intersects'; procedure QPainterPath_boundingRect(handle: QPainterPathH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_boundingRect'; procedure QPainterPath_controlPointRect(handle: QPainterPathH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_controlPointRect'; function QPainterPath_fillRule(handle: QPainterPathH): QtFillRule; cdecl; external Qt4PasLib name 'QPainterPath_fillRule'; procedure QPainterPath_setFillRule(handle: QPainterPathH; fillRule: QtFillRule); cdecl; external Qt4PasLib name 'QPainterPath_setFillRule'; function QPainterPath_isEmpty(handle: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_isEmpty'; procedure QPainterPath_toReversed(handle: QPainterPathH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_toReversed'; procedure QPainterPath_toFillPolygon(handle: QPainterPathH; retval: QPolygonFH; matrix: QMatrixH = nil); cdecl; external Qt4PasLib name 'QPainterPath_toFillPolygon'; procedure QPainterPath_toFillPolygon(handle: QPainterPathH; retval: QPolygonFH; matrix: QTransformH); cdecl; external Qt4PasLib name 'QPainterPath_toFillPolygon2'; function QPainterPath_elementCount(handle: QPainterPathH): Integer; cdecl; external Qt4PasLib name 'QPainterPath_elementCount'; function QPainterPath_elementAt(handle: QPainterPathH; i: Integer): QPainterPathElementH; cdecl; external Qt4PasLib name 'QPainterPath_elementAt'; procedure QPainterPath_setElementPositionAt(handle: QPainterPathH; i: Integer; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_setElementPositionAt'; function QPainterPath_length(handle: QPainterPathH): qreal; cdecl; external Qt4PasLib name 'QPainterPath_length'; function QPainterPath_percentAtLength(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_percentAtLength'; procedure QPainterPath_pointAtPercent(handle: QPainterPathH; retval: PQtPointF; t: qreal); cdecl; external Qt4PasLib name 'QPainterPath_pointAtPercent'; function QPainterPath_angleAtPercent(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_angleAtPercent'; function QPainterPath_slopeAtPercent(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_slopeAtPercent'; function QPainterPath_intersects(handle: QPainterPathH; p: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_intersects2'; function QPainterPath_contains(handle: QPainterPathH; p: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains3'; procedure QPainterPath_united(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_united'; procedure QPainterPath_intersected(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_intersected'; procedure QPainterPath_subtracted(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_subtracted'; procedure QPainterPath_subtractedInverted(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_subtractedInverted'; procedure QPainterPath_simplified(handle: QPainterPathH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_simplified'; function QPainterPathStroker_create(): QPainterPathStrokerH; cdecl; external Qt4PasLib name 'QPainterPathStroker_create'; procedure QPainterPathStroker_destroy(handle: QPainterPathStrokerH); cdecl; external Qt4PasLib name 'QPainterPathStroker_destroy'; procedure QPainterPathStroker_setWidth(handle: QPainterPathStrokerH; width: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setWidth'; function QPainterPathStroker_width(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_width'; procedure QPainterPathStroker_setCapStyle(handle: QPainterPathStrokerH; style: QtPenCapStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setCapStyle'; function QPainterPathStroker_capStyle(handle: QPainterPathStrokerH): QtPenCapStyle; cdecl; external Qt4PasLib name 'QPainterPathStroker_capStyle'; procedure QPainterPathStroker_setJoinStyle(handle: QPainterPathStrokerH; style: QtPenJoinStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setJoinStyle'; function QPainterPathStroker_joinStyle(handle: QPainterPathStrokerH): QtPenJoinStyle; cdecl; external Qt4PasLib name 'QPainterPathStroker_joinStyle'; procedure QPainterPathStroker_setMiterLimit(handle: QPainterPathStrokerH; length: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setMiterLimit'; function QPainterPathStroker_miterLimit(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_miterLimit'; procedure QPainterPathStroker_setCurveThreshold(handle: QPainterPathStrokerH; threshold: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setCurveThreshold'; function QPainterPathStroker_curveThreshold(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_curveThreshold'; procedure QPainterPathStroker_setDashPattern(handle: QPainterPathStrokerH; AnonParam1: QtPenStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashPattern'; procedure QPainterPathStroker_setDashPattern(handle: QPainterPathStrokerH; dashPattern: PQRealArray); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashPattern2'; procedure QPainterPathStroker_dashPattern(handle: QPainterPathStrokerH; retval: PQRealArray); cdecl; external Qt4PasLib name 'QPainterPathStroker_dashPattern'; procedure QPainterPathStroker_setDashOffset(handle: QPainterPathStrokerH; offset: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashOffset'; function QPainterPathStroker_dashOffset(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_dashOffset'; procedure QPainterPathStroker_createStroke(handle: QPainterPathStrokerH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPathStroker_createStroke'; type QTransformTransformationType = ( //QTransform::TransformationType (2) QTransformTxNone = $00, QTransformTxTranslate = $01, QTransformTxScale = $02, QTransformTxRotate = $04, QTransformTxShear = $08, QTransformTxProject = $10 ); function QTransform_create(): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create'; procedure QTransform_destroy(handle: QTransformH); cdecl; external Qt4PasLib name 'QTransform_destroy'; function QTransform_create(h11: qreal; h12: qreal; h13: qreal; h21: qreal; h22: qreal; h23: qreal; h31: qreal; h32: qreal; h33: qreal = 1.0): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create2'; function QTransform_create(h11: qreal; h12: qreal; h21: qreal; h22: qreal; dx: qreal; dy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create3'; function QTransform_create(mtx: QMatrixH): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create4'; function QTransform_isAffine(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isAffine'; function QTransform_isIdentity(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isIdentity'; function QTransform_isInvertible(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isInvertible'; function QTransform_isScaling(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isScaling'; function QTransform_isRotating(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isRotating'; function QTransform_isTranslating(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isTranslating'; function QTransform_type(handle: QTransformH): QTransformTransformationType; cdecl; external Qt4PasLib name 'QTransform_type'; function QTransform_determinant(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_determinant'; function QTransform_det(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_det'; function QTransform_m11(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m11'; function QTransform_m12(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m12'; function QTransform_m13(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m13'; function QTransform_m21(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m21'; function QTransform_m22(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m22'; function QTransform_m23(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m23'; function QTransform_m31(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m31'; function QTransform_m32(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m32'; function QTransform_m33(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m33'; function QTransform_dx(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_dx'; function QTransform_dy(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_dy'; procedure QTransform_setMatrix(handle: QTransformH; m11: qreal; m12: qreal; m13: qreal; m21: qreal; m22: qreal; m23: qreal; m31: qreal; m32: qreal; m33: qreal); cdecl; external Qt4PasLib name 'QTransform_setMatrix'; procedure QTransform_inverted(handle: QTransformH; retval: QTransformH; invertible: PBoolean = nil); cdecl; external Qt4PasLib name 'QTransform_inverted'; procedure QTransform_adjoint(handle: QTransformH; retval: QTransformH); cdecl; external Qt4PasLib name 'QTransform_adjoint'; procedure QTransform_transposed(handle: QTransformH; retval: QTransformH); cdecl; external Qt4PasLib name 'QTransform_transposed'; function QTransform_translate(handle: QTransformH; dx: qreal; dy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_translate'; function QTransform_scale(handle: QTransformH; sx: qreal; sy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_scale'; function QTransform_shear(handle: QTransformH; sh: qreal; sv: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_shear'; function QTransform_rotate(handle: QTransformH; a: qreal; axis: QtAxis = QtZAxis): QTransformH; cdecl; external Qt4PasLib name 'QTransform_rotate'; function QTransform_rotateRadians(handle: QTransformH; a: qreal; axis: QtAxis = QtZAxis): QTransformH; cdecl; external Qt4PasLib name 'QTransform_rotateRadians'; function QTransform_squareToQuad(square: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_squareToQuad'; function QTransform_quadToSquare(quad: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_quadToSquare'; function QTransform_quadToQuad(one: QPolygonFH; two: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_quadToQuad'; procedure QTransform_reset(handle: QTransformH); cdecl; external Qt4PasLib name 'QTransform_reset'; procedure QTransform_map(handle: QTransformH; retval: PQtPoint; p: PQtPoint); cdecl; external Qt4PasLib name 'QTransform_map'; procedure QTransform_map(handle: QTransformH; retval: PQtPointF; p: PQtPointF); cdecl; external Qt4PasLib name 'QTransform_map2'; procedure QTransform_map(handle: QTransformH; retval: QLineH; l: QLineH); cdecl; external Qt4PasLib name 'QTransform_map3'; procedure QTransform_map(handle: QTransformH; retval: QLineFH; l: QLineFH); cdecl; external Qt4PasLib name 'QTransform_map4'; procedure QTransform_map(handle: QTransformH; retval: QPolygonFH; a: QPolygonFH); cdecl; external Qt4PasLib name 'QTransform_map5'; procedure QTransform_map(handle: QTransformH; retval: QPolygonH; a: QPolygonH); cdecl; external Qt4PasLib name 'QTransform_map6'; procedure QTransform_map(handle: QTransformH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QTransform_map7'; procedure QTransform_map(handle: QTransformH; retval: QPainterPathH; p: QPainterPathH); cdecl; external Qt4PasLib name 'QTransform_map8'; procedure QTransform_mapToPolygon(handle: QTransformH; retval: QPolygonH; r: PRect); cdecl; external Qt4PasLib name 'QTransform_mapToPolygon'; procedure QTransform_mapRect(handle: QTransformH; retval: PRect; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QTransform_mapRect'; procedure QTransform_mapRect(handle: QTransformH; retval: QRectFH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QTransform_mapRect2'; procedure QTransform_map(handle: QTransformH; x: Integer; y: Integer; tx: PInteger; ty: PInteger); cdecl; external Qt4PasLib name 'QTransform_map9'; procedure QTransform_map(handle: QTransformH; x: qreal; y: qreal; tx: PQReal; ty: PQReal); cdecl; external Qt4PasLib name 'QTransform_map10'; function QTransform_toAffine(handle: QTransformH): QMatrixH; cdecl; external Qt4PasLib name 'QTransform_toAffine'; procedure QTransform_fromTranslate(retval: QTransformH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QTransform_fromTranslate'; procedure QTransform_fromScale(retval: QTransformH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QTransform_fromScale'; function QPrinterInfo_create(): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create'; procedure QPrinterInfo_destroy(handle: QPrinterInfoH); cdecl; external Qt4PasLib name 'QPrinterInfo_destroy'; function QPrinterInfo_create(src: QPrinterInfoH): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create2'; function QPrinterInfo_create(printer: QPrinterH): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create3'; procedure QPrinterInfo_printerName(handle: QPrinterInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinterInfo_printerName'; function QPrinterInfo_isNull(handle: QPrinterInfoH): Boolean; cdecl; external Qt4PasLib name 'QPrinterInfo_isNull'; function QPrinterInfo_isDefault(handle: QPrinterInfoH): Boolean; cdecl; external Qt4PasLib name 'QPrinterInfo_isDefault'; procedure QPrinterInfo_supportedPaperSizes(handle: QPrinterInfoH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinterInfo_supportedPaperSizes'; procedure QPrinterInfo_availablePrinters(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinterInfo_availablePrinters'; procedure QPrinterInfo_defaultPrinter(retval: QPrinterInfoH); cdecl; external Qt4PasLib name 'QPrinterInfo_defaultPrinter'; type QFontStyle = ( // QFont::Style (1) QFontStyleNormal, QFontStyleItalic, QFontStyleOblique ); QFontCapitalization = ( // QFont::Capitalization (1) QFontMixedCase, QFontAllUppercase, QFontAllLowercase, QFontSmallCaps, QFontCapitalize ); QFontSpacingType = ( // QFont::SpacingType (1) QFontPercentageSpacing, QFontAbsoluteSpacing ); QFontStyleStrategy = ( //QFont::StyleStrategy (2) QFontPreferDefault = $0001, QFontPreferBitmap = $0002, QFontPreferDevice = $0004, QFontPreferOutline = $0008, QFontForceOutline = $0010, QFontPreferMatch = $0020, QFontPreferQuality = $0040, QFontPreferAntialias = $0080, QFontNoAntialias = $0100, QFontOpenGLCompatible = $0200, QFontNoFontMerging = $8000 ); QFontWeight = ( //QFont::Weight (2) QFontLight = 25, QFontNormal = 50, QFontDemiBold = 63, QFontBold = 75, QFontBlack = 87 ); QFontStretch = ( //QFont::Stretch (2) QFontUltraCondensed = 50, QFontExtraCondensed = 62, QFontCondensed = 75, QFontSemiCondensed = 87, QFontUnstretched = 100, QFontSemiExpanded = 112, QFontExpanded = 125, QFontExtraExpanded = 150, QFontUltraExpanded = 200 ); QFontResolveProperties = ( //QFont::ResolveProperties (2) QFontFamilyResolved = $0001, QFontSizeResolved = $0002, QFontStyleHintResolved = $0004, QFontStyleStrategyResolved = $0008, QFontWeightResolved = $0010, QFontStyleResolved = $0020, QFontUnderlineResolved = $0040, QFontOverlineResolved = $0080, QFontStrikeOutResolved = $0100, QFontFixedPitchResolved = $0200, QFontStretchResolved = $0400, QFontKerningResolved = $0800, QFontCapitalizationResolved = $1000, QFontLetterSpacingResolved = $2000, QFontWordSpacingResolved = $4000, QFontAllPropertiesResolved = $7fff ); type QFontStyleHint = cardinal; // QFont::StyleHint (4) const QFontHelvetica = 0 { $0 }; QFontSansSerif = 0 { $0 }; QFontTimes = 1 { $1 }; QFontSerif = 1 { $1 }; QFontCourier = 2 { $2 }; QFontTypeWriter = 2 { $2 }; QFontOldEnglish = 3 { $3 }; QFontDecorative = 3 { $3 }; QFontSystem = 4 { $4 }; QFontAnyStyle = 5 { $5 }; function QFont_create(): QFontH; cdecl; external Qt4PasLib name 'QFont_create'; procedure QFont_destroy(handle: QFontH); cdecl; external Qt4PasLib name 'QFont_destroy'; function QFont_create(family: PWideString; pointSize: Integer = -1; weight: Integer = -1; italic: Boolean = False): QFontH; cdecl; external Qt4PasLib name 'QFont_create2'; function QFont_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontH; cdecl; external Qt4PasLib name 'QFont_create3'; function QFont_create(AnonParam1: QFontH): QFontH; cdecl; external Qt4PasLib name 'QFont_create4'; procedure QFont_family(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_family'; procedure QFont_setFamily(handle: QFontH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_setFamily'; function QFont_pointSize(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_pointSize'; procedure QFont_setPointSize(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setPointSize'; function QFont_pointSizeF(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_pointSizeF'; procedure QFont_setPointSizeF(handle: QFontH; AnonParam1: qreal); cdecl; external Qt4PasLib name 'QFont_setPointSizeF'; function QFont_pixelSize(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_pixelSize'; procedure QFont_setPixelSize(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setPixelSize'; function QFont_weight(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_weight'; procedure QFont_setWeight(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setWeight'; function QFont_bold(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_bold'; procedure QFont_setBold(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setBold'; procedure QFont_setStyle(handle: QFontH; style: QFontStyle); cdecl; external Qt4PasLib name 'QFont_setStyle'; function QFont_style(handle: QFontH): QFontStyle; cdecl; external Qt4PasLib name 'QFont_style'; function QFont_italic(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_italic'; procedure QFont_setItalic(handle: QFontH; b: Boolean); cdecl; external Qt4PasLib name 'QFont_setItalic'; function QFont_underline(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_underline'; procedure QFont_setUnderline(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setUnderline'; function QFont_overline(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_overline'; procedure QFont_setOverline(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setOverline'; function QFont_strikeOut(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_strikeOut'; procedure QFont_setStrikeOut(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setStrikeOut'; function QFont_fixedPitch(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_fixedPitch'; procedure QFont_setFixedPitch(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setFixedPitch'; function QFont_kerning(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_kerning'; procedure QFont_setKerning(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setKerning'; function QFont_styleHint(handle: QFontH): QFontStyleHint; cdecl; external Qt4PasLib name 'QFont_styleHint'; function QFont_styleStrategy(handle: QFontH): QFontStyleStrategy; cdecl; external Qt4PasLib name 'QFont_styleStrategy'; procedure QFont_setStyleHint(handle: QFontH; AnonParam1: QFontStyleHint; AnonParam2: QFontStyleStrategy = QFontPreferDefault); cdecl; external Qt4PasLib name 'QFont_setStyleHint'; procedure QFont_setStyleStrategy(handle: QFontH; s: QFontStyleStrategy); cdecl; external Qt4PasLib name 'QFont_setStyleStrategy'; function QFont_stretch(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_stretch'; procedure QFont_setStretch(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setStretch'; function QFont_letterSpacing(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_letterSpacing'; function QFont_letterSpacingType(handle: QFontH): QFontSpacingType; cdecl; external Qt4PasLib name 'QFont_letterSpacingType'; procedure QFont_setLetterSpacing(handle: QFontH; _type: QFontSpacingType; spacing: qreal); cdecl; external Qt4PasLib name 'QFont_setLetterSpacing'; function QFont_wordSpacing(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_wordSpacing'; procedure QFont_setWordSpacing(handle: QFontH; spacing: qreal); cdecl; external Qt4PasLib name 'QFont_setWordSpacing'; procedure QFont_setCapitalization(handle: QFontH; AnonParam1: QFontCapitalization); cdecl; external Qt4PasLib name 'QFont_setCapitalization'; function QFont_capitalization(handle: QFontH): QFontCapitalization; cdecl; external Qt4PasLib name 'QFont_capitalization'; function QFont_rawMode(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_rawMode'; procedure QFont_setRawMode(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setRawMode'; function QFont_exactMatch(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_exactMatch'; function QFont_isCopyOf(handle: QFontH; AnonParam1: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_isCopyOf'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} function QFont_handle(handle: QFontH): QtHANDLE; cdecl; external Qt4PasLib name 'QFont_handle'; {$endif} procedure QFont_setRawName(handle: QFontH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_setRawName'; procedure QFont_rawName(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_rawName'; procedure QFont_key(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_key'; procedure QFont_toString(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_toString'; function QFont_fromString(handle: QFontH; AnonParam1: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFont_fromString'; procedure QFont_substitute(retval: PWideString; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_substitute'; procedure QFont_substitutes(retval: QStringListH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_substitutes'; procedure QFont_substitutions(retval: QStringListH); cdecl; external Qt4PasLib name 'QFont_substitutions'; procedure QFont_insertSubstitution(AnonParam1: PWideString; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QFont_insertSubstitution'; procedure QFont_insertSubstitutions(AnonParam1: PWideString; AnonParam2: QStringListH); cdecl; external Qt4PasLib name 'QFont_insertSubstitutions'; procedure QFont_removeSubstitution(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_removeSubstitution'; procedure QFont_initialize(); cdecl; external Qt4PasLib name 'QFont_initialize'; procedure QFont_cleanup(); cdecl; external Qt4PasLib name 'QFont_cleanup'; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QFont_cacheStatistics(); cdecl; external Qt4PasLib name 'QFont_cacheStatistics'; {$endif} procedure QFont_defaultFamily(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_defaultFamily'; procedure QFont_lastResortFamily(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_lastResortFamily'; procedure QFont_lastResortFont(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_lastResortFont'; procedure QFont_resolve(handle: QFontH; retval: QFontH; AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QFont_resolve'; function QFont_resolve(handle: QFontH): LongWord; cdecl; external Qt4PasLib name 'QFont_resolve2'; procedure QFont_resolve(handle: QFontH; mask: LongWord); cdecl; external Qt4PasLib name 'QFont_resolve3'; {$ifdef MSWINDOWS } function QFont_handle(handle: QFontH): QHFONT; cdecl; external Qt4PasLib name 'QFont_handle2'; {$endif} {$ifdef DARWIN } function QFont_macFontID(handle: QFontH): LongWord; cdecl; external Qt4PasLib name 'QFont_macFontID'; {$endif} type QFontDatabaseWritingSystem = cardinal; // QFontDatabase::WritingSystem (4) const QFontDatabaseAny = 0 { $0 }; QFontDatabaseLatin = 1 { $1 }; QFontDatabaseGreek = 2 { $2 }; QFontDatabaseCyrillic = 3 { $3 }; QFontDatabaseArmenian = 4 { $4 }; QFontDatabaseHebrew = 5 { $5 }; QFontDatabaseArabic = 6 { $6 }; QFontDatabaseSyriac = 7 { $7 }; QFontDatabaseThaana = 8 { $8 }; QFontDatabaseDevanagari = 9 { $9 }; QFontDatabaseBengali = 10 { $a }; QFontDatabaseGurmukhi = 11 { $b }; QFontDatabaseGujarati = 12 { $c }; QFontDatabaseOriya = 13 { $d }; QFontDatabaseTamil = 14 { $e }; QFontDatabaseTelugu = 15 { $f }; QFontDatabaseKannada = 16 { $10 }; QFontDatabaseMalayalam = 17 { $11 }; QFontDatabaseSinhala = 18 { $12 }; QFontDatabaseThai = 19 { $13 }; QFontDatabaseLao = 20 { $14 }; QFontDatabaseTibetan = 21 { $15 }; QFontDatabaseMyanmar = 22 { $16 }; QFontDatabaseGeorgian = 23 { $17 }; QFontDatabaseKhmer = 24 { $18 }; QFontDatabaseSimplifiedChinese = 25 { $19 }; QFontDatabaseTraditionalChinese = 26 { $1a }; QFontDatabaseJapanese = 27 { $1b }; QFontDatabaseKorean = 28 { $1c }; QFontDatabaseVietnamese = 29 { $1d }; QFontDatabaseSymbol = 30 { $1e }; QFontDatabaseOther = 30 { $1e }; QFontDatabaseOgham = 31 { $1f }; QFontDatabaseRunic = 32 { $20 }; QFontDatabaseWritingSystemsCount = 33 { $21 }; procedure QFontDatabase_standardSizes(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QFontDatabase_standardSizes'; function QFontDatabase_create(): QFontDatabaseH; cdecl; external Qt4PasLib name 'QFontDatabase_create'; procedure QFontDatabase_destroy(handle: QFontDatabaseH); cdecl; external Qt4PasLib name 'QFontDatabase_destroy'; procedure QFontDatabase_writingSystems(handle: QFontDatabaseH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystems'; procedure QFontDatabase_writingSystems(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystems2'; procedure QFontDatabase_families(handle: QFontDatabaseH; retval: QStringListH; writingSystem: QFontDatabaseWritingSystem = QFontDatabaseAny); cdecl; external Qt4PasLib name 'QFontDatabase_families'; procedure QFontDatabase_styles(handle: QFontDatabaseH; retval: QStringListH; family: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_styles'; procedure QFontDatabase_pointSizes(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString; style: PWideString = nil); cdecl; external Qt4PasLib name 'QFontDatabase_pointSizes'; procedure QFontDatabase_smoothSizes(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString; style: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_smoothSizes'; procedure QFontDatabase_styleString(handle: QFontDatabaseH; retval: PWideString; font: QFontH); cdecl; external Qt4PasLib name 'QFontDatabase_styleString'; procedure QFontDatabase_styleString(handle: QFontDatabaseH; retval: PWideString; fontInfo: QFontInfoH); cdecl; external Qt4PasLib name 'QFontDatabase_styleString2'; procedure QFontDatabase_font(handle: QFontDatabaseH; retval: QFontH; family: PWideString; style: PWideString; pointSize: Integer); cdecl; external Qt4PasLib name 'QFontDatabase_font'; function QFontDatabase_isBitmapScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isBitmapScalable'; function QFontDatabase_isSmoothlyScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isSmoothlyScalable'; function QFontDatabase_isScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isScalable'; function QFontDatabase_isFixedPitch(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isFixedPitch'; function QFontDatabase_italic(handle: QFontDatabaseH; family: PWideString; style: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_italic'; function QFontDatabase_bold(handle: QFontDatabaseH; family: PWideString; style: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_bold'; function QFontDatabase_weight(handle: QFontDatabaseH; family: PWideString; style: PWideString): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_weight'; procedure QFontDatabase_writingSystemName(retval: PWideString; writingSystem: QFontDatabaseWritingSystem); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystemName'; procedure QFontDatabase_writingSystemSample(retval: PWideString; writingSystem: QFontDatabaseWritingSystem); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystemSample'; function QFontDatabase_addApplicationFont(fileName: PWideString): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_addApplicationFont'; function QFontDatabase_addApplicationFontFromData(fontData: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_addApplicationFontFromData'; procedure QFontDatabase_applicationFontFamilies(retval: QStringListH; id: Integer); cdecl; external Qt4PasLib name 'QFontDatabase_applicationFontFamilies'; function QFontDatabase_removeApplicationFont(id: Integer): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_removeApplicationFont'; function QFontDatabase_removeAllApplicationFonts(): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_removeAllApplicationFonts'; function QFontDatabase_supportsThreadedFontRendering(): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_supportsThreadedFontRendering'; type QTextCursorMoveMode = ( // QTextCursor::MoveMode (1) QTextCursorMoveAnchor, QTextCursorKeepAnchor ); QTextCursorMoveOperation = ( // QTextCursor::MoveOperation (1) QTextCursorNoMove, QTextCursorStart, QTextCursorUp, QTextCursorStartOfLine, QTextCursorStartOfBlock, QTextCursorStartOfWord, QTextCursorPreviousBlock, QTextCursorPreviousCharacter, QTextCursorPreviousWord, QTextCursorLeft, QTextCursorWordLeft, QTextCursorEnd, QTextCursorDown, QTextCursorEndOfLine, QTextCursorEndOfWord, QTextCursorEndOfBlock, QTextCursorNextBlock, QTextCursorNextCharacter, QTextCursorNextWord, QTextCursorRight, QTextCursorWordRight, QTextCursorNextCell, QTextCursorPreviousCell, QTextCursorNextRow, QTextCursorPreviousRow ); QTextCursorSelectionType = ( // QTextCursor::SelectionType (1) QTextCursorWordUnderCursor, QTextCursorLineUnderCursor, QTextCursorBlockUnderCursor, QTextCursorDocument ); function QTextCursor_create(): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create'; procedure QTextCursor_destroy(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_destroy'; function QTextCursor_create(document: QTextDocumentH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create2'; function QTextCursor_create(frame: QTextFrameH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create3'; function QTextCursor_create(block: QTextBlockH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create4'; function QTextCursor_create(cursor: QTextCursorH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create6'; function QTextCursor_isNull(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_isNull'; procedure QTextCursor_setPosition(handle: QTextCursorH; pos: Integer; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QTextCursor_setPosition'; function QTextCursor_position(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_position'; function QTextCursor_anchor(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_anchor'; procedure QTextCursor_insertText(handle: QTextCursorH; text: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertText'; procedure QTextCursor_insertText(handle: QTextCursorH; text: PWideString; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertText2'; function QTextCursor_movePosition(handle: QTextCursorH; op: QTextCursorMoveOperation; AnonParam2: QTextCursorMoveMode = QTextCursorMoveAnchor; n: Integer = 1): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_movePosition'; function QTextCursor_visualNavigation(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_visualNavigation'; procedure QTextCursor_setVisualNavigation(handle: QTextCursorH; b: Boolean); cdecl; external Qt4PasLib name 'QTextCursor_setVisualNavigation'; procedure QTextCursor_deleteChar(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_deleteChar'; procedure QTextCursor_deletePreviousChar(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_deletePreviousChar'; procedure QTextCursor_select(handle: QTextCursorH; selection: QTextCursorSelectionType); cdecl; external Qt4PasLib name 'QTextCursor_select'; function QTextCursor_hasSelection(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_hasSelection'; function QTextCursor_hasComplexSelection(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_hasComplexSelection'; procedure QTextCursor_removeSelectedText(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_removeSelectedText'; procedure QTextCursor_clearSelection(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_clearSelection'; function QTextCursor_selectionStart(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_selectionStart'; function QTextCursor_selectionEnd(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_selectionEnd'; procedure QTextCursor_selectedText(handle: QTextCursorH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_selectedText'; procedure QTextCursor_selection(handle: QTextCursorH; retval: QTextDocumentFragmentH); cdecl; external Qt4PasLib name 'QTextCursor_selection'; procedure QTextCursor_selectedTableCells(handle: QTextCursorH; firstRow: PInteger; numRows: PInteger; firstColumn: PInteger; numColumns: PInteger); cdecl; external Qt4PasLib name 'QTextCursor_selectedTableCells'; procedure QTextCursor_block(handle: QTextCursorH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextCursor_block'; procedure QTextCursor_charFormat(handle: QTextCursorH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_charFormat'; procedure QTextCursor_setCharFormat(handle: QTextCursorH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setCharFormat'; procedure QTextCursor_mergeCharFormat(handle: QTextCursorH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeCharFormat'; procedure QTextCursor_blockFormat(handle: QTextCursorH; retval: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_blockFormat'; procedure QTextCursor_setBlockFormat(handle: QTextCursorH; format: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setBlockFormat'; procedure QTextCursor_mergeBlockFormat(handle: QTextCursorH; modifier: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeBlockFormat'; procedure QTextCursor_blockCharFormat(handle: QTextCursorH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_blockCharFormat'; procedure QTextCursor_setBlockCharFormat(handle: QTextCursorH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setBlockCharFormat'; procedure QTextCursor_mergeBlockCharFormat(handle: QTextCursorH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeBlockCharFormat'; function QTextCursor_atBlockStart(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atBlockStart'; function QTextCursor_atBlockEnd(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atBlockEnd'; function QTextCursor_atStart(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atStart'; function QTextCursor_atEnd(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atEnd'; procedure QTextCursor_insertBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock'; procedure QTextCursor_insertBlock(handle: QTextCursorH; format: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock2'; procedure QTextCursor_insertBlock(handle: QTextCursorH; format: QTextBlockFormatH; charFormat: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock3'; function QTextCursor_currentList(handle: QTextCursorH): QTextListH; cdecl; external Qt4PasLib name 'QTextCursor_currentList'; function QTextCursor_insertTable(handle: QTextCursorH; rows: Integer; cols: Integer; format: QTextTableFormatH): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_insertTable'; function QTextCursor_insertTable(handle: QTextCursorH; rows: Integer; cols: Integer): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_insertTable2'; function QTextCursor_currentTable(handle: QTextCursorH): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_currentTable'; function QTextCursor_insertFrame(handle: QTextCursorH; format: QTextFrameFormatH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextCursor_insertFrame'; function QTextCursor_currentFrame(handle: QTextCursorH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextCursor_currentFrame'; procedure QTextCursor_insertFragment(handle: QTextCursorH; fragment: QTextDocumentFragmentH); cdecl; external Qt4PasLib name 'QTextCursor_insertFragment'; procedure QTextCursor_insertHtml(handle: QTextCursorH; html: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertHtml'; procedure QTextCursor_insertImage(handle: QTextCursorH; format: QTextImageFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertImage2'; procedure QTextCursor_insertImage(handle: QTextCursorH; name: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertImage3'; procedure QTextCursor_insertImage(handle: QTextCursorH; image: QImageH; name: PWideString = nil); cdecl; external Qt4PasLib name 'QTextCursor_insertImage4'; procedure QTextCursor_beginEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_beginEditBlock'; procedure QTextCursor_joinPreviousEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_joinPreviousEditBlock'; procedure QTextCursor_endEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_endEditBlock'; function QTextCursor_isCopyOf(handle: QTextCursorH; other: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_isCopyOf'; function QTextCursor_blockNumber(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_blockNumber'; function QTextCursor_columnNumber(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_columnNumber'; function QTextCursor_document(handle: QTextCursorH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextCursor_document'; type QTextOptionTabType = ( // QTextOption::TabType (1) QTextOptionLeftTab, QTextOptionRightTab, QTextOptionCenterTab, QTextOptionDelimiterTab ); QTextOptionWrapMode = ( // QTextOption::WrapMode (1) QTextOptionNoWrap, QTextOptionWordWrap, QTextOptionManualWrap, QTextOptionWrapAnywhere, QTextOptionWrapAtWordBoundaryOrAnywhere ); type QTextOptionFlag = cardinal; // QTextOption::Flag QTextOptionFlags = QTextOptionFlag; //QFlags<> (3) const QTextOptionShowTabsAndSpaces = $1; QTextOptionShowLineAndParagraphSeparators = $2; QTextOptionAddSpaceForLineAndParagraphSeparators = $4; QTextOptionSuppressColors = $8; QTextOptionIncludeTrailingSpaces = $80000000; function QTextOption_create(): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create'; procedure QTextOption_destroy(handle: QTextOptionH); cdecl; external Qt4PasLib name 'QTextOption_destroy'; function QTextOption_create(alignment: QtAlignment): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create2'; function QTextOption_create(o: QTextOptionH): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create3'; procedure QTextOption_setAlignment(handle: QTextOptionH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QTextOption_setAlignment'; function QTextOption_alignment(handle: QTextOptionH): QtAlignment; cdecl; external Qt4PasLib name 'QTextOption_alignment'; procedure QTextOption_setTextDirection(handle: QTextOptionH; aDirection: QtLayoutDirection); cdecl; external Qt4PasLib name 'QTextOption_setTextDirection'; function QTextOption_textDirection(handle: QTextOptionH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QTextOption_textDirection'; procedure QTextOption_setWrapMode(handle: QTextOptionH; wrap: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QTextOption_setWrapMode'; function QTextOption_wrapMode(handle: QTextOptionH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QTextOption_wrapMode'; procedure QTextOption_setFlags(handle: QTextOptionH; flags: QTextOptionFlags); cdecl; external Qt4PasLib name 'QTextOption_setFlags'; function QTextOption_flags(handle: QTextOptionH): QTextOptionFlags; cdecl; external Qt4PasLib name 'QTextOption_flags'; procedure QTextOption_setTabStop(handle: QTextOptionH; tabStop: qreal); cdecl; external Qt4PasLib name 'QTextOption_setTabStop'; function QTextOption_tabStop(handle: QTextOptionH): qreal; cdecl; external Qt4PasLib name 'QTextOption_tabStop'; procedure QTextOption_setTabArray(handle: QTextOptionH; tabStops: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextOption_setTabArray'; procedure QTextOption_tabArray(handle: QTextOptionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextOption_tabArray'; procedure QTextOption_setUseDesignMetrics(handle: QTextOptionH; b: Boolean); cdecl; external Qt4PasLib name 'QTextOption_setUseDesignMetrics'; function QTextOption_useDesignMetrics(handle: QTextOptionH): Boolean; cdecl; external Qt4PasLib name 'QTextOption_useDesignMetrics'; function QFontMetrics_create(AnonParam1: QFontH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create'; procedure QFontMetrics_destroy(handle: QFontMetricsH); cdecl; external Qt4PasLib name 'QFontMetrics_destroy'; function QFontMetrics_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create2'; function QFontMetrics_create(AnonParam1: QFontMetricsH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create3'; function QFontMetrics_ascent(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_ascent'; function QFontMetrics_descent(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_descent'; function QFontMetrics_height(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_height'; function QFontMetrics_leading(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_leading'; function QFontMetrics_lineSpacing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_lineSpacing'; function QFontMetrics_minLeftBearing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_minLeftBearing'; function QFontMetrics_minRightBearing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_minRightBearing'; function QFontMetrics_maxWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_maxWidth'; function QFontMetrics_xHeight(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_xHeight'; function QFontMetrics_averageCharWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_averageCharWidth'; function QFontMetrics_inFont(handle: QFontMetricsH; AnonParam1: PWideChar): Boolean; cdecl; external Qt4PasLib name 'QFontMetrics_inFont'; function QFontMetrics_leftBearing(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_leftBearing'; function QFontMetrics_rightBearing(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_rightBearing'; function QFontMetrics_width(handle: QFontMetricsH; AnonParam1: PWideString; len: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_width'; function QFontMetrics_width(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_width2'; function QFontMetrics_charWidth(handle: QFontMetricsH; str: PWideString; pos: Integer): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_charWidth'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; AnonParam1: PWideChar); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect2'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; r: PRect; flags: Integer; text: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect3'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect4'; procedure QFontMetrics_size(handle: QFontMetricsH; retval: PSize; flags: Integer; str: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_size'; procedure QFontMetrics_tightBoundingRect(handle: QFontMetricsH; retval: PRect; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetrics_tightBoundingRect'; procedure QFontMetrics_elidedText(handle: QFontMetricsH; retval: PWideString; text: PWideString; mode: QtTextElideMode; width: Integer; flags: Integer = 0); cdecl; external Qt4PasLib name 'QFontMetrics_elidedText'; function QFontMetrics_underlinePos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_underlinePos'; function QFontMetrics_overlinePos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_overlinePos'; function QFontMetrics_strikeOutPos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_strikeOutPos'; function QFontMetrics_lineWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_lineWidth'; function QFontMetricsF_create(AnonParam1: QFontH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create'; procedure QFontMetricsF_destroy(handle: QFontMetricsFH); cdecl; external Qt4PasLib name 'QFontMetricsF_destroy'; function QFontMetricsF_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create2'; function QFontMetricsF_create(AnonParam1: QFontMetricsFH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create4'; function QFontMetricsF_ascent(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_ascent'; function QFontMetricsF_descent(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_descent'; function QFontMetricsF_height(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_height'; function QFontMetricsF_leading(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_leading'; function QFontMetricsF_lineSpacing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_lineSpacing'; function QFontMetricsF_minLeftBearing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_minLeftBearing'; function QFontMetricsF_minRightBearing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_minRightBearing'; function QFontMetricsF_maxWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_maxWidth'; function QFontMetricsF_xHeight(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_xHeight'; function QFontMetricsF_averageCharWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_averageCharWidth'; function QFontMetricsF_inFont(handle: QFontMetricsFH; AnonParam1: PWideChar): Boolean; cdecl; external Qt4PasLib name 'QFontMetricsF_inFont'; function QFontMetricsF_leftBearing(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_leftBearing'; function QFontMetricsF_rightBearing(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_rightBearing'; function QFontMetricsF_width(handle: QFontMetricsFH; _string: PWideString): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_width'; function QFontMetricsF_width(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_width2'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; _string: PWideString); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; AnonParam1: PWideChar); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect2'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; r: QRectFH; flags: Integer; _string: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect3'; procedure QFontMetricsF_size(handle: QFontMetricsFH; retval: QSizeFH; flags: Integer; str: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetricsF_size'; procedure QFontMetricsF_tightBoundingRect(handle: QFontMetricsFH; retval: QRectFH; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetricsF_tightBoundingRect'; procedure QFontMetricsF_elidedText(handle: QFontMetricsFH; retval: PWideString; text: PWideString; mode: QtTextElideMode; width: qreal; flags: Integer = 0); cdecl; external Qt4PasLib name 'QFontMetricsF_elidedText'; function QFontMetricsF_underlinePos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_underlinePos'; function QFontMetricsF_overlinePos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_overlinePos'; function QFontMetricsF_strikeOutPos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_strikeOutPos'; function QFontMetricsF_lineWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_lineWidth'; function QFontInfo_create(AnonParam1: QFontH): QFontInfoH; cdecl; external Qt4PasLib name 'QFontInfo_create'; procedure QFontInfo_destroy(handle: QFontInfoH); cdecl; external Qt4PasLib name 'QFontInfo_destroy'; function QFontInfo_create(AnonParam1: QFontInfoH): QFontInfoH; cdecl; external Qt4PasLib name 'QFontInfo_create2'; procedure QFontInfo_family(handle: QFontInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFontInfo_family'; function QFontInfo_pixelSize(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_pixelSize'; function QFontInfo_pointSize(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_pointSize'; function QFontInfo_pointSizeF(handle: QFontInfoH): qreal; cdecl; external Qt4PasLib name 'QFontInfo_pointSizeF'; function QFontInfo_italic(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_italic'; function QFontInfo_style(handle: QFontInfoH): QFontStyle; cdecl; external Qt4PasLib name 'QFontInfo_style'; function QFontInfo_weight(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_weight'; function QFontInfo_bold(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_bold'; function QFontInfo_underline(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_underline'; function QFontInfo_overline(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_overline'; function QFontInfo_strikeOut(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_strikeOut'; function QFontInfo_fixedPitch(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_fixedPitch'; function QFontInfo_styleHint(handle: QFontInfoH): QFontStyleHint; cdecl; external Qt4PasLib name 'QFontInfo_styleHint'; function QFontInfo_rawMode(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_rawMode'; function QFontInfo_exactMatch(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_exactMatch'; type QTextDocumentMetaInformation = ( // QTextDocument::MetaInformation (1) QTextDocumentDocumentTitle, QTextDocumentDocumentUrl ); type QTextDocumentFindFlag = cardinal; // QTextDocument::FindFlag QTextDocumentFindFlags = QTextDocumentFindFlag; //QFlags<> (3) const QTextDocumentFindBackward = $00001; QTextDocumentFindCaseSensitively = $00002; QTextDocumentFindWholeWords = $00004; type QTextDocumentResourceType = ( //QTextDocument::ResourceType (2) QTextDocumentHtmlResource = 1, QTextDocumentImageResource = 2, QTextDocumentStyleSheetResource = 3, QTextDocumentUserResource = 100 ); function QTextDocument_create(parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_create'; procedure QTextDocument_destroy(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_destroy'; function QTextDocument_create(text: PWideString; parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_create2'; function QTextDocument_clone(handle: QTextDocumentH; parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_clone'; function QTextDocument_isEmpty(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isEmpty'; procedure QTextDocument_clear(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_clear'; procedure QTextDocument_setUndoRedoEnabled(handle: QTextDocumentH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextDocument_setUndoRedoEnabled'; function QTextDocument_isUndoRedoEnabled(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isUndoRedoEnabled'; function QTextDocument_isUndoAvailable(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isUndoAvailable'; function QTextDocument_isRedoAvailable(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isRedoAvailable'; function QTextDocument_revision(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_revision'; procedure QTextDocument_setDocumentLayout(handle: QTextDocumentH; layout: QAbstractTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QTextDocument_setDocumentLayout'; function QTextDocument_documentLayout(handle: QTextDocumentH): QAbstractTextDocumentLayoutH; cdecl; external Qt4PasLib name 'QTextDocument_documentLayout'; procedure QTextDocument_setMetaInformation(handle: QTextDocumentH; info: QTextDocumentMetaInformation; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setMetaInformation'; procedure QTextDocument_metaInformation(handle: QTextDocumentH; retval: PWideString; info: QTextDocumentMetaInformation); cdecl; external Qt4PasLib name 'QTextDocument_metaInformation'; procedure QTextDocument_toHtml(handle: QTextDocumentH; retval: PWideString; encoding: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QTextDocument_toHtml'; procedure QTextDocument_setHtml(handle: QTextDocumentH; html: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setHtml'; procedure QTextDocument_toPlainText(handle: QTextDocumentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_toPlainText'; procedure QTextDocument_setPlainText(handle: QTextDocumentH; text: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setPlainText'; procedure QTextDocument_characterAt(handle: QTextDocumentH; retval: PWideChar; pos: Integer); cdecl; external Qt4PasLib name 'QTextDocument_characterAt'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; subString: PWideString; from: Integer = 0; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; subString: PWideString; from: QTextCursorH; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find2'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; expr: QRegExpH; from: Integer = 0; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find3'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; expr: QRegExpH; from: QTextCursorH; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find4'; function QTextDocument_frameAt(handle: QTextDocumentH; pos: Integer): QTextFrameH; cdecl; external Qt4PasLib name 'QTextDocument_frameAt'; function QTextDocument_rootFrame(handle: QTextDocumentH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextDocument_rootFrame'; function QTextDocument_object(handle: QTextDocumentH; objectIndex: Integer): QTextObjectH; cdecl; external Qt4PasLib name 'QTextDocument_object'; function QTextDocument_objectForFormat(handle: QTextDocumentH; AnonParam1: QTextFormatH): QTextObjectH; cdecl; external Qt4PasLib name 'QTextDocument_objectForFormat'; procedure QTextDocument_findBlock(handle: QTextDocumentH; retval: QTextBlockH; pos: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlock'; procedure QTextDocument_findBlockByNumber(handle: QTextDocumentH; retval: QTextBlockH; blockNumber: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlockByNumber'; procedure QTextDocument_findBlockByLineNumber(handle: QTextDocumentH; retval: QTextBlockH; blockNumber: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlockByLineNumber'; procedure QTextDocument_begin(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_begin'; procedure QTextDocument_end(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_end'; procedure QTextDocument_firstBlock(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_firstBlock'; procedure QTextDocument_lastBlock(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_lastBlock'; procedure QTextDocument_setPageSize(handle: QTextDocumentH; size: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_setPageSize'; procedure QTextDocument_pageSize(handle: QTextDocumentH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_pageSize'; procedure QTextDocument_setDefaultFont(handle: QTextDocumentH; font: QFontH); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultFont'; procedure QTextDocument_defaultFont(handle: QTextDocumentH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextDocument_defaultFont'; function QTextDocument_pageCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_pageCount'; function QTextDocument_isModified(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isModified'; procedure QTextDocument_print(handle: QTextDocumentH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QTextDocument_print'; procedure QTextDocument_resource(handle: QTextDocumentH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextDocument_resource'; procedure QTextDocument_addResource(handle: QTextDocumentH; _type: Integer; name: QUrlH; resource: QVariantH); cdecl; external Qt4PasLib name 'QTextDocument_addResource'; procedure QTextDocument_markContentsDirty(handle: QTextDocumentH; from: Integer; length: Integer); cdecl; external Qt4PasLib name 'QTextDocument_markContentsDirty'; procedure QTextDocument_setUseDesignMetrics(handle: QTextDocumentH; b: Boolean); cdecl; external Qt4PasLib name 'QTextDocument_setUseDesignMetrics'; function QTextDocument_useDesignMetrics(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_useDesignMetrics'; procedure QTextDocument_drawContents(handle: QTextDocumentH; painter: QPainterH; rect: QRectFH = nil); cdecl; external Qt4PasLib name 'QTextDocument_drawContents'; procedure QTextDocument_setTextWidth(handle: QTextDocumentH; width: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setTextWidth'; function QTextDocument_textWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_textWidth'; function QTextDocument_idealWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_idealWidth'; function QTextDocument_indentWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_indentWidth'; procedure QTextDocument_setIndentWidth(handle: QTextDocumentH; width: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setIndentWidth'; function QTextDocument_documentMargin(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_documentMargin'; procedure QTextDocument_setDocumentMargin(handle: QTextDocumentH; margin: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setDocumentMargin'; procedure QTextDocument_adjustSize(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_adjustSize'; procedure QTextDocument_size(handle: QTextDocumentH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_size'; function QTextDocument_blockCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_blockCount'; function QTextDocument_lineCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_lineCount'; function QTextDocument_characterCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_characterCount'; procedure QTextDocument_setDefaultStyleSheet(handle: QTextDocumentH; sheet: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultStyleSheet'; procedure QTextDocument_defaultStyleSheet(handle: QTextDocumentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_defaultStyleSheet'; procedure QTextDocument_undo(handle: QTextDocumentH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextDocument_undo'; procedure QTextDocument_redo(handle: QTextDocumentH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextDocument_redo'; function QTextDocument_maximumBlockCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_maximumBlockCount'; procedure QTextDocument_setMaximumBlockCount(handle: QTextDocumentH; maximum: Integer); cdecl; external Qt4PasLib name 'QTextDocument_setMaximumBlockCount'; procedure QTextDocument_defaultTextOption(handle: QTextDocumentH; retval: QTextOptionH); cdecl; external Qt4PasLib name 'QTextDocument_defaultTextOption'; procedure QTextDocument_setDefaultTextOption(handle: QTextDocumentH; option: QTextOptionH); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultTextOption'; procedure QTextDocument_undo(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_undo2'; procedure QTextDocument_redo(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_redo2'; procedure QTextDocument_setModified(handle: QTextDocumentH; m: Boolean = True); cdecl; external Qt4PasLib name 'QTextDocument_setModified'; function QAbstractTextDocumentLayout_hitTest(handle: QAbstractTextDocumentLayoutH; point: PQtPointF; accuracy: QtHitTestAccuracy): Integer; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hitTest'; procedure QAbstractTextDocumentLayout_anchorAt(handle: QAbstractTextDocumentLayoutH; retval: PWideString; pos: PQtPointF); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_anchorAt'; function QAbstractTextDocumentLayout_pageCount(handle: QAbstractTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_pageCount'; procedure QAbstractTextDocumentLayout_documentSize(handle: QAbstractTextDocumentLayoutH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_documentSize'; procedure QAbstractTextDocumentLayout_frameBoundingRect(handle: QAbstractTextDocumentLayoutH; retval: QRectFH; frame: QTextFrameH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_frameBoundingRect'; procedure QAbstractTextDocumentLayout_blockBoundingRect(handle: QAbstractTextDocumentLayoutH; retval: QRectFH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_blockBoundingRect'; procedure QAbstractTextDocumentLayout_setPaintDevice(handle: QAbstractTextDocumentLayoutH; device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_setPaintDevice'; function QAbstractTextDocumentLayout_paintDevice(handle: QAbstractTextDocumentLayoutH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_paintDevice'; function QAbstractTextDocumentLayout_document(handle: QAbstractTextDocumentLayoutH): QTextDocumentH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_document'; procedure QAbstractTextDocumentLayout_registerHandler(handle: QAbstractTextDocumentLayoutH; objectType: Integer; component: QObjectH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_registerHandler'; function QAbstractTextDocumentLayout_handlerForObject(handle: QAbstractTextDocumentLayoutH; objectType: Integer): QTextObjectInterfaceH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_handlerForObject'; procedure QTextObjectInterface_intrinsicSize(handle: QTextObjectInterfaceH; retval: QSizeFH; doc: QTextDocumentH; posInDocument: Integer; format: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObjectInterface_intrinsicSize'; procedure QTextObjectInterface_drawObject(handle: QTextObjectInterfaceH; painter: QPainterH; rect: QRectFH; doc: QTextDocumentH; posInDocument: Integer; format: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObjectInterface_drawObject'; type QAbstractTextDocumentLayout_update_Event = procedure (AnonParam1: QRectFH) of object cdecl; QAbstractTextDocumentLayout_update2_Event = procedure () of object cdecl; QAbstractTextDocumentLayout_updateBlock_Event = procedure (block: QTextBlockH) of object cdecl; QAbstractTextDocumentLayout_documentSizeChanged_Event = procedure (newSize: QSizeFH) of object cdecl; QAbstractTextDocumentLayout_pageCountChanged_Event = procedure (newPages: Integer) of object cdecl; type QTextLayoutCursorMode = ( // QTextLayout::CursorMode (1) QTextLayoutSkipCharacters, QTextLayoutSkipWords ); type QTextLineEdge = ( // QTextLine::Edge (1) QTextLineLeading, QTextLineTrailing ); QTextLineCursorPosition = ( // QTextLine::CursorPosition (1) QTextLineCursorBetweenCharacters, QTextLineCursorOnCharacter ); function QTextInlineObject_create(): QTextInlineObjectH; cdecl; external Qt4PasLib name 'QTextInlineObject_create'; procedure QTextInlineObject_destroy(handle: QTextInlineObjectH); cdecl; external Qt4PasLib name 'QTextInlineObject_destroy'; function QTextInlineObject_isValid(handle: QTextInlineObjectH): Boolean; cdecl; external Qt4PasLib name 'QTextInlineObject_isValid'; procedure QTextInlineObject_rect(handle: QTextInlineObjectH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextInlineObject_rect'; function QTextInlineObject_width(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_width'; function QTextInlineObject_ascent(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_ascent'; function QTextInlineObject_descent(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_descent'; function QTextInlineObject_height(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_height'; function QTextInlineObject_textDirection(handle: QTextInlineObjectH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QTextInlineObject_textDirection'; procedure QTextInlineObject_setWidth(handle: QTextInlineObjectH; w: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setWidth'; procedure QTextInlineObject_setAscent(handle: QTextInlineObjectH; a: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setAscent'; procedure QTextInlineObject_setDescent(handle: QTextInlineObjectH; d: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setDescent'; function QTextInlineObject_textPosition(handle: QTextInlineObjectH): Integer; cdecl; external Qt4PasLib name 'QTextInlineObject_textPosition'; function QTextInlineObject_formatIndex(handle: QTextInlineObjectH): Integer; cdecl; external Qt4PasLib name 'QTextInlineObject_formatIndex'; procedure QTextInlineObject_format(handle: QTextInlineObjectH; retval: QTextFormatH); cdecl; external Qt4PasLib name 'QTextInlineObject_format'; function QTextLayout_create(): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create'; procedure QTextLayout_destroy(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_destroy'; function QTextLayout_create(text: PWideString): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create2'; function QTextLayout_create(text: PWideString; font: QFontH; paintdevice: QPaintDeviceH = nil): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create3'; function QTextLayout_create(b: QTextBlockH): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create4'; procedure QTextLayout_setFont(handle: QTextLayoutH; f: QFontH); cdecl; external Qt4PasLib name 'QTextLayout_setFont'; procedure QTextLayout_font(handle: QTextLayoutH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextLayout_font'; procedure QTextLayout_setText(handle: QTextLayoutH; _string: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_setText'; procedure QTextLayout_text(handle: QTextLayoutH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_text'; procedure QTextLayout_setTextOption(handle: QTextLayoutH; option: QTextOptionH); cdecl; external Qt4PasLib name 'QTextLayout_setTextOption'; procedure QTextLayout_textOption(handle: QTextLayoutH; retval: QTextOptionH); cdecl; external Qt4PasLib name 'QTextLayout_textOption'; procedure QTextLayout_setPreeditArea(handle: QTextLayoutH; position: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_setPreeditArea'; function QTextLayout_preeditAreaPosition(handle: QTextLayoutH): Integer; cdecl; external Qt4PasLib name 'QTextLayout_preeditAreaPosition'; procedure QTextLayout_preeditAreaText(handle: QTextLayoutH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_preeditAreaText'; procedure QTextLayout_clearAdditionalFormats(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_clearAdditionalFormats'; procedure QTextLayout_setCacheEnabled(handle: QTextLayoutH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextLayout_setCacheEnabled'; function QTextLayout_cacheEnabled(handle: QTextLayoutH): Boolean; cdecl; external Qt4PasLib name 'QTextLayout_cacheEnabled'; procedure QTextLayout_beginLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_beginLayout'; procedure QTextLayout_endLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_endLayout'; procedure QTextLayout_clearLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_clearLayout'; procedure QTextLayout_createLine(handle: QTextLayoutH; retval: QTextLineH); cdecl; external Qt4PasLib name 'QTextLayout_createLine'; function QTextLayout_lineCount(handle: QTextLayoutH): Integer; cdecl; external Qt4PasLib name 'QTextLayout_lineCount'; procedure QTextLayout_lineAt(handle: QTextLayoutH; retval: QTextLineH; i: Integer); cdecl; external Qt4PasLib name 'QTextLayout_lineAt'; procedure QTextLayout_lineForTextPosition(handle: QTextLayoutH; retval: QTextLineH; pos: Integer); cdecl; external Qt4PasLib name 'QTextLayout_lineForTextPosition'; function QTextLayout_isValidCursorPosition(handle: QTextLayoutH; pos: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextLayout_isValidCursorPosition'; function QTextLayout_nextCursorPosition(handle: QTextLayoutH; oldPos: Integer; mode: QTextLayoutCursorMode = QTextLayoutSkipCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLayout_nextCursorPosition'; function QTextLayout_previousCursorPosition(handle: QTextLayoutH; oldPos: Integer; mode: QTextLayoutCursorMode = QTextLayoutSkipCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLayout_previousCursorPosition'; procedure QTextLayout_drawCursor(handle: QTextLayoutH; p: QPainterH; pos: PQtPointF; cursorPosition: Integer); cdecl; external Qt4PasLib name 'QTextLayout_drawCursor'; procedure QTextLayout_drawCursor(handle: QTextLayoutH; p: QPainterH; pos: PQtPointF; cursorPosition: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTextLayout_drawCursor2'; procedure QTextLayout_position(handle: QTextLayoutH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QTextLayout_position'; procedure QTextLayout_setPosition(handle: QTextLayoutH; p: PQtPointF); cdecl; external Qt4PasLib name 'QTextLayout_setPosition'; procedure QTextLayout_boundingRect(handle: QTextLayoutH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLayout_boundingRect'; function QTextLayout_minimumWidth(handle: QTextLayoutH): qreal; cdecl; external Qt4PasLib name 'QTextLayout_minimumWidth'; function QTextLayout_maximumWidth(handle: QTextLayoutH): qreal; cdecl; external Qt4PasLib name 'QTextLayout_maximumWidth'; procedure QTextLayout_setFlags(handle: QTextLayoutH; flags: Integer); cdecl; external Qt4PasLib name 'QTextLayout_setFlags'; function QTextLine_create(): QTextLineH; cdecl; external Qt4PasLib name 'QTextLine_create'; procedure QTextLine_destroy(handle: QTextLineH); cdecl; external Qt4PasLib name 'QTextLine_destroy'; function QTextLine_isValid(handle: QTextLineH): Boolean; cdecl; external Qt4PasLib name 'QTextLine_isValid'; procedure QTextLine_rect(handle: QTextLineH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLine_rect'; function QTextLine_x(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_x'; function QTextLine_y(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_y'; function QTextLine_width(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_width'; function QTextLine_ascent(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_ascent'; function QTextLine_descent(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_descent'; function QTextLine_height(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_height'; function QTextLine_naturalTextWidth(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_naturalTextWidth'; procedure QTextLine_naturalTextRect(handle: QTextLineH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLine_naturalTextRect'; function QTextLine_cursorToX(handle: QTextLineH; cursorPos: PInteger; edge: QTextLineEdge = QTextLineLeading): qreal; cdecl; external Qt4PasLib name 'QTextLine_cursorToX'; function QTextLine_cursorToX(handle: QTextLineH; cursorPos: Integer; edge: QTextLineEdge = QTextLineLeading): qreal; cdecl; external Qt4PasLib name 'QTextLine_cursorToX2'; function QTextLine_xToCursor(handle: QTextLineH; x: qreal; AnonParam2: QTextLineCursorPosition = QTextLineCursorBetweenCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLine_xToCursor'; procedure QTextLine_setLineWidth(handle: QTextLineH; width: qreal); cdecl; external Qt4PasLib name 'QTextLine_setLineWidth'; procedure QTextLine_setNumColumns(handle: QTextLineH; columns: Integer); cdecl; external Qt4PasLib name 'QTextLine_setNumColumns'; procedure QTextLine_setNumColumns(handle: QTextLineH; columns: Integer; alignmentWidth: qreal); cdecl; external Qt4PasLib name 'QTextLine_setNumColumns2'; procedure QTextLine_setPosition(handle: QTextLineH; pos: PQtPointF); cdecl; external Qt4PasLib name 'QTextLine_setPosition'; procedure QTextLine_position(handle: QTextLineH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QTextLine_position'; function QTextLine_textStart(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_textStart'; function QTextLine_textLength(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_textLength'; function QTextLine_lineNumber(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_lineNumber'; procedure QTextObject_format(handle: QTextObjectH; retval: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObject_format'; function QTextObject_formatIndex(handle: QTextObjectH): Integer; cdecl; external Qt4PasLib name 'QTextObject_formatIndex'; function QTextObject_document(handle: QTextObjectH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextObject_document'; function QTextObject_objectIndex(handle: QTextObjectH): Integer; cdecl; external Qt4PasLib name 'QTextObject_objectIndex'; function QTextFrame_create(doc: QTextDocumentH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextFrame_create'; procedure QTextFrame_destroy(handle: QTextFrameH); cdecl; external Qt4PasLib name 'QTextFrame_destroy'; procedure QTextFrame_setFrameFormat(handle: QTextFrameH; format: QTextFrameFormatH); cdecl; external Qt4PasLib name 'QTextFrame_setFrameFormat'; procedure QTextFrame_frameFormat(handle: QTextFrameH; retval: QTextFrameFormatH); cdecl; external Qt4PasLib name 'QTextFrame_frameFormat'; procedure QTextFrame_firstCursorPosition(handle: QTextFrameH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextFrame_firstCursorPosition'; procedure QTextFrame_lastCursorPosition(handle: QTextFrameH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextFrame_lastCursorPosition'; function QTextFrame_firstPosition(handle: QTextFrameH): Integer; cdecl; external Qt4PasLib name 'QTextFrame_firstPosition'; function QTextFrame_lastPosition(handle: QTextFrameH): Integer; cdecl; external Qt4PasLib name 'QTextFrame_lastPosition'; procedure QTextFrame_childFrames(handle: QTextFrameH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextFrame_childFrames'; function QTextFrame_parentFrame(handle: QTextFrameH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextFrame_parentFrame'; function QTextBlock_create(): QTextBlockH; cdecl; external Qt4PasLib name 'QTextBlock_create'; procedure QTextBlock_destroy(handle: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_destroy'; function QTextBlock_create(o: QTextBlockH): QTextBlockH; cdecl; external Qt4PasLib name 'QTextBlock_create2'; function QTextBlock_isValid(handle: QTextBlockH): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_isValid'; function QTextBlock_position(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_position'; function QTextBlock_length(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_length'; function QTextBlock_contains(handle: QTextBlockH; position: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_contains'; function QTextBlock_layout(handle: QTextBlockH): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextBlock_layout'; procedure QTextBlock_clearLayout(handle: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_clearLayout'; procedure QTextBlock_blockFormat(handle: QTextBlockH; retval: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextBlock_blockFormat'; function QTextBlock_blockFormatIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_blockFormatIndex'; procedure QTextBlock_charFormat(handle: QTextBlockH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextBlock_charFormat'; function QTextBlock_charFormatIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_charFormatIndex'; procedure QTextBlock_text(handle: QTextBlockH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextBlock_text'; function QTextBlock_document(handle: QTextBlockH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextBlock_document'; function QTextBlock_textList(handle: QTextBlockH): QTextListH; cdecl; external Qt4PasLib name 'QTextBlock_textList'; function QTextBlock_userData(handle: QTextBlockH): QTextBlockUserDataH; cdecl; external Qt4PasLib name 'QTextBlock_userData'; procedure QTextBlock_setUserData(handle: QTextBlockH; data: QTextBlockUserDataH); cdecl; external Qt4PasLib name 'QTextBlock_setUserData'; function QTextBlock_userState(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_userState'; procedure QTextBlock_setUserState(handle: QTextBlockH; state: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setUserState'; function QTextBlock_revision(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_revision'; procedure QTextBlock_setRevision(handle: QTextBlockH; rev: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setRevision'; function QTextBlock_isVisible(handle: QTextBlockH): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_isVisible'; procedure QTextBlock_setVisible(handle: QTextBlockH; visible: Boolean); cdecl; external Qt4PasLib name 'QTextBlock_setVisible'; function QTextBlock_blockNumber(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_blockNumber'; function QTextBlock_firstLineNumber(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_firstLineNumber'; procedure QTextBlock_setLineCount(handle: QTextBlockH; count: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setLineCount'; function QTextBlock_lineCount(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_lineCount'; procedure QTextBlock_next(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_next'; procedure QTextBlock_previous(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_previous'; function QTextBlock_fragmentIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_fragmentIndex'; function QTextFragment_create(): QTextFragmentH; cdecl; external Qt4PasLib name 'QTextFragment_create'; procedure QTextFragment_destroy(handle: QTextFragmentH); cdecl; external Qt4PasLib name 'QTextFragment_destroy'; function QTextFragment_create(o: QTextFragmentH): QTextFragmentH; cdecl; external Qt4PasLib name 'QTextFragment_create2'; function QTextFragment_isValid(handle: QTextFragmentH): Boolean; cdecl; external Qt4PasLib name 'QTextFragment_isValid'; function QTextFragment_position(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_position'; function QTextFragment_length(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_length'; function QTextFragment_contains(handle: QTextFragmentH; position: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextFragment_contains'; procedure QTextFragment_charFormat(handle: QTextFragmentH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextFragment_charFormat'; function QTextFragment_charFormatIndex(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_charFormatIndex'; procedure QTextFragment_text(handle: QTextFragmentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextFragment_text'; type QIconMode = ( // QIcon::Mode (1) QIconNormal, QIconDisabled, QIconActive, QIconSelected ); QIconState = ( // QIcon::State (1) QIconOn, QIconOff ); function QIcon_create(): QIconH; cdecl; external Qt4PasLib name 'QIcon_create'; procedure QIcon_destroy(handle: QIconH); cdecl; external Qt4PasLib name 'QIcon_destroy'; function QIcon_create(pixmap: QPixmapH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create2'; function QIcon_create(other: QIconH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create3'; function QIcon_create(fileName: PWideString): QIconH; cdecl; external Qt4PasLib name 'QIcon_create4'; function QIcon_create(engine: QIconEngineH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create5'; function QIcon_create(engine: QIconEngineV2H): QIconH; cdecl; external Qt4PasLib name 'QIcon_create6'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; size: PSize; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; w: Integer; h: Integer; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap2'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; extent: Integer; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap3'; procedure QIcon_actualSize(handle: QIconH; retval: PSize; size: PSize; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_actualSize'; procedure QIcon_paint(handle: QIconH; painter: QPainterH; rect: PRect; alignment: QtAlignment = QtAlignCenter; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_paint'; procedure QIcon_paint(handle: QIconH; painter: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; alignment: QtAlignment = QtAlignCenter; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_paint2'; function QIcon_isNull(handle: QIconH): Boolean; cdecl; external Qt4PasLib name 'QIcon_isNull'; function QIcon_isDetached(handle: QIconH): Boolean; cdecl; external Qt4PasLib name 'QIcon_isDetached'; procedure QIcon_detach(handle: QIconH); cdecl; external Qt4PasLib name 'QIcon_detach'; function QIcon_serialNumber(handle: QIconH): Integer; cdecl; external Qt4PasLib name 'QIcon_serialNumber'; function QIcon_cacheKey(handle: QIconH): int64; cdecl; external Qt4PasLib name 'QIcon_cacheKey'; procedure QIcon_addPixmap(handle: QIconH; pixmap: QPixmapH; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_addPixmap'; procedure QIcon_addFile(handle: QIconH; fileName: PWideString; size: PSize = nil; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_addFile'; {$ifdef BINUX } type QPixmapShareMode = ( // QPixmap::ShareMode (1) QPixmapImplicitlyShared, QPixmapExplicitlyShared ); {$endif} {$ifdef MSWINDOWS } type QPixmapHBitmapFormat = ( // QPixmap::HBitmapFormat (1) QPixmapNoAlpha, QPixmapPremultipliedAlpha, QPixmapAlpha ); {$endif} function QPixmap_create(): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create'; procedure QPixmap_destroy(handle: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_destroy'; function QPixmap_create(w: Integer; h: Integer): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create2'; function QPixmap_create(AnonParam1: PSize): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create3'; function QPixmap_create(fileName: PWideString; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create4'; function QPixmap_create(xpm: PAnsiChar): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create5'; function QPixmap_create(AnonParam1: QPixmapH): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create6'; function QPixmap_isNull(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isNull'; function QPixmap_devType(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_devType'; function QPixmap_width(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_width'; function QPixmap_height(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_height'; procedure QPixmap_size(handle: QPixmapH; retval: PSize); cdecl; external Qt4PasLib name 'QPixmap_size'; procedure QPixmap_rect(handle: QPixmapH; retval: PRect); cdecl; external Qt4PasLib name 'QPixmap_rect'; function QPixmap_depth(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_depth'; function QPixmap_defaultDepth(): Integer; cdecl; external Qt4PasLib name 'QPixmap_defaultDepth'; procedure QPixmap_fill(handle: QPixmapH; fillColor: PQColor); cdecl; external Qt4PasLib name 'QPixmap_fill'; procedure QPixmap_fill(handle: QPixmapH; widget: QWidgetH; ofs: PQtPoint); cdecl; external Qt4PasLib name 'QPixmap_fill2'; procedure QPixmap_fill(handle: QPixmapH; widget: QWidgetH; xofs: Integer; yofs: Integer); cdecl; external Qt4PasLib name 'QPixmap_fill3'; procedure QPixmap_mask(handle: QPixmapH; retval: QBitmapH); cdecl; external Qt4PasLib name 'QPixmap_mask'; procedure QPixmap_setMask(handle: QPixmapH; AnonParam1: QBitmapH); cdecl; external Qt4PasLib name 'QPixmap_setMask'; procedure QPixmap_alphaChannel(handle: QPixmapH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_alphaChannel'; procedure QPixmap_setAlphaChannel(handle: QPixmapH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_setAlphaChannel'; function QPixmap_hasAlpha(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_hasAlpha'; function QPixmap_hasAlphaChannel(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_hasAlphaChannel'; procedure QPixmap_createHeuristicMask(handle: QPixmapH; retval: QBitmapH; clipTight: Boolean = True); cdecl; external Qt4PasLib name 'QPixmap_createHeuristicMask'; procedure QPixmap_createMaskFromColor(handle: QPixmapH; retval: QBitmapH; maskColor: PQColor); cdecl; external Qt4PasLib name 'QPixmap_createMaskFromColor'; procedure QPixmap_createMaskFromColor(handle: QPixmapH; retval: QBitmapH; maskColor: PQColor; mode: QtMaskMode); cdecl; external Qt4PasLib name 'QPixmap_createMaskFromColor2'; procedure QPixmap_grabWindow(retval: QPixmapH; AnonParam1: LongWord; x: Integer = 0; y: Integer = 0; w: Integer = -1; h: Integer = -1); cdecl; external Qt4PasLib name 'QPixmap_grabWindow'; procedure QPixmap_grabWidget(retval: QPixmapH; widget: QWidgetH; rect: PRect); cdecl; external Qt4PasLib name 'QPixmap_grabWidget'; procedure QPixmap_grabWidget(retval: QPixmapH; widget: QWidgetH; x: Integer = 0; y: Integer = 0; w: Integer = -1; h: Integer = -1); cdecl; external Qt4PasLib name 'QPixmap_grabWidget2'; procedure QPixmap_scaled(handle: QPixmapH; retval: QPixmapH; w: Integer; h: Integer; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaled'; procedure QPixmap_scaled(handle: QPixmapH; retval: QPixmapH; s: PSize; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaled2'; procedure QPixmap_scaledToWidth(handle: QPixmapH; retval: QPixmapH; w: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaledToWidth'; procedure QPixmap_scaledToHeight(handle: QPixmapH; retval: QPixmapH; h: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaledToHeight'; procedure QPixmap_transformed(handle: QPixmapH; retval: QPixmapH; AnonParam1: QMatrixH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_transformed'; procedure QPixmap_trueMatrix(retval: QMatrixH; m: QMatrixH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPixmap_trueMatrix'; procedure QPixmap_transformed(handle: QPixmapH; retval: QPixmapH; AnonParam1: QTransformH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_transformed2'; procedure QPixmap_trueMatrix(retval: QTransformH; m: QTransformH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPixmap_trueMatrix2'; procedure QPixmap_toImage(handle: QPixmapH; retval: QImageH); cdecl; external Qt4PasLib name 'QPixmap_toImage'; procedure QPixmap_fromImage(retval: QPixmapH; image: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPixmap_fromImage'; function QPixmap_load(handle: QPixmapH; fileName: PWideString; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_load'; function QPixmap_loadFromData(handle: QPixmapH; buf: PByte; len: LongWord; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_loadFromData'; function QPixmap_loadFromData(handle: QPixmapH; data: QByteArrayH; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_loadFromData2'; function QPixmap_save(handle: QPixmapH; fileName: PWideString; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QPixmap_save'; function QPixmap_save(handle: QPixmapH; device: QIODeviceH; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QPixmap_save2'; procedure QPixmap_copy(handle: QPixmapH; retval: QPixmapH; x: Integer; y: Integer; width: Integer; height: Integer); cdecl; external Qt4PasLib name 'QPixmap_copy'; procedure QPixmap_copy(handle: QPixmapH; retval: QPixmapH; rect: PRect = nil); cdecl; external Qt4PasLib name 'QPixmap_copy2'; function QPixmap_serialNumber(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_serialNumber'; function QPixmap_cacheKey(handle: QPixmapH): int64; cdecl; external Qt4PasLib name 'QPixmap_cacheKey'; function QPixmap_isDetached(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isDetached'; procedure QPixmap_detach(handle: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_detach'; function QPixmap_isQBitmap(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isQBitmap'; {$ifdef BINUX } procedure QPixmap_fromX11Pixmap(retval: QPixmapH; pixmap: QtHANDLE; mode: QPixmapShareMode = QPixmapImplicitlyShared); cdecl; external Qt4PasLib name 'QPixmap_fromX11Pixmap'; function QPixmap_x11SetDefaultScreen(screen: Integer): Integer; cdecl; external Qt4PasLib name 'QPixmap_x11SetDefaultScreen'; procedure QPixmap_x11SetScreen(handle: QPixmapH; screen: Integer); cdecl; external Qt4PasLib name 'QPixmap_x11SetScreen'; function QPixmap_x11Info(handle: QPixmapH): QX11InfoH; cdecl; external Qt4PasLib name 'QPixmap_x11Info'; function QPixmap_x11PictureHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_x11PictureHandle'; {$endif} {$if defined(BINUX) or defined(QTOPIA)} function QPixmap_handle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_handle'; {$endif} function QPixmap_paintEngine(handle: QPixmapH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPixmap_paintEngine'; {$ifdef MSWINDOWS } function QPixmap_toWinHBITMAP(handle: QPixmapH; format: QPixmapHBitmapFormat = QPixmapNoAlpha): QHBITMAP; cdecl; external Qt4PasLib name 'QPixmap_toWinHBITMAP'; procedure QPixmap_fromWinHBITMAP(retval: QPixmapH; hbitmap: QHBITMAP; format: QPixmapHBitmapFormat = QPixmapNoAlpha); cdecl; external Qt4PasLib name 'QPixmap_fromWinHBITMAP'; {$endif} {$ifdef DARWIN } function QPixmap_toMacCGImageRef(handle: QPixmapH): CGImageRef; cdecl; external Qt4PasLib name 'QPixmap_toMacCGImageRef'; procedure QPixmap_fromMacCGImageRef(retval: QPixmapH; image: CGImageRef); cdecl; external Qt4PasLib name 'QPixmap_fromMacCGImageRef'; function QPixmap_macQDHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macQDHandle'; function QPixmap_macQDAlphaHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macQDAlphaHandle'; function QPixmap_macCGHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macCGHandle'; {$endif} {$ifdef QTOPIA } function QPixmap_qwsBits(handle: QPixmapH): PByte; cdecl; external Qt4PasLib name 'QPixmap_qwsBits'; function QPixmap_qwsBytesPerLine(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_qwsBytesPerLine'; function QPixmap_clut(handle: QPixmapH): PQRgb; cdecl; external Qt4PasLib name 'QPixmap_clut'; function QPixmap_numCols(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_numCols'; {$endif} type QImageInvertMode = ( // QImage::InvertMode (1) QImageInvertRgb, QImageInvertRgba ); QImageFormat = ( // QImage::Format (1) QImageFormat_Invalid, QImageFormat_Mono, QImageFormat_MonoLSB, QImageFormat_Indexed8, QImageFormat_RGB32, QImageFormat_ARGB32, QImageFormat_ARGB32_Premultiplied, QImageFormat_RGB16, QImageFormat_ARGB8565_Premultiplied, QImageFormat_RGB666, QImageFormat_ARGB6666_Premultiplied, QImageFormat_RGB555, QImageFormat_ARGB8555_Premultiplied, QImageFormat_RGB888, QImageFormat_RGB444, QImageFormat_ARGB4444_Premultiplied, QImageNImageFormats ); function QImage_create(): QImageH; cdecl; external Qt4PasLib name 'QImage_create'; procedure QImage_destroy(handle: QImageH); cdecl; external Qt4PasLib name 'QImage_destroy'; function QImage_create(size: PSize; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create2'; function QImage_create(width: Integer; height: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create3'; function QImage_create(data: PByte; width: Integer; height: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create4'; function QImage_create(data: PByte; width: Integer; height: Integer; bytesPerLine: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create6'; function QImage_create(xpm: PAnsiChar): QImageH; cdecl; external Qt4PasLib name 'QImage_create8'; function QImage_create(fileName: PWideString; format: PAnsiChar = nil): QImageH; cdecl; external Qt4PasLib name 'QImage_create9'; function QImage_create(fileName: PAnsiChar; format: PAnsiChar = nil): QImageH; cdecl; external Qt4PasLib name 'QImage_create10'; function QImage_create(AnonParam1: QImageH): QImageH; cdecl; external Qt4PasLib name 'QImage_create11'; function QImage_isNull(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isNull'; function QImage_devType(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_devType'; procedure QImage_detach(handle: QImageH); cdecl; external Qt4PasLib name 'QImage_detach'; function QImage_isDetached(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isDetached'; procedure QImage_copy(handle: QImageH; retval: QImageH; rect: PRect = nil); cdecl; external Qt4PasLib name 'QImage_copy'; procedure QImage_copy(handle: QImageH; retval: QImageH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_copy2'; function QImage_format(handle: QImageH): QImageFormat; cdecl; external Qt4PasLib name 'QImage_format'; procedure QImage_convertToFormat(handle: QImageH; retval: QImageH; f: QImageFormat; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QImage_convertToFormat'; function QImage_width(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_width'; function QImage_height(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_height'; procedure QImage_size(handle: QImageH; retval: PSize); cdecl; external Qt4PasLib name 'QImage_size'; procedure QImage_rect(handle: QImageH; retval: PRect); cdecl; external Qt4PasLib name 'QImage_rect'; function QImage_depth(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_depth'; function QImage_numColors(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_numColors'; function QImage_color(handle: QImageH; i: Integer): QRgb; cdecl; external Qt4PasLib name 'QImage_color'; procedure QImage_setColor(handle: QImageH; i: Integer; c: QRgb); cdecl; external Qt4PasLib name 'QImage_setColor'; procedure QImage_setNumColors(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setNumColors'; function QImage_allGray(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_allGray'; function QImage_isGrayscale(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isGrayscale'; function QImage_bits(handle: QImageH): PByte; cdecl; external Qt4PasLib name 'QImage_bits'; function QImage_numBytes(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_numBytes'; function QImage_scanLine(handle: QImageH; AnonParam1: Integer): PByte; cdecl; external Qt4PasLib name 'QImage_scanLine'; function QImage_bytesPerLine(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_bytesPerLine'; function QImage_valid(handle: QImageH; x: Integer; y: Integer): Boolean; cdecl; external Qt4PasLib name 'QImage_valid'; function QImage_valid(handle: QImageH; pt: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QImage_valid2'; function QImage_pixelIndex(handle: QImageH; x: Integer; y: Integer): Integer; cdecl; external Qt4PasLib name 'QImage_pixelIndex'; function QImage_pixelIndex(handle: QImageH; pt: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QImage_pixelIndex2'; function QImage_pixel(handle: QImageH; x: Integer; y: Integer): QRgb; cdecl; external Qt4PasLib name 'QImage_pixel'; function QImage_pixel(handle: QImageH; pt: PQtPoint): QRgb; cdecl; external Qt4PasLib name 'QImage_pixel2'; procedure QImage_setPixel(handle: QImageH; x: Integer; y: Integer; index_or_rgb: LongWord); cdecl; external Qt4PasLib name 'QImage_setPixel'; procedure QImage_setPixel(handle: QImageH; pt: PQtPoint; index_or_rgb: LongWord); cdecl; external Qt4PasLib name 'QImage_setPixel2'; procedure QImage_fill(handle: QImageH; pixel: LongWord); cdecl; external Qt4PasLib name 'QImage_fill'; function QImage_hasAlphaChannel(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_hasAlphaChannel'; procedure QImage_setAlphaChannel(handle: QImageH; alphaChannel: QImageH); cdecl; external Qt4PasLib name 'QImage_setAlphaChannel'; procedure QImage_alphaChannel(handle: QImageH; retval: QImageH); cdecl; external Qt4PasLib name 'QImage_alphaChannel'; procedure QImage_createAlphaMask(handle: QImageH; retval: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QImage_createAlphaMask'; procedure QImage_createHeuristicMask(handle: QImageH; retval: QImageH; clipTight: Boolean = True); cdecl; external Qt4PasLib name 'QImage_createHeuristicMask'; procedure QImage_createMaskFromColor(handle: QImageH; retval: QImageH; color: QRgb; mode: QtMaskMode = QtMaskInColor); cdecl; external Qt4PasLib name 'QImage_createMaskFromColor'; procedure QImage_scaled(handle: QImageH; retval: QImageH; w: Integer; h: Integer; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaled'; procedure QImage_scaled(handle: QImageH; retval: QImageH; s: PSize; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaled2'; procedure QImage_scaledToWidth(handle: QImageH; retval: QImageH; w: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaledToWidth'; procedure QImage_scaledToHeight(handle: QImageH; retval: QImageH; h: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaledToHeight'; procedure QImage_transformed(handle: QImageH; retval: QImageH; matrix: QMatrixH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_transformed'; procedure QImage_trueMatrix(retval: QMatrixH; AnonParam1: QMatrixH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_trueMatrix'; procedure QImage_transformed(handle: QImageH; retval: QImageH; matrix: QTransformH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_transformed2'; procedure QImage_trueMatrix(retval: QTransformH; AnonParam1: QTransformH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_trueMatrix2'; procedure QImage_mirrored(handle: QImageH; retval: QImageH; horizontally: Boolean = False; vertically: Boolean = True); cdecl; external Qt4PasLib name 'QImage_mirrored'; procedure QImage_rgbSwapped(handle: QImageH; retval: QImageH); cdecl; external Qt4PasLib name 'QImage_rgbSwapped'; procedure QImage_invertPixels(handle: QImageH; AnonParam1: QImageInvertMode = QImageInvertRgb); cdecl; external Qt4PasLib name 'QImage_invertPixels'; function QImage_load(handle: QImageH; device: QIODeviceH; format: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QImage_load'; function QImage_load(handle: QImageH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_load2'; function QImage_loadFromData(handle: QImageH; buf: PByte; len: Integer; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_loadFromData'; function QImage_loadFromData(handle: QImageH; data: QByteArrayH; aformat: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_loadFromData2'; function QImage_save(handle: QImageH; fileName: PWideString; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QImage_save'; function QImage_save(handle: QImageH; device: QIODeviceH; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QImage_save2'; procedure QImage_fromData(retval: QImageH; data: PByte; size: Integer; format: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_fromData'; procedure QImage_fromData(retval: QImageH; data: QByteArrayH; format: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_fromData2'; function QImage_serialNumber(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_serialNumber'; function QImage_cacheKey(handle: QImageH): int64; cdecl; external Qt4PasLib name 'QImage_cacheKey'; function QImage_paintEngine(handle: QImageH): QPaintEngineH; cdecl; external Qt4PasLib name 'QImage_paintEngine'; function QImage_dotsPerMeterX(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_dotsPerMeterX'; function QImage_dotsPerMeterY(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_dotsPerMeterY'; procedure QImage_setDotsPerMeterX(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setDotsPerMeterX'; procedure QImage_setDotsPerMeterY(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setDotsPerMeterY'; procedure QImage_offset(handle: QImageH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QImage_offset'; procedure QImage_setOffset(handle: QImageH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QImage_setOffset'; procedure QImage_textKeys(handle: QImageH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImage_textKeys'; procedure QImage_text(handle: QImageH; retval: PWideString; key: PWideString = nil); cdecl; external Qt4PasLib name 'QImage_text'; procedure QImage_setText(handle: QImageH; key: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QImage_setText'; procedure QImage_text(handle: QImageH; retval: PWideString; key: PAnsiChar; lang: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_text2'; procedure QImage_textLanguages(handle: QImageH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImage_textLanguages'; procedure QImage_setText(handle: QImageH; key: PAnsiChar; lang: PAnsiChar; AnonParam3: PWideString); cdecl; external Qt4PasLib name 'QImage_setText2'; function QBitmap_create(): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create'; procedure QBitmap_destroy(handle: QBitmapH); cdecl; external Qt4PasLib name 'QBitmap_destroy'; function QBitmap_create(AnonParam1: QPixmapH): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create2'; function QBitmap_create(w: Integer; h: Integer): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create3'; function QBitmap_create(AnonParam1: PSize): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create4'; function QBitmap_create(fileName: PWideString; format: PAnsiChar = nil): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create5'; procedure QBitmap_clear(handle: QBitmapH); cdecl; external Qt4PasLib name 'QBitmap_clear'; procedure QBitmap_fromImage(retval: QBitmapH; image: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QBitmap_fromImage'; procedure QBitmap_fromData(retval: QBitmapH; size: PSize; bits: PByte; monoFormat: QImageFormat = QImageFormat_MonoLSB); cdecl; external Qt4PasLib name 'QBitmap_fromData'; procedure QBitmap_transformed(handle: QBitmapH; retval: QBitmapH; AnonParam1: QMatrixH); cdecl; external Qt4PasLib name 'QBitmap_transformed'; procedure QBitmap_transformed(handle: QBitmapH; retval: QBitmapH; matrix: QTransformH); cdecl; external Qt4PasLib name 'QBitmap_transformed2'; function QPicture_create(formatVersion: Integer = -1): QPictureH; cdecl; external Qt4PasLib name 'QPicture_create'; procedure QPicture_destroy(handle: QPictureH); cdecl; external Qt4PasLib name 'QPicture_destroy'; function QPicture_create(AnonParam1: QPictureH): QPictureH; cdecl; external Qt4PasLib name 'QPicture_create2'; function QPicture_isNull(handle: QPictureH): Boolean; cdecl; external Qt4PasLib name 'QPicture_isNull'; function QPicture_devType(handle: QPictureH): Integer; cdecl; external Qt4PasLib name 'QPicture_devType'; function QPicture_size(handle: QPictureH): LongWord; cdecl; external Qt4PasLib name 'QPicture_size'; function QPicture_data(handle: QPictureH): PAnsiChar; cdecl; external Qt4PasLib name 'QPicture_data'; procedure QPicture_setData(handle: QPictureH; data: PAnsiChar; size: LongWord); cdecl; external Qt4PasLib name 'QPicture_setData'; function QPicture_play(handle: QPictureH; p: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPicture_play'; function QPicture_load(handle: QPictureH; dev: QIODeviceH; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_load'; function QPicture_load(handle: QPictureH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_load2'; function QPicture_save(handle: QPictureH; dev: QIODeviceH; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_save'; function QPicture_save(handle: QPictureH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_save2'; procedure QPicture_boundingRect(handle: QPictureH; retval: PRect); cdecl; external Qt4PasLib name 'QPicture_boundingRect'; procedure QPicture_setBoundingRect(handle: QPictureH; r: PRect); cdecl; external Qt4PasLib name 'QPicture_setBoundingRect'; procedure QPicture_detach(handle: QPictureH); cdecl; external Qt4PasLib name 'QPicture_detach'; function QPicture_isDetached(handle: QPictureH): Boolean; cdecl; external Qt4PasLib name 'QPicture_isDetached'; function QPicture_pictureFormat(fileName: PWideString): PAnsiChar; cdecl; external Qt4PasLib name 'QPicture_pictureFormat'; procedure QPicture_inputFormatList(retval: QStringListH); cdecl; external Qt4PasLib name 'QPicture_inputFormatList'; procedure QPicture_outputFormatList(retval: QStringListH); cdecl; external Qt4PasLib name 'QPicture_outputFormatList'; function QPicture_paintEngine(handle: QPictureH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPicture_paintEngine'; type QImageIOHandlerImageOption = ( // QImageIOHandler::ImageOption (1) QImageIOHandlerSize, QImageIOHandlerClipRect, QImageIOHandlerDescription, QImageIOHandlerScaledClipRect, QImageIOHandlerScaledSize, QImageIOHandlerCompressionRatio, QImageIOHandlerGamma, QImageIOHandlerQuality, QImageIOHandlerName, QImageIOHandlerSubType, QImageIOHandlerIncrementalReading, QImageIOHandlerEndianness, QImageIOHandlerAnimation, QImageIOHandlerBackgroundColor, QImageIOHandlerImageFormat ); procedure QImageIOHandler_setDevice(handle: QImageIOHandlerH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageIOHandler_setDevice'; function QImageIOHandler_device(handle: QImageIOHandlerH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageIOHandler_device'; procedure QImageIOHandler_setFormat(handle: QImageIOHandlerH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_setFormat'; procedure QImageIOHandler_format(handle: QImageIOHandlerH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_format'; procedure QImageIOHandler_name(handle: QImageIOHandlerH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_name'; function QImageIOHandler_canRead(handle: QImageIOHandlerH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_canRead'; function QImageIOHandler_read(handle: QImageIOHandlerH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_read'; function QImageIOHandler_write(handle: QImageIOHandlerH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_write'; procedure QImageIOHandler_option(handle: QImageIOHandlerH; retval: QVariantH; option: QImageIOHandlerImageOption); cdecl; external Qt4PasLib name 'QImageIOHandler_option'; procedure QImageIOHandler_setOption(handle: QImageIOHandlerH; option: QImageIOHandlerImageOption; value: QVariantH); cdecl; external Qt4PasLib name 'QImageIOHandler_setOption'; function QImageIOHandler_supportsOption(handle: QImageIOHandlerH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_supportsOption'; function QImageIOHandler_jumpToNextImage(handle: QImageIOHandlerH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_jumpToNextImage'; function QImageIOHandler_jumpToImage(handle: QImageIOHandlerH; imageNumber: Integer): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_jumpToImage'; function QImageIOHandler_loopCount(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_loopCount'; function QImageIOHandler_imageCount(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_imageCount'; function QImageIOHandler_nextImageDelay(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_nextImageDelay'; function QImageIOHandler_currentImageNumber(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_currentImageNumber'; procedure QImageIOHandler_currentImageRect(handle: QImageIOHandlerH; retval: PRect); cdecl; external Qt4PasLib name 'QImageIOHandler_currentImageRect'; type QImageReaderImageReaderError = ( // QImageReader::ImageReaderError (1) QImageReaderUnknownError, QImageReaderFileNotFoundError, QImageReaderDeviceError, QImageReaderUnsupportedFormatError, QImageReaderInvalidDataError ); function QImageReader_create(): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create'; procedure QImageReader_destroy(handle: QImageReaderH); cdecl; external Qt4PasLib name 'QImageReader_destroy'; function QImageReader_create(device: QIODeviceH; format: QByteArrayH = nil): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create2'; function QImageReader_create(fileName: PWideString; format: QByteArrayH = nil): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create3'; procedure QImageReader_setFormat(handle: QImageReaderH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageReader_setFormat'; procedure QImageReader_format(handle: QImageReaderH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageReader_format'; procedure QImageReader_setAutoDetectImageFormat(handle: QImageReaderH; enabled: Boolean); cdecl; external Qt4PasLib name 'QImageReader_setAutoDetectImageFormat'; function QImageReader_autoDetectImageFormat(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_autoDetectImageFormat'; procedure QImageReader_setDevice(handle: QImageReaderH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageReader_setDevice'; function QImageReader_device(handle: QImageReaderH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageReader_device'; procedure QImageReader_setFileName(handle: QImageReaderH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageReader_setFileName'; procedure QImageReader_fileName(handle: QImageReaderH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageReader_fileName'; procedure QImageReader_size(handle: QImageReaderH; retval: PSize); cdecl; external Qt4PasLib name 'QImageReader_size'; function QImageReader_imageFormat(handle: QImageReaderH): QImageFormat; cdecl; external Qt4PasLib name 'QImageReader_imageFormat'; procedure QImageReader_textKeys(handle: QImageReaderH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImageReader_textKeys'; procedure QImageReader_text(handle: QImageReaderH; retval: PWideString; key: PWideString); cdecl; external Qt4PasLib name 'QImageReader_text'; procedure QImageReader_setClipRect(handle: QImageReaderH; rect: PRect); cdecl; external Qt4PasLib name 'QImageReader_setClipRect'; procedure QImageReader_clipRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_clipRect'; procedure QImageReader_setScaledSize(handle: QImageReaderH; size: PSize); cdecl; external Qt4PasLib name 'QImageReader_setScaledSize'; procedure QImageReader_scaledSize(handle: QImageReaderH; retval: PSize); cdecl; external Qt4PasLib name 'QImageReader_scaledSize'; procedure QImageReader_setQuality(handle: QImageReaderH; quality: Integer); cdecl; external Qt4PasLib name 'QImageReader_setQuality'; function QImageReader_quality(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_quality'; procedure QImageReader_setScaledClipRect(handle: QImageReaderH; rect: PRect); cdecl; external Qt4PasLib name 'QImageReader_setScaledClipRect'; procedure QImageReader_scaledClipRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_scaledClipRect'; procedure QImageReader_setBackgroundColor(handle: QImageReaderH; color: PQColor); cdecl; external Qt4PasLib name 'QImageReader_setBackgroundColor'; procedure QImageReader_backgroundColor(handle: QImageReaderH; retval: PQColor); cdecl; external Qt4PasLib name 'QImageReader_backgroundColor'; function QImageReader_supportsAnimation(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_supportsAnimation'; function QImageReader_canRead(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_canRead'; procedure QImageReader_read(handle: QImageReaderH; retval: QImageH); cdecl; external Qt4PasLib name 'QImageReader_read'; function QImageReader_jumpToNextImage(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_jumpToNextImage'; function QImageReader_jumpToImage(handle: QImageReaderH; imageNumber: Integer): Boolean; cdecl; external Qt4PasLib name 'QImageReader_jumpToImage'; function QImageReader_loopCount(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_loopCount'; function QImageReader_imageCount(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_imageCount'; function QImageReader_nextImageDelay(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_nextImageDelay'; function QImageReader_currentImageNumber(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_currentImageNumber'; procedure QImageReader_currentImageRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_currentImageRect'; function QImageReader_error(handle: QImageReaderH): QImageReaderImageReaderError; cdecl; external Qt4PasLib name 'QImageReader_error'; procedure QImageReader_errorString(handle: QImageReaderH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageReader_errorString'; function QImageReader_supportsOption(handle: QImageReaderH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageReader_supportsOption'; procedure QImageReader_imageFormat(retval: QByteArrayH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageReader_imageFormat2'; procedure QImageReader_imageFormat(retval: QByteArrayH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageReader_imageFormat3'; type QImageWriterImageWriterError = ( // QImageWriter::ImageWriterError (1) QImageWriterUnknownError, QImageWriterDeviceError, QImageWriterUnsupportedFormatError ); function QImageWriter_create(): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create'; procedure QImageWriter_destroy(handle: QImageWriterH); cdecl; external Qt4PasLib name 'QImageWriter_destroy'; function QImageWriter_create(device: QIODeviceH; format: QByteArrayH): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create2'; function QImageWriter_create(fileName: PWideString; format: QByteArrayH = nil): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create3'; procedure QImageWriter_setFormat(handle: QImageWriterH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageWriter_setFormat'; procedure QImageWriter_format(handle: QImageWriterH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageWriter_format'; procedure QImageWriter_setDevice(handle: QImageWriterH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageWriter_setDevice'; function QImageWriter_device(handle: QImageWriterH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageWriter_device'; procedure QImageWriter_setFileName(handle: QImageWriterH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setFileName'; procedure QImageWriter_fileName(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_fileName'; procedure QImageWriter_setQuality(handle: QImageWriterH; quality: Integer); cdecl; external Qt4PasLib name 'QImageWriter_setQuality'; function QImageWriter_quality(handle: QImageWriterH): Integer; cdecl; external Qt4PasLib name 'QImageWriter_quality'; procedure QImageWriter_setCompression(handle: QImageWriterH; compression: Integer); cdecl; external Qt4PasLib name 'QImageWriter_setCompression'; function QImageWriter_compression(handle: QImageWriterH): Integer; cdecl; external Qt4PasLib name 'QImageWriter_compression'; procedure QImageWriter_setGamma(handle: QImageWriterH; gamma: Single); cdecl; external Qt4PasLib name 'QImageWriter_setGamma'; function QImageWriter_gamma(handle: QImageWriterH): Single; cdecl; external Qt4PasLib name 'QImageWriter_gamma'; procedure QImageWriter_setDescription(handle: QImageWriterH; description: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setDescription'; procedure QImageWriter_description(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_description'; procedure QImageWriter_setText(handle: QImageWriterH; key: PWideString; text: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setText'; function QImageWriter_canWrite(handle: QImageWriterH): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_canWrite'; function QImageWriter_write(handle: QImageWriterH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_write'; function QImageWriter_error(handle: QImageWriterH): QImageWriterImageWriterError; cdecl; external Qt4PasLib name 'QImageWriter_error'; procedure QImageWriter_errorString(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_errorString'; function QImageWriter_supportsOption(handle: QImageWriterH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_supportsOption'; type QValidatorState = ( // QValidator::State (1) QValidatorInvalid, QValidatorIntermediate, QValidatorAcceptable ); type QDoubleValidatorNotation = ( // QDoubleValidator::Notation (1) QDoubleValidatorStandardNotation, QDoubleValidatorScientificNotation ); procedure QValidator_setLocale(handle: QValidatorH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QValidator_setLocale'; procedure QValidator_locale(handle: QValidatorH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QValidator_locale'; function QValidator_validate(handle: QValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QValidator_validate'; procedure QValidator_fixup(handle: QValidatorH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QValidator_fixup'; function QIntValidator_create(parent: QObjectH): QIntValidatorH; cdecl; external Qt4PasLib name 'QIntValidator_create'; procedure QIntValidator_destroy(handle: QIntValidatorH); cdecl; external Qt4PasLib name 'QIntValidator_destroy'; function QIntValidator_create(bottom: Integer; top: Integer; parent: QObjectH): QIntValidatorH; cdecl; external Qt4PasLib name 'QIntValidator_create2'; function QIntValidator_validate(handle: QIntValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QIntValidator_validate'; procedure QIntValidator_setBottom(handle: QIntValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setBottom'; procedure QIntValidator_setTop(handle: QIntValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setTop'; procedure QIntValidator_setRange(handle: QIntValidatorH; bottom: Integer; top: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setRange'; function QIntValidator_bottom(handle: QIntValidatorH): Integer; cdecl; external Qt4PasLib name 'QIntValidator_bottom'; function QIntValidator_top(handle: QIntValidatorH): Integer; cdecl; external Qt4PasLib name 'QIntValidator_top'; function QDoubleValidator_create(parent: QObjectH): QDoubleValidatorH; cdecl; external Qt4PasLib name 'QDoubleValidator_create'; procedure QDoubleValidator_destroy(handle: QDoubleValidatorH); cdecl; external Qt4PasLib name 'QDoubleValidator_destroy'; function QDoubleValidator_create(bottom: Double; top: Double; decimals: Integer; parent: QObjectH): QDoubleValidatorH; cdecl; external Qt4PasLib name 'QDoubleValidator_create2'; function QDoubleValidator_validate(handle: QDoubleValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QDoubleValidator_validate'; procedure QDoubleValidator_setRange(handle: QDoubleValidatorH; bottom: Double; top: Double; decimals: Integer = 0); cdecl; external Qt4PasLib name 'QDoubleValidator_setRange'; procedure QDoubleValidator_setBottom(handle: QDoubleValidatorH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QDoubleValidator_setBottom'; procedure QDoubleValidator_setTop(handle: QDoubleValidatorH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QDoubleValidator_setTop'; procedure QDoubleValidator_setDecimals(handle: QDoubleValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QDoubleValidator_setDecimals'; procedure QDoubleValidator_setNotation(handle: QDoubleValidatorH; AnonParam1: QDoubleValidatorNotation); cdecl; external Qt4PasLib name 'QDoubleValidator_setNotation'; function QDoubleValidator_bottom(handle: QDoubleValidatorH): Double; cdecl; external Qt4PasLib name 'QDoubleValidator_bottom'; function QDoubleValidator_top(handle: QDoubleValidatorH): Double; cdecl; external Qt4PasLib name 'QDoubleValidator_top'; function QDoubleValidator_decimals(handle: QDoubleValidatorH): Integer; cdecl; external Qt4PasLib name 'QDoubleValidator_decimals'; function QDoubleValidator_notation(handle: QDoubleValidatorH): QDoubleValidatorNotation; cdecl; external Qt4PasLib name 'QDoubleValidator_notation'; function QRegExpValidator_create(parent: QObjectH): QRegExpValidatorH; cdecl; external Qt4PasLib name 'QRegExpValidator_create'; procedure QRegExpValidator_destroy(handle: QRegExpValidatorH); cdecl; external Qt4PasLib name 'QRegExpValidator_destroy'; function QRegExpValidator_create(rx: QRegExpH; parent: QObjectH): QRegExpValidatorH; cdecl; external Qt4PasLib name 'QRegExpValidator_create2'; function QRegExpValidator_validate(handle: QRegExpValidatorH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QRegExpValidator_validate'; procedure QRegExpValidator_setRegExp(handle: QRegExpValidatorH; rx: QRegExpH); cdecl; external Qt4PasLib name 'QRegExpValidator_setRegExp'; function QRegExpValidator_regExp(handle: QRegExpValidatorH): QRegExpH; cdecl; external Qt4PasLib name 'QRegExpValidator_regExp'; type QFrameShape = ( //QFrame::Shape (2) QFrameNoFrame = 0, QFrameBox = $0001, QFramePanel = $0002, QFrameWinPanel = $0003, QFrameHLine = $0004, QFrameVLine = $0005, QFrameStyledPanel = $0006 ); QFrameShadow = ( //QFrame::Shadow (2) QFramePlain = $0010, QFrameRaised = $0020, QFrameSunken = $0030 ); QFrameStyleMask = ( //QFrame::StyleMask (2) QFrameShape_Mask = $000f, QFrameShadow_Mask = $00f0 ); function QFrame_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QFrameH; cdecl; external Qt4PasLib name 'QFrame_create'; procedure QFrame_destroy(handle: QFrameH); cdecl; external Qt4PasLib name 'QFrame_destroy'; function QFrame_frameStyle(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_frameStyle'; procedure QFrame_setFrameStyle(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setFrameStyle'; function QFrame_frameWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_frameWidth'; procedure QFrame_sizeHint(handle: QFrameH; retval: PSize); cdecl; external Qt4PasLib name 'QFrame_sizeHint'; function QFrame_frameShape(handle: QFrameH): QFrameShape; cdecl; external Qt4PasLib name 'QFrame_frameShape'; procedure QFrame_setFrameShape(handle: QFrameH; AnonParam1: QFrameShape); cdecl; external Qt4PasLib name 'QFrame_setFrameShape'; function QFrame_frameShadow(handle: QFrameH): QFrameShadow; cdecl; external Qt4PasLib name 'QFrame_frameShadow'; procedure QFrame_setFrameShadow(handle: QFrameH; AnonParam1: QFrameShadow); cdecl; external Qt4PasLib name 'QFrame_setFrameShadow'; function QFrame_lineWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_lineWidth'; procedure QFrame_setLineWidth(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setLineWidth'; function QFrame_midLineWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_midLineWidth'; procedure QFrame_setMidLineWidth(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setMidLineWidth'; procedure QFrame_frameRect(handle: QFrameH; retval: PRect); cdecl; external Qt4PasLib name 'QFrame_frameRect'; procedure QFrame_setFrameRect(handle: QFrameH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QFrame_setFrameRect'; function QStackedWidget_create(parent: QWidgetH = nil): QStackedWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_create'; procedure QStackedWidget_destroy(handle: QStackedWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_destroy'; function QStackedWidget_addWidget(handle: QStackedWidgetH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_addWidget'; function QStackedWidget_insertWidget(handle: QStackedWidgetH; index: Integer; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_insertWidget'; procedure QStackedWidget_removeWidget(handle: QStackedWidgetH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_removeWidget'; function QStackedWidget_currentWidget(handle: QStackedWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_currentWidget'; function QStackedWidget_currentIndex(handle: QStackedWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_currentIndex'; function QStackedWidget_indexOf(handle: QStackedWidgetH; AnonParam1: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_indexOf'; function QStackedWidget_widget(handle: QStackedWidgetH; AnonParam1: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_widget'; function QStackedWidget_count(handle: QStackedWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_count'; procedure QStackedWidget_setCurrentIndex(handle: QStackedWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QStackedWidget_setCurrentIndex'; procedure QStackedWidget_setCurrentWidget(handle: QStackedWidgetH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_setCurrentWidget'; type QStackedWidget_currentChanged_Event = procedure (AnonParam1: Integer) of object cdecl; QStackedWidget_widgetRemoved_Event = procedure (index: Integer) of object cdecl; function QAbstractScrollArea_create(parent: QWidgetH = nil): QAbstractScrollAreaH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_create'; procedure QAbstractScrollArea_destroy(handle: QAbstractScrollAreaH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_destroy'; function QAbstractScrollArea_verticalScrollBarPolicy(handle: QAbstractScrollAreaH): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QAbstractScrollArea_verticalScrollBarPolicy'; procedure QAbstractScrollArea_setVerticalScrollBarPolicy(handle: QAbstractScrollAreaH; AnonParam1: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setVerticalScrollBarPolicy'; function QAbstractScrollArea_verticalScrollBar(handle: QAbstractScrollAreaH): QScrollBarH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_verticalScrollBar'; procedure QAbstractScrollArea_setVerticalScrollBar(handle: QAbstractScrollAreaH; scrollbar: QScrollBarH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setVerticalScrollBar'; function QAbstractScrollArea_horizontalScrollBarPolicy(handle: QAbstractScrollAreaH): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QAbstractScrollArea_horizontalScrollBarPolicy'; procedure QAbstractScrollArea_setHorizontalScrollBarPolicy(handle: QAbstractScrollAreaH; AnonParam1: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setHorizontalScrollBarPolicy'; function QAbstractScrollArea_horizontalScrollBar(handle: QAbstractScrollAreaH): QScrollBarH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_horizontalScrollBar'; procedure QAbstractScrollArea_setHorizontalScrollBar(handle: QAbstractScrollAreaH; scrollbar: QScrollBarH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setHorizontalScrollBar'; function QAbstractScrollArea_cornerWidget(handle: QAbstractScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_cornerWidget'; procedure QAbstractScrollArea_setCornerWidget(handle: QAbstractScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setCornerWidget'; procedure QAbstractScrollArea_addScrollBarWidget(handle: QAbstractScrollAreaH; widget: QWidgetH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractScrollArea_addScrollBarWidget'; procedure QAbstractScrollArea_scrollBarWidgets(handle: QAbstractScrollAreaH; retval: PPtrIntArray; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractScrollArea_scrollBarWidgets'; function QAbstractScrollArea_viewport(handle: QAbstractScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_viewport'; procedure QAbstractScrollArea_setViewport(handle: QAbstractScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setViewport'; procedure QAbstractScrollArea_maximumViewportSize(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_maximumViewportSize'; procedure QAbstractScrollArea_minimumSizeHint(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_minimumSizeHint'; procedure QAbstractScrollArea_sizeHint(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_sizeHint'; function QLCLAbstractScrollArea_create(parent: QWidgetH = nil): QLCLAbstractScrollAreaH; cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_create'; procedure QLCLAbstractScrollArea_destroy(handle: QLCLAbstractScrollAreaH); cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_destroy'; procedure QLCLAbstractScrollArea_override_viewportEvent(handle: QLCLAbstractScrollAreaH; hook: QLCLAbstractScrollArea_viewportEvent_Override); cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_override_viewportEvent'; function QLCLAbstractScrollArea_InheritedViewportEvent(handle: QLCLAbstractScrollAreaH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_InheritedViewportEvent'; type QAbstractSliderSliderAction = ( // QAbstractSlider::SliderAction (1) QAbstractSliderSliderNoAction, QAbstractSliderSliderSingleStepAdd, QAbstractSliderSliderSingleStepSub, QAbstractSliderSliderPageStepAdd, QAbstractSliderSliderPageStepSub, QAbstractSliderSliderToMinimum, QAbstractSliderSliderToMaximum, QAbstractSliderSliderMove ); function QAbstractSlider_create(parent: QWidgetH = nil): QAbstractSliderH; cdecl; external Qt4PasLib name 'QAbstractSlider_create'; procedure QAbstractSlider_destroy(handle: QAbstractSliderH); cdecl; external Qt4PasLib name 'QAbstractSlider_destroy'; function QAbstractSlider_orientation(handle: QAbstractSliderH): QtOrientation; cdecl; external Qt4PasLib name 'QAbstractSlider_orientation'; procedure QAbstractSlider_setMinimum(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setMinimum'; function QAbstractSlider_minimum(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_minimum'; procedure QAbstractSlider_setMaximum(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setMaximum'; function QAbstractSlider_maximum(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_maximum'; procedure QAbstractSlider_setRange(handle: QAbstractSliderH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setRange'; procedure QAbstractSlider_setSingleStep(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setSingleStep'; function QAbstractSlider_singleStep(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_singleStep'; procedure QAbstractSlider_setPageStep(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setPageStep'; function QAbstractSlider_pageStep(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_pageStep'; procedure QAbstractSlider_setTracking(handle: QAbstractSliderH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setTracking'; function QAbstractSlider_hasTracking(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_hasTracking'; procedure QAbstractSlider_setSliderDown(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setSliderDown'; function QAbstractSlider_isSliderDown(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_isSliderDown'; procedure QAbstractSlider_setSliderPosition(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setSliderPosition'; function QAbstractSlider_sliderPosition(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_sliderPosition'; procedure QAbstractSlider_setInvertedAppearance(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setInvertedAppearance'; function QAbstractSlider_invertedAppearance(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_invertedAppearance'; procedure QAbstractSlider_setInvertedControls(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setInvertedControls'; function QAbstractSlider_invertedControls(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_invertedControls'; function QAbstractSlider_value(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_value'; procedure QAbstractSlider_triggerAction(handle: QAbstractSliderH; action: QAbstractSliderSliderAction); cdecl; external Qt4PasLib name 'QAbstractSlider_triggerAction'; procedure QAbstractSlider_setValue(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setValue'; procedure QAbstractSlider_setOrientation(handle: QAbstractSliderH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QAbstractSlider_setOrientation'; type QAbstractSlider_valueChanged_Event = procedure (value: Integer) of object cdecl; QAbstractSlider_sliderPressed_Event = procedure () of object cdecl; QAbstractSlider_sliderMoved_Event = procedure (position: Integer) of object cdecl; QAbstractSlider_sliderReleased_Event = procedure () of object cdecl; QAbstractSlider_rangeChanged_Event = procedure (min: Integer; max: Integer) of object cdecl; QAbstractSlider_actionTriggered_Event = procedure (action: Integer) of object cdecl; function QScrollBar_create(parent: QWidgetH = nil): QScrollBarH; cdecl; external Qt4PasLib name 'QScrollBar_create'; procedure QScrollBar_destroy(handle: QScrollBarH); cdecl; external Qt4PasLib name 'QScrollBar_destroy'; function QScrollBar_create(AnonParam1: QtOrientation; parent: QWidgetH = nil): QScrollBarH; cdecl; external Qt4PasLib name 'QScrollBar_create2'; procedure QScrollBar_sizeHint(handle: QScrollBarH; retval: PSize); cdecl; external Qt4PasLib name 'QScrollBar_sizeHint'; function QScrollBar_event(handle: QScrollBarH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QScrollBar_event'; function QMenu_create(parent: QWidgetH = nil): QMenuH; cdecl; external Qt4PasLib name 'QMenu_create'; procedure QMenu_destroy(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_destroy'; function QMenu_create(title: PWideString; parent: QWidgetH = nil): QMenuH; cdecl; external Qt4PasLib name 'QMenu_create2'; function QMenu_addAction(handle: QMenuH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction'; function QMenu_addAction(handle: QMenuH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction2'; function QMenu_addAction(handle: QMenuH; text: PWideString; receiver: QObjectH; member: PAnsiChar; shortcut: QKeySequenceH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction3'; function QMenu_addAction(handle: QMenuH; icon: QIconH; text: PWideString; receiver: QObjectH; member: PAnsiChar; shortcut: QKeySequenceH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction4'; function QMenu_addMenu(handle: QMenuH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_addMenu'; function QMenu_addMenu(handle: QMenuH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenu_addMenu2'; function QMenu_addMenu(handle: QMenuH; icon: QIconH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenu_addMenu3'; function QMenu_addSeparator(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_addSeparator'; function QMenu_insertMenu(handle: QMenuH; before: QActionH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_insertMenu'; function QMenu_insertSeparator(handle: QMenuH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QMenu_insertSeparator'; function QMenu_isEmpty(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isEmpty'; procedure QMenu_clear(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_clear'; procedure QMenu_setTearOffEnabled(handle: QMenuH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QMenu_setTearOffEnabled'; function QMenu_isTearOffEnabled(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isTearOffEnabled'; function QMenu_isTearOffMenuVisible(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isTearOffMenuVisible'; procedure QMenu_hideTearOffMenu(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_hideTearOffMenu'; procedure QMenu_setDefaultAction(handle: QMenuH; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenu_setDefaultAction'; function QMenu_defaultAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_defaultAction'; procedure QMenu_setActiveAction(handle: QMenuH; act: QActionH); cdecl; external Qt4PasLib name 'QMenu_setActiveAction'; function QMenu_activeAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_activeAction'; procedure QMenu_popup(handle: QMenuH; pos: PQtPoint; at: QActionH = nil); cdecl; external Qt4PasLib name 'QMenu_popup'; function QMenu_exec(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec'; function QMenu_exec(handle: QMenuH; pos: PQtPoint; at: QActionH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec2'; function QMenu_exec(actions: PPtrIntArray; pos: PQtPoint; at: QActionH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec3'; function QMenu_exec(actions: PPtrIntArray; pos: PQtPoint; at: QActionH; parent: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec4'; procedure QMenu_sizeHint(handle: QMenuH; retval: PSize); cdecl; external Qt4PasLib name 'QMenu_sizeHint'; procedure QMenu_actionGeometry(handle: QMenuH; retval: PRect; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenu_actionGeometry'; function QMenu_actionAt(handle: QMenuH; AnonParam1: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QMenu_actionAt'; function QMenu_menuAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_menuAction'; procedure QMenu_title(handle: QMenuH; retval: PWideString); cdecl; external Qt4PasLib name 'QMenu_title'; procedure QMenu_setTitle(handle: QMenuH; title: PWideString); cdecl; external Qt4PasLib name 'QMenu_setTitle'; procedure QMenu_icon(handle: QMenuH; retval: QIconH); cdecl; external Qt4PasLib name 'QMenu_icon'; procedure QMenu_setIcon(handle: QMenuH; icon: QIconH); cdecl; external Qt4PasLib name 'QMenu_setIcon'; procedure QMenu_setNoReplayFor(handle: QMenuH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMenu_setNoReplayFor'; function QMenu_separatorsCollapsible(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_separatorsCollapsible'; procedure QMenu_setSeparatorsCollapsible(handle: QMenuH; collapse: Boolean); cdecl; external Qt4PasLib name 'QMenu_setSeparatorsCollapsible'; type QMenu_aboutToShow_Event = procedure () of object cdecl; QMenu_aboutToHide_Event = procedure () of object cdecl; QMenu_triggered_Event = procedure (action: QActionH) of object cdecl; QMenu_hovered_Event = procedure (action: QActionH) of object cdecl; function QMenuBar_create(parent: QWidgetH = nil): QMenuBarH; cdecl; external Qt4PasLib name 'QMenuBar_create'; procedure QMenuBar_destroy(handle: QMenuBarH); cdecl; external Qt4PasLib name 'QMenuBar_destroy'; function QMenuBar_addAction(handle: QMenuBarH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addAction'; function QMenuBar_addAction(handle: QMenuBarH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addAction2'; function QMenuBar_addMenu(handle: QMenuBarH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu'; function QMenuBar_addMenu(handle: QMenuBarH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu2'; function QMenuBar_addMenu(handle: QMenuBarH; icon: QIconH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu3'; function QMenuBar_addSeparator(handle: QMenuBarH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addSeparator'; function QMenuBar_insertSeparator(handle: QMenuBarH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_insertSeparator'; function QMenuBar_insertMenu(handle: QMenuBarH; before: QActionH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_insertMenu'; procedure QMenuBar_clear(handle: QMenuBarH); cdecl; external Qt4PasLib name 'QMenuBar_clear'; function QMenuBar_activeAction(handle: QMenuBarH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_activeAction'; procedure QMenuBar_setActiveAction(handle: QMenuBarH; action: QActionH); cdecl; external Qt4PasLib name 'QMenuBar_setActiveAction'; procedure QMenuBar_setDefaultUp(handle: QMenuBarH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QMenuBar_setDefaultUp'; function QMenuBar_isDefaultUp(handle: QMenuBarH): Boolean; cdecl; external Qt4PasLib name 'QMenuBar_isDefaultUp'; procedure QMenuBar_sizeHint(handle: QMenuBarH; retval: PSize); cdecl; external Qt4PasLib name 'QMenuBar_sizeHint'; procedure QMenuBar_minimumSizeHint(handle: QMenuBarH; retval: PSize); cdecl; external Qt4PasLib name 'QMenuBar_minimumSizeHint'; function QMenuBar_heightForWidth(handle: QMenuBarH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QMenuBar_heightForWidth'; procedure QMenuBar_actionGeometry(handle: QMenuBarH; retval: PRect; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenuBar_actionGeometry'; function QMenuBar_actionAt(handle: QMenuBarH; AnonParam1: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_actionAt'; procedure QMenuBar_setCornerWidget(handle: QMenuBarH; w: QWidgetH; corner: QtCorner = QtTopRightCorner); cdecl; external Qt4PasLib name 'QMenuBar_setCornerWidget'; function QMenuBar_cornerWidget(handle: QMenuBarH; corner: QtCorner = QtTopRightCorner): QWidgetH; cdecl; external Qt4PasLib name 'QMenuBar_cornerWidget'; procedure QMenuBar_setVisible(handle: QMenuBarH; visible: Boolean); cdecl; external Qt4PasLib name 'QMenuBar_setVisible'; {$ifdef DARWIN } function QMenuBar_macMenu(handle: QMenuBarH): Pointer; cdecl; external Qt4PasLib name 'QMenuBar_macMenu'; function QMenuBar_macUpdateMenuBar(): Boolean; cdecl; external Qt4PasLib name 'QMenuBar_macUpdateMenuBar'; {$endif} type QMenuBar_triggered_Event = procedure (action: QActionH) of object cdecl; QMenuBar_hovered_Event = procedure (action: QActionH) of object cdecl; function QButtonGroup_create(parent: QObjectH = nil): QButtonGroupH; cdecl; external Qt4PasLib name 'QButtonGroup_create'; procedure QButtonGroup_destroy(handle: QButtonGroupH); cdecl; external Qt4PasLib name 'QButtonGroup_destroy'; procedure QButtonGroup_setExclusive(handle: QButtonGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QButtonGroup_setExclusive'; function QButtonGroup_exclusive(handle: QButtonGroupH): Boolean; cdecl; external Qt4PasLib name 'QButtonGroup_exclusive'; procedure QButtonGroup_addButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH); cdecl; external Qt4PasLib name 'QButtonGroup_addButton'; procedure QButtonGroup_addButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH; id: Integer); cdecl; external Qt4PasLib name 'QButtonGroup_addButton2'; procedure QButtonGroup_removeButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH); cdecl; external Qt4PasLib name 'QButtonGroup_removeButton'; procedure QButtonGroup_buttons(handle: QButtonGroupH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QButtonGroup_buttons'; function QButtonGroup_checkedButton(handle: QButtonGroupH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QButtonGroup_checkedButton'; function QButtonGroup_button(handle: QButtonGroupH; id: Integer): QAbstractButtonH; cdecl; external Qt4PasLib name 'QButtonGroup_button'; procedure QButtonGroup_setId(handle: QButtonGroupH; button: QAbstractButtonH; id: Integer); cdecl; external Qt4PasLib name 'QButtonGroup_setId'; function QButtonGroup_id(handle: QButtonGroupH; button: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QButtonGroup_id'; function QButtonGroup_checkedId(handle: QButtonGroupH): Integer; cdecl; external Qt4PasLib name 'QButtonGroup_checkedId'; type QButtonGroup_buttonClicked_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonClicked2_Event = procedure (AnonParam1: Integer) of object cdecl; QButtonGroup_buttonPressed_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonPressed2_Event = procedure (AnonParam1: Integer) of object cdecl; QButtonGroup_buttonReleased_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonReleased2_Event = procedure (AnonParam1: Integer) of object cdecl; procedure QAbstractButton_setText(handle: QAbstractButtonH; text: PWideString); cdecl; external Qt4PasLib name 'QAbstractButton_setText'; procedure QAbstractButton_text(handle: QAbstractButtonH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractButton_text'; procedure QAbstractButton_setIcon(handle: QAbstractButtonH; icon: QIconH); cdecl; external Qt4PasLib name 'QAbstractButton_setIcon'; procedure QAbstractButton_icon(handle: QAbstractButtonH; retval: QIconH); cdecl; external Qt4PasLib name 'QAbstractButton_icon'; procedure QAbstractButton_iconSize(handle: QAbstractButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractButton_iconSize'; procedure QAbstractButton_setShortcut(handle: QAbstractButtonH; key: QKeySequenceH); cdecl; external Qt4PasLib name 'QAbstractButton_setShortcut'; procedure QAbstractButton_shortcut(handle: QAbstractButtonH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QAbstractButton_shortcut'; procedure QAbstractButton_setCheckable(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setCheckable'; function QAbstractButton_isCheckable(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isCheckable'; function QAbstractButton_isChecked(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isChecked'; procedure QAbstractButton_setDown(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setDown'; function QAbstractButton_isDown(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isDown'; procedure QAbstractButton_setAutoRepeat(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeat'; function QAbstractButton_autoRepeat(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeat'; procedure QAbstractButton_setAutoRepeatDelay(handle: QAbstractButtonH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeatDelay'; function QAbstractButton_autoRepeatDelay(handle: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeatDelay'; procedure QAbstractButton_setAutoRepeatInterval(handle: QAbstractButtonH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeatInterval'; function QAbstractButton_autoRepeatInterval(handle: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeatInterval'; procedure QAbstractButton_setAutoExclusive(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoExclusive'; function QAbstractButton_autoExclusive(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_autoExclusive'; function QAbstractButton_group(handle: QAbstractButtonH): QButtonGroupH; cdecl; external Qt4PasLib name 'QAbstractButton_group'; procedure QAbstractButton_setIconSize(handle: QAbstractButtonH; size: PSize); cdecl; external Qt4PasLib name 'QAbstractButton_setIconSize'; procedure QAbstractButton_animateClick(handle: QAbstractButtonH; msec: Integer = 100); cdecl; external Qt4PasLib name 'QAbstractButton_animateClick'; procedure QAbstractButton_click(handle: QAbstractButtonH); cdecl; external Qt4PasLib name 'QAbstractButton_click'; procedure QAbstractButton_toggle(handle: QAbstractButtonH); cdecl; external Qt4PasLib name 'QAbstractButton_toggle'; procedure QAbstractButton_setChecked(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setChecked'; type QAbstractButton_pressed_Event = procedure () of object cdecl; QAbstractButton_released_Event = procedure () of object cdecl; QAbstractButton_clicked_Event = procedure (checked: Boolean = False) of object cdecl; QAbstractButton_clicked2_Event = procedure () of object cdecl; QAbstractButton_toggled_Event = procedure (checked: Boolean) of object cdecl; function QPushButton_create(parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create'; procedure QPushButton_destroy(handle: QPushButtonH); cdecl; external Qt4PasLib name 'QPushButton_destroy'; function QPushButton_create(text: PWideString; parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create2'; function QPushButton_create(icon: QIconH; text: PWideString; parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create3'; procedure QPushButton_sizeHint(handle: QPushButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QPushButton_sizeHint'; procedure QPushButton_minimumSizeHint(handle: QPushButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QPushButton_minimumSizeHint'; function QPushButton_autoDefault(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_autoDefault'; procedure QPushButton_setAutoDefault(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setAutoDefault'; function QPushButton_isDefault(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_isDefault'; procedure QPushButton_setDefault(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setDefault'; procedure QPushButton_setMenu(handle: QPushButtonH; menu: QMenuH); cdecl; external Qt4PasLib name 'QPushButton_setMenu'; function QPushButton_menu(handle: QPushButtonH): QMenuH; cdecl; external Qt4PasLib name 'QPushButton_menu'; procedure QPushButton_setFlat(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setFlat'; function QPushButton_isFlat(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_isFlat'; procedure QPushButton_showMenu(handle: QPushButtonH); cdecl; external Qt4PasLib name 'QPushButton_showMenu'; function QRadioButton_create(parent: QWidgetH = nil): QRadioButtonH; cdecl; external Qt4PasLib name 'QRadioButton_create'; procedure QRadioButton_destroy(handle: QRadioButtonH); cdecl; external Qt4PasLib name 'QRadioButton_destroy'; function QRadioButton_create(text: PWideString; parent: QWidgetH = nil): QRadioButtonH; cdecl; external Qt4PasLib name 'QRadioButton_create2'; procedure QRadioButton_sizeHint(handle: QRadioButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QRadioButton_sizeHint'; type QLineEditEchoMode = ( // QLineEdit::EchoMode (1) QLineEditNormal, QLineEditNoEcho, QLineEditPassword, QLineEditPasswordEchoOnEdit ); function QLineEdit_create(parent: QWidgetH = nil): QLineEditH; cdecl; external Qt4PasLib name 'QLineEdit_create'; procedure QLineEdit_destroy(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_destroy'; function QLineEdit_create(AnonParam1: PWideString; parent: QWidgetH = nil): QLineEditH; cdecl; external Qt4PasLib name 'QLineEdit_create2'; procedure QLineEdit_text(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_text'; procedure QLineEdit_displayText(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_displayText'; function QLineEdit_maxLength(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_maxLength'; procedure QLineEdit_setMaxLength(handle: QLineEditH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setMaxLength'; procedure QLineEdit_setFrame(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setFrame'; function QLineEdit_hasFrame(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasFrame'; function QLineEdit_echoMode(handle: QLineEditH): QLineEditEchoMode; cdecl; external Qt4PasLib name 'QLineEdit_echoMode'; procedure QLineEdit_setEchoMode(handle: QLineEditH; AnonParam1: QLineEditEchoMode); cdecl; external Qt4PasLib name 'QLineEdit_setEchoMode'; function QLineEdit_isReadOnly(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isReadOnly'; procedure QLineEdit_setReadOnly(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setReadOnly'; procedure QLineEdit_setValidator(handle: QLineEditH; AnonParam1: QValidatorH); cdecl; external Qt4PasLib name 'QLineEdit_setValidator'; function QLineEdit_validator(handle: QLineEditH): QValidatorH; cdecl; external Qt4PasLib name 'QLineEdit_validator'; procedure QLineEdit_setCompleter(handle: QLineEditH; completer: QCompleterH); cdecl; external Qt4PasLib name 'QLineEdit_setCompleter'; function QLineEdit_completer(handle: QLineEditH): QCompleterH; cdecl; external Qt4PasLib name 'QLineEdit_completer'; procedure QLineEdit_sizeHint(handle: QLineEditH; retval: PSize); cdecl; external Qt4PasLib name 'QLineEdit_sizeHint'; procedure QLineEdit_minimumSizeHint(handle: QLineEditH; retval: PSize); cdecl; external Qt4PasLib name 'QLineEdit_minimumSizeHint'; function QLineEdit_cursorPosition(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_cursorPosition'; procedure QLineEdit_setCursorPosition(handle: QLineEditH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setCursorPosition'; function QLineEdit_cursorPositionAt(handle: QLineEditH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QLineEdit_cursorPositionAt'; procedure QLineEdit_setAlignment(handle: QLineEditH; flag: QtAlignment); cdecl; external Qt4PasLib name 'QLineEdit_setAlignment'; function QLineEdit_alignment(handle: QLineEditH): QtAlignment; cdecl; external Qt4PasLib name 'QLineEdit_alignment'; procedure QLineEdit_cursorForward(handle: QLineEditH; mark: Boolean; steps: Integer = 1); cdecl; external Qt4PasLib name 'QLineEdit_cursorForward'; procedure QLineEdit_cursorBackward(handle: QLineEditH; mark: Boolean; steps: Integer = 1); cdecl; external Qt4PasLib name 'QLineEdit_cursorBackward'; procedure QLineEdit_cursorWordForward(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_cursorWordForward'; procedure QLineEdit_cursorWordBackward(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_cursorWordBackward'; procedure QLineEdit_backspace(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_backspace'; procedure QLineEdit_del(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_del'; procedure QLineEdit_home(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_home'; procedure QLineEdit_end(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_end'; function QLineEdit_isModified(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isModified'; procedure QLineEdit_setModified(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setModified'; procedure QLineEdit_setSelection(handle: QLineEditH; AnonParam1: Integer; AnonParam2: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setSelection'; function QLineEdit_hasSelectedText(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasSelectedText'; procedure QLineEdit_selectedText(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_selectedText'; function QLineEdit_selectionStart(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_selectionStart'; function QLineEdit_isUndoAvailable(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isUndoAvailable'; function QLineEdit_isRedoAvailable(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isRedoAvailable'; procedure QLineEdit_setDragEnabled(handle: QLineEditH; b: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setDragEnabled'; function QLineEdit_dragEnabled(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_dragEnabled'; procedure QLineEdit_inputMask(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_inputMask'; procedure QLineEdit_setInputMask(handle: QLineEditH; inputMask: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_setInputMask'; function QLineEdit_hasAcceptableInput(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasAcceptableInput'; procedure QLineEdit_setTextMargins(handle: QLineEditH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setTextMargins'; procedure QLineEdit_getTextMargins(handle: QLineEditH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QLineEdit_getTextMargins'; procedure QLineEdit_setText(handle: QLineEditH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_setText'; procedure QLineEdit_clear(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_clear'; procedure QLineEdit_selectAll(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_selectAll'; procedure QLineEdit_undo(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_undo'; procedure QLineEdit_redo(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_redo'; procedure QLineEdit_cut(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_cut'; procedure QLineEdit_copy(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_copy'; procedure QLineEdit_paste(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_paste'; procedure QLineEdit_deselect(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_deselect'; procedure QLineEdit_insert(handle: QLineEditH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_insert'; function QLineEdit_createStandardContextMenu(handle: QLineEditH): QMenuH; cdecl; external Qt4PasLib name 'QLineEdit_createStandardContextMenu'; procedure QLineEdit_inputMethodQuery(handle: QLineEditH; retval: QVariantH; AnonParam1: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QLineEdit_inputMethodQuery'; function QLineEdit_event(handle: QLineEditH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_event'; type QLineEdit_textChanged_Event = procedure (AnonParam1: PWideString) of object cdecl; QLineEdit_textEdited_Event = procedure (AnonParam1: PWideString) of object cdecl; QLineEdit_cursorPositionChanged_Event = procedure (AnonParam1: Integer; AnonParam2: Integer) of object cdecl; QLineEdit_returnPressed_Event = procedure () of object cdecl; QLineEdit_editingFinished_Event = procedure () of object cdecl; QLineEdit_selectionChanged_Event = procedure () of object cdecl; type QPlainTextEditLineWrapMode = ( // QPlainTextEdit::LineWrapMode (1) QPlainTextEditNoWrap, QPlainTextEditWidgetWidth ); function QPlainTextEdit_create(parent: QWidgetH = nil): QPlainTextEditH; cdecl; external Qt4PasLib name 'QPlainTextEdit_create'; procedure QPlainTextEdit_destroy(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_destroy'; function QPlainTextEdit_create(text: PWideString; parent: QWidgetH = nil): QPlainTextEditH; cdecl; external Qt4PasLib name 'QPlainTextEdit_create2'; procedure QPlainTextEdit_setDocument(handle: QPlainTextEditH; document: QTextDocumentH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setDocument'; function QPlainTextEdit_document(handle: QPlainTextEditH): QTextDocumentH; cdecl; external Qt4PasLib name 'QPlainTextEdit_document'; procedure QPlainTextEdit_setTextCursor(handle: QPlainTextEditH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTextCursor'; procedure QPlainTextEdit_textCursor(handle: QPlainTextEditH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_textCursor'; function QPlainTextEdit_isReadOnly(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_isReadOnly'; procedure QPlainTextEdit_setReadOnly(handle: QPlainTextEditH; ro: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setReadOnly'; procedure QPlainTextEdit_setTextInteractionFlags(handle: QPlainTextEditH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTextInteractionFlags'; function QPlainTextEdit_textInteractionFlags(handle: QPlainTextEditH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QPlainTextEdit_textInteractionFlags'; procedure QPlainTextEdit_mergeCurrentCharFormat(handle: QPlainTextEditH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_mergeCurrentCharFormat'; procedure QPlainTextEdit_setCurrentCharFormat(handle: QPlainTextEditH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCurrentCharFormat'; procedure QPlainTextEdit_currentCharFormat(handle: QPlainTextEditH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_currentCharFormat'; function QPlainTextEdit_tabChangesFocus(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_tabChangesFocus'; procedure QPlainTextEdit_setTabChangesFocus(handle: QPlainTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTabChangesFocus'; procedure QPlainTextEdit_setDocumentTitle(handle: QPlainTextEditH; title: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_setDocumentTitle'; procedure QPlainTextEdit_documentTitle(handle: QPlainTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_documentTitle'; function QPlainTextEdit_isUndoRedoEnabled(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_isUndoRedoEnabled'; procedure QPlainTextEdit_setUndoRedoEnabled(handle: QPlainTextEditH; enable: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setUndoRedoEnabled'; procedure QPlainTextEdit_setMaximumBlockCount(handle: QPlainTextEditH; maximum: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setMaximumBlockCount'; function QPlainTextEdit_maximumBlockCount(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_maximumBlockCount'; function QPlainTextEdit_lineWrapMode(handle: QPlainTextEditH): QPlainTextEditLineWrapMode; cdecl; external Qt4PasLib name 'QPlainTextEdit_lineWrapMode'; procedure QPlainTextEdit_setLineWrapMode(handle: QPlainTextEditH; mode: QPlainTextEditLineWrapMode); cdecl; external Qt4PasLib name 'QPlainTextEdit_setLineWrapMode'; function QPlainTextEdit_wordWrapMode(handle: QPlainTextEditH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QPlainTextEdit_wordWrapMode'; procedure QPlainTextEdit_setWordWrapMode(handle: QPlainTextEditH; policy: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QPlainTextEdit_setWordWrapMode'; procedure QPlainTextEdit_setBackgroundVisible(handle: QPlainTextEditH; visible: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setBackgroundVisible'; function QPlainTextEdit_backgroundVisible(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_backgroundVisible'; procedure QPlainTextEdit_setCenterOnScroll(handle: QPlainTextEditH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCenterOnScroll'; function QPlainTextEdit_centerOnScroll(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_centerOnScroll'; function QPlainTextEdit_find(handle: QPlainTextEditH; exp: PWideString; options: QTextDocumentFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_find'; procedure QPlainTextEdit_toPlainText(handle: QPlainTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_toPlainText'; procedure QPlainTextEdit_ensureCursorVisible(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_ensureCursorVisible'; procedure QPlainTextEdit_loadResource(handle: QPlainTextEditH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QPlainTextEdit_loadResource'; function QPlainTextEdit_createStandardContextMenu(handle: QPlainTextEditH): QMenuH; cdecl; external Qt4PasLib name 'QPlainTextEdit_createStandardContextMenu'; procedure QPlainTextEdit_cursorForPosition(handle: QPlainTextEditH; retval: QTextCursorH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorForPosition'; procedure QPlainTextEdit_cursorRect(handle: QPlainTextEditH; retval: PRect; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorRect'; procedure QPlainTextEdit_cursorRect(handle: QPlainTextEditH; retval: PRect); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorRect2'; function QPlainTextEdit_overwriteMode(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_overwriteMode'; procedure QPlainTextEdit_setOverwriteMode(handle: QPlainTextEditH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setOverwriteMode'; function QPlainTextEdit_tabStopWidth(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_tabStopWidth'; procedure QPlainTextEdit_setTabStopWidth(handle: QPlainTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTabStopWidth'; function QPlainTextEdit_cursorWidth(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorWidth'; procedure QPlainTextEdit_setCursorWidth(handle: QPlainTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCursorWidth'; procedure QPlainTextEdit_moveCursor(handle: QPlainTextEditH; operation: QTextCursorMoveOperation; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QPlainTextEdit_moveCursor'; function QPlainTextEdit_canPaste(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_canPaste'; procedure QPlainTextEdit_print(handle: QPlainTextEditH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QPlainTextEdit_print'; function QPlainTextEdit_blockCount(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_blockCount'; procedure QPlainTextEdit_setPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_setPlainText'; procedure QPlainTextEdit_cut(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_cut'; procedure QPlainTextEdit_copy(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_copy'; procedure QPlainTextEdit_paste(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_paste'; procedure QPlainTextEdit_undo(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_undo'; procedure QPlainTextEdit_redo(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_redo'; procedure QPlainTextEdit_clear(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_clear'; procedure QPlainTextEdit_selectAll(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_selectAll'; procedure QPlainTextEdit_insertPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_insertPlainText'; procedure QPlainTextEdit_appendPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_appendPlainText'; procedure QPlainTextEdit_appendHtml(handle: QPlainTextEditH; html: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_appendHtml'; procedure QPlainTextEdit_centerCursor(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_centerCursor'; function QPlainTextDocumentLayout_create(document: QTextDocumentH): QPlainTextDocumentLayoutH; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_create'; procedure QPlainTextDocumentLayout_destroy(handle: QPlainTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_destroy'; function QPlainTextDocumentLayout_hitTest(handle: QPlainTextDocumentLayoutH; AnonParam1: PQtPointF; AnonParam2: QtHitTestAccuracy): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hitTest'; function QPlainTextDocumentLayout_pageCount(handle: QPlainTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_pageCount'; procedure QPlainTextDocumentLayout_documentSize(handle: QPlainTextDocumentLayoutH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_documentSize'; procedure QPlainTextDocumentLayout_frameBoundingRect(handle: QPlainTextDocumentLayoutH; retval: QRectFH; AnonParam1: QTextFrameH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_frameBoundingRect'; procedure QPlainTextDocumentLayout_blockBoundingRect(handle: QPlainTextDocumentLayoutH; retval: QRectFH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_blockBoundingRect'; procedure QPlainTextDocumentLayout_ensureBlockLayout(handle: QPlainTextDocumentLayoutH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_ensureBlockLayout'; procedure QPlainTextDocumentLayout_setCursorWidth(handle: QPlainTextDocumentLayoutH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_setCursorWidth'; function QPlainTextDocumentLayout_cursorWidth(handle: QPlainTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_cursorWidth'; procedure QPlainTextDocumentLayout_requestUpdate(handle: QPlainTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_requestUpdate'; type QPlainTextEdit_textChanged_Event = procedure () of object cdecl; QPlainTextEdit_undoAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_redoAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_copyAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_selectionChanged_Event = procedure () of object cdecl; QPlainTextEdit_cursorPositionChanged_Event = procedure () of object cdecl; QPlainTextEdit_updateRequest_Event = procedure (rect: PRect; dy: Integer) of object cdecl; QPlainTextEdit_blockCountChanged_Event = procedure (newBlockCount: Integer) of object cdecl; QPlainTextEdit_modificationChanged_Event = procedure (AnonParam1: Boolean) of object cdecl; type QTextEditLineWrapMode = ( // QTextEdit::LineWrapMode (1) QTextEditNoWrap, QTextEditWidgetWidth, QTextEditFixedPixelWidth, QTextEditFixedColumnWidth ); type QTextEditAutoFormattingFlag = cardinal; // QTextEdit::AutoFormattingFlag QTextEditAutoFormatting = QTextEditAutoFormattingFlag; //QFlags<> (3) const QTextEditAutoNone = 0; QTextEditAutoBulletList = $00000001; QTextEditAutoAll = $ffffffff; function QTextEdit_create(parent: QWidgetH = nil): QTextEditH; cdecl; external Qt4PasLib name 'QTextEdit_create'; procedure QTextEdit_destroy(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_destroy'; function QTextEdit_create(text: PWideString; parent: QWidgetH = nil): QTextEditH; cdecl; external Qt4PasLib name 'QTextEdit_create2'; procedure QTextEdit_setDocument(handle: QTextEditH; document: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextEdit_setDocument'; function QTextEdit_document(handle: QTextEditH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextEdit_document'; procedure QTextEdit_setTextCursor(handle: QTextEditH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_setTextCursor'; procedure QTextEdit_textCursor(handle: QTextEditH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_textCursor'; function QTextEdit_isReadOnly(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_isReadOnly'; procedure QTextEdit_setReadOnly(handle: QTextEditH; ro: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setReadOnly'; procedure QTextEdit_setTextInteractionFlags(handle: QTextEditH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QTextEdit_setTextInteractionFlags'; function QTextEdit_textInteractionFlags(handle: QTextEditH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QTextEdit_textInteractionFlags'; function QTextEdit_fontPointSize(handle: QTextEditH): qreal; cdecl; external Qt4PasLib name 'QTextEdit_fontPointSize'; procedure QTextEdit_fontFamily(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_fontFamily'; function QTextEdit_fontWeight(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_fontWeight'; function QTextEdit_fontUnderline(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_fontUnderline'; function QTextEdit_fontItalic(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_fontItalic'; procedure QTextEdit_textColor(handle: QTextEditH; retval: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_textColor'; procedure QTextEdit_textBackgroundColor(handle: QTextEditH; retval: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_textBackgroundColor'; procedure QTextEdit_currentFont(handle: QTextEditH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextEdit_currentFont'; function QTextEdit_alignment(handle: QTextEditH): QtAlignment; cdecl; external Qt4PasLib name 'QTextEdit_alignment'; procedure QTextEdit_mergeCurrentCharFormat(handle: QTextEditH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_mergeCurrentCharFormat'; procedure QTextEdit_setCurrentCharFormat(handle: QTextEditH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_setCurrentCharFormat'; procedure QTextEdit_currentCharFormat(handle: QTextEditH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_currentCharFormat'; function QTextEdit_autoFormatting(handle: QTextEditH): QTextEditAutoFormatting; cdecl; external Qt4PasLib name 'QTextEdit_autoFormatting'; procedure QTextEdit_setAutoFormatting(handle: QTextEditH; features: QTextEditAutoFormatting); cdecl; external Qt4PasLib name 'QTextEdit_setAutoFormatting'; function QTextEdit_tabChangesFocus(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_tabChangesFocus'; procedure QTextEdit_setTabChangesFocus(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setTabChangesFocus'; procedure QTextEdit_setDocumentTitle(handle: QTextEditH; title: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setDocumentTitle'; procedure QTextEdit_documentTitle(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_documentTitle'; function QTextEdit_isUndoRedoEnabled(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_isUndoRedoEnabled'; procedure QTextEdit_setUndoRedoEnabled(handle: QTextEditH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setUndoRedoEnabled'; function QTextEdit_lineWrapMode(handle: QTextEditH): QTextEditLineWrapMode; cdecl; external Qt4PasLib name 'QTextEdit_lineWrapMode'; procedure QTextEdit_setLineWrapMode(handle: QTextEditH; mode: QTextEditLineWrapMode); cdecl; external Qt4PasLib name 'QTextEdit_setLineWrapMode'; function QTextEdit_lineWrapColumnOrWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_lineWrapColumnOrWidth'; procedure QTextEdit_setLineWrapColumnOrWidth(handle: QTextEditH; w: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setLineWrapColumnOrWidth'; function QTextEdit_wordWrapMode(handle: QTextEditH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QTextEdit_wordWrapMode'; procedure QTextEdit_setWordWrapMode(handle: QTextEditH; policy: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QTextEdit_setWordWrapMode'; function QTextEdit_find(handle: QTextEditH; exp: PWideString; options: QTextDocumentFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_find'; procedure QTextEdit_toPlainText(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_toPlainText'; procedure QTextEdit_toHtml(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_toHtml'; procedure QTextEdit_ensureCursorVisible(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_ensureCursorVisible'; procedure QTextEdit_loadResource(handle: QTextEditH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextEdit_loadResource'; function QTextEdit_createStandardContextMenu(handle: QTextEditH): QMenuH; cdecl; external Qt4PasLib name 'QTextEdit_createStandardContextMenu'; function QTextEdit_createStandardContextMenu(handle: QTextEditH; position: PQtPoint): QMenuH; cdecl; external Qt4PasLib name 'QTextEdit_createStandardContextMenu2'; procedure QTextEdit_cursorForPosition(handle: QTextEditH; retval: QTextCursorH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QTextEdit_cursorForPosition'; procedure QTextEdit_cursorRect(handle: QTextEditH; retval: PRect; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_cursorRect'; procedure QTextEdit_cursorRect(handle: QTextEditH; retval: PRect); cdecl; external Qt4PasLib name 'QTextEdit_cursorRect2'; procedure QTextEdit_anchorAt(handle: QTextEditH; retval: PWideString; pos: PQtPoint); cdecl; external Qt4PasLib name 'QTextEdit_anchorAt'; function QTextEdit_overwriteMode(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_overwriteMode'; procedure QTextEdit_setOverwriteMode(handle: QTextEditH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setOverwriteMode'; function QTextEdit_tabStopWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_tabStopWidth'; procedure QTextEdit_setTabStopWidth(handle: QTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setTabStopWidth'; function QTextEdit_cursorWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_cursorWidth'; procedure QTextEdit_setCursorWidth(handle: QTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setCursorWidth'; function QTextEdit_acceptRichText(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_acceptRichText'; procedure QTextEdit_setAcceptRichText(handle: QTextEditH; accept: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setAcceptRichText'; procedure QTextEdit_moveCursor(handle: QTextEditH; operation: QTextCursorMoveOperation; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QTextEdit_moveCursor'; function QTextEdit_canPaste(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_canPaste'; procedure QTextEdit_print(handle: QTextEditH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QTextEdit_print'; procedure QTextEdit_setFontPointSize(handle: QTextEditH; s: qreal); cdecl; external Qt4PasLib name 'QTextEdit_setFontPointSize'; procedure QTextEdit_setFontFamily(handle: QTextEditH; fontFamily: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setFontFamily'; procedure QTextEdit_setFontWeight(handle: QTextEditH; w: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setFontWeight'; procedure QTextEdit_setFontUnderline(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setFontUnderline'; procedure QTextEdit_setFontItalic(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setFontItalic'; procedure QTextEdit_setTextColor(handle: QTextEditH; c: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_setTextColor'; procedure QTextEdit_setTextBackgroundColor(handle: QTextEditH; c: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_setTextBackgroundColor'; procedure QTextEdit_setCurrentFont(handle: QTextEditH; f: QFontH); cdecl; external Qt4PasLib name 'QTextEdit_setCurrentFont'; procedure QTextEdit_setAlignment(handle: QTextEditH; a: QtAlignment); cdecl; external Qt4PasLib name 'QTextEdit_setAlignment'; procedure QTextEdit_setPlainText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setPlainText'; procedure QTextEdit_setHtml(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setHtml'; procedure QTextEdit_setText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setText'; procedure QTextEdit_cut(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_cut'; procedure QTextEdit_copy(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_copy'; procedure QTextEdit_paste(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_paste'; procedure QTextEdit_undo(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_undo'; procedure QTextEdit_redo(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_redo'; procedure QTextEdit_clear(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_clear'; procedure QTextEdit_selectAll(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_selectAll'; procedure QTextEdit_insertPlainText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_insertPlainText'; procedure QTextEdit_insertHtml(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_insertHtml'; procedure QTextEdit_append(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_append'; procedure QTextEdit_scrollToAnchor(handle: QTextEditH; name: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_scrollToAnchor'; procedure QTextEdit_zoomIn(handle: QTextEditH; range: Integer = 1); cdecl; external Qt4PasLib name 'QTextEdit_zoomIn'; procedure QTextEdit_zoomOut(handle: QTextEditH; range: Integer = 1); cdecl; external Qt4PasLib name 'QTextEdit_zoomOut'; type QTextEdit_textChanged_Event = procedure () of object cdecl; QTextEdit_undoAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_redoAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_currentCharFormatChanged_Event = procedure (format: QTextCharFormatH) of object cdecl; QTextEdit_copyAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_selectionChanged_Event = procedure () of object cdecl; QTextEdit_cursorPositionChanged_Event = procedure () of object cdecl; type QTabWidgetTabPosition = ( // QTabWidget::TabPosition (1) QTabWidgetNorth, QTabWidgetSouth, QTabWidgetWest, QTabWidgetEast ); QTabWidgetTabShape = ( // QTabWidget::TabShape (1) QTabWidgetRounded, QTabWidgetTriangular ); function QTabWidget_create(parent: QWidgetH = nil): QTabWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_create'; procedure QTabWidget_destroy(handle: QTabWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_destroy'; function QTabWidget_addTab(handle: QTabWidgetH; widget: QWidgetH; AnonParam2: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_addTab'; function QTabWidget_addTab(handle: QTabWidgetH; widget: QWidgetH; icon: QIconH; _label: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_addTab2'; function QTabWidget_insertTab(handle: QTabWidgetH; index: Integer; widget: QWidgetH; AnonParam3: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_insertTab'; function QTabWidget_insertTab(handle: QTabWidgetH; index: Integer; widget: QWidgetH; icon: QIconH; _label: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_insertTab2'; procedure QTabWidget_removeTab(handle: QTabWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_removeTab'; function QTabWidget_isTabEnabled(handle: QTabWidgetH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_isTabEnabled'; procedure QTabWidget_setTabEnabled(handle: QTabWidgetH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setTabEnabled'; procedure QTabWidget_tabText(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabText'; procedure QTabWidget_setTabText(handle: QTabWidgetH; index: Integer; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabText'; procedure QTabWidget_tabIcon(handle: QTabWidgetH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabIcon'; procedure QTabWidget_setTabIcon(handle: QTabWidgetH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTabWidget_setTabIcon'; procedure QTabWidget_setTabToolTip(handle: QTabWidgetH; index: Integer; tip: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabToolTip'; procedure QTabWidget_tabToolTip(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabToolTip'; procedure QTabWidget_setTabWhatsThis(handle: QTabWidgetH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabWhatsThis'; procedure QTabWidget_tabWhatsThis(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabWhatsThis'; function QTabWidget_currentIndex(handle: QTabWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_currentIndex'; function QTabWidget_currentWidget(handle: QTabWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_currentWidget'; function QTabWidget_widget(handle: QTabWidgetH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_widget'; function QTabWidget_indexOf(handle: QTabWidgetH; widget: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_indexOf'; function QTabWidget_count(handle: QTabWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_count'; function QTabWidget_tabPosition(handle: QTabWidgetH): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QTabWidget_tabPosition'; procedure QTabWidget_setTabPosition(handle: QTabWidgetH; AnonParam1: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QTabWidget_setTabPosition'; function QTabWidget_tabsClosable(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_tabsClosable'; procedure QTabWidget_setTabsClosable(handle: QTabWidgetH; closeable: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setTabsClosable'; function QTabWidget_isMovable(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_isMovable'; procedure QTabWidget_setMovable(handle: QTabWidgetH; movable: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setMovable'; function QTabWidget_tabShape(handle: QTabWidgetH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QTabWidget_tabShape'; procedure QTabWidget_setTabShape(handle: QTabWidgetH; s: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QTabWidget_setTabShape'; procedure QTabWidget_sizeHint(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_sizeHint'; procedure QTabWidget_minimumSizeHint(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_minimumSizeHint'; procedure QTabWidget_setCornerWidget(handle: QTabWidgetH; w: QWidgetH; corner: QtCorner = QtTopRightCorner); cdecl; external Qt4PasLib name 'QTabWidget_setCornerWidget'; function QTabWidget_cornerWidget(handle: QTabWidgetH; corner: QtCorner = QtTopRightCorner): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_cornerWidget'; function QTabWidget_elideMode(handle: QTabWidgetH): QtTextElideMode; cdecl; external Qt4PasLib name 'QTabWidget_elideMode'; procedure QTabWidget_setElideMode(handle: QTabWidgetH; AnonParam1: QtTextElideMode); cdecl; external Qt4PasLib name 'QTabWidget_setElideMode'; procedure QTabWidget_iconSize(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_iconSize'; procedure QTabWidget_setIconSize(handle: QTabWidgetH; size: PSize); cdecl; external Qt4PasLib name 'QTabWidget_setIconSize'; function QTabWidget_usesScrollButtons(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_usesScrollButtons'; procedure QTabWidget_setUsesScrollButtons(handle: QTabWidgetH; useButtons: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setUsesScrollButtons'; function QTabWidget_documentMode(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_documentMode'; procedure QTabWidget_setDocumentMode(handle: QTabWidgetH; _set: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setDocumentMode'; procedure QTabWidget_clear(handle: QTabWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_clear'; procedure QTabWidget_setCurrentIndex(handle: QTabWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_setCurrentIndex'; procedure QTabWidget_setCurrentWidget(handle: QTabWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_setCurrentWidget'; type QTabWidget_currentChanged_Event = procedure (index: Integer) of object cdecl; QTabWidget_tabCloseRequested_Event = procedure (index: Integer) of object cdecl; function QLCLTabWidget_tabBarHandle(protectedhandle: QTabWidgetH): QTabBarH; cdecl; external Qt4PasLib name 'QLCLTabWidget_tabBarHandle'; type QMainWindowDockOption = cardinal; // QMainWindow::DockOption QMainWindowDockOptions = QMainWindowDockOption; //QFlags<> (3) const QMainWindowAnimatedDocks = $01; QMainWindowAllowNestedDocks = $02; QMainWindowAllowTabbedDocks = $04; QMainWindowForceTabbedDocks = $08; QMainWindowVerticalTabs = $10; function QMainWindow_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QMainWindowH; cdecl; external Qt4PasLib name 'QMainWindow_create'; procedure QMainWindow_destroy(handle: QMainWindowH); cdecl; external Qt4PasLib name 'QMainWindow_destroy'; procedure QMainWindow_iconSize(handle: QMainWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMainWindow_iconSize'; procedure QMainWindow_setIconSize(handle: QMainWindowH; iconSize: PSize); cdecl; external Qt4PasLib name 'QMainWindow_setIconSize'; function QMainWindow_toolButtonStyle(handle: QMainWindowH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QMainWindow_toolButtonStyle'; procedure QMainWindow_setToolButtonStyle(handle: QMainWindowH; toolButtonStyle: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QMainWindow_setToolButtonStyle'; function QMainWindow_isAnimated(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isAnimated'; function QMainWindow_isDockNestingEnabled(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isDockNestingEnabled'; function QMainWindow_documentMode(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_documentMode'; procedure QMainWindow_setDocumentMode(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setDocumentMode'; function QMainWindow_tabShape(handle: QMainWindowH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QMainWindow_tabShape'; procedure QMainWindow_setTabShape(handle: QMainWindowH; tabShape: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QMainWindow_setTabShape'; function QMainWindow_tabPosition(handle: QMainWindowH; area: QtDockWidgetArea): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QMainWindow_tabPosition'; procedure QMainWindow_setTabPosition(handle: QMainWindowH; areas: QtDockWidgetAreas; tabPosition: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QMainWindow_setTabPosition'; procedure QMainWindow_setDockOptions(handle: QMainWindowH; options: QMainWindowDockOptions); cdecl; external Qt4PasLib name 'QMainWindow_setDockOptions'; function QMainWindow_dockOptions(handle: QMainWindowH): QMainWindowDockOptions; cdecl; external Qt4PasLib name 'QMainWindow_dockOptions'; function QMainWindow_isSeparator(handle: QMainWindowH; pos: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isSeparator'; function QMainWindow_menuBar(handle: QMainWindowH): QMenuBarH; cdecl; external Qt4PasLib name 'QMainWindow_menuBar'; procedure QMainWindow_setMenuBar(handle: QMainWindowH; menubar: QMenuBarH); cdecl; external Qt4PasLib name 'QMainWindow_setMenuBar'; function QMainWindow_menuWidget(handle: QMainWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMainWindow_menuWidget'; procedure QMainWindow_setMenuWidget(handle: QMainWindowH; menubar: QWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_setMenuWidget'; function QMainWindow_statusBar(handle: QMainWindowH): QStatusBarH; cdecl; external Qt4PasLib name 'QMainWindow_statusBar'; procedure QMainWindow_setStatusBar(handle: QMainWindowH; statusbar: QStatusBarH); cdecl; external Qt4PasLib name 'QMainWindow_setStatusBar'; function QMainWindow_centralWidget(handle: QMainWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMainWindow_centralWidget'; procedure QMainWindow_setCentralWidget(handle: QMainWindowH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_setCentralWidget'; procedure QMainWindow_setCorner(handle: QMainWindowH; corner: QtCorner; area: QtDockWidgetArea); cdecl; external Qt4PasLib name 'QMainWindow_setCorner'; function QMainWindow_corner(handle: QMainWindowH; corner: QtCorner): QtDockWidgetArea; cdecl; external Qt4PasLib name 'QMainWindow_corner'; procedure QMainWindow_addToolBarBreak(handle: QMainWindowH; area: QtToolBarArea = QtTopToolBarArea); cdecl; external Qt4PasLib name 'QMainWindow_addToolBarBreak'; procedure QMainWindow_insertToolBarBreak(handle: QMainWindowH; before: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_insertToolBarBreak'; procedure QMainWindow_addToolBar(handle: QMainWindowH; area: QtToolBarArea; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_addToolBar'; procedure QMainWindow_addToolBar(handle: QMainWindowH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_addToolBar2'; function QMainWindow_addToolBar(handle: QMainWindowH; title: PWideString): QToolBarH; cdecl; external Qt4PasLib name 'QMainWindow_addToolBar3'; procedure QMainWindow_insertToolBar(handle: QMainWindowH; before: QToolBarH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_insertToolBar'; procedure QMainWindow_removeToolBar(handle: QMainWindowH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_removeToolBar'; procedure QMainWindow_removeToolBarBreak(handle: QMainWindowH; before: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_removeToolBarBreak'; procedure QMainWindow_setUnifiedTitleAndToolBarOnMac(handle: QMainWindowH; _set: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setUnifiedTitleAndToolBarOnMac'; function QMainWindow_unifiedTitleAndToolBarOnMac(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_unifiedTitleAndToolBarOnMac'; function QMainWindow_toolBarArea(handle: QMainWindowH; toolbar: QToolBarH): QtToolBarArea; cdecl; external Qt4PasLib name 'QMainWindow_toolBarArea'; function QMainWindow_toolBarBreak(handle: QMainWindowH; toolbar: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_toolBarBreak'; procedure QMainWindow_addDockWidget(handle: QMainWindowH; area: QtDockWidgetArea; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_addDockWidget'; procedure QMainWindow_addDockWidget(handle: QMainWindowH; area: QtDockWidgetArea; dockwidget: QDockWidgetH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QMainWindow_addDockWidget2'; procedure QMainWindow_splitDockWidget(handle: QMainWindowH; after: QDockWidgetH; dockwidget: QDockWidgetH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QMainWindow_splitDockWidget'; procedure QMainWindow_tabifyDockWidget(handle: QMainWindowH; first: QDockWidgetH; second: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_tabifyDockWidget'; procedure QMainWindow_tabifiedDockWidgets(handle: QMainWindowH; retval: PPtrIntArray; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_tabifiedDockWidgets'; procedure QMainWindow_removeDockWidget(handle: QMainWindowH; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_removeDockWidget'; function QMainWindow_restoreDockWidget(handle: QMainWindowH; dockwidget: QDockWidgetH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_restoreDockWidget'; function QMainWindow_dockWidgetArea(handle: QMainWindowH; dockwidget: QDockWidgetH): QtDockWidgetArea; cdecl; external Qt4PasLib name 'QMainWindow_dockWidgetArea'; procedure QMainWindow_saveState(handle: QMainWindowH; retval: QByteArrayH; version: Integer = 0); cdecl; external Qt4PasLib name 'QMainWindow_saveState'; function QMainWindow_restoreState(handle: QMainWindowH; state: QByteArrayH; version: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_restoreState'; function QMainWindow_createPopupMenu(handle: QMainWindowH): QMenuH; cdecl; external Qt4PasLib name 'QMainWindow_createPopupMenu'; procedure QMainWindow_setAnimated(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setAnimated'; procedure QMainWindow_setDockNestingEnabled(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setDockNestingEnabled'; type QMainWindow_iconSizeChanged_Event = procedure (iconSize: PSize) of object cdecl; QMainWindow_toolButtonStyleChanged_Event = procedure (toolButtonStyle: QtToolButtonStyle) of object cdecl; function QToolBar_create(title: PWideString; parent: QWidgetH = nil): QToolBarH; cdecl; external Qt4PasLib name 'QToolBar_create'; procedure QToolBar_destroy(handle: QToolBarH); cdecl; external Qt4PasLib name 'QToolBar_destroy'; function QToolBar_create(parent: QWidgetH = nil): QToolBarH; cdecl; external Qt4PasLib name 'QToolBar_create2'; procedure QToolBar_setMovable(handle: QToolBarH; movable: Boolean); cdecl; external Qt4PasLib name 'QToolBar_setMovable'; function QToolBar_isMovable(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isMovable'; procedure QToolBar_setAllowedAreas(handle: QToolBarH; areas: QtToolBarAreas); cdecl; external Qt4PasLib name 'QToolBar_setAllowedAreas'; function QToolBar_allowedAreas(handle: QToolBarH): QtToolBarAreas; cdecl; external Qt4PasLib name 'QToolBar_allowedAreas'; function QToolBar_isAreaAllowed(handle: QToolBarH; area: QtToolBarArea): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isAreaAllowed'; procedure QToolBar_setOrientation(handle: QToolBarH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QToolBar_setOrientation'; function QToolBar_orientation(handle: QToolBarH): QtOrientation; cdecl; external Qt4PasLib name 'QToolBar_orientation'; procedure QToolBar_clear(handle: QToolBarH); cdecl; external Qt4PasLib name 'QToolBar_clear'; function QToolBar_addAction(handle: QToolBarH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction'; function QToolBar_addAction(handle: QToolBarH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction2'; function QToolBar_addAction(handle: QToolBarH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction3'; function QToolBar_addAction(handle: QToolBarH; icon: QIconH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction4'; function QToolBar_addSeparator(handle: QToolBarH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addSeparator'; function QToolBar_insertSeparator(handle: QToolBarH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_insertSeparator'; function QToolBar_addWidget(handle: QToolBarH; widget: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addWidget'; function QToolBar_insertWidget(handle: QToolBarH; before: QActionH; widget: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_insertWidget'; procedure QToolBar_actionGeometry(handle: QToolBarH; retval: PRect; action: QActionH); cdecl; external Qt4PasLib name 'QToolBar_actionGeometry'; function QToolBar_actionAt(handle: QToolBarH; p: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QToolBar_actionAt'; function QToolBar_actionAt(handle: QToolBarH; x: Integer; y: Integer): QActionH; cdecl; external Qt4PasLib name 'QToolBar_actionAt2'; function QToolBar_toggleViewAction(handle: QToolBarH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_toggleViewAction'; procedure QToolBar_iconSize(handle: QToolBarH; retval: PSize); cdecl; external Qt4PasLib name 'QToolBar_iconSize'; function QToolBar_toolButtonStyle(handle: QToolBarH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QToolBar_toolButtonStyle'; function QToolBar_widgetForAction(handle: QToolBarH; action: QActionH): QWidgetH; cdecl; external Qt4PasLib name 'QToolBar_widgetForAction'; function QToolBar_isFloatable(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isFloatable'; procedure QToolBar_setFloatable(handle: QToolBarH; floatable: Boolean); cdecl; external Qt4PasLib name 'QToolBar_setFloatable'; function QToolBar_isFloating(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isFloating'; procedure QToolBar_setIconSize(handle: QToolBarH; iconSize: PSize); cdecl; external Qt4PasLib name 'QToolBar_setIconSize'; procedure QToolBar_setToolButtonStyle(handle: QToolBarH; toolButtonStyle: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QToolBar_setToolButtonStyle'; type QToolBar_actionTriggered_Event = procedure (action: QActionH) of object cdecl; QToolBar_movableChanged_Event = procedure (movable: Boolean) of object cdecl; QToolBar_allowedAreasChanged_Event = procedure (allowedAreas: QtToolBarAreas) of object cdecl; QToolBar_orientationChanged_Event = procedure (orientation: QtOrientation) of object cdecl; QToolBar_iconSizeChanged_Event = procedure (iconSize: PSize) of object cdecl; QToolBar_toolButtonStyleChanged_Event = procedure (toolButtonStyle: QtToolButtonStyle) of object cdecl; function QSizeGrip_create(parent: QWidgetH): QSizeGripH; cdecl; external Qt4PasLib name 'QSizeGrip_create'; procedure QSizeGrip_destroy(handle: QSizeGripH); cdecl; external Qt4PasLib name 'QSizeGrip_destroy'; procedure QSizeGrip_sizeHint(handle: QSizeGripH; retval: PSize); cdecl; external Qt4PasLib name 'QSizeGrip_sizeHint'; procedure QSizeGrip_setVisible(handle: QSizeGripH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSizeGrip_setVisible'; type QLCDNumberMode = ( // QLCDNumber::Mode (1) QLCDNumberHex, QLCDNumberDec, QLCDNumberOct, QLCDNumberBin ); QLCDNumberSegmentStyle = ( // QLCDNumber::SegmentStyle (1) QLCDNumberOutline, QLCDNumberFilled, QLCDNumberFlat ); function QLCDNumber_create(parent: QWidgetH = nil): QLCDNumberH; cdecl; external Qt4PasLib name 'QLCDNumber_create'; procedure QLCDNumber_destroy(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_destroy'; function QLCDNumber_create(numDigits: LongWord; parent: QWidgetH = nil): QLCDNumberH; cdecl; external Qt4PasLib name 'QLCDNumber_create2'; function QLCDNumber_smallDecimalPoint(handle: QLCDNumberH): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_smallDecimalPoint'; function QLCDNumber_numDigits(handle: QLCDNumberH): Integer; cdecl; external Qt4PasLib name 'QLCDNumber_numDigits'; procedure QLCDNumber_setNumDigits(handle: QLCDNumberH; nDigits: Integer); cdecl; external Qt4PasLib name 'QLCDNumber_setNumDigits'; function QLCDNumber_checkOverflow(handle: QLCDNumberH; num: Double): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_checkOverflow'; function QLCDNumber_checkOverflow(handle: QLCDNumberH; num: Integer): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_checkOverflow2'; function QLCDNumber_mode(handle: QLCDNumberH): QLCDNumberMode; cdecl; external Qt4PasLib name 'QLCDNumber_mode'; procedure QLCDNumber_setMode(handle: QLCDNumberH; AnonParam1: QLCDNumberMode); cdecl; external Qt4PasLib name 'QLCDNumber_setMode'; function QLCDNumber_segmentStyle(handle: QLCDNumberH): QLCDNumberSegmentStyle; cdecl; external Qt4PasLib name 'QLCDNumber_segmentStyle'; procedure QLCDNumber_setSegmentStyle(handle: QLCDNumberH; AnonParam1: QLCDNumberSegmentStyle); cdecl; external Qt4PasLib name 'QLCDNumber_setSegmentStyle'; function QLCDNumber_value(handle: QLCDNumberH): Double; cdecl; external Qt4PasLib name 'QLCDNumber_value'; function QLCDNumber_intValue(handle: QLCDNumberH): Integer; cdecl; external Qt4PasLib name 'QLCDNumber_intValue'; procedure QLCDNumber_sizeHint(handle: QLCDNumberH; retval: PSize); cdecl; external Qt4PasLib name 'QLCDNumber_sizeHint'; procedure QLCDNumber_display(handle: QLCDNumberH; str: PWideString); cdecl; external Qt4PasLib name 'QLCDNumber_display'; procedure QLCDNumber_display(handle: QLCDNumberH; num: Integer); cdecl; external Qt4PasLib name 'QLCDNumber_display2'; procedure QLCDNumber_display(handle: QLCDNumberH; num: Double); cdecl; external Qt4PasLib name 'QLCDNumber_display3'; procedure QLCDNumber_setHexMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setHexMode'; procedure QLCDNumber_setDecMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setDecMode'; procedure QLCDNumber_setOctMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setOctMode'; procedure QLCDNumber_setBinMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setBinMode'; procedure QLCDNumber_setSmallDecimalPoint(handle: QLCDNumberH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLCDNumber_setSmallDecimalPoint'; type QLCDNumber_overflow_Event = procedure () of object cdecl; type QAbstractSpinBoxButtonSymbols = ( // QAbstractSpinBox::ButtonSymbols (1) QAbstractSpinBoxUpDownArrows, QAbstractSpinBoxPlusMinus, QAbstractSpinBoxNoButtons ); QAbstractSpinBoxCorrectionMode = ( // QAbstractSpinBox::CorrectionMode (1) QAbstractSpinBoxCorrectToPreviousValue, QAbstractSpinBoxCorrectToNearestValue ); type QAbstractSpinBoxStepEnabledFlag = cardinal; // QAbstractSpinBox::StepEnabledFlag QAbstractSpinBoxStepEnabled = QAbstractSpinBoxStepEnabledFlag; //QFlags<> (3) const QAbstractSpinBoxStepNone = $00; QAbstractSpinBoxStepUpEnabled = $01; QAbstractSpinBoxStepDownEnabled = $02; function QAbstractSpinBox_create(parent: QWidgetH = nil): QAbstractSpinBoxH; cdecl; external Qt4PasLib name 'QAbstractSpinBox_create'; procedure QAbstractSpinBox_destroy(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_destroy'; function QAbstractSpinBox_buttonSymbols(handle: QAbstractSpinBoxH): QAbstractSpinBoxButtonSymbols; cdecl; external Qt4PasLib name 'QAbstractSpinBox_buttonSymbols'; procedure QAbstractSpinBox_setButtonSymbols(handle: QAbstractSpinBoxH; bs: QAbstractSpinBoxButtonSymbols); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setButtonSymbols'; procedure QAbstractSpinBox_setCorrectionMode(handle: QAbstractSpinBoxH; cm: QAbstractSpinBoxCorrectionMode); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setCorrectionMode'; function QAbstractSpinBox_correctionMode(handle: QAbstractSpinBoxH): QAbstractSpinBoxCorrectionMode; cdecl; external Qt4PasLib name 'QAbstractSpinBox_correctionMode'; function QAbstractSpinBox_hasAcceptableInput(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hasAcceptableInput'; procedure QAbstractSpinBox_text(handle: QAbstractSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_text'; procedure QAbstractSpinBox_specialValueText(handle: QAbstractSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_specialValueText'; procedure QAbstractSpinBox_setSpecialValueText(handle: QAbstractSpinBoxH; txt: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setSpecialValueText'; function QAbstractSpinBox_wrapping(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_wrapping'; procedure QAbstractSpinBox_setWrapping(handle: QAbstractSpinBoxH; w: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setWrapping'; procedure QAbstractSpinBox_setReadOnly(handle: QAbstractSpinBoxH; r: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setReadOnly'; function QAbstractSpinBox_isReadOnly(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_isReadOnly'; procedure QAbstractSpinBox_setKeyboardTracking(handle: QAbstractSpinBoxH; kt: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setKeyboardTracking'; function QAbstractSpinBox_keyboardTracking(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_keyboardTracking'; procedure QAbstractSpinBox_setAlignment(handle: QAbstractSpinBoxH; flag: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setAlignment'; function QAbstractSpinBox_alignment(handle: QAbstractSpinBoxH): QtAlignment; cdecl; external Qt4PasLib name 'QAbstractSpinBox_alignment'; procedure QAbstractSpinBox_setFrame(handle: QAbstractSpinBoxH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setFrame'; function QAbstractSpinBox_hasFrame(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hasFrame'; procedure QAbstractSpinBox_setAccelerated(handle: QAbstractSpinBoxH; _on: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setAccelerated'; function QAbstractSpinBox_isAccelerated(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_isAccelerated'; procedure QAbstractSpinBox_sizeHint(handle: QAbstractSpinBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractSpinBox_sizeHint'; procedure QAbstractSpinBox_minimumSizeHint(handle: QAbstractSpinBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractSpinBox_minimumSizeHint'; procedure QAbstractSpinBox_interpretText(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_interpretText'; function QAbstractSpinBox_event(handle: QAbstractSpinBoxH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_event'; function QAbstractSpinBox_validate(handle: QAbstractSpinBoxH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QAbstractSpinBox_validate'; procedure QAbstractSpinBox_fixup(handle: QAbstractSpinBoxH; input: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_fixup'; procedure QAbstractSpinBox_stepBy(handle: QAbstractSpinBoxH; steps: Integer); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepBy'; procedure QAbstractSpinBox_stepUp(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepUp'; procedure QAbstractSpinBox_stepDown(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepDown'; procedure QAbstractSpinBox_selectAll(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_selectAll'; procedure QAbstractSpinBox_clear(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_clear'; type QAbstractSpinBox_editingFinished_Event = procedure () of object cdecl; function QLCLAbstractSpinBox_lineEditHandle(protectedhandle: QAbstractSpinBoxH): QLineEditH; cdecl; external Qt4PasLib name 'QLCLAbstractSpinBox_lineEditHandle'; function QSpinBox_create(parent: QWidgetH = nil): QSpinBoxH; cdecl; external Qt4PasLib name 'QSpinBox_create'; procedure QSpinBox_destroy(handle: QSpinBoxH); cdecl; external Qt4PasLib name 'QSpinBox_destroy'; function QSpinBox_value(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_value'; procedure QSpinBox_prefix(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_prefix'; procedure QSpinBox_setPrefix(handle: QSpinBoxH; prefix: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_setPrefix'; procedure QSpinBox_suffix(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_suffix'; procedure QSpinBox_setSuffix(handle: QSpinBoxH; suffix: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_setSuffix'; procedure QSpinBox_cleanText(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_cleanText'; function QSpinBox_singleStep(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_singleStep'; procedure QSpinBox_setSingleStep(handle: QSpinBoxH; val: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setSingleStep'; function QSpinBox_minimum(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_minimum'; procedure QSpinBox_setMinimum(handle: QSpinBoxH; min: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setMinimum'; function QSpinBox_maximum(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_maximum'; procedure QSpinBox_setMaximum(handle: QSpinBoxH; max: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setMaximum'; procedure QSpinBox_setRange(handle: QSpinBoxH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setRange'; procedure QSpinBox_setValue(handle: QSpinBoxH; val: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setValue'; function QDoubleSpinBox_create(parent: QWidgetH = nil): QDoubleSpinBoxH; cdecl; external Qt4PasLib name 'QDoubleSpinBox_create'; procedure QDoubleSpinBox_destroy(handle: QDoubleSpinBoxH); cdecl; external Qt4PasLib name 'QDoubleSpinBox_destroy'; function QDoubleSpinBox_value(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_value'; procedure QDoubleSpinBox_prefix(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_prefix'; procedure QDoubleSpinBox_setPrefix(handle: QDoubleSpinBoxH; prefix: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setPrefix'; procedure QDoubleSpinBox_suffix(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_suffix'; procedure QDoubleSpinBox_setSuffix(handle: QDoubleSpinBoxH; suffix: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setSuffix'; procedure QDoubleSpinBox_cleanText(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_cleanText'; function QDoubleSpinBox_singleStep(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_singleStep'; procedure QDoubleSpinBox_setSingleStep(handle: QDoubleSpinBoxH; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setSingleStep'; function QDoubleSpinBox_minimum(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_minimum'; procedure QDoubleSpinBox_setMinimum(handle: QDoubleSpinBoxH; min: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setMinimum'; function QDoubleSpinBox_maximum(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_maximum'; procedure QDoubleSpinBox_setMaximum(handle: QDoubleSpinBoxH; max: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setMaximum'; procedure QDoubleSpinBox_setRange(handle: QDoubleSpinBoxH; min: Double; max: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setRange'; function QDoubleSpinBox_decimals(handle: QDoubleSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QDoubleSpinBox_decimals'; procedure QDoubleSpinBox_setDecimals(handle: QDoubleSpinBoxH; prec: Integer); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setDecimals'; function QDoubleSpinBox_validate(handle: QDoubleSpinBoxH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QDoubleSpinBox_validate'; function QDoubleSpinBox_valueFromText(handle: QDoubleSpinBoxH; text: PWideString): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_valueFromText'; procedure QDoubleSpinBox_textFromValue(handle: QDoubleSpinBoxH; retval: PWideString; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_textFromValue'; procedure QDoubleSpinBox_fixup(handle: QDoubleSpinBoxH; str: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_fixup'; procedure QDoubleSpinBox_setValue(handle: QDoubleSpinBoxH; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setValue'; type QSpinBox_valueChanged_Event = procedure (AnonParam1: Integer) of object cdecl; QSpinBox_valueChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; type QDoubleSpinBox_valueChanged_Event = procedure (AnonParam1: Double) of object cdecl; QDoubleSpinBox_valueChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; function QSplitter_create(parent: QWidgetH = nil): QSplitterH; cdecl; external Qt4PasLib name 'QSplitter_create'; procedure QSplitter_destroy(handle: QSplitterH); cdecl; external Qt4PasLib name 'QSplitter_destroy'; function QSplitter_create(AnonParam1: QtOrientation; parent: QWidgetH = nil): QSplitterH; cdecl; external Qt4PasLib name 'QSplitter_create2'; procedure QSplitter_addWidget(handle: QSplitterH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QSplitter_addWidget'; procedure QSplitter_insertWidget(handle: QSplitterH; index: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QSplitter_insertWidget'; procedure QSplitter_setOrientation(handle: QSplitterH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QSplitter_setOrientation'; function QSplitter_orientation(handle: QSplitterH): QtOrientation; cdecl; external Qt4PasLib name 'QSplitter_orientation'; procedure QSplitter_setChildrenCollapsible(handle: QSplitterH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSplitter_setChildrenCollapsible'; function QSplitter_childrenCollapsible(handle: QSplitterH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_childrenCollapsible'; procedure QSplitter_setCollapsible(handle: QSplitterH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QSplitter_setCollapsible'; function QSplitter_isCollapsible(handle: QSplitterH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QSplitter_isCollapsible'; procedure QSplitter_setOpaqueResize(handle: QSplitterH; opaque: Boolean = True); cdecl; external Qt4PasLib name 'QSplitter_setOpaqueResize'; function QSplitter_opaqueResize(handle: QSplitterH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_opaqueResize'; procedure QSplitter_refresh(handle: QSplitterH); cdecl; external Qt4PasLib name 'QSplitter_refresh'; procedure QSplitter_sizeHint(handle: QSplitterH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitter_sizeHint'; procedure QSplitter_minimumSizeHint(handle: QSplitterH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitter_minimumSizeHint'; procedure QSplitter_sizes(handle: QSplitterH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QSplitter_sizes'; procedure QSplitter_setSizes(handle: QSplitterH; list: PPtrIntArray); cdecl; external Qt4PasLib name 'QSplitter_setSizes'; procedure QSplitter_saveState(handle: QSplitterH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QSplitter_saveState'; function QSplitter_restoreState(handle: QSplitterH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_restoreState'; function QSplitter_handleWidth(handle: QSplitterH): Integer; cdecl; external Qt4PasLib name 'QSplitter_handleWidth'; procedure QSplitter_setHandleWidth(handle: QSplitterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QSplitter_setHandleWidth'; function QSplitter_indexOf(handle: QSplitterH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QSplitter_indexOf'; function QSplitter_widget(handle: QSplitterH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QSplitter_widget'; function QSplitter_count(handle: QSplitterH): Integer; cdecl; external Qt4PasLib name 'QSplitter_count'; procedure QSplitter_getRange(handle: QSplitterH; index: Integer; AnonParam2: PInteger; AnonParam3: PInteger); cdecl; external Qt4PasLib name 'QSplitter_getRange'; function QSplitter_handle(handle: QSplitterH; index: Integer): QSplitterHandleH; cdecl; external Qt4PasLib name 'QSplitter_handle'; procedure QSplitter_setStretchFactor(handle: QSplitterH; index: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QSplitter_setStretchFactor'; function QSplitterHandle_create(o: QtOrientation; parent: QSplitterH): QSplitterHandleH; cdecl; external Qt4PasLib name 'QSplitterHandle_create'; procedure QSplitterHandle_destroy(handle: QSplitterHandleH); cdecl; external Qt4PasLib name 'QSplitterHandle_destroy'; procedure QSplitterHandle_setOrientation(handle: QSplitterHandleH; o: QtOrientation); cdecl; external Qt4PasLib name 'QSplitterHandle_setOrientation'; function QSplitterHandle_orientation(handle: QSplitterHandleH): QtOrientation; cdecl; external Qt4PasLib name 'QSplitterHandle_orientation'; function QSplitterHandle_opaqueResize(handle: QSplitterHandleH): Boolean; cdecl; external Qt4PasLib name 'QSplitterHandle_opaqueResize'; function QSplitterHandle_splitter(handle: QSplitterHandleH): QSplitterH; cdecl; external Qt4PasLib name 'QSplitterHandle_splitter'; procedure QSplitterHandle_sizeHint(handle: QSplitterHandleH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitterHandle_sizeHint'; type QSplitter_splitterMoved_Event = procedure (pos: Integer; index: Integer) of object cdecl; type QComboBoxInsertPolicy = ( // QComboBox::InsertPolicy (1) QComboBoxNoInsert, QComboBoxInsertAtTop, QComboBoxInsertAtCurrent, QComboBoxInsertAtBottom, QComboBoxInsertAfterCurrent, QComboBoxInsertBeforeCurrent, QComboBoxInsertAlphabetically ); QComboBoxSizeAdjustPolicy = ( // QComboBox::SizeAdjustPolicy (1) QComboBoxAdjustToContents, QComboBoxAdjustToContentsOnFirstShow, QComboBoxAdjustToMinimumContentsLength, QComboBoxAdjustToMinimumContentsLengthWithIcon ); function QComboBox_create(parent: QWidgetH = nil): QComboBoxH; cdecl; external Qt4PasLib name 'QComboBox_create'; procedure QComboBox_destroy(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_destroy'; function QComboBox_maxVisibleItems(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_maxVisibleItems'; procedure QComboBox_setMaxVisibleItems(handle: QComboBoxH; maxItems: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMaxVisibleItems'; function QComboBox_count(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_count'; procedure QComboBox_setMaxCount(handle: QComboBoxH; max: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMaxCount'; function QComboBox_maxCount(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_maxCount'; function QComboBox_autoCompletion(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_autoCompletion'; procedure QComboBox_setAutoCompletion(handle: QComboBoxH; enable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setAutoCompletion'; function QComboBox_autoCompletionCaseSensitivity(handle: QComboBoxH): QtCaseSensitivity; cdecl; external Qt4PasLib name 'QComboBox_autoCompletionCaseSensitivity'; procedure QComboBox_setAutoCompletionCaseSensitivity(handle: QComboBoxH; sensitivity: QtCaseSensitivity); cdecl; external Qt4PasLib name 'QComboBox_setAutoCompletionCaseSensitivity'; function QComboBox_duplicatesEnabled(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_duplicatesEnabled'; procedure QComboBox_setDuplicatesEnabled(handle: QComboBoxH; enable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setDuplicatesEnabled'; procedure QComboBox_setFrame(handle: QComboBoxH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setFrame'; function QComboBox_hasFrame(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_hasFrame'; function QComboBox_findText(handle: QComboBoxH; text: PWideString; flags: QtMatchFlags = QtMatchExactly or QtMatchCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QComboBox_findText'; function QComboBox_findData(handle: QComboBoxH; data: QVariantH; role: QtItemDataRole = QtUserRole; flags: QtMatchFlags = QtMatchExactly or QtMatchCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QComboBox_findData'; function QComboBox_insertPolicy(handle: QComboBoxH): QComboBoxInsertPolicy; cdecl; external Qt4PasLib name 'QComboBox_insertPolicy'; procedure QComboBox_setInsertPolicy(handle: QComboBoxH; policy: QComboBoxInsertPolicy); cdecl; external Qt4PasLib name 'QComboBox_setInsertPolicy'; function QComboBox_sizeAdjustPolicy(handle: QComboBoxH): QComboBoxSizeAdjustPolicy; cdecl; external Qt4PasLib name 'QComboBox_sizeAdjustPolicy'; procedure QComboBox_setSizeAdjustPolicy(handle: QComboBoxH; policy: QComboBoxSizeAdjustPolicy); cdecl; external Qt4PasLib name 'QComboBox_setSizeAdjustPolicy'; function QComboBox_minimumContentsLength(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_minimumContentsLength'; procedure QComboBox_setMinimumContentsLength(handle: QComboBoxH; characters: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMinimumContentsLength'; procedure QComboBox_iconSize(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_iconSize'; procedure QComboBox_setIconSize(handle: QComboBoxH; size: PSize); cdecl; external Qt4PasLib name 'QComboBox_setIconSize'; function QComboBox_isEditable(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_isEditable'; procedure QComboBox_setEditable(handle: QComboBoxH; editable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setEditable'; procedure QComboBox_setLineEdit(handle: QComboBoxH; edit: QLineEditH); cdecl; external Qt4PasLib name 'QComboBox_setLineEdit'; function QComboBox_lineEdit(handle: QComboBoxH): QLineEditH; cdecl; external Qt4PasLib name 'QComboBox_lineEdit'; procedure QComboBox_setValidator(handle: QComboBoxH; v: QValidatorH); cdecl; external Qt4PasLib name 'QComboBox_setValidator'; function QComboBox_validator(handle: QComboBoxH): QValidatorH; cdecl; external Qt4PasLib name 'QComboBox_validator'; procedure QComboBox_setCompleter(handle: QComboBoxH; c: QCompleterH); cdecl; external Qt4PasLib name 'QComboBox_setCompleter'; function QComboBox_completer(handle: QComboBoxH): QCompleterH; cdecl; external Qt4PasLib name 'QComboBox_completer'; function QComboBox_itemDelegate(handle: QComboBoxH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QComboBox_itemDelegate'; procedure QComboBox_setItemDelegate(handle: QComboBoxH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QComboBox_setItemDelegate'; function QComboBox_model(handle: QComboBoxH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QComboBox_model'; procedure QComboBox_setModel(handle: QComboBoxH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QComboBox_setModel'; procedure QComboBox_rootModelIndex(handle: QComboBoxH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QComboBox_rootModelIndex'; procedure QComboBox_setRootModelIndex(handle: QComboBoxH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QComboBox_setRootModelIndex'; function QComboBox_modelColumn(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_modelColumn'; procedure QComboBox_setModelColumn(handle: QComboBoxH; visibleColumn: Integer); cdecl; external Qt4PasLib name 'QComboBox_setModelColumn'; function QComboBox_currentIndex(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_currentIndex'; procedure QComboBox_currentText(handle: QComboBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QComboBox_currentText'; procedure QComboBox_itemText(handle: QComboBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_itemText'; procedure QComboBox_itemIcon(handle: QComboBoxH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_itemIcon'; procedure QComboBox_itemData(handle: QComboBoxH; retval: QVariantH; index: Integer; role: QtItemDataRole = QtUserRole); cdecl; external Qt4PasLib name 'QComboBox_itemData'; procedure QComboBox_addItem(handle: QComboBoxH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_addItem'; procedure QComboBox_addItem(handle: QComboBoxH; icon: QIconH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_addItem2'; procedure QComboBox_addItems(handle: QComboBoxH; texts: QStringListH); cdecl; external Qt4PasLib name 'QComboBox_addItems'; procedure QComboBox_insertItem(handle: QComboBoxH; index: Integer; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_insertItem'; procedure QComboBox_insertItem(handle: QComboBoxH; index: Integer; icon: QIconH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_insertItem2'; procedure QComboBox_insertItems(handle: QComboBoxH; index: Integer; texts: QStringListH); cdecl; external Qt4PasLib name 'QComboBox_insertItems'; procedure QComboBox_insertSeparator(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_insertSeparator'; procedure QComboBox_removeItem(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_removeItem'; procedure QComboBox_setItemText(handle: QComboBoxH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QComboBox_setItemText'; procedure QComboBox_setItemIcon(handle: QComboBoxH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QComboBox_setItemIcon'; procedure QComboBox_setItemData(handle: QComboBoxH; index: Integer; value: QVariantH; role: QtItemDataRole = QtUserRole); cdecl; external Qt4PasLib name 'QComboBox_setItemData'; function QComboBox_view(handle: QComboBoxH): QAbstractItemViewH; cdecl; external Qt4PasLib name 'QComboBox_view'; procedure QComboBox_setView(handle: QComboBoxH; itemView: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QComboBox_setView'; procedure QComboBox_sizeHint(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_sizeHint'; procedure QComboBox_minimumSizeHint(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_minimumSizeHint'; procedure QComboBox_showPopup(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_showPopup'; procedure QComboBox_hidePopup(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_hidePopup'; function QComboBox_event(handle: QComboBoxH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_event'; procedure QComboBox_clear(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_clear'; procedure QComboBox_clearEditText(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_clearEditText'; procedure QComboBox_setEditText(handle: QComboBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QComboBox_setEditText'; procedure QComboBox_setCurrentIndex(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_setCurrentIndex'; type QComboBox_editTextChanged_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_activated_Event = procedure (index: Integer) of object cdecl; QComboBox_activated2_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_highlighted_Event = procedure (index: Integer) of object cdecl; QComboBox_highlighted2_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_currentIndexChanged_Event = procedure (index: Integer) of object cdecl; QComboBox_currentIndexChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; function QCheckBox_create(parent: QWidgetH = nil): QCheckBoxH; cdecl; external Qt4PasLib name 'QCheckBox_create'; procedure QCheckBox_destroy(handle: QCheckBoxH); cdecl; external Qt4PasLib name 'QCheckBox_destroy'; function QCheckBox_create(text: PWideString; parent: QWidgetH = nil): QCheckBoxH; cdecl; external Qt4PasLib name 'QCheckBox_create2'; procedure QCheckBox_sizeHint(handle: QCheckBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QCheckBox_sizeHint'; procedure QCheckBox_setTristate(handle: QCheckBoxH; y: Boolean = True); cdecl; external Qt4PasLib name 'QCheckBox_setTristate'; function QCheckBox_isTristate(handle: QCheckBoxH): Boolean; cdecl; external Qt4PasLib name 'QCheckBox_isTristate'; function QCheckBox_checkState(handle: QCheckBoxH): QtCheckState; cdecl; external Qt4PasLib name 'QCheckBox_checkState'; procedure QCheckBox_setCheckState(handle: QCheckBoxH; state: QtCheckState); cdecl; external Qt4PasLib name 'QCheckBox_setCheckState'; type QCheckBox_stateChanged_Event = procedure (AnonParam1: Integer) of object cdecl; type QSliderTickPosition = cardinal; // QSlider::TickPosition (4) const QSliderNoTicks = 0 { $0 }; QSliderTicksAbove = 1 { $1 }; QSliderTicksLeft = 1 { $1 }; QSliderTicksBelow = 2 { $2 }; QSliderTicksRight = 2 { $2 }; QSliderTicksBothSides = 3 { $3 }; function QSlider_create(parent: QWidgetH = nil): QSliderH; cdecl; external Qt4PasLib name 'QSlider_create'; procedure QSlider_destroy(handle: QSliderH); cdecl; external Qt4PasLib name 'QSlider_destroy'; function QSlider_create(orientation: QtOrientation; parent: QWidgetH = nil): QSliderH; cdecl; external Qt4PasLib name 'QSlider_create2'; procedure QSlider_sizeHint(handle: QSliderH; retval: PSize); cdecl; external Qt4PasLib name 'QSlider_sizeHint'; procedure QSlider_minimumSizeHint(handle: QSliderH; retval: PSize); cdecl; external Qt4PasLib name 'QSlider_minimumSizeHint'; procedure QSlider_setTickPosition(handle: QSliderH; position: QSliderTickPosition); cdecl; external Qt4PasLib name 'QSlider_setTickPosition'; function QSlider_tickPosition(handle: QSliderH): QSliderTickPosition; cdecl; external Qt4PasLib name 'QSlider_tickPosition'; procedure QSlider_setTickInterval(handle: QSliderH; ti: Integer); cdecl; external Qt4PasLib name 'QSlider_setTickInterval'; function QSlider_tickInterval(handle: QSliderH): Integer; cdecl; external Qt4PasLib name 'QSlider_tickInterval'; function QSlider_event(handle: QSliderH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QSlider_event'; function QTextBrowser_create(parent: QWidgetH = nil): QTextBrowserH; cdecl; external Qt4PasLib name 'QTextBrowser_create'; procedure QTextBrowser_destroy(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_destroy'; procedure QTextBrowser_source(handle: QTextBrowserH; retval: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_source'; procedure QTextBrowser_searchPaths(handle: QTextBrowserH; retval: QStringListH); cdecl; external Qt4PasLib name 'QTextBrowser_searchPaths'; procedure QTextBrowser_setSearchPaths(handle: QTextBrowserH; paths: QStringListH); cdecl; external Qt4PasLib name 'QTextBrowser_setSearchPaths'; procedure QTextBrowser_loadResource(handle: QTextBrowserH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_loadResource'; function QTextBrowser_isBackwardAvailable(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_isBackwardAvailable'; function QTextBrowser_isForwardAvailable(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_isForwardAvailable'; procedure QTextBrowser_clearHistory(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_clearHistory'; procedure QTextBrowser_historyTitle(handle: QTextBrowserH; retval: PWideString; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QTextBrowser_historyTitle'; procedure QTextBrowser_historyUrl(handle: QTextBrowserH; retval: QUrlH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QTextBrowser_historyUrl'; function QTextBrowser_backwardHistoryCount(handle: QTextBrowserH): Integer; cdecl; external Qt4PasLib name 'QTextBrowser_backwardHistoryCount'; function QTextBrowser_forwardHistoryCount(handle: QTextBrowserH): Integer; cdecl; external Qt4PasLib name 'QTextBrowser_forwardHistoryCount'; function QTextBrowser_openExternalLinks(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_openExternalLinks'; procedure QTextBrowser_setOpenExternalLinks(handle: QTextBrowserH; open: Boolean); cdecl; external Qt4PasLib name 'QTextBrowser_setOpenExternalLinks'; function QTextBrowser_openLinks(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_openLinks'; procedure QTextBrowser_setOpenLinks(handle: QTextBrowserH; open: Boolean); cdecl; external Qt4PasLib name 'QTextBrowser_setOpenLinks'; procedure QTextBrowser_setSource(handle: QTextBrowserH; name: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_setSource'; procedure QTextBrowser_backward(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_backward'; procedure QTextBrowser_forward(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_forward'; procedure QTextBrowser_home(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_home'; procedure QTextBrowser_reload(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_reload'; type QTextBrowser_backwardAvailable_Event = procedure (AnonParam1: Boolean) of object cdecl; QTextBrowser_forwardAvailable_Event = procedure (AnonParam1: Boolean) of object cdecl; QTextBrowser_historyChanged_Event = procedure () of object cdecl; QTextBrowser_sourceChanged_Event = procedure (AnonParam1: QUrlH) of object cdecl; QTextBrowser_highlighted_Event = procedure (AnonParam1: QUrlH) of object cdecl; QTextBrowser_highlighted2_Event = procedure (AnonParam1: PWideString) of object cdecl; QTextBrowser_anchorClicked_Event = procedure (AnonParam1: QUrlH) of object cdecl; function QLabel_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QLabelH; cdecl; external Qt4PasLib name 'QLabel_create'; procedure QLabel_destroy(handle: QLabelH); cdecl; external Qt4PasLib name 'QLabel_destroy'; function QLabel_create(text: PWideString; parent: QWidgetH = nil; f: QtWindowFlags = 0): QLabelH; cdecl; external Qt4PasLib name 'QLabel_create2'; procedure QLabel_text(handle: QLabelH; retval: PWideString); cdecl; external Qt4PasLib name 'QLabel_text'; function QLabel_pixmap(handle: QLabelH): QPixmapH; cdecl; external Qt4PasLib name 'QLabel_pixmap'; function QLabel_picture(handle: QLabelH): QPictureH; cdecl; external Qt4PasLib name 'QLabel_picture'; function QLabel_movie(handle: QLabelH): QMovieH; cdecl; external Qt4PasLib name 'QLabel_movie'; function QLabel_textFormat(handle: QLabelH): QtTextFormat; cdecl; external Qt4PasLib name 'QLabel_textFormat'; procedure QLabel_setTextFormat(handle: QLabelH; AnonParam1: QtTextFormat); cdecl; external Qt4PasLib name 'QLabel_setTextFormat'; function QLabel_alignment(handle: QLabelH): QtAlignment; cdecl; external Qt4PasLib name 'QLabel_alignment'; procedure QLabel_setAlignment(handle: QLabelH; AnonParam1: QtAlignment); cdecl; external Qt4PasLib name 'QLabel_setAlignment'; procedure QLabel_setWordWrap(handle: QLabelH; _on: Boolean); cdecl; external Qt4PasLib name 'QLabel_setWordWrap'; function QLabel_wordWrap(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_wordWrap'; function QLabel_indent(handle: QLabelH): Integer; cdecl; external Qt4PasLib name 'QLabel_indent'; procedure QLabel_setIndent(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setIndent'; function QLabel_margin(handle: QLabelH): Integer; cdecl; external Qt4PasLib name 'QLabel_margin'; procedure QLabel_setMargin(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setMargin'; function QLabel_hasScaledContents(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_hasScaledContents'; procedure QLabel_setScaledContents(handle: QLabelH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLabel_setScaledContents'; procedure QLabel_sizeHint(handle: QLabelH; retval: PSize); cdecl; external Qt4PasLib name 'QLabel_sizeHint'; procedure QLabel_minimumSizeHint(handle: QLabelH; retval: PSize); cdecl; external Qt4PasLib name 'QLabel_minimumSizeHint'; procedure QLabel_setBuddy(handle: QLabelH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QLabel_setBuddy'; function QLabel_buddy(handle: QLabelH): QWidgetH; cdecl; external Qt4PasLib name 'QLabel_buddy'; function QLabel_heightForWidth(handle: QLabelH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLabel_heightForWidth'; function QLabel_openExternalLinks(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_openExternalLinks'; procedure QLabel_setOpenExternalLinks(handle: QLabelH; open: Boolean); cdecl; external Qt4PasLib name 'QLabel_setOpenExternalLinks'; procedure QLabel_setTextInteractionFlags(handle: QLabelH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QLabel_setTextInteractionFlags'; function QLabel_textInteractionFlags(handle: QLabelH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QLabel_textInteractionFlags'; procedure QLabel_setText(handle: QLabelH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLabel_setText'; procedure QLabel_setPixmap(handle: QLabelH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QLabel_setPixmap'; procedure QLabel_setPicture(handle: QLabelH; AnonParam1: QPictureH); cdecl; external Qt4PasLib name 'QLabel_setPicture'; procedure QLabel_setMovie(handle: QLabelH; movie: QMovieH); cdecl; external Qt4PasLib name 'QLabel_setMovie'; procedure QLabel_setNum(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setNum'; procedure QLabel_setNum(handle: QLabelH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QLabel_setNum2'; procedure QLabel_clear(handle: QLabelH); cdecl; external Qt4PasLib name 'QLabel_clear'; type QLabel_linkActivated_Event = procedure (link: PWideString) of object cdecl; QLabel_linkHovered_Event = procedure (link: PWideString) of object cdecl; function QGroupBox_create(parent: QWidgetH = nil): QGroupBoxH; cdecl; external Qt4PasLib name 'QGroupBox_create'; procedure QGroupBox_destroy(handle: QGroupBoxH); cdecl; external Qt4PasLib name 'QGroupBox_destroy'; function QGroupBox_create(title: PWideString; parent: QWidgetH = nil): QGroupBoxH; cdecl; external Qt4PasLib name 'QGroupBox_create2'; procedure QGroupBox_title(handle: QGroupBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QGroupBox_title'; procedure QGroupBox_setTitle(handle: QGroupBoxH; title: PWideString); cdecl; external Qt4PasLib name 'QGroupBox_setTitle'; function QGroupBox_alignment(handle: QGroupBoxH): QtAlignment; cdecl; external Qt4PasLib name 'QGroupBox_alignment'; procedure QGroupBox_setAlignment(handle: QGroupBoxH; alignment: Integer); cdecl; external Qt4PasLib name 'QGroupBox_setAlignment'; procedure QGroupBox_minimumSizeHint(handle: QGroupBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QGroupBox_minimumSizeHint'; function QGroupBox_isFlat(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isFlat'; procedure QGroupBox_setFlat(handle: QGroupBoxH; flat: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setFlat'; function QGroupBox_isCheckable(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isCheckable'; procedure QGroupBox_setCheckable(handle: QGroupBoxH; checkable: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setCheckable'; function QGroupBox_isChecked(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isChecked'; procedure QGroupBox_setChecked(handle: QGroupBoxH; checked: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setChecked'; type QGroupBox_clicked_Event = procedure (checked: Boolean = False) of object cdecl; QGroupBox_clicked2_Event = procedure () of object cdecl; QGroupBox_toggled_Event = procedure (AnonParam1: Boolean) of object cdecl; type QDockWidgetDockWidgetFeature = cardinal; // QDockWidget::DockWidgetFeature (4) QDockWidgetDockWidgetFeatures = QDockWidgetDockWidgetFeature; // QFlags<> const QDockWidgetDockWidgetClosable = 1 { $1 }; QDockWidgetDockWidgetMovable = 2 { $2 }; QDockWidgetDockWidgetFloatable = 4 { $4 }; QDockWidgetDockWidgetVerticalTitleBar = 8 { $8 }; QDockWidgetDockWidgetFeatureMask = 15 { $f }; QDockWidgetAllDockWidgetFeatures = 7 { $7 }; QDockWidgetNoDockWidgetFeatures = 0 { $0 }; QDockWidgetReserved = 255 { $ff }; function QDockWidget_create(title: PWideString; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QDockWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_create'; procedure QDockWidget_destroy(handle: QDockWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_destroy'; function QDockWidget_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QDockWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_create2'; function QDockWidget_widget(handle: QDockWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_widget'; procedure QDockWidget_setWidget(handle: QDockWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_setWidget'; procedure QDockWidget_setFeatures(handle: QDockWidgetH; features: QDockWidgetDockWidgetFeatures); cdecl; external Qt4PasLib name 'QDockWidget_setFeatures'; function QDockWidget_features(handle: QDockWidgetH): QDockWidgetDockWidgetFeatures; cdecl; external Qt4PasLib name 'QDockWidget_features'; procedure QDockWidget_setFloating(handle: QDockWidgetH; floating: Boolean); cdecl; external Qt4PasLib name 'QDockWidget_setFloating'; function QDockWidget_isFloating(handle: QDockWidgetH): Boolean; cdecl; external Qt4PasLib name 'QDockWidget_isFloating'; procedure QDockWidget_setAllowedAreas(handle: QDockWidgetH; areas: QtDockWidgetAreas); cdecl; external Qt4PasLib name 'QDockWidget_setAllowedAreas'; function QDockWidget_allowedAreas(handle: QDockWidgetH): QtDockWidgetAreas; cdecl; external Qt4PasLib name 'QDockWidget_allowedAreas'; procedure QDockWidget_setTitleBarWidget(handle: QDockWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_setTitleBarWidget'; function QDockWidget_titleBarWidget(handle: QDockWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_titleBarWidget'; function QDockWidget_isAreaAllowed(handle: QDockWidgetH; area: QtDockWidgetArea): Boolean; cdecl; external Qt4PasLib name 'QDockWidget_isAreaAllowed'; function QDockWidget_toggleViewAction(handle: QDockWidgetH): QActionH; cdecl; external Qt4PasLib name 'QDockWidget_toggleViewAction'; type QDockWidget_featuresChanged_Event = procedure (features: QDockWidgetDockWidgetFeatures) of object cdecl; QDockWidget_topLevelChanged_Event = procedure (topLevel: Boolean) of object cdecl; QDockWidget_allowedAreasChanged_Event = procedure (allowedAreas: QtDockWidgetAreas) of object cdecl; QDockWidget_visibilityChanged_Event = procedure (visible: Boolean) of object cdecl; QDockWidget_dockLocationChanged_Event = procedure (area: QtDockWidgetArea) of object cdecl; type QTabBarShape = ( // QTabBar::Shape (1) QTabBarRoundedNorth, QTabBarRoundedSouth, QTabBarRoundedWest, QTabBarRoundedEast, QTabBarTriangularNorth, QTabBarTriangularSouth, QTabBarTriangularWest, QTabBarTriangularEast ); QTabBarButtonPosition = ( // QTabBar::ButtonPosition (1) QTabBarLeftSide, QTabBarRightSide ); QTabBarSelectionBehavior = ( // QTabBar::SelectionBehavior (1) QTabBarSelectLeftTab, QTabBarSelectRightTab, QTabBarSelectPreviousTab ); function QTabBar_create(parent: QWidgetH = nil): QTabBarH; cdecl; external Qt4PasLib name 'QTabBar_create'; procedure QTabBar_destroy(handle: QTabBarH); cdecl; external Qt4PasLib name 'QTabBar_destroy'; function QTabBar_shape(handle: QTabBarH): QTabBarShape; cdecl; external Qt4PasLib name 'QTabBar_shape'; procedure QTabBar_setShape(handle: QTabBarH; shape: QTabBarShape); cdecl; external Qt4PasLib name 'QTabBar_setShape'; function QTabBar_addTab(handle: QTabBarH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_addTab'; function QTabBar_addTab(handle: QTabBarH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_addTab2'; function QTabBar_insertTab(handle: QTabBarH; index: Integer; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_insertTab'; function QTabBar_insertTab(handle: QTabBarH; index: Integer; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_insertTab2'; procedure QTabBar_removeTab(handle: QTabBarH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_removeTab'; procedure QTabBar_moveTab(handle: QTabBarH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QTabBar_moveTab'; function QTabBar_isTabEnabled(handle: QTabBarH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QTabBar_isTabEnabled'; procedure QTabBar_setTabEnabled(handle: QTabBarH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setTabEnabled'; procedure QTabBar_tabText(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabText'; procedure QTabBar_setTabText(handle: QTabBarH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabText'; procedure QTabBar_tabTextColor(handle: QTabBarH; retval: PQColor; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabTextColor'; procedure QTabBar_setTabTextColor(handle: QTabBarH; index: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTabBar_setTabTextColor'; procedure QTabBar_tabIcon(handle: QTabBarH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabIcon'; procedure QTabBar_setTabIcon(handle: QTabBarH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTabBar_setTabIcon'; function QTabBar_elideMode(handle: QTabBarH): QtTextElideMode; cdecl; external Qt4PasLib name 'QTabBar_elideMode'; procedure QTabBar_setElideMode(handle: QTabBarH; AnonParam1: QtTextElideMode); cdecl; external Qt4PasLib name 'QTabBar_setElideMode'; procedure QTabBar_setTabToolTip(handle: QTabBarH; index: Integer; tip: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabToolTip'; procedure QTabBar_tabToolTip(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabToolTip'; procedure QTabBar_setTabWhatsThis(handle: QTabBarH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabWhatsThis'; procedure QTabBar_tabWhatsThis(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabWhatsThis'; procedure QTabBar_setTabData(handle: QTabBarH; index: Integer; data: QVariantH); cdecl; external Qt4PasLib name 'QTabBar_setTabData'; procedure QTabBar_tabData(handle: QTabBarH; retval: QVariantH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabData'; procedure QTabBar_tabRect(handle: QTabBarH; retval: PRect; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabRect'; function QTabBar_tabAt(handle: QTabBarH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QTabBar_tabAt'; function QTabBar_currentIndex(handle: QTabBarH): Integer; cdecl; external Qt4PasLib name 'QTabBar_currentIndex'; function QTabBar_count(handle: QTabBarH): Integer; cdecl; external Qt4PasLib name 'QTabBar_count'; procedure QTabBar_sizeHint(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_sizeHint'; procedure QTabBar_minimumSizeHint(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_minimumSizeHint'; procedure QTabBar_setDrawBase(handle: QTabBarH; drawTheBase: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setDrawBase'; function QTabBar_drawBase(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_drawBase'; procedure QTabBar_iconSize(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_iconSize'; procedure QTabBar_setIconSize(handle: QTabBarH; size: PSize); cdecl; external Qt4PasLib name 'QTabBar_setIconSize'; function QTabBar_usesScrollButtons(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_usesScrollButtons'; procedure QTabBar_setUsesScrollButtons(handle: QTabBarH; useButtons: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setUsesScrollButtons'; function QTabBar_tabsClosable(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_tabsClosable'; procedure QTabBar_setTabsClosable(handle: QTabBarH; closable: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setTabsClosable'; procedure QTabBar_setTabButton(handle: QTabBarH; index: Integer; position: QTabBarButtonPosition; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTabBar_setTabButton'; function QTabBar_tabButton(handle: QTabBarH; index: Integer; position: QTabBarButtonPosition): QWidgetH; cdecl; external Qt4PasLib name 'QTabBar_tabButton'; function QTabBar_selectionBehaviorOnRemove(handle: QTabBarH): QTabBarSelectionBehavior; cdecl; external Qt4PasLib name 'QTabBar_selectionBehaviorOnRemove'; procedure QTabBar_setSelectionBehaviorOnRemove(handle: QTabBarH; behavior: QTabBarSelectionBehavior); cdecl; external Qt4PasLib name 'QTabBar_setSelectionBehaviorOnRemove'; function QTabBar_expanding(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_expanding'; procedure QTabBar_setExpanding(handle: QTabBarH; enabled: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setExpanding'; function QTabBar_isMovable(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_isMovable'; procedure QTabBar_setMovable(handle: QTabBarH; movable: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setMovable'; function QTabBar_documentMode(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_documentMode'; procedure QTabBar_setDocumentMode(handle: QTabBarH; _set: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setDocumentMode'; procedure QTabBar_setCurrentIndex(handle: QTabBarH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_setCurrentIndex'; type QTabBar_currentChanged_Event = procedure (index: Integer) of object cdecl; QTabBar_tabCloseRequested_Event = procedure (index: Integer) of object cdecl; QTabBar_tabMoved_Event = procedure (from: Integer; _to: Integer) of object cdecl; type QProgressBarDirection = ( // QProgressBar::Direction (1) QProgressBarTopToBottom, QProgressBarBottomToTop ); function QProgressBar_create(parent: QWidgetH = nil): QProgressBarH; cdecl; external Qt4PasLib name 'QProgressBar_create'; procedure QProgressBar_destroy(handle: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressBar_destroy'; function QProgressBar_minimum(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_minimum'; function QProgressBar_maximum(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_maximum'; function QProgressBar_value(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_value'; procedure QProgressBar_text(handle: QProgressBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_text'; procedure QProgressBar_setTextVisible(handle: QProgressBarH; visible: Boolean); cdecl; external Qt4PasLib name 'QProgressBar_setTextVisible'; function QProgressBar_isTextVisible(handle: QProgressBarH): Boolean; cdecl; external Qt4PasLib name 'QProgressBar_isTextVisible'; function QProgressBar_alignment(handle: QProgressBarH): QtAlignment; cdecl; external Qt4PasLib name 'QProgressBar_alignment'; procedure QProgressBar_setAlignment(handle: QProgressBarH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QProgressBar_setAlignment'; procedure QProgressBar_sizeHint(handle: QProgressBarH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressBar_sizeHint'; procedure QProgressBar_minimumSizeHint(handle: QProgressBarH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressBar_minimumSizeHint'; function QProgressBar_orientation(handle: QProgressBarH): QtOrientation; cdecl; external Qt4PasLib name 'QProgressBar_orientation'; procedure QProgressBar_setInvertedAppearance(handle: QProgressBarH; invert: Boolean); cdecl; external Qt4PasLib name 'QProgressBar_setInvertedAppearance'; function QProgressBar_invertedAppearance(handle: QProgressBarH): Boolean; cdecl; external Qt4PasLib name 'QProgressBar_invertedAppearance'; procedure QProgressBar_setTextDirection(handle: QProgressBarH; textDirection: QProgressBarDirection); cdecl; external Qt4PasLib name 'QProgressBar_setTextDirection'; function QProgressBar_textDirection(handle: QProgressBarH): QProgressBarDirection; cdecl; external Qt4PasLib name 'QProgressBar_textDirection'; procedure QProgressBar_setFormat(handle: QProgressBarH; format: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_setFormat'; procedure QProgressBar_format(handle: QProgressBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_format'; procedure QProgressBar_reset(handle: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressBar_reset'; procedure QProgressBar_setRange(handle: QProgressBarH; minimum: Integer; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setRange'; procedure QProgressBar_setMinimum(handle: QProgressBarH; minimum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setMinimum'; procedure QProgressBar_setMaximum(handle: QProgressBarH; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setMaximum'; procedure QProgressBar_setValue(handle: QProgressBarH; value: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setValue'; procedure QProgressBar_setOrientation(handle: QProgressBarH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QProgressBar_setOrientation'; type QProgressBar_valueChanged_Event = procedure (value: Integer) of object cdecl; function QStatusBar_create(parent: QWidgetH = nil): QStatusBarH; cdecl; external Qt4PasLib name 'QStatusBar_create'; procedure QStatusBar_destroy(handle: QStatusBarH); cdecl; external Qt4PasLib name 'QStatusBar_destroy'; procedure QStatusBar_addWidget(handle: QStatusBarH; widget: QWidgetH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_addWidget'; function QStatusBar_insertWidget(handle: QStatusBarH; index: Integer; widget: QWidgetH; stretch: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStatusBar_insertWidget'; procedure QStatusBar_addPermanentWidget(handle: QStatusBarH; widget: QWidgetH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_addPermanentWidget'; function QStatusBar_insertPermanentWidget(handle: QStatusBarH; index: Integer; widget: QWidgetH; stretch: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStatusBar_insertPermanentWidget'; procedure QStatusBar_removeWidget(handle: QStatusBarH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QStatusBar_removeWidget'; procedure QStatusBar_setSizeGripEnabled(handle: QStatusBarH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QStatusBar_setSizeGripEnabled'; function QStatusBar_isSizeGripEnabled(handle: QStatusBarH): Boolean; cdecl; external Qt4PasLib name 'QStatusBar_isSizeGripEnabled'; procedure QStatusBar_currentMessage(handle: QStatusBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QStatusBar_currentMessage'; procedure QStatusBar_showMessage(handle: QStatusBarH; text: PWideString; timeout: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_showMessage'; procedure QStatusBar_clearMessage(handle: QStatusBarH); cdecl; external Qt4PasLib name 'QStatusBar_clearMessage'; type QStatusBar_messageChanged_Event = procedure (text: PWideString) of object cdecl; function QToolBox_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QToolBoxH; cdecl; external Qt4PasLib name 'QToolBox_create'; procedure QToolBox_destroy(handle: QToolBoxH); cdecl; external Qt4PasLib name 'QToolBox_destroy'; function QToolBox_addItem(handle: QToolBoxH; widget: QWidgetH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_addItem'; function QToolBox_addItem(handle: QToolBoxH; widget: QWidgetH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_addItem2'; function QToolBox_insertItem(handle: QToolBoxH; index: Integer; widget: QWidgetH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_insertItem'; function QToolBox_insertItem(handle: QToolBoxH; index: Integer; widget: QWidgetH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_insertItem2'; procedure QToolBox_removeItem(handle: QToolBoxH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_removeItem'; procedure QToolBox_setItemEnabled(handle: QToolBoxH; index: Integer; enabled: Boolean); cdecl; external Qt4PasLib name 'QToolBox_setItemEnabled'; function QToolBox_isItemEnabled(handle: QToolBoxH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QToolBox_isItemEnabled'; procedure QToolBox_setItemText(handle: QToolBoxH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QToolBox_setItemText'; procedure QToolBox_itemText(handle: QToolBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemText'; procedure QToolBox_setItemIcon(handle: QToolBoxH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QToolBox_setItemIcon'; procedure QToolBox_itemIcon(handle: QToolBoxH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemIcon'; procedure QToolBox_setItemToolTip(handle: QToolBoxH; index: Integer; toolTip: PWideString); cdecl; external Qt4PasLib name 'QToolBox_setItemToolTip'; procedure QToolBox_itemToolTip(handle: QToolBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemToolTip'; function QToolBox_currentIndex(handle: QToolBoxH): Integer; cdecl; external Qt4PasLib name 'QToolBox_currentIndex'; function QToolBox_currentWidget(handle: QToolBoxH): QWidgetH; cdecl; external Qt4PasLib name 'QToolBox_currentWidget'; function QToolBox_widget(handle: QToolBoxH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QToolBox_widget'; function QToolBox_indexOf(handle: QToolBoxH; widget: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QToolBox_indexOf'; function QToolBox_count(handle: QToolBoxH): Integer; cdecl; external Qt4PasLib name 'QToolBox_count'; procedure QToolBox_setCurrentIndex(handle: QToolBoxH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_setCurrentIndex'; procedure QToolBox_setCurrentWidget(handle: QToolBoxH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QToolBox_setCurrentWidget'; type QToolBox_currentChanged_Event = procedure (index: Integer) of object cdecl; type QToolButtonToolButtonPopupMode = ( // QToolButton::ToolButtonPopupMode (1) QToolButtonDelayedPopup, QToolButtonMenuButtonPopup, QToolButtonInstantPopup ); function QToolButton_create(parent: QWidgetH = nil): QToolButtonH; cdecl; external Qt4PasLib name 'QToolButton_create'; procedure QToolButton_destroy(handle: QToolButtonH); cdecl; external Qt4PasLib name 'QToolButton_destroy'; procedure QToolButton_sizeHint(handle: QToolButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QToolButton_sizeHint'; procedure QToolButton_minimumSizeHint(handle: QToolButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QToolButton_minimumSizeHint'; function QToolButton_toolButtonStyle(handle: QToolButtonH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QToolButton_toolButtonStyle'; function QToolButton_arrowType(handle: QToolButtonH): QtArrowType; cdecl; external Qt4PasLib name 'QToolButton_arrowType'; procedure QToolButton_setArrowType(handle: QToolButtonH; _type: QtArrowType); cdecl; external Qt4PasLib name 'QToolButton_setArrowType'; procedure QToolButton_setMenu(handle: QToolButtonH; menu: QMenuH); cdecl; external Qt4PasLib name 'QToolButton_setMenu'; function QToolButton_menu(handle: QToolButtonH): QMenuH; cdecl; external Qt4PasLib name 'QToolButton_menu'; procedure QToolButton_setPopupMode(handle: QToolButtonH; mode: QToolButtonToolButtonPopupMode); cdecl; external Qt4PasLib name 'QToolButton_setPopupMode'; function QToolButton_popupMode(handle: QToolButtonH): QToolButtonToolButtonPopupMode; cdecl; external Qt4PasLib name 'QToolButton_popupMode'; function QToolButton_defaultAction(handle: QToolButtonH): QActionH; cdecl; external Qt4PasLib name 'QToolButton_defaultAction'; procedure QToolButton_setAutoRaise(handle: QToolButtonH; enable: Boolean); cdecl; external Qt4PasLib name 'QToolButton_setAutoRaise'; function QToolButton_autoRaise(handle: QToolButtonH): Boolean; cdecl; external Qt4PasLib name 'QToolButton_autoRaise'; procedure QToolButton_showMenu(handle: QToolButtonH); cdecl; external Qt4PasLib name 'QToolButton_showMenu'; procedure QToolButton_setToolButtonStyle(handle: QToolButtonH; style: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QToolButton_setToolButtonStyle'; procedure QToolButton_setDefaultAction(handle: QToolButtonH; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QToolButton_setDefaultAction'; type QToolButton_triggered_Event = procedure (AnonParam1: QActionH) of object cdecl; function QScrollArea_create(parent: QWidgetH = nil): QScrollAreaH; cdecl; external Qt4PasLib name 'QScrollArea_create'; procedure QScrollArea_destroy(handle: QScrollAreaH); cdecl; external Qt4PasLib name 'QScrollArea_destroy'; function QScrollArea_widget(handle: QScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QScrollArea_widget'; procedure QScrollArea_setWidget(handle: QScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QScrollArea_setWidget'; function QScrollArea_takeWidget(handle: QScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QScrollArea_takeWidget'; function QScrollArea_widgetResizable(handle: QScrollAreaH): Boolean; cdecl; external Qt4PasLib name 'QScrollArea_widgetResizable'; procedure QScrollArea_setWidgetResizable(handle: QScrollAreaH; resizable: Boolean); cdecl; external Qt4PasLib name 'QScrollArea_setWidgetResizable'; procedure QScrollArea_sizeHint(handle: QScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QScrollArea_sizeHint'; function QScrollArea_focusNextPrevChild(handle: QScrollAreaH; next: Boolean): Boolean; cdecl; external Qt4PasLib name 'QScrollArea_focusNextPrevChild'; function QScrollArea_alignment(handle: QScrollAreaH): QtAlignment; cdecl; external Qt4PasLib name 'QScrollArea_alignment'; procedure QScrollArea_setAlignment(handle: QScrollAreaH; AnonParam1: QtAlignment); cdecl; external Qt4PasLib name 'QScrollArea_setAlignment'; procedure QScrollArea_ensureVisible(handle: QScrollAreaH; x: Integer; y: Integer; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QScrollArea_ensureVisible'; procedure QScrollArea_ensureWidgetVisible(handle: QScrollAreaH; childWidget: QWidgetH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QScrollArea_ensureWidgetVisible'; type QMdiAreaWindowOrder = ( // QMdiArea::WindowOrder (1) QMdiAreaCreationOrder, QMdiAreaStackingOrder, QMdiAreaActivationHistoryOrder ); QMdiAreaViewMode = ( // QMdiArea::ViewMode (1) QMdiAreaSubWindowView, QMdiAreaTabbedView ); type QMdiAreaAreaOption = cardinal; // QMdiArea::AreaOption QMdiAreaAreaOptions = QMdiAreaAreaOption; //QFlags<> (3) const QMdiAreaDontMaximizeSubWindowOnActivation = $1; function QMdiArea_create(parent: QWidgetH = nil): QMdiAreaH; cdecl; external Qt4PasLib name 'QMdiArea_create'; procedure QMdiArea_destroy(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_destroy'; procedure QMdiArea_sizeHint(handle: QMdiAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiArea_sizeHint'; procedure QMdiArea_minimumSizeHint(handle: QMdiAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiArea_minimumSizeHint'; function QMdiArea_currentSubWindow(handle: QMdiAreaH): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_currentSubWindow'; function QMdiArea_activeSubWindow(handle: QMdiAreaH): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_activeSubWindow'; procedure QMdiArea_subWindowList(handle: QMdiAreaH; retval: PPtrIntArray; order: QMdiAreaWindowOrder = QMdiAreaCreationOrder); cdecl; external Qt4PasLib name 'QMdiArea_subWindowList'; function QMdiArea_addSubWindow(handle: QMdiAreaH; widget: QWidgetH; flags: QtWindowFlags = 0): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_addSubWindow'; procedure QMdiArea_removeSubWindow(handle: QMdiAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMdiArea_removeSubWindow'; procedure QMdiArea_background(handle: QMdiAreaH; retval: QBrushH); cdecl; external Qt4PasLib name 'QMdiArea_background'; procedure QMdiArea_setBackground(handle: QMdiAreaH; background: QBrushH); cdecl; external Qt4PasLib name 'QMdiArea_setBackground'; function QMdiArea_activationOrder(handle: QMdiAreaH): QMdiAreaWindowOrder; cdecl; external Qt4PasLib name 'QMdiArea_activationOrder'; procedure QMdiArea_setActivationOrder(handle: QMdiAreaH; order: QMdiAreaWindowOrder); cdecl; external Qt4PasLib name 'QMdiArea_setActivationOrder'; procedure QMdiArea_setOption(handle: QMdiAreaH; option: QMdiAreaAreaOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QMdiArea_setOption'; function QMdiArea_testOption(handle: QMdiAreaH; opton: QMdiAreaAreaOption): Boolean; cdecl; external Qt4PasLib name 'QMdiArea_testOption'; procedure QMdiArea_setViewMode(handle: QMdiAreaH; mode: QMdiAreaViewMode); cdecl; external Qt4PasLib name 'QMdiArea_setViewMode'; function QMdiArea_viewMode(handle: QMdiAreaH): QMdiAreaViewMode; cdecl; external Qt4PasLib name 'QMdiArea_viewMode'; function QMdiArea_documentMode(handle: QMdiAreaH): Boolean; cdecl; external Qt4PasLib name 'QMdiArea_documentMode'; procedure QMdiArea_setDocumentMode(handle: QMdiAreaH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMdiArea_setDocumentMode'; procedure QMdiArea_setTabShape(handle: QMdiAreaH; shape: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QMdiArea_setTabShape'; function QMdiArea_tabShape(handle: QMdiAreaH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QMdiArea_tabShape'; procedure QMdiArea_setTabPosition(handle: QMdiAreaH; position: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QMdiArea_setTabPosition'; function QMdiArea_tabPosition(handle: QMdiAreaH): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QMdiArea_tabPosition'; procedure QMdiArea_setActiveSubWindow(handle: QMdiAreaH; window: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiArea_setActiveSubWindow'; procedure QMdiArea_tileSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_tileSubWindows'; procedure QMdiArea_cascadeSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_cascadeSubWindows'; procedure QMdiArea_closeActiveSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_closeActiveSubWindow'; procedure QMdiArea_closeAllSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_closeAllSubWindows'; procedure QMdiArea_activateNextSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_activateNextSubWindow'; procedure QMdiArea_activatePreviousSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_activatePreviousSubWindow'; type QMdiArea_subWindowActivated_Event = procedure (AnonParam1: QMdiSubWindowH) of object cdecl; type QMdiSubWindowSubWindowOption = cardinal; // QMdiSubWindow::SubWindowOption QMdiSubWindowSubWindowOptions = QMdiSubWindowSubWindowOption; //QFlags<> (3) const QMdiSubWindowAllowOutsideAreaHorizontally = $1; QMdiSubWindowAllowOutsideAreaVertically = $2; QMdiSubWindowRubberBandResize = $4; QMdiSubWindowRubberBandMove = $8; function QMdiSubWindow_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiSubWindow_create'; procedure QMdiSubWindow_destroy(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_destroy'; procedure QMdiSubWindow_sizeHint(handle: QMdiSubWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiSubWindow_sizeHint'; procedure QMdiSubWindow_minimumSizeHint(handle: QMdiSubWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiSubWindow_minimumSizeHint'; procedure QMdiSubWindow_setWidget(handle: QMdiSubWindowH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMdiSubWindow_setWidget'; function QMdiSubWindow_widget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_widget'; function QMdiSubWindow_maximizedButtonsWidget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_maximizedButtonsWidget'; function QMdiSubWindow_maximizedSystemMenuIconWidget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_maximizedSystemMenuIconWidget'; function QMdiSubWindow_isShaded(handle: QMdiSubWindowH): Boolean; cdecl; external Qt4PasLib name 'QMdiSubWindow_isShaded'; procedure QMdiSubWindow_setOption(handle: QMdiSubWindowH; option: QMdiSubWindowSubWindowOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QMdiSubWindow_setOption'; function QMdiSubWindow_testOption(handle: QMdiSubWindowH; AnonParam1: QMdiSubWindowSubWindowOption): Boolean; cdecl; external Qt4PasLib name 'QMdiSubWindow_testOption'; procedure QMdiSubWindow_setKeyboardSingleStep(handle: QMdiSubWindowH; step: Integer); cdecl; external Qt4PasLib name 'QMdiSubWindow_setKeyboardSingleStep'; function QMdiSubWindow_keyboardSingleStep(handle: QMdiSubWindowH): Integer; cdecl; external Qt4PasLib name 'QMdiSubWindow_keyboardSingleStep'; procedure QMdiSubWindow_setKeyboardPageStep(handle: QMdiSubWindowH; step: Integer); cdecl; external Qt4PasLib name 'QMdiSubWindow_setKeyboardPageStep'; function QMdiSubWindow_keyboardPageStep(handle: QMdiSubWindowH): Integer; cdecl; external Qt4PasLib name 'QMdiSubWindow_keyboardPageStep'; procedure QMdiSubWindow_setSystemMenu(handle: QMdiSubWindowH; systemMenu: QMenuH); cdecl; external Qt4PasLib name 'QMdiSubWindow_setSystemMenu'; function QMdiSubWindow_systemMenu(handle: QMdiSubWindowH): QMenuH; cdecl; external Qt4PasLib name 'QMdiSubWindow_systemMenu'; function QMdiSubWindow_mdiArea(handle: QMdiSubWindowH): QMdiAreaH; cdecl; external Qt4PasLib name 'QMdiSubWindow_mdiArea'; procedure QMdiSubWindow_showSystemMenu(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_showSystemMenu'; procedure QMdiSubWindow_showShaded(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_showShaded'; type QMdiSubWindow_windowStateChanged_Event = procedure (oldState: QtWindowStates; newState: QtWindowStates) of object cdecl; QMdiSubWindow_aboutToActivate_Event = procedure () of object cdecl; type QCalendarWidgetHorizontalHeaderFormat = ( // QCalendarWidget::HorizontalHeaderFormat (1) QCalendarWidgetNoHorizontalHeader, QCalendarWidgetSingleLetterDayNames, QCalendarWidgetShortDayNames, QCalendarWidgetLongDayNames ); QCalendarWidgetVerticalHeaderFormat = ( // QCalendarWidget::VerticalHeaderFormat (1) QCalendarWidgetNoVerticalHeader, QCalendarWidgetISOWeekNumbers ); QCalendarWidgetSelectionMode = ( // QCalendarWidget::SelectionMode (1) QCalendarWidgetNoSelection, QCalendarWidgetSingleSelection ); function QCalendarWidget_create(parent: QWidgetH = nil): QCalendarWidgetH; cdecl; external Qt4PasLib name 'QCalendarWidget_create'; procedure QCalendarWidget_destroy(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_destroy'; procedure QCalendarWidget_sizeHint(handle: QCalendarWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QCalendarWidget_sizeHint'; procedure QCalendarWidget_minimumSizeHint(handle: QCalendarWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QCalendarWidget_minimumSizeHint'; procedure QCalendarWidget_selectedDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_selectedDate'; function QCalendarWidget_yearShown(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_yearShown'; function QCalendarWidget_monthShown(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_monthShown'; procedure QCalendarWidget_minimumDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_minimumDate'; procedure QCalendarWidget_setMinimumDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setMinimumDate'; procedure QCalendarWidget_maximumDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_maximumDate'; procedure QCalendarWidget_setMaximumDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setMaximumDate'; function QCalendarWidget_firstDayOfWeek(handle: QCalendarWidgetH): QtDayOfWeek; cdecl; external Qt4PasLib name 'QCalendarWidget_firstDayOfWeek'; procedure QCalendarWidget_setFirstDayOfWeek(handle: QCalendarWidgetH; dayOfWeek: QtDayOfWeek); cdecl; external Qt4PasLib name 'QCalendarWidget_setFirstDayOfWeek'; function QCalendarWidget_isHeaderVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isHeaderVisible'; procedure QCalendarWidget_setHeaderVisible(handle: QCalendarWidgetH; show: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setHeaderVisible'; function QCalendarWidget_isNavigationBarVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isNavigationBarVisible'; function QCalendarWidget_isGridVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isGridVisible'; function QCalendarWidget_selectionMode(handle: QCalendarWidgetH): QCalendarWidgetSelectionMode; cdecl; external Qt4PasLib name 'QCalendarWidget_selectionMode'; procedure QCalendarWidget_setSelectionMode(handle: QCalendarWidgetH; mode: QCalendarWidgetSelectionMode); cdecl; external Qt4PasLib name 'QCalendarWidget_setSelectionMode'; function QCalendarWidget_horizontalHeaderFormat(handle: QCalendarWidgetH): QCalendarWidgetHorizontalHeaderFormat; cdecl; external Qt4PasLib name 'QCalendarWidget_horizontalHeaderFormat'; procedure QCalendarWidget_setHorizontalHeaderFormat(handle: QCalendarWidgetH; format: QCalendarWidgetHorizontalHeaderFormat); cdecl; external Qt4PasLib name 'QCalendarWidget_setHorizontalHeaderFormat'; function QCalendarWidget_verticalHeaderFormat(handle: QCalendarWidgetH): QCalendarWidgetVerticalHeaderFormat; cdecl; external Qt4PasLib name 'QCalendarWidget_verticalHeaderFormat'; procedure QCalendarWidget_setVerticalHeaderFormat(handle: QCalendarWidgetH; format: QCalendarWidgetVerticalHeaderFormat); cdecl; external Qt4PasLib name 'QCalendarWidget_setVerticalHeaderFormat'; procedure QCalendarWidget_headerTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_headerTextFormat'; procedure QCalendarWidget_setHeaderTextFormat(handle: QCalendarWidgetH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setHeaderTextFormat'; procedure QCalendarWidget_weekdayTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH; dayOfWeek: QtDayOfWeek); cdecl; external Qt4PasLib name 'QCalendarWidget_weekdayTextFormat'; procedure QCalendarWidget_setWeekdayTextFormat(handle: QCalendarWidgetH; dayOfWeek: QtDayOfWeek; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setWeekdayTextFormat'; procedure QCalendarWidget_dateTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_dateTextFormat2'; procedure QCalendarWidget_setDateTextFormat(handle: QCalendarWidgetH; date: QDateH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateTextFormat'; function QCalendarWidget_isDateEditEnabled(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isDateEditEnabled'; procedure QCalendarWidget_setDateEditEnabled(handle: QCalendarWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateEditEnabled'; function QCalendarWidget_dateEditAcceptDelay(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_dateEditAcceptDelay'; procedure QCalendarWidget_setDateEditAcceptDelay(handle: QCalendarWidgetH; delay: Integer); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateEditAcceptDelay'; procedure QCalendarWidget_setSelectedDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setSelectedDate'; procedure QCalendarWidget_setDateRange(handle: QCalendarWidgetH; min: QDateH; max: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateRange'; procedure QCalendarWidget_setCurrentPage(handle: QCalendarWidgetH; year: Integer; month: Integer); cdecl; external Qt4PasLib name 'QCalendarWidget_setCurrentPage'; procedure QCalendarWidget_setGridVisible(handle: QCalendarWidgetH; show: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setGridVisible'; procedure QCalendarWidget_setNavigationBarVisible(handle: QCalendarWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setNavigationBarVisible'; procedure QCalendarWidget_showNextMonth(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showNextMonth'; procedure QCalendarWidget_showPreviousMonth(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showPreviousMonth'; procedure QCalendarWidget_showNextYear(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showNextYear'; procedure QCalendarWidget_showPreviousYear(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showPreviousYear'; procedure QCalendarWidget_showSelectedDate(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showSelectedDate'; procedure QCalendarWidget_showToday(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showToday'; type QCalendarWidget_selectionChanged_Event = procedure () of object cdecl; QCalendarWidget_clicked_Event = procedure (date: QDateH) of object cdecl; QCalendarWidget_activated_Event = procedure (date: QDateH) of object cdecl; QCalendarWidget_currentPageChanged_Event = procedure (year: Integer; month: Integer) of object cdecl; type QRubberBandShape = ( // QRubberBand::Shape (1) QRubberBandLine, QRubberBandRectangle ); function QRubberBand_create(AnonParam1: QRubberBandShape; AnonParam2: QWidgetH = nil): QRubberBandH; cdecl; external Qt4PasLib name 'QRubberBand_create'; procedure QRubberBand_destroy(handle: QRubberBandH); cdecl; external Qt4PasLib name 'QRubberBand_destroy'; function QRubberBand_shape(handle: QRubberBandH): QRubberBandShape; cdecl; external Qt4PasLib name 'QRubberBand_shape'; procedure QRubberBand_setGeometry(handle: QRubberBandH; r: PRect); cdecl; external Qt4PasLib name 'QRubberBand_setGeometry'; procedure QRubberBand_setGeometry(handle: QRubberBandH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRubberBand_setGeometry2'; procedure QRubberBand_move(handle: QRubberBandH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QRubberBand_move'; procedure QRubberBand_move(handle: QRubberBandH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRubberBand_move2'; procedure QRubberBand_resize(handle: QRubberBandH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRubberBand_resize'; procedure QRubberBand_resize(handle: QRubberBandH; s: PSize); cdecl; external Qt4PasLib name 'QRubberBand_resize2'; type QPrintPreviewWidgetViewMode = ( // QPrintPreviewWidget::ViewMode (1) QPrintPreviewWidgetSinglePageView, QPrintPreviewWidgetFacingPagesView, QPrintPreviewWidgetAllPagesView ); QPrintPreviewWidgetZoomMode = ( // QPrintPreviewWidget::ZoomMode (1) QPrintPreviewWidgetCustomZoom, QPrintPreviewWidgetFitToWidth, QPrintPreviewWidgetFitInView ); function QPrintPreviewWidget_create(printer: QPrinterH; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewWidgetH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_create'; procedure QPrintPreviewWidget_destroy(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_destroy'; function QPrintPreviewWidget_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewWidgetH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_create2'; function QPrintPreviewWidget_zoomFactor(handle: QPrintPreviewWidgetH): qreal; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomFactor'; function QPrintPreviewWidget_orientation(handle: QPrintPreviewWidgetH): QPrinterOrientation; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_orientation'; function QPrintPreviewWidget_viewMode(handle: QPrintPreviewWidgetH): QPrintPreviewWidgetViewMode; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_viewMode'; function QPrintPreviewWidget_zoomMode(handle: QPrintPreviewWidgetH): QPrintPreviewWidgetZoomMode; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomMode'; function QPrintPreviewWidget_currentPage(handle: QPrintPreviewWidgetH): Integer; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_currentPage'; function QPrintPreviewWidget_numPages(handle: QPrintPreviewWidgetH): Integer; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_numPages'; procedure QPrintPreviewWidget_setVisible(handle: QPrintPreviewWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setVisible'; procedure QPrintPreviewWidget_print(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_print'; procedure QPrintPreviewWidget_zoomIn(handle: QPrintPreviewWidgetH; zoom: qreal = 1.1); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomIn'; procedure QPrintPreviewWidget_zoomOut(handle: QPrintPreviewWidgetH; zoom: qreal = 1.1); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomOut'; procedure QPrintPreviewWidget_setZoomFactor(handle: QPrintPreviewWidgetH; zoomFactor: qreal); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setZoomFactor'; procedure QPrintPreviewWidget_setOrientation(handle: QPrintPreviewWidgetH; orientation: QPrinterOrientation); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setOrientation'; procedure QPrintPreviewWidget_setViewMode(handle: QPrintPreviewWidgetH; viewMode: QPrintPreviewWidgetViewMode); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setViewMode'; procedure QPrintPreviewWidget_setZoomMode(handle: QPrintPreviewWidgetH; zoomMode: QPrintPreviewWidgetZoomMode); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setZoomMode'; procedure QPrintPreviewWidget_setCurrentPage(handle: QPrintPreviewWidgetH; pageNumber: Integer); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setCurrentPage'; procedure QPrintPreviewWidget_fitToWidth(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_fitToWidth'; procedure QPrintPreviewWidget_fitInView(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_fitInView'; procedure QPrintPreviewWidget_setLandscapeOrientation(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setLandscapeOrientation'; procedure QPrintPreviewWidget_setPortraitOrientation(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setPortraitOrientation'; procedure QPrintPreviewWidget_setSinglePageViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setSinglePageViewMode'; procedure QPrintPreviewWidget_setFacingPagesViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setFacingPagesViewMode'; procedure QPrintPreviewWidget_setAllPagesViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setAllPagesViewMode'; procedure QPrintPreviewWidget_updatePreview(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_updatePreview'; type QPrintPreviewWidget_paintRequested_Event = procedure (printer: QPrinterH) of object cdecl; QPrintPreviewWidget_previewChanged_Event = procedure () of object cdecl; type QAbstractItemViewSelectionMode = ( // QAbstractItemView::SelectionMode (1) QAbstractItemViewNoSelection, QAbstractItemViewSingleSelection, QAbstractItemViewMultiSelection, QAbstractItemViewExtendedSelection, QAbstractItemViewContiguousSelection ); QAbstractItemViewSelectionBehavior = ( // QAbstractItemView::SelectionBehavior (1) QAbstractItemViewSelectItems, QAbstractItemViewSelectRows, QAbstractItemViewSelectColumns ); QAbstractItemViewScrollHint = ( // QAbstractItemView::ScrollHint (1) QAbstractItemViewEnsureVisible, QAbstractItemViewPositionAtTop, QAbstractItemViewPositionAtBottom, QAbstractItemViewPositionAtCenter ); QAbstractItemViewScrollMode = ( // QAbstractItemView::ScrollMode (1) QAbstractItemViewScrollPerItem, QAbstractItemViewScrollPerPixel ); QAbstractItemViewDragDropMode = ( // QAbstractItemView::DragDropMode (1) QAbstractItemViewNoDragDrop, QAbstractItemViewDragOnly, QAbstractItemViewDropOnly, QAbstractItemViewDragDrop, QAbstractItemViewInternalMove ); type QAbstractItemViewEditTrigger = cardinal; // QAbstractItemView::EditTrigger QAbstractItemViewEditTriggers = QAbstractItemViewEditTrigger; //QFlags<> (3) const QAbstractItemViewNoEditTriggers = 0; QAbstractItemViewCurrentChanged = 1; QAbstractItemViewDoubleClicked = 2; QAbstractItemViewSelectedClicked = 4; QAbstractItemViewEditKeyPressed = 8; QAbstractItemViewAnyKeyPressed = 16; QAbstractItemViewAllEditTriggers = 31; procedure QAbstractItemView_setModel(handle: QAbstractItemViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QAbstractItemView_setModel'; function QAbstractItemView_model(handle: QAbstractItemViewH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QAbstractItemView_model'; procedure QAbstractItemView_setSelectionModel(handle: QAbstractItemViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionModel'; function QAbstractItemView_selectionModel(handle: QAbstractItemViewH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionModel'; procedure QAbstractItemView_setItemDelegate(handle: QAbstractItemViewH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegate'; function QAbstractItemView_itemDelegate(handle: QAbstractItemViewH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegate'; procedure QAbstractItemView_setSelectionMode(handle: QAbstractItemViewH; mode: QAbstractItemViewSelectionMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionMode'; function QAbstractItemView_selectionMode(handle: QAbstractItemViewH): QAbstractItemViewSelectionMode; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionMode'; procedure QAbstractItemView_setSelectionBehavior(handle: QAbstractItemViewH; behavior: QAbstractItemViewSelectionBehavior); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionBehavior'; function QAbstractItemView_selectionBehavior(handle: QAbstractItemViewH): QAbstractItemViewSelectionBehavior; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionBehavior'; procedure QAbstractItemView_currentIndex(handle: QAbstractItemViewH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_currentIndex'; procedure QAbstractItemView_rootIndex(handle: QAbstractItemViewH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_rootIndex'; procedure QAbstractItemView_setEditTriggers(handle: QAbstractItemViewH; triggers: QAbstractItemViewEditTriggers); cdecl; external Qt4PasLib name 'QAbstractItemView_setEditTriggers'; function QAbstractItemView_editTriggers(handle: QAbstractItemViewH): QAbstractItemViewEditTriggers; cdecl; external Qt4PasLib name 'QAbstractItemView_editTriggers'; procedure QAbstractItemView_setVerticalScrollMode(handle: QAbstractItemViewH; mode: QAbstractItemViewScrollMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setVerticalScrollMode'; function QAbstractItemView_verticalScrollMode(handle: QAbstractItemViewH): QAbstractItemViewScrollMode; cdecl; external Qt4PasLib name 'QAbstractItemView_verticalScrollMode'; procedure QAbstractItemView_setHorizontalScrollMode(handle: QAbstractItemViewH; mode: QAbstractItemViewScrollMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setHorizontalScrollMode'; function QAbstractItemView_horizontalScrollMode(handle: QAbstractItemViewH): QAbstractItemViewScrollMode; cdecl; external Qt4PasLib name 'QAbstractItemView_horizontalScrollMode'; procedure QAbstractItemView_setAutoScroll(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setAutoScroll'; function QAbstractItemView_hasAutoScroll(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_hasAutoScroll'; procedure QAbstractItemView_setAutoScrollMargin(handle: QAbstractItemViewH; margin: Integer); cdecl; external Qt4PasLib name 'QAbstractItemView_setAutoScrollMargin'; function QAbstractItemView_autoScrollMargin(handle: QAbstractItemViewH): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_autoScrollMargin'; procedure QAbstractItemView_setTabKeyNavigation(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setTabKeyNavigation'; function QAbstractItemView_tabKeyNavigation(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_tabKeyNavigation'; procedure QAbstractItemView_setDropIndicatorShown(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDropIndicatorShown'; function QAbstractItemView_showDropIndicator(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_showDropIndicator'; procedure QAbstractItemView_setDragEnabled(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragEnabled'; function QAbstractItemView_dragEnabled(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_dragEnabled'; procedure QAbstractItemView_setDragDropOverwriteMode(handle: QAbstractItemViewH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragDropOverwriteMode'; function QAbstractItemView_dragDropOverwriteMode(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_dragDropOverwriteMode'; procedure QAbstractItemView_setDragDropMode(handle: QAbstractItemViewH; behavior: QAbstractItemViewDragDropMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragDropMode'; function QAbstractItemView_dragDropMode(handle: QAbstractItemViewH): QAbstractItemViewDragDropMode; cdecl; external Qt4PasLib name 'QAbstractItemView_dragDropMode'; procedure QAbstractItemView_setAlternatingRowColors(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setAlternatingRowColors'; function QAbstractItemView_alternatingRowColors(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_alternatingRowColors'; procedure QAbstractItemView_setIconSize(handle: QAbstractItemViewH; size: PSize); cdecl; external Qt4PasLib name 'QAbstractItemView_setIconSize'; procedure QAbstractItemView_iconSize(handle: QAbstractItemViewH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractItemView_iconSize'; procedure QAbstractItemView_setTextElideMode(handle: QAbstractItemViewH; mode: QtTextElideMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setTextElideMode'; function QAbstractItemView_textElideMode(handle: QAbstractItemViewH): QtTextElideMode; cdecl; external Qt4PasLib name 'QAbstractItemView_textElideMode'; procedure QAbstractItemView_keyboardSearch(handle: QAbstractItemViewH; search: PWideString); cdecl; external Qt4PasLib name 'QAbstractItemView_keyboardSearch'; procedure QAbstractItemView_visualRect(handle: QAbstractItemViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_visualRect'; procedure QAbstractItemView_scrollTo(handle: QAbstractItemViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint = QAbstractItemViewEnsureVisible); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollTo'; procedure QAbstractItemView_indexAt(handle: QAbstractItemViewH; retval: QModelIndexH; point: PQtPoint); cdecl; external Qt4PasLib name 'QAbstractItemView_indexAt'; procedure QAbstractItemView_sizeHintForIndex(handle: QAbstractItemViewH; retval: PSize; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForIndex'; function QAbstractItemView_sizeHintForRow(handle: QAbstractItemViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForRow'; function QAbstractItemView_sizeHintForColumn(handle: QAbstractItemViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForColumn'; procedure QAbstractItemView_openPersistentEditor(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_openPersistentEditor'; procedure QAbstractItemView_closePersistentEditor(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_closePersistentEditor'; procedure QAbstractItemView_setIndexWidget(handle: QAbstractItemViewH; index: QModelIndexH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractItemView_setIndexWidget'; function QAbstractItemView_indexWidget(handle: QAbstractItemViewH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractItemView_indexWidget'; procedure QAbstractItemView_setItemDelegateForRow(handle: QAbstractItemViewH; row: Integer; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegateForRow'; function QAbstractItemView_itemDelegateForRow(handle: QAbstractItemViewH; row: Integer): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegateForRow'; procedure QAbstractItemView_setItemDelegateForColumn(handle: QAbstractItemViewH; column: Integer; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegateForColumn'; function QAbstractItemView_itemDelegateForColumn(handle: QAbstractItemViewH; column: Integer): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegateForColumn'; function QAbstractItemView_itemDelegate(handle: QAbstractItemViewH; index: QModelIndexH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegate2'; procedure QAbstractItemView_inputMethodQuery(handle: QAbstractItemViewH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QAbstractItemView_inputMethodQuery'; procedure QAbstractItemView_reset(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_reset'; procedure QAbstractItemView_setRootIndex(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_setRootIndex'; procedure QAbstractItemView_doItemsLayout(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_doItemsLayout'; procedure QAbstractItemView_selectAll(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_selectAll'; procedure QAbstractItemView_edit(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_edit'; procedure QAbstractItemView_clearSelection(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_clearSelection'; procedure QAbstractItemView_setCurrentIndex(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_setCurrentIndex'; procedure QAbstractItemView_scrollToTop(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollToTop'; procedure QAbstractItemView_scrollToBottom(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollToBottom'; procedure QAbstractItemView_update(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_update'; type QAbstractItemView_pressed_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_clicked_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_doubleClicked_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_activated_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_entered_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_viewportEntered_Event = procedure () of object cdecl; type QListViewMovement = ( // QListView::Movement (1) QListViewStatic, QListViewFree, QListViewSnap ); QListViewFlow = ( // QListView::Flow (1) QListViewLeftToRight, QListViewTopToBottom ); QListViewResizeMode = ( // QListView::ResizeMode (1) QListViewFixed, QListViewAdjust ); QListViewLayoutMode = ( // QListView::LayoutMode (1) QListViewSinglePass, QListViewBatched ); QListViewViewMode = ( // QListView::ViewMode (1) QListViewListMode, QListViewIconMode ); function QListView_create(parent: QWidgetH = nil): QListViewH; cdecl; external Qt4PasLib name 'QListView_create'; procedure QListView_destroy(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_destroy'; procedure QListView_setMovement(handle: QListViewH; movement: QListViewMovement); cdecl; external Qt4PasLib name 'QListView_setMovement'; function QListView_movement(handle: QListViewH): QListViewMovement; cdecl; external Qt4PasLib name 'QListView_movement'; procedure QListView_setFlow(handle: QListViewH; flow: QListViewFlow); cdecl; external Qt4PasLib name 'QListView_setFlow'; function QListView_flow(handle: QListViewH): QListViewFlow; cdecl; external Qt4PasLib name 'QListView_flow'; procedure QListView_setWrapping(handle: QListViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QListView_setWrapping'; function QListView_isWrapping(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_isWrapping'; procedure QListView_setResizeMode(handle: QListViewH; mode: QListViewResizeMode); cdecl; external Qt4PasLib name 'QListView_setResizeMode'; function QListView_resizeMode(handle: QListViewH): QListViewResizeMode; cdecl; external Qt4PasLib name 'QListView_resizeMode'; procedure QListView_setLayoutMode(handle: QListViewH; mode: QListViewLayoutMode); cdecl; external Qt4PasLib name 'QListView_setLayoutMode'; function QListView_layoutMode(handle: QListViewH): QListViewLayoutMode; cdecl; external Qt4PasLib name 'QListView_layoutMode'; procedure QListView_setSpacing(handle: QListViewH; space: Integer); cdecl; external Qt4PasLib name 'QListView_setSpacing'; function QListView_spacing(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_spacing'; procedure QListView_setBatchSize(handle: QListViewH; batchSize: Integer); cdecl; external Qt4PasLib name 'QListView_setBatchSize'; function QListView_batchSize(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_batchSize'; procedure QListView_setGridSize(handle: QListViewH; size: PSize); cdecl; external Qt4PasLib name 'QListView_setGridSize'; procedure QListView_gridSize(handle: QListViewH; retval: PSize); cdecl; external Qt4PasLib name 'QListView_gridSize'; procedure QListView_setViewMode(handle: QListViewH; mode: QListViewViewMode); cdecl; external Qt4PasLib name 'QListView_setViewMode'; function QListView_viewMode(handle: QListViewH): QListViewViewMode; cdecl; external Qt4PasLib name 'QListView_viewMode'; procedure QListView_clearPropertyFlags(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_clearPropertyFlags'; function QListView_isRowHidden(handle: QListViewH; row: Integer): Boolean; cdecl; external Qt4PasLib name 'QListView_isRowHidden'; procedure QListView_setRowHidden(handle: QListViewH; row: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QListView_setRowHidden'; procedure QListView_setModelColumn(handle: QListViewH; column: Integer); cdecl; external Qt4PasLib name 'QListView_setModelColumn'; function QListView_modelColumn(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_modelColumn'; procedure QListView_setUniformItemSizes(handle: QListViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QListView_setUniformItemSizes'; function QListView_uniformItemSizes(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_uniformItemSizes'; procedure QListView_setWordWrap(handle: QListViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QListView_setWordWrap'; function QListView_wordWrap(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_wordWrap'; procedure QListView_setSelectionRectVisible(handle: QListViewH; show: Boolean); cdecl; external Qt4PasLib name 'QListView_setSelectionRectVisible'; function QListView_isSelectionRectVisible(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_isSelectionRectVisible'; procedure QListView_visualRect(handle: QListViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QListView_visualRect'; procedure QListView_scrollTo(handle: QListViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QListView_scrollTo'; procedure QListView_indexAt(handle: QListViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QListView_indexAt'; procedure QListView_doItemsLayout(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_doItemsLayout'; procedure QListView_reset(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_reset'; procedure QListView_setRootIndex(handle: QListViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QListView_setRootIndex'; type QItemSelectionModelSelectionFlag = cardinal; // QItemSelectionModel::SelectionFlag (4) QItemSelectionModelSelectionFlags = QItemSelectionModelSelectionFlag; // QFlags<> const QItemSelectionModelNoUpdate = 0 { $0 }; QItemSelectionModelClear = 1 { $1 }; QItemSelectionModelSelect = 2 { $2 }; QItemSelectionModelDeselect = 4 { $4 }; QItemSelectionModelToggle = 8 { $8 }; QItemSelectionModelCurrent = 16 { $10 }; QItemSelectionModelRows = 32 { $20 }; QItemSelectionModelColumns = 64 { $40 }; QItemSelectionModelSelectCurrent = 18 { $12 }; QItemSelectionModelToggleCurrent = 24 { $18 }; QItemSelectionModelClearAndSelect = 3 { $3 }; function QItemSelectionRange_create(): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create'; procedure QItemSelectionRange_destroy(handle: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_destroy'; function QItemSelectionRange_create(other: QItemSelectionRangeH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create2'; function QItemSelectionRange_create(topLeft: QModelIndexH; bottomRight: QModelIndexH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create3'; function QItemSelectionRange_create(index: QModelIndexH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create4'; function QItemSelectionRange_top(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_top'; function QItemSelectionRange_left(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_left'; function QItemSelectionRange_bottom(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_bottom'; function QItemSelectionRange_right(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_right'; function QItemSelectionRange_width(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_width'; function QItemSelectionRange_height(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_height'; procedure QItemSelectionRange_topLeft(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_topLeft'; procedure QItemSelectionRange_bottomRight(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_bottomRight'; procedure QItemSelectionRange_parent(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_parent'; function QItemSelectionRange_model(handle: QItemSelectionRangeH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QItemSelectionRange_model'; function QItemSelectionRange_contains(handle: QItemSelectionRangeH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_contains'; function QItemSelectionRange_contains(handle: QItemSelectionRangeH; row: Integer; column: Integer; parentIndex: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_contains2'; function QItemSelectionRange_intersects(handle: QItemSelectionRangeH; other: QItemSelectionRangeH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_intersects'; procedure QItemSelectionRange_intersect(handle: QItemSelectionRangeH; retval: QItemSelectionRangeH; other: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_intersect'; procedure QItemSelectionRange_intersected(handle: QItemSelectionRangeH; retval: QItemSelectionRangeH; other: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_intersected'; function QItemSelectionRange_isValid(handle: QItemSelectionRangeH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_isValid'; procedure QItemSelectionRange_indexes(handle: QItemSelectionRangeH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QItemSelectionRange_indexes'; function QItemSelectionModel_create(model: QAbstractItemModelH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_create'; procedure QItemSelectionModel_destroy(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_destroy'; function QItemSelectionModel_create(model: QAbstractItemModelH; parent: QObjectH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_create2'; procedure QItemSelectionModel_currentIndex(handle: QItemSelectionModelH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionModel_currentIndex'; function QItemSelectionModel_isSelected(handle: QItemSelectionModelH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isSelected'; function QItemSelectionModel_isRowSelected(handle: QItemSelectionModelH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isRowSelected'; function QItemSelectionModel_isColumnSelected(handle: QItemSelectionModelH; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isColumnSelected'; function QItemSelectionModel_rowIntersectsSelection(handle: QItemSelectionModelH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_rowIntersectsSelection'; function QItemSelectionModel_columnIntersectsSelection(handle: QItemSelectionModelH; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_columnIntersectsSelection'; function QItemSelectionModel_hasSelection(handle: QItemSelectionModelH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_hasSelection'; procedure QItemSelectionModel_selectedIndexes(handle: QItemSelectionModelH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedIndexes'; procedure QItemSelectionModel_selectedRows(handle: QItemSelectionModelH; retval: PPtrIntArray; column: Integer = 0); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedRows'; procedure QItemSelectionModel_selectedColumns(handle: QItemSelectionModelH; retval: PPtrIntArray; row: Integer = 0); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedColumns'; function QItemSelectionModel_model(handle: QItemSelectionModelH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_model'; procedure QItemSelectionModel_setCurrentIndex(handle: QItemSelectionModelH; index: QModelIndexH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QItemSelectionModel_setCurrentIndex'; procedure QItemSelectionModel_select(handle: QItemSelectionModelH; index: QModelIndexH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QItemSelectionModel_select'; procedure QItemSelectionModel_clear(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_clear'; procedure QItemSelectionModel_reset(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_reset'; procedure QItemSelectionModel_clearSelection(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_clearSelection'; type QItemSelectionModel_currentChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; QItemSelectionModel_currentRowChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; QItemSelectionModel_currentColumnChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; type QListWidgetItemItemType = ( //QListWidgetItem::ItemType (2) QListWidgetItemType = 0, QListWidgetItemUserType = 1000 ); function QListWidgetItem_create(view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create'; procedure QListWidgetItem_destroy(handle: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidgetItem_destroy'; function QListWidgetItem_create(text: PWideString; view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create2'; function QListWidgetItem_create(icon: QIconH; text: PWideString; view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create3'; function QListWidgetItem_create(other: QListWidgetItemH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create4'; function QListWidgetItem_clone(handle: QListWidgetItemH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_clone'; function QListWidgetItem_listWidget(handle: QListWidgetItemH): QListWidgetH; cdecl; external Qt4PasLib name 'QListWidgetItem_listWidget'; procedure QListWidgetItem_setSelected(handle: QListWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QListWidgetItem_setSelected'; function QListWidgetItem_isSelected(handle: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidgetItem_isSelected'; procedure QListWidgetItem_setHidden(handle: QListWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QListWidgetItem_setHidden'; function QListWidgetItem_isHidden(handle: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidgetItem_isHidden'; function QListWidgetItem_flags(handle: QListWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QListWidgetItem_flags'; procedure QListWidgetItem_setFlags(handle: QListWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QListWidgetItem_setFlags'; procedure QListWidgetItem_text(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_text'; procedure QListWidgetItem_setText(handle: QListWidgetItemH; text: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setText'; procedure QListWidgetItem_icon(handle: QListWidgetItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QListWidgetItem_icon'; procedure QListWidgetItem_setIcon(handle: QListWidgetItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QListWidgetItem_setIcon'; procedure QListWidgetItem_statusTip(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_statusTip'; procedure QListWidgetItem_setStatusTip(handle: QListWidgetItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setStatusTip'; procedure QListWidgetItem_toolTip(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_toolTip'; procedure QListWidgetItem_setToolTip(handle: QListWidgetItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setToolTip'; procedure QListWidgetItem_whatsThis(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_whatsThis'; procedure QListWidgetItem_setWhatsThis(handle: QListWidgetItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setWhatsThis'; procedure QListWidgetItem_font(handle: QListWidgetItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QListWidgetItem_font'; procedure QListWidgetItem_setFont(handle: QListWidgetItemH; font: QFontH); cdecl; external Qt4PasLib name 'QListWidgetItem_setFont'; function QListWidgetItem_textAlignment(handle: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidgetItem_textAlignment'; procedure QListWidgetItem_setTextAlignment(handle: QListWidgetItemH; alignment: Integer); cdecl; external Qt4PasLib name 'QListWidgetItem_setTextAlignment'; procedure QListWidgetItem_backgroundColor(handle: QListWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_backgroundColor'; procedure QListWidgetItem_setBackgroundColor(handle: QListWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_setBackgroundColor'; procedure QListWidgetItem_background(handle: QListWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_background'; procedure QListWidgetItem_setBackground(handle: QListWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_setBackground'; procedure QListWidgetItem_textColor(handle: QListWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_textColor'; procedure QListWidgetItem_setTextColor(handle: QListWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_setTextColor'; procedure QListWidgetItem_foreground(handle: QListWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_foreground'; procedure QListWidgetItem_setForeground(handle: QListWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_setForeground'; function QListWidgetItem_checkState(handle: QListWidgetItemH): QtCheckState; cdecl; external Qt4PasLib name 'QListWidgetItem_checkState'; procedure QListWidgetItem_setCheckState(handle: QListWidgetItemH; state: QtCheckState); cdecl; external Qt4PasLib name 'QListWidgetItem_setCheckState'; procedure QListWidgetItem_sizeHint(handle: QListWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QListWidgetItem_sizeHint'; procedure QListWidgetItem_setSizeHint(handle: QListWidgetItemH; size: PSize); cdecl; external Qt4PasLib name 'QListWidgetItem_setSizeHint'; procedure QListWidgetItem_data(handle: QListWidgetItemH; retval: QVariantH; role: Integer); cdecl; external Qt4PasLib name 'QListWidgetItem_data'; procedure QListWidgetItem_setData(handle: QListWidgetItemH; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QListWidgetItem_setData'; procedure QListWidgetItem_read(handle: QListWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QListWidgetItem_read'; procedure QListWidgetItem_write(handle: QListWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QListWidgetItem_write'; function QListWidgetItem_type(handle: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidgetItem_type'; function QListWidget_create(parent: QWidgetH = nil): QListWidgetH; cdecl; external Qt4PasLib name 'QListWidget_create'; procedure QListWidget_destroy(handle: QListWidgetH); cdecl; external Qt4PasLib name 'QListWidget_destroy'; function QListWidget_item(handle: QListWidgetH; row: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_item'; function QListWidget_row(handle: QListWidgetH; item: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidget_row'; procedure QListWidget_insertItem(handle: QListWidgetH; row: Integer; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_insertItem'; procedure QListWidget_insertItem(handle: QListWidgetH; row: Integer; _label: PWideString); cdecl; external Qt4PasLib name 'QListWidget_insertItem2'; procedure QListWidget_insertItems(handle: QListWidgetH; row: Integer; labels: QStringListH); cdecl; external Qt4PasLib name 'QListWidget_insertItems'; procedure QListWidget_addItem(handle: QListWidgetH; _label: PWideString); cdecl; external Qt4PasLib name 'QListWidget_addItem'; procedure QListWidget_addItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_addItem2'; procedure QListWidget_addItems(handle: QListWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QListWidget_addItems'; function QListWidget_takeItem(handle: QListWidgetH; row: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_takeItem'; function QListWidget_count(handle: QListWidgetH): Integer; cdecl; external Qt4PasLib name 'QListWidget_count'; function QListWidget_currentItem(handle: QListWidgetH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_currentItem'; procedure QListWidget_setCurrentItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_setCurrentItem'; procedure QListWidget_setCurrentItem(handle: QListWidgetH; item: QListWidgetItemH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QListWidget_setCurrentItem2'; function QListWidget_currentRow(handle: QListWidgetH): Integer; cdecl; external Qt4PasLib name 'QListWidget_currentRow'; procedure QListWidget_setCurrentRow(handle: QListWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QListWidget_setCurrentRow'; procedure QListWidget_setCurrentRow(handle: QListWidgetH; row: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QListWidget_setCurrentRow2'; function QListWidget_itemAt(handle: QListWidgetH; p: PQtPoint): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_itemAt'; function QListWidget_itemAt(handle: QListWidgetH; x: Integer; y: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_itemAt2'; procedure QListWidget_visualItemRect(handle: QListWidgetH; retval: PRect; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_visualItemRect'; procedure QListWidget_sortItems(handle: QListWidgetH; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QListWidget_sortItems'; procedure QListWidget_setSortingEnabled(handle: QListWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setSortingEnabled'; function QListWidget_isSortingEnabled(handle: QListWidgetH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isSortingEnabled'; procedure QListWidget_editItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_editItem'; procedure QListWidget_openPersistentEditor(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_openPersistentEditor'; procedure QListWidget_closePersistentEditor(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_closePersistentEditor'; function QListWidget_itemWidget(handle: QListWidgetH; item: QListWidgetItemH): QWidgetH; cdecl; external Qt4PasLib name 'QListWidget_itemWidget'; procedure QListWidget_setItemWidget(handle: QListWidgetH; item: QListWidgetItemH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QListWidget_setItemWidget'; procedure QListWidget_removeItemWidget(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_removeItemWidget'; function QListWidget_isItemSelected(handle: QListWidgetH; item: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isItemSelected'; procedure QListWidget_setItemSelected(handle: QListWidgetH; item: QListWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setItemSelected'; procedure QListWidget_selectedItems(handle: QListWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QListWidget_selectedItems'; procedure QListWidget_findItems(handle: QListWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QListWidget_findItems'; function QListWidget_isItemHidden(handle: QListWidgetH; item: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isItemHidden'; procedure QListWidget_setItemHidden(handle: QListWidgetH; item: QListWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setItemHidden'; procedure QListWidget_dropEvent(handle: QListWidgetH; event: QDropEventH); cdecl; external Qt4PasLib name 'QListWidget_dropEvent'; procedure QListWidget_scrollToItem(handle: QListWidgetH; item: QListWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QListWidget_scrollToItem'; procedure QListWidget_clear(handle: QListWidgetH); cdecl; external Qt4PasLib name 'QListWidget_clear'; type QListWidget_itemPressed_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemClicked_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemDoubleClicked_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemActivated_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemEntered_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemChanged_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_currentItemChanged_Event = procedure (current: QListWidgetItemH; previous: QListWidgetItemH) of object cdecl; QListWidget_currentTextChanged_Event = procedure (currentText: PWideString) of object cdecl; QListWidget_currentRowChanged_Event = procedure (currentRow: Integer) of object cdecl; QListWidget_itemSelectionChanged_Event = procedure () of object cdecl; function QTreeView_create(parent: QWidgetH = nil): QTreeViewH; cdecl; external Qt4PasLib name 'QTreeView_create'; procedure QTreeView_destroy(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_destroy'; procedure QTreeView_setModel(handle: QTreeViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QTreeView_setModel'; procedure QTreeView_setRootIndex(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_setRootIndex'; procedure QTreeView_setSelectionModel(handle: QTreeViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTreeView_setSelectionModel'; function QTreeView_header(handle: QTreeViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTreeView_header'; procedure QTreeView_setHeader(handle: QTreeViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTreeView_setHeader'; function QTreeView_autoExpandDelay(handle: QTreeViewH): Integer; cdecl; external Qt4PasLib name 'QTreeView_autoExpandDelay'; procedure QTreeView_setAutoExpandDelay(handle: QTreeViewH; delay: Integer); cdecl; external Qt4PasLib name 'QTreeView_setAutoExpandDelay'; function QTreeView_indentation(handle: QTreeViewH): Integer; cdecl; external Qt4PasLib name 'QTreeView_indentation'; procedure QTreeView_setIndentation(handle: QTreeViewH; i: Integer); cdecl; external Qt4PasLib name 'QTreeView_setIndentation'; function QTreeView_rootIsDecorated(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_rootIsDecorated'; procedure QTreeView_setRootIsDecorated(handle: QTreeViewH; show: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setRootIsDecorated'; function QTreeView_uniformRowHeights(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_uniformRowHeights'; procedure QTreeView_setUniformRowHeights(handle: QTreeViewH; uniform: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setUniformRowHeights'; function QTreeView_itemsExpandable(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_itemsExpandable'; procedure QTreeView_setItemsExpandable(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setItemsExpandable'; function QTreeView_expandsOnDoubleClick(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_expandsOnDoubleClick'; procedure QTreeView_setExpandsOnDoubleClick(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setExpandsOnDoubleClick'; function QTreeView_columnViewportPosition(handle: QTreeViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnViewportPosition'; function QTreeView_columnWidth(handle: QTreeViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnWidth'; procedure QTreeView_setColumnWidth(handle: QTreeViewH; column: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTreeView_setColumnWidth'; function QTreeView_columnAt(handle: QTreeViewH; x: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnAt'; function QTreeView_isColumnHidden(handle: QTreeViewH; column: Integer): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isColumnHidden'; procedure QTreeView_setColumnHidden(handle: QTreeViewH; column: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setColumnHidden'; function QTreeView_isHeaderHidden(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isHeaderHidden'; procedure QTreeView_setHeaderHidden(handle: QTreeViewH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setHeaderHidden'; function QTreeView_isRowHidden(handle: QTreeViewH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isRowHidden'; procedure QTreeView_setRowHidden(handle: QTreeViewH; row: Integer; parent: QModelIndexH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setRowHidden'; function QTreeView_isFirstColumnSpanned(handle: QTreeViewH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isFirstColumnSpanned'; procedure QTreeView_setFirstColumnSpanned(handle: QTreeViewH; row: Integer; parent: QModelIndexH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setFirstColumnSpanned'; function QTreeView_isExpanded(handle: QTreeViewH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isExpanded'; procedure QTreeView_setExpanded(handle: QTreeViewH; index: QModelIndexH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setExpanded'; procedure QTreeView_setSortingEnabled(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setSortingEnabled'; function QTreeView_isSortingEnabled(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isSortingEnabled'; procedure QTreeView_setAnimated(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setAnimated'; function QTreeView_isAnimated(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isAnimated'; procedure QTreeView_setAllColumnsShowFocus(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setAllColumnsShowFocus'; function QTreeView_allColumnsShowFocus(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_allColumnsShowFocus'; procedure QTreeView_setWordWrap(handle: QTreeViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setWordWrap'; function QTreeView_wordWrap(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_wordWrap'; procedure QTreeView_keyboardSearch(handle: QTreeViewH; search: PWideString); cdecl; external Qt4PasLib name 'QTreeView_keyboardSearch'; procedure QTreeView_visualRect(handle: QTreeViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_visualRect'; procedure QTreeView_scrollTo(handle: QTreeViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTreeView_scrollTo'; procedure QTreeView_indexAt(handle: QTreeViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QTreeView_indexAt'; procedure QTreeView_indexAbove(handle: QTreeViewH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_indexAbove'; procedure QTreeView_indexBelow(handle: QTreeViewH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_indexBelow'; procedure QTreeView_doItemsLayout(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_doItemsLayout'; procedure QTreeView_reset(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_reset'; procedure QTreeView_sortByColumn(handle: QTreeViewH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeView_sortByColumn'; procedure QTreeView_dataChanged(handle: QTreeViewH; topLeft: QModelIndexH; bottomRight: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_dataChanged'; procedure QTreeView_hideColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_hideColumn'; procedure QTreeView_showColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_showColumn'; procedure QTreeView_expand(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_expand'; procedure QTreeView_collapse(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_collapse'; procedure QTreeView_resizeColumnToContents(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_resizeColumnToContents'; procedure QTreeView_sortByColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_sortByColumn2'; procedure QTreeView_selectAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_selectAll'; procedure QTreeView_expandAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_expandAll'; procedure QTreeView_collapseAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_collapseAll'; procedure QTreeView_expandToDepth(handle: QTreeViewH; depth: Integer); cdecl; external Qt4PasLib name 'QTreeView_expandToDepth'; type QTreeView_expanded_Event = procedure (index: QModelIndexH) of object cdecl; QTreeView_collapsed_Event = procedure (index: QModelIndexH) of object cdecl; type QTreeWidgetItemChildIndicatorPolicy = ( // QTreeWidgetItem::ChildIndicatorPolicy (1) QTreeWidgetItemShowIndicator, QTreeWidgetItemDontShowIndicator, QTreeWidgetItemDontShowIndicatorWhenChildless ); QTreeWidgetItemItemType = ( //QTreeWidgetItem::ItemType (2) QTreeWidgetItemType = 0, QTreeWidgetItemUserType = 1000 ); function QTreeWidgetItem_create(_type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create'; procedure QTreeWidgetItem_destroy(handle: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_destroy'; function QTreeWidgetItem_create(strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create2'; function QTreeWidgetItem_create(view: QTreeWidgetH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create3'; function QTreeWidgetItem_create(view: QTreeWidgetH; strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create4'; function QTreeWidgetItem_create(view: QTreeWidgetH; after: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create5'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create6'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create7'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; after: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create8'; function QTreeWidgetItem_create(other: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create9'; function QTreeWidgetItem_clone(handle: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_clone'; function QTreeWidgetItem_treeWidget(handle: QTreeWidgetItemH): QTreeWidgetH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_treeWidget'; procedure QTreeWidgetItem_setSelected(handle: QTreeWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setSelected'; function QTreeWidgetItem_isSelected(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isSelected'; procedure QTreeWidgetItem_setHidden(handle: QTreeWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setHidden'; function QTreeWidgetItem_isHidden(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isHidden'; procedure QTreeWidgetItem_setExpanded(handle: QTreeWidgetItemH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setExpanded'; function QTreeWidgetItem_isExpanded(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isExpanded'; procedure QTreeWidgetItem_setFirstColumnSpanned(handle: QTreeWidgetItemH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFirstColumnSpanned'; function QTreeWidgetItem_isFirstColumnSpanned(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isFirstColumnSpanned'; procedure QTreeWidgetItem_setDisabled(handle: QTreeWidgetItemH; disabled: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setDisabled'; function QTreeWidgetItem_isDisabled(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isDisabled'; procedure QTreeWidgetItem_setChildIndicatorPolicy(handle: QTreeWidgetItemH; policy: QTreeWidgetItemChildIndicatorPolicy); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setChildIndicatorPolicy'; function QTreeWidgetItem_childIndicatorPolicy(handle: QTreeWidgetItemH): QTreeWidgetItemChildIndicatorPolicy; cdecl; external Qt4PasLib name 'QTreeWidgetItem_childIndicatorPolicy'; function QTreeWidgetItem_flags(handle: QTreeWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QTreeWidgetItem_flags'; procedure QTreeWidgetItem_setFlags(handle: QTreeWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFlags'; procedure QTreeWidgetItem_text(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_text'; procedure QTreeWidgetItem_setText(handle: QTreeWidgetItemH; column: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setText'; procedure QTreeWidgetItem_icon(handle: QTreeWidgetItemH; retval: QIconH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_icon'; procedure QTreeWidgetItem_setIcon(handle: QTreeWidgetItemH; column: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setIcon'; procedure QTreeWidgetItem_statusTip(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_statusTip'; procedure QTreeWidgetItem_setStatusTip(handle: QTreeWidgetItemH; column: Integer; statusTip: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setStatusTip'; procedure QTreeWidgetItem_toolTip(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_toolTip'; procedure QTreeWidgetItem_setToolTip(handle: QTreeWidgetItemH; column: Integer; toolTip: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setToolTip'; procedure QTreeWidgetItem_whatsThis(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_whatsThis'; procedure QTreeWidgetItem_setWhatsThis(handle: QTreeWidgetItemH; column: Integer; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setWhatsThis'; procedure QTreeWidgetItem_font(handle: QTreeWidgetItemH; retval: QFontH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_font'; procedure QTreeWidgetItem_setFont(handle: QTreeWidgetItemH; column: Integer; font: QFontH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFont'; function QTreeWidgetItem_textAlignment(handle: QTreeWidgetItemH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_textAlignment'; procedure QTreeWidgetItem_setTextAlignment(handle: QTreeWidgetItemH; column: Integer; alignment: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setTextAlignment'; procedure QTreeWidgetItem_backgroundColor(handle: QTreeWidgetItemH; retval: PQColor; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_backgroundColor'; procedure QTreeWidgetItem_setBackgroundColor(handle: QTreeWidgetItemH; column: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setBackgroundColor'; procedure QTreeWidgetItem_background(handle: QTreeWidgetItemH; retval: QBrushH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_background'; procedure QTreeWidgetItem_setBackground(handle: QTreeWidgetItemH; column: Integer; brush: QBrushH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setBackground'; procedure QTreeWidgetItem_textColor(handle: QTreeWidgetItemH; retval: PQColor; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_textColor'; procedure QTreeWidgetItem_setTextColor(handle: QTreeWidgetItemH; column: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setTextColor'; procedure QTreeWidgetItem_foreground(handle: QTreeWidgetItemH; retval: QBrushH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_foreground'; procedure QTreeWidgetItem_setForeground(handle: QTreeWidgetItemH; column: Integer; brush: QBrushH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setForeground'; function QTreeWidgetItem_checkState(handle: QTreeWidgetItemH; column: Integer): QtCheckState; cdecl; external Qt4PasLib name 'QTreeWidgetItem_checkState'; procedure QTreeWidgetItem_setCheckState(handle: QTreeWidgetItemH; column: Integer; state: QtCheckState); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setCheckState'; procedure QTreeWidgetItem_sizeHint(handle: QTreeWidgetItemH; retval: PSize; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_sizeHint'; procedure QTreeWidgetItem_setSizeHint(handle: QTreeWidgetItemH; column: Integer; size: PSize); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setSizeHint'; procedure QTreeWidgetItem_data(handle: QTreeWidgetItemH; retval: QVariantH; column: Integer; role: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_data'; procedure QTreeWidgetItem_setData(handle: QTreeWidgetItemH; column: Integer; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setData'; procedure QTreeWidgetItem_read(handle: QTreeWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_read'; procedure QTreeWidgetItem_write(handle: QTreeWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_write'; function QTreeWidgetItem_parent(handle: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_parent'; function QTreeWidgetItem_child(handle: QTreeWidgetItemH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_child'; function QTreeWidgetItem_childCount(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_childCount'; function QTreeWidgetItem_columnCount(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_columnCount'; function QTreeWidgetItem_indexOfChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_indexOfChild'; procedure QTreeWidgetItem_addChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_addChild'; procedure QTreeWidgetItem_insertChild(handle: QTreeWidgetItemH; index: Integer; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_insertChild'; procedure QTreeWidgetItem_removeChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_removeChild'; function QTreeWidgetItem_takeChild(handle: QTreeWidgetItemH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_takeChild'; procedure QTreeWidgetItem_addChildren(handle: QTreeWidgetItemH; children: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_addChildren'; procedure QTreeWidgetItem_insertChildren(handle: QTreeWidgetItemH; index: Integer; children: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_insertChildren'; procedure QTreeWidgetItem_takeChildren(handle: QTreeWidgetItemH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_takeChildren'; function QTreeWidgetItem_type(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_type'; procedure QTreeWidgetItem_sortChildren(handle: QTreeWidgetItemH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeWidgetItem_sortChildren'; function QTreeWidget_create(parent: QWidgetH = nil): QTreeWidgetH; cdecl; external Qt4PasLib name 'QTreeWidget_create'; procedure QTreeWidget_destroy(handle: QTreeWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_destroy'; function QTreeWidget_columnCount(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_columnCount'; procedure QTreeWidget_setColumnCount(handle: QTreeWidgetH; columns: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_setColumnCount'; function QTreeWidget_invisibleRootItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_invisibleRootItem'; function QTreeWidget_topLevelItem(handle: QTreeWidgetH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_topLevelItem'; function QTreeWidget_topLevelItemCount(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_topLevelItemCount'; procedure QTreeWidget_insertTopLevelItem(handle: QTreeWidgetH; index: Integer; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_insertTopLevelItem'; procedure QTreeWidget_addTopLevelItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_addTopLevelItem'; function QTreeWidget_takeTopLevelItem(handle: QTreeWidgetH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_takeTopLevelItem'; function QTreeWidget_indexOfTopLevelItem(handle: QTreeWidgetH; item: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_indexOfTopLevelItem'; procedure QTreeWidget_insertTopLevelItems(handle: QTreeWidgetH; index: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_insertTopLevelItems'; procedure QTreeWidget_addTopLevelItems(handle: QTreeWidgetH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_addTopLevelItems'; function QTreeWidget_headerItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_headerItem'; procedure QTreeWidget_setHeaderItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderItem'; procedure QTreeWidget_setHeaderLabels(handle: QTreeWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderLabels'; procedure QTreeWidget_setHeaderLabel(handle: QTreeWidgetH; _label: PWideString); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderLabel'; function QTreeWidget_currentItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_currentItem'; function QTreeWidget_currentColumn(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_currentColumn'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem2'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem3'; function QTreeWidget_itemAt(handle: QTreeWidgetH; p: PQtPoint): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAt'; function QTreeWidget_itemAt(handle: QTreeWidgetH; x: Integer; y: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAt2'; procedure QTreeWidget_visualItemRect(handle: QTreeWidgetH; retval: PRect; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_visualItemRect'; function QTreeWidget_sortColumn(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_sortColumn'; procedure QTreeWidget_sortItems(handle: QTreeWidgetH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeWidget_sortItems'; procedure QTreeWidget_setSortingEnabled(handle: QTreeWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setSortingEnabled'; function QTreeWidget_isSortingEnabled(handle: QTreeWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isSortingEnabled'; procedure QTreeWidget_editItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_editItem'; procedure QTreeWidget_openPersistentEditor(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_openPersistentEditor'; procedure QTreeWidget_closePersistentEditor(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_closePersistentEditor'; function QTreeWidget_itemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTreeWidget_itemWidget'; procedure QTreeWidget_setItemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_setItemWidget'; procedure QTreeWidget_removeItemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_removeItemWidget'; function QTreeWidget_isItemSelected(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemSelected'; procedure QTreeWidget_setItemSelected(handle: QTreeWidgetH; item: QTreeWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemSelected'; procedure QTreeWidget_selectedItems(handle: QTreeWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_selectedItems'; procedure QTreeWidget_findItems(handle: QTreeWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_findItems'; function QTreeWidget_isItemHidden(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemHidden'; procedure QTreeWidget_setItemHidden(handle: QTreeWidgetH; item: QTreeWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemHidden'; function QTreeWidget_isItemExpanded(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemExpanded'; procedure QTreeWidget_setItemExpanded(handle: QTreeWidgetH; item: QTreeWidgetItemH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemExpanded'; function QTreeWidget_isFirstItemColumnSpanned(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isFirstItemColumnSpanned'; procedure QTreeWidget_setFirstItemColumnSpanned(handle: QTreeWidgetH; item: QTreeWidgetItemH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setFirstItemColumnSpanned'; function QTreeWidget_itemAbove(handle: QTreeWidgetH; item: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAbove'; function QTreeWidget_itemBelow(handle: QTreeWidgetH; item: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemBelow'; procedure QTreeWidget_setSelectionModel(handle: QTreeWidgetH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTreeWidget_setSelectionModel'; procedure QTreeWidget_scrollToItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTreeWidget_scrollToItem'; procedure QTreeWidget_expandItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_expandItem'; procedure QTreeWidget_collapseItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_collapseItem'; procedure QTreeWidget_clear(handle: QTreeWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_clear'; type QTreeWidget_itemPressed_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemClicked_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemDoubleClicked_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemActivated_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemEntered_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemChanged_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemExpanded_Event = procedure (item: QTreeWidgetItemH) of object cdecl; QTreeWidget_itemCollapsed_Event = procedure (item: QTreeWidgetItemH) of object cdecl; QTreeWidget_currentItemChanged_Event = procedure (current: QTreeWidgetItemH; previous: QTreeWidgetItemH) of object cdecl; QTreeWidget_itemSelectionChanged_Event = procedure () of object cdecl; type QHeaderViewResizeMode = cardinal; // QHeaderView::ResizeMode (4) const QHeaderViewInteractive = 0 { $0 }; QHeaderViewStretch = 1 { $1 }; QHeaderViewFixed = 2 { $2 }; QHeaderViewResizeToContents = 3 { $3 }; QHeaderViewCustom = 2 { $2 }; function QHeaderView_create(orientation: QtOrientation; parent: QWidgetH = nil): QHeaderViewH; cdecl; external Qt4PasLib name 'QHeaderView_create'; procedure QHeaderView_destroy(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_destroy'; procedure QHeaderView_setModel(handle: QHeaderViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QHeaderView_setModel'; function QHeaderView_orientation(handle: QHeaderViewH): QtOrientation; cdecl; external Qt4PasLib name 'QHeaderView_orientation'; function QHeaderView_offset(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_offset'; function QHeaderView_length(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_length'; procedure QHeaderView_sizeHint(handle: QHeaderViewH; retval: PSize); cdecl; external Qt4PasLib name 'QHeaderView_sizeHint'; function QHeaderView_sectionSizeHint(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionSizeHint'; function QHeaderView_visualIndexAt(handle: QHeaderViewH; position: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_visualIndexAt'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; position: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; x: Integer; y: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt2'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt3'; function QHeaderView_sectionSize(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionSize'; function QHeaderView_sectionPosition(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionPosition'; function QHeaderView_sectionViewportPosition(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionViewportPosition'; procedure QHeaderView_moveSection(handle: QHeaderViewH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QHeaderView_moveSection'; procedure QHeaderView_swapSections(handle: QHeaderViewH; first: Integer; second: Integer); cdecl; external Qt4PasLib name 'QHeaderView_swapSections'; procedure QHeaderView_resizeSection(handle: QHeaderViewH; logicalIndex: Integer; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_resizeSection'; procedure QHeaderView_resizeSections(handle: QHeaderViewH; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_resizeSections'; function QHeaderView_isSectionHidden(handle: QHeaderViewH; logicalIndex: Integer): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isSectionHidden'; procedure QHeaderView_setSectionHidden(handle: QHeaderViewH; logicalIndex: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setSectionHidden'; function QHeaderView_hiddenSectionCount(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_hiddenSectionCount'; procedure QHeaderView_hideSection(handle: QHeaderViewH; logicalIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_hideSection'; procedure QHeaderView_showSection(handle: QHeaderViewH; logicalIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_showSection'; function QHeaderView_count(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_count'; function QHeaderView_visualIndex(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_visualIndex'; function QHeaderView_logicalIndex(handle: QHeaderViewH; visualIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndex'; procedure QHeaderView_setMovable(handle: QHeaderViewH; movable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setMovable'; function QHeaderView_isMovable(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isMovable'; procedure QHeaderView_setClickable(handle: QHeaderViewH; clickable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setClickable'; function QHeaderView_isClickable(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isClickable'; procedure QHeaderView_setHighlightSections(handle: QHeaderViewH; highlight: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setHighlightSections'; function QHeaderView_highlightSections(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_highlightSections'; procedure QHeaderView_setResizeMode(handle: QHeaderViewH; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_setResizeMode'; procedure QHeaderView_setResizeMode(handle: QHeaderViewH; logicalIndex: Integer; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_setResizeMode2'; function QHeaderView_resizeMode(handle: QHeaderViewH; logicalIndex: Integer): QHeaderViewResizeMode; cdecl; external Qt4PasLib name 'QHeaderView_resizeMode'; function QHeaderView_stretchSectionCount(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_stretchSectionCount'; procedure QHeaderView_setSortIndicatorShown(handle: QHeaderViewH; show: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setSortIndicatorShown'; function QHeaderView_isSortIndicatorShown(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isSortIndicatorShown'; procedure QHeaderView_setSortIndicator(handle: QHeaderViewH; logicalIndex: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QHeaderView_setSortIndicator'; function QHeaderView_sortIndicatorSection(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sortIndicatorSection'; function QHeaderView_sortIndicatorOrder(handle: QHeaderViewH): QtSortOrder; cdecl; external Qt4PasLib name 'QHeaderView_sortIndicatorOrder'; function QHeaderView_stretchLastSection(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_stretchLastSection'; procedure QHeaderView_setStretchLastSection(handle: QHeaderViewH; stretch: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setStretchLastSection'; function QHeaderView_cascadingSectionResizes(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_cascadingSectionResizes'; procedure QHeaderView_setCascadingSectionResizes(handle: QHeaderViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setCascadingSectionResizes'; function QHeaderView_defaultSectionSize(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_defaultSectionSize'; procedure QHeaderView_setDefaultSectionSize(handle: QHeaderViewH; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setDefaultSectionSize'; function QHeaderView_minimumSectionSize(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_minimumSectionSize'; procedure QHeaderView_setMinimumSectionSize(handle: QHeaderViewH; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setMinimumSectionSize'; function QHeaderView_defaultAlignment(handle: QHeaderViewH): QtAlignment; cdecl; external Qt4PasLib name 'QHeaderView_defaultAlignment'; procedure QHeaderView_setDefaultAlignment(handle: QHeaderViewH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QHeaderView_setDefaultAlignment'; procedure QHeaderView_doItemsLayout(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_doItemsLayout'; function QHeaderView_sectionsMoved(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_sectionsMoved'; function QHeaderView_sectionsHidden(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_sectionsHidden'; procedure QHeaderView_saveState(handle: QHeaderViewH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QHeaderView_saveState'; function QHeaderView_restoreState(handle: QHeaderViewH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_restoreState'; procedure QHeaderView_reset(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_reset'; procedure QHeaderView_setOffset(handle: QHeaderViewH; offset: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setOffset'; procedure QHeaderView_setOffsetToSectionPosition(handle: QHeaderViewH; visualIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setOffsetToSectionPosition'; procedure QHeaderView_setOffsetToLastSection(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_setOffsetToLastSection'; procedure QHeaderView_headerDataChanged(handle: QHeaderViewH; orientation: QtOrientation; logicalFirst: Integer; logicalLast: Integer); cdecl; external Qt4PasLib name 'QHeaderView_headerDataChanged'; type QHeaderView_sectionMoved_Event = procedure (logicalIndex: Integer; oldVisualIndex: Integer; newVisualIndex: Integer) of object cdecl; QHeaderView_sectionResized_Event = procedure (logicalIndex: Integer; oldSize: Integer; newSize: Integer) of object cdecl; QHeaderView_sectionPressed_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionEntered_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionDoubleClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionCountChanged_Event = procedure (oldCount: Integer; newCount: Integer) of object cdecl; QHeaderView_sectionHandleDoubleClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionAutoResize_Event = procedure (logicalIndex: Integer; mode: QHeaderViewResizeMode) of object cdecl; QHeaderView_geometriesChanged_Event = procedure () of object cdecl; QHeaderView_sortIndicatorChanged_Event = procedure (logicalIndex: Integer; order: QtSortOrder) of object cdecl; type QStandardItemItemType = ( //QStandardItem::ItemType (2) QStandardItemType = 0, QStandardItemUserType = 1000 ); function QStandardItem_create(): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create'; procedure QStandardItem_destroy(handle: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_destroy'; function QStandardItem_create(text: PWideString): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create2'; function QStandardItem_create(icon: QIconH; text: PWideString): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create3'; function QStandardItem_create(rows: Integer; columns: Integer = 1): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create4'; procedure QStandardItem_data(handle: QStandardItemH; retval: QVariantH; role: QtItemDataRole); cdecl; external Qt4PasLib name 'QStandardItem_data'; procedure QStandardItem_setData(handle: QStandardItemH; value: QVariantH; role: QtItemDataRole); cdecl; external Qt4PasLib name 'QStandardItem_setData'; procedure QStandardItem_text(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_text'; procedure QStandardItem_setText(handle: QStandardItemH; text: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setText'; procedure QStandardItem_icon(handle: QStandardItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QStandardItem_icon'; procedure QStandardItem_setIcon(handle: QStandardItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QStandardItem_setIcon'; procedure QStandardItem_toolTip(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_toolTip'; procedure QStandardItem_setToolTip(handle: QStandardItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setToolTip'; procedure QStandardItem_statusTip(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_statusTip'; procedure QStandardItem_setStatusTip(handle: QStandardItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setStatusTip'; procedure QStandardItem_whatsThis(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_whatsThis'; procedure QStandardItem_setWhatsThis(handle: QStandardItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setWhatsThis'; procedure QStandardItem_sizeHint(handle: QStandardItemH; retval: PSize); cdecl; external Qt4PasLib name 'QStandardItem_sizeHint'; procedure QStandardItem_setSizeHint(handle: QStandardItemH; sizeHint: PSize); cdecl; external Qt4PasLib name 'QStandardItem_setSizeHint'; procedure QStandardItem_font(handle: QStandardItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QStandardItem_font'; procedure QStandardItem_setFont(handle: QStandardItemH; font: QFontH); cdecl; external Qt4PasLib name 'QStandardItem_setFont'; function QStandardItem_textAlignment(handle: QStandardItemH): QtAlignment; cdecl; external Qt4PasLib name 'QStandardItem_textAlignment'; procedure QStandardItem_setTextAlignment(handle: QStandardItemH; textAlignment: QtAlignment); cdecl; external Qt4PasLib name 'QStandardItem_setTextAlignment'; procedure QStandardItem_background(handle: QStandardItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_background'; procedure QStandardItem_setBackground(handle: QStandardItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_setBackground'; procedure QStandardItem_foreground(handle: QStandardItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_foreground'; procedure QStandardItem_setForeground(handle: QStandardItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_setForeground'; function QStandardItem_checkState(handle: QStandardItemH): QtCheckState; cdecl; external Qt4PasLib name 'QStandardItem_checkState'; procedure QStandardItem_setCheckState(handle: QStandardItemH; checkState: QtCheckState); cdecl; external Qt4PasLib name 'QStandardItem_setCheckState'; procedure QStandardItem_accessibleText(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_accessibleText'; procedure QStandardItem_setAccessibleText(handle: QStandardItemH; accessibleText: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setAccessibleText'; procedure QStandardItem_accessibleDescription(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_accessibleDescription'; procedure QStandardItem_setAccessibleDescription(handle: QStandardItemH; accessibleDescription: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setAccessibleDescription'; function QStandardItem_flags(handle: QStandardItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QStandardItem_flags'; procedure QStandardItem_setFlags(handle: QStandardItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QStandardItem_setFlags'; function QStandardItem_isEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isEnabled'; procedure QStandardItem_setEnabled(handle: QStandardItemH; enabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setEnabled'; function QStandardItem_isEditable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isEditable'; procedure QStandardItem_setEditable(handle: QStandardItemH; editable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setEditable'; function QStandardItem_isSelectable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isSelectable'; procedure QStandardItem_setSelectable(handle: QStandardItemH; selectable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setSelectable'; function QStandardItem_isCheckable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isCheckable'; procedure QStandardItem_setCheckable(handle: QStandardItemH; checkable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setCheckable'; function QStandardItem_isTristate(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isTristate'; procedure QStandardItem_setTristate(handle: QStandardItemH; tristate: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setTristate'; function QStandardItem_isDragEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isDragEnabled'; procedure QStandardItem_setDragEnabled(handle: QStandardItemH; dragEnabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setDragEnabled'; function QStandardItem_isDropEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isDropEnabled'; procedure QStandardItem_setDropEnabled(handle: QStandardItemH; dropEnabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setDropEnabled'; function QStandardItem_parent(handle: QStandardItemH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_parent'; function QStandardItem_row(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_row'; function QStandardItem_column(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_column'; procedure QStandardItem_index(handle: QStandardItemH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QStandardItem_index'; function QStandardItem_model(handle: QStandardItemH): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItem_model'; function QStandardItem_rowCount(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_rowCount'; procedure QStandardItem_setRowCount(handle: QStandardItemH; rows: Integer); cdecl; external Qt4PasLib name 'QStandardItem_setRowCount'; function QStandardItem_columnCount(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_columnCount'; procedure QStandardItem_setColumnCount(handle: QStandardItemH; columns: Integer); cdecl; external Qt4PasLib name 'QStandardItem_setColumnCount'; function QStandardItem_hasChildren(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_hasChildren'; function QStandardItem_child(handle: QStandardItemH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_child'; procedure QStandardItem_setChild(handle: QStandardItemH; row: Integer; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_setChild'; procedure QStandardItem_setChild(handle: QStandardItemH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_setChild2'; procedure QStandardItem_insertRow(handle: QStandardItemH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertRow'; procedure QStandardItem_insertColumn(handle: QStandardItemH; column: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertColumn'; procedure QStandardItem_insertRows(handle: QStandardItemH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertRows'; procedure QStandardItem_insertRows(handle: QStandardItemH; row: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_insertRows2'; procedure QStandardItem_insertColumns(handle: QStandardItemH; column: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_insertColumns'; procedure QStandardItem_removeRow(handle: QStandardItemH; row: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeRow'; procedure QStandardItem_removeColumn(handle: QStandardItemH; column: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeColumn'; procedure QStandardItem_removeRows(handle: QStandardItemH; row: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeRows'; procedure QStandardItem_removeColumns(handle: QStandardItemH; column: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeColumns'; procedure QStandardItem_appendRow(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendRow'; procedure QStandardItem_appendRows(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendRows'; procedure QStandardItem_appendColumn(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendColumn'; procedure QStandardItem_insertRow(handle: QStandardItemH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_insertRow2'; procedure QStandardItem_appendRow(handle: QStandardItemH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_appendRow2'; function QStandardItem_takeChild(handle: QStandardItemH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_takeChild'; procedure QStandardItem_takeRow(handle: QStandardItemH; retval: PPtrIntArray; row: Integer); cdecl; external Qt4PasLib name 'QStandardItem_takeRow'; procedure QStandardItem_takeColumn(handle: QStandardItemH; retval: PPtrIntArray; column: Integer); cdecl; external Qt4PasLib name 'QStandardItem_takeColumn'; procedure QStandardItem_sortChildren(handle: QStandardItemH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QStandardItem_sortChildren'; function QStandardItem_clone(handle: QStandardItemH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_clone'; function QStandardItem_type(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_type'; procedure QStandardItem_read(handle: QStandardItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QStandardItem_read'; procedure QStandardItem_write(handle: QStandardItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QStandardItem_write'; function QStandardItemModel_create(parent: QObjectH = nil): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItemModel_create'; procedure QStandardItemModel_destroy(handle: QStandardItemModelH); cdecl; external Qt4PasLib name 'QStandardItemModel_destroy'; function QStandardItemModel_create(rows: Integer; columns: Integer; parent: QObjectH = nil): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItemModel_create2'; procedure QStandardItemModel_index(handle: QStandardItemModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QStandardItemModel_index'; procedure QStandardItemModel_parent(handle: QStandardItemModelH; retval: QModelIndexH; child: QModelIndexH); cdecl; external Qt4PasLib name 'QStandardItemModel_parent'; function QStandardItemModel_rowCount(handle: QStandardItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_rowCount'; function QStandardItemModel_columnCount(handle: QStandardItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_columnCount'; function QStandardItemModel_hasChildren(handle: QStandardItemModelH; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_hasChildren'; procedure QStandardItemModel_data(handle: QStandardItemModelH; retval: QVariantH; index: QModelIndexH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QStandardItemModel_data'; function QStandardItemModel_setData(handle: QStandardItemModelH; index: QModelIndexH; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_setData'; procedure QStandardItemModel_headerData(handle: QStandardItemModelH; retval: QVariantH; section: Integer; orientation: QtOrientation; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QStandardItemModel_headerData'; function QStandardItemModel_setHeaderData(handle: QStandardItemModelH; section: Integer; orientation: QtOrientation; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_setHeaderData'; function QStandardItemModel_insertRows(handle: QStandardItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertRows'; function QStandardItemModel_insertColumns(handle: QStandardItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumns'; function QStandardItemModel_removeRows(handle: QStandardItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_removeRows'; function QStandardItemModel_removeColumns(handle: QStandardItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_removeColumns'; function QStandardItemModel_flags(handle: QStandardItemModelH; index: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QStandardItemModel_flags'; function QStandardItemModel_supportedDropActions(handle: QStandardItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QStandardItemModel_supportedDropActions'; procedure QStandardItemModel_clear(handle: QStandardItemModelH); cdecl; external Qt4PasLib name 'QStandardItemModel_clear'; procedure QStandardItemModel_sort(handle: QStandardItemModelH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QStandardItemModel_sort'; function QStandardItemModel_itemFromIndex(handle: QStandardItemModelH; index: QModelIndexH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_itemFromIndex'; procedure QStandardItemModel_indexFromItem(handle: QStandardItemModelH; retval: QModelIndexH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_indexFromItem'; function QStandardItemModel_item(handle: QStandardItemModelH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_item'; procedure QStandardItemModel_setItem(handle: QStandardItemModelH; row: Integer; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItem'; procedure QStandardItemModel_setItem(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItem2'; function QStandardItemModel_invisibleRootItem(handle: QStandardItemModelH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_invisibleRootItem'; function QStandardItemModel_horizontalHeaderItem(handle: QStandardItemModelH; column: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_horizontalHeaderItem'; procedure QStandardItemModel_setHorizontalHeaderItem(handle: QStandardItemModelH; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setHorizontalHeaderItem'; function QStandardItemModel_verticalHeaderItem(handle: QStandardItemModelH; row: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_verticalHeaderItem'; procedure QStandardItemModel_setVerticalHeaderItem(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setVerticalHeaderItem'; procedure QStandardItemModel_setHorizontalHeaderLabels(handle: QStandardItemModelH; labels: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_setHorizontalHeaderLabels'; procedure QStandardItemModel_setVerticalHeaderLabels(handle: QStandardItemModelH; labels: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_setVerticalHeaderLabels'; procedure QStandardItemModel_setRowCount(handle: QStandardItemModelH; rows: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setRowCount'; procedure QStandardItemModel_setColumnCount(handle: QStandardItemModelH; columns: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setColumnCount'; procedure QStandardItemModel_appendRow(handle: QStandardItemModelH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_appendRow'; procedure QStandardItemModel_appendColumn(handle: QStandardItemModelH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_appendColumn'; procedure QStandardItemModel_appendRow(handle: QStandardItemModelH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_appendRow2'; procedure QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow'; procedure QStandardItemModel_insertColumn(handle: QStandardItemModelH; column: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumn'; procedure QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow2'; function QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow3'; function QStandardItemModel_insertColumn(handle: QStandardItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumn2'; function QStandardItemModel_takeItem(handle: QStandardItemModelH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeItem'; procedure QStandardItemModel_takeRow(handle: QStandardItemModelH; retval: PPtrIntArray; row: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_takeRow'; procedure QStandardItemModel_takeColumn(handle: QStandardItemModelH; retval: PPtrIntArray; column: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_takeColumn'; function QStandardItemModel_takeHorizontalHeaderItem(handle: QStandardItemModelH; column: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeHorizontalHeaderItem'; function QStandardItemModel_takeVerticalHeaderItem(handle: QStandardItemModelH; row: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeVerticalHeaderItem'; function QStandardItemModel_itemPrototype(handle: QStandardItemModelH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_itemPrototype'; procedure QStandardItemModel_setItemPrototype(handle: QStandardItemModelH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItemPrototype'; procedure QStandardItemModel_findItems(handle: QStandardItemModelH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags = QtMatchExactly; column: Integer = 0); cdecl; external Qt4PasLib name 'QStandardItemModel_findItems'; function QStandardItemModel_sortRole(handle: QStandardItemModelH): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_sortRole'; procedure QStandardItemModel_setSortRole(handle: QStandardItemModelH; role: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setSortRole'; procedure QStandardItemModel_mimeTypes(handle: QStandardItemModelH; retval: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_mimeTypes'; function QStandardItemModel_dropMimeData(handle: QStandardItemModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_dropMimeData'; type QStandardItemModel_itemChanged_Event = procedure (item: QStandardItemH) of object cdecl; type QAbstractItemDelegateEndEditHint = ( // QAbstractItemDelegate::EndEditHint (1) QAbstractItemDelegateNoHint, QAbstractItemDelegateEditNextItem, QAbstractItemDelegateEditPreviousItem, QAbstractItemDelegateSubmitModelCache, QAbstractItemDelegateRevertModelCache ); procedure QAbstractItemDelegate_paint(handle: QAbstractItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_paint'; procedure QAbstractItemDelegate_sizeHint(handle: QAbstractItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_sizeHint'; function QAbstractItemDelegate_createEditor(handle: QAbstractItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_createEditor'; procedure QAbstractItemDelegate_setEditorData(handle: QAbstractItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_setEditorData'; procedure QAbstractItemDelegate_setModelData(handle: QAbstractItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_setModelData'; procedure QAbstractItemDelegate_updateEditorGeometry(handle: QAbstractItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_updateEditorGeometry'; function QAbstractItemDelegate_editorEvent(handle: QAbstractItemDelegateH; event: QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_editorEvent'; procedure QAbstractItemDelegate_elidedText(retval: PWideString; fontMetrics: QFontMetricsH; width: Integer; mode: QtTextElideMode; text: PWideString); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_elidedText'; function QAbstractItemDelegate_helpEvent(handle: QAbstractItemDelegateH; event: QHelpEventH; view: QAbstractItemViewH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_helpEvent'; type QAbstractItemDelegate_commitData_Event = procedure (editor: QWidgetH) of object cdecl; QAbstractItemDelegate_closeEditor_Event = procedure (editor: QWidgetH; hint: QAbstractItemDelegateEndEditHint = QAbstractItemDelegateNoHint) of object cdecl; QAbstractItemDelegate_closeEditor2_Event = procedure (editor: QWidgetH) of object cdecl; QAbstractItemDelegate_sizeHintChanged_Event = procedure (AnonParam1: QModelIndexH) of object cdecl; function QItemDelegate_create(parent: QObjectH = nil): QItemDelegateH; cdecl; external Qt4PasLib name 'QItemDelegate_create'; procedure QItemDelegate_destroy(handle: QItemDelegateH); cdecl; external Qt4PasLib name 'QItemDelegate_destroy'; function QItemDelegate_hasClipping(handle: QItemDelegateH): Boolean; cdecl; external Qt4PasLib name 'QItemDelegate_hasClipping'; procedure QItemDelegate_setClipping(handle: QItemDelegateH; clip: Boolean); cdecl; external Qt4PasLib name 'QItemDelegate_setClipping'; procedure QItemDelegate_paint(handle: QItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_paint'; procedure QItemDelegate_sizeHint(handle: QItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_sizeHint'; function QItemDelegate_createEditor(handle: QItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QItemDelegate_createEditor'; procedure QItemDelegate_setEditorData(handle: QItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_setEditorData'; procedure QItemDelegate_setModelData(handle: QItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_setModelData'; procedure QItemDelegate_updateEditorGeometry(handle: QItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_updateEditorGeometry'; function QItemDelegate_itemEditorFactory(handle: QItemDelegateH): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemDelegate_itemEditorFactory'; procedure QItemDelegate_setItemEditorFactory(handle: QItemDelegateH; factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemDelegate_setItemEditorFactory'; function QLCLItemDelegate_create(parent: QObjectH = nil): QLCLItemDelegateH; cdecl; external Qt4PasLib name 'QLCLItemDelegate_create'; procedure QLCLItemDelegate_destroy(handle: QLCLItemDelegateH); cdecl; external Qt4PasLib name 'QLCLItemDelegate_destroy'; procedure QLCLItemDelegate_override_sizeHint(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_sizeHint_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_sizeHint'; procedure QLCLItemDelegate_override_paint(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_paint_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_paint'; procedure QLCLItemDelegate_override_createEditor(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_createEditor_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_createEditor'; procedure QLCLItemDelegate_override_setEditorData(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_setEditorData_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_setEditorData'; procedure QLCLItemDelegate_override_setModelData(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_setModelData_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_setModelData'; procedure QLCLItemDelegate_override_updateEditorGeometry(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_updateEditorGeometry_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_updateEditorGeometry'; procedure QLCLItemDelegate_override_editorEvent(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_editorEvent_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_editorEvent'; function QLCLItemDelegate_InheritedEditorEvent(handle: QLCLItemDelegateH; event: QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QLCLItemDelegate_InheritedEditorEvent'; function QTableView_create(parent: QWidgetH = nil): QTableViewH; cdecl; external Qt4PasLib name 'QTableView_create'; procedure QTableView_destroy(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_destroy'; procedure QTableView_setModel(handle: QTableViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QTableView_setModel'; procedure QTableView_setRootIndex(handle: QTableViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTableView_setRootIndex'; procedure QTableView_setSelectionModel(handle: QTableViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTableView_setSelectionModel'; function QTableView_horizontalHeader(handle: QTableViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTableView_horizontalHeader'; function QTableView_verticalHeader(handle: QTableViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTableView_verticalHeader'; procedure QTableView_setHorizontalHeader(handle: QTableViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTableView_setHorizontalHeader'; procedure QTableView_setVerticalHeader(handle: QTableViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTableView_setVerticalHeader'; function QTableView_rowViewportPosition(handle: QTableViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowViewportPosition'; function QTableView_rowAt(handle: QTableViewH; y: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowAt'; procedure QTableView_setRowHeight(handle: QTableViewH; row: Integer; height: Integer); cdecl; external Qt4PasLib name 'QTableView_setRowHeight'; function QTableView_rowHeight(handle: QTableViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowHeight'; function QTableView_columnViewportPosition(handle: QTableViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnViewportPosition'; function QTableView_columnAt(handle: QTableViewH; x: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnAt'; procedure QTableView_setColumnWidth(handle: QTableViewH; column: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTableView_setColumnWidth'; function QTableView_columnWidth(handle: QTableViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnWidth'; function QTableView_isRowHidden(handle: QTableViewH; row: Integer): Boolean; cdecl; external Qt4PasLib name 'QTableView_isRowHidden'; procedure QTableView_setRowHidden(handle: QTableViewH; row: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTableView_setRowHidden'; function QTableView_isColumnHidden(handle: QTableViewH; column: Integer): Boolean; cdecl; external Qt4PasLib name 'QTableView_isColumnHidden'; procedure QTableView_setColumnHidden(handle: QTableViewH; column: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTableView_setColumnHidden'; procedure QTableView_setSortingEnabled(handle: QTableViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableView_setSortingEnabled'; function QTableView_isSortingEnabled(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_isSortingEnabled'; function QTableView_showGrid(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_showGrid'; function QTableView_gridStyle(handle: QTableViewH): QtPenStyle; cdecl; external Qt4PasLib name 'QTableView_gridStyle'; procedure QTableView_setGridStyle(handle: QTableViewH; style: QtPenStyle); cdecl; external Qt4PasLib name 'QTableView_setGridStyle'; procedure QTableView_setWordWrap(handle: QTableViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QTableView_setWordWrap'; function QTableView_wordWrap(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_wordWrap'; procedure QTableView_setCornerButtonEnabled(handle: QTableViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableView_setCornerButtonEnabled'; function QTableView_isCornerButtonEnabled(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_isCornerButtonEnabled'; procedure QTableView_visualRect(handle: QTableViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTableView_visualRect'; procedure QTableView_scrollTo(handle: QTableViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTableView_scrollTo'; procedure QTableView_indexAt(handle: QTableViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QTableView_indexAt'; procedure QTableView_setSpan(handle: QTableViewH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer); cdecl; external Qt4PasLib name 'QTableView_setSpan'; function QTableView_rowSpan(handle: QTableViewH; row: Integer; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowSpan'; function QTableView_columnSpan(handle: QTableViewH; row: Integer; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnSpan'; procedure QTableView_clearSpans(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_clearSpans'; procedure QTableView_sortByColumn(handle: QTableViewH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTableView_sortByColumn'; procedure QTableView_selectRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_selectRow'; procedure QTableView_selectColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_selectColumn'; procedure QTableView_hideRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_hideRow'; procedure QTableView_hideColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_hideColumn'; procedure QTableView_showRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_showRow'; procedure QTableView_showColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_showColumn'; procedure QTableView_resizeRowToContents(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_resizeRowToContents'; procedure QTableView_resizeRowsToContents(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_resizeRowsToContents'; procedure QTableView_resizeColumnToContents(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_resizeColumnToContents'; procedure QTableView_resizeColumnsToContents(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_resizeColumnsToContents'; procedure QTableView_sortByColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_sortByColumn2'; procedure QTableView_setShowGrid(handle: QTableViewH; show: Boolean); cdecl; external Qt4PasLib name 'QTableView_setShowGrid'; type QTableWidgetItemItemType = ( //QTableWidgetItem::ItemType (2) QTableWidgetItemType = 0, QTableWidgetItemUserType = 1000 ); function QTableWidgetSelectionRange_create(): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create'; procedure QTableWidgetSelectionRange_destroy(handle: QTableWidgetSelectionRangeH); cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_destroy'; function QTableWidgetSelectionRange_create(top: Integer; left: Integer; bottom: Integer; right: Integer): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create2'; function QTableWidgetSelectionRange_create(other: QTableWidgetSelectionRangeH): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create3'; function QTableWidgetSelectionRange_topRow(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_topRow'; function QTableWidgetSelectionRange_bottomRow(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_bottomRow'; function QTableWidgetSelectionRange_leftColumn(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_leftColumn'; function QTableWidgetSelectionRange_rightColumn(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_rightColumn'; function QTableWidgetSelectionRange_rowCount(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_rowCount'; function QTableWidgetSelectionRange_columnCount(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_columnCount'; function QTableWidgetItem_create(_type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create'; procedure QTableWidgetItem_destroy(handle: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidgetItem_destroy'; function QTableWidgetItem_create(text: PWideString; _type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create2'; function QTableWidgetItem_create(icon: QIconH; text: PWideString; _type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create3'; function QTableWidgetItem_create(other: QTableWidgetItemH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create4'; function QTableWidgetItem_clone(handle: QTableWidgetItemH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_clone'; function QTableWidgetItem_tableWidget(handle: QTableWidgetItemH): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidgetItem_tableWidget'; function QTableWidgetItem_row(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_row'; function QTableWidgetItem_column(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_column'; procedure QTableWidgetItem_setSelected(handle: QTableWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidgetItem_setSelected'; function QTableWidgetItem_isSelected(handle: QTableWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTableWidgetItem_isSelected'; function QTableWidgetItem_flags(handle: QTableWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QTableWidgetItem_flags'; procedure QTableWidgetItem_setFlags(handle: QTableWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QTableWidgetItem_setFlags'; procedure QTableWidgetItem_text(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_text'; procedure QTableWidgetItem_setText(handle: QTableWidgetItemH; text: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setText'; procedure QTableWidgetItem_icon(handle: QTableWidgetItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QTableWidgetItem_icon'; procedure QTableWidgetItem_setIcon(handle: QTableWidgetItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setIcon'; procedure QTableWidgetItem_statusTip(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_statusTip'; procedure QTableWidgetItem_setStatusTip(handle: QTableWidgetItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setStatusTip'; procedure QTableWidgetItem_toolTip(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_toolTip'; procedure QTableWidgetItem_setToolTip(handle: QTableWidgetItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setToolTip'; procedure QTableWidgetItem_whatsThis(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_whatsThis'; procedure QTableWidgetItem_setWhatsThis(handle: QTableWidgetItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setWhatsThis'; procedure QTableWidgetItem_font(handle: QTableWidgetItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QTableWidgetItem_font'; procedure QTableWidgetItem_setFont(handle: QTableWidgetItemH; font: QFontH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setFont'; function QTableWidgetItem_textAlignment(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_textAlignment'; procedure QTableWidgetItem_setTextAlignment(handle: QTableWidgetItemH; alignment: Integer); cdecl; external Qt4PasLib name 'QTableWidgetItem_setTextAlignment'; procedure QTableWidgetItem_backgroundColor(handle: QTableWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_backgroundColor'; procedure QTableWidgetItem_setBackgroundColor(handle: QTableWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_setBackgroundColor'; procedure QTableWidgetItem_background(handle: QTableWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_background'; procedure QTableWidgetItem_setBackground(handle: QTableWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setBackground'; procedure QTableWidgetItem_textColor(handle: QTableWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_textColor'; procedure QTableWidgetItem_setTextColor(handle: QTableWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_setTextColor'; procedure QTableWidgetItem_foreground(handle: QTableWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_foreground'; procedure QTableWidgetItem_setForeground(handle: QTableWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setForeground'; function QTableWidgetItem_checkState(handle: QTableWidgetItemH): QtCheckState; cdecl; external Qt4PasLib name 'QTableWidgetItem_checkState'; procedure QTableWidgetItem_setCheckState(handle: QTableWidgetItemH; state: QtCheckState); cdecl; external Qt4PasLib name 'QTableWidgetItem_setCheckState'; procedure QTableWidgetItem_sizeHint(handle: QTableWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QTableWidgetItem_sizeHint'; procedure QTableWidgetItem_setSizeHint(handle: QTableWidgetItemH; size: PSize); cdecl; external Qt4PasLib name 'QTableWidgetItem_setSizeHint'; procedure QTableWidgetItem_data(handle: QTableWidgetItemH; retval: QVariantH; role: Integer); cdecl; external Qt4PasLib name 'QTableWidgetItem_data'; procedure QTableWidgetItem_setData(handle: QTableWidgetItemH; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setData'; procedure QTableWidgetItem_read(handle: QTableWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QTableWidgetItem_read'; procedure QTableWidgetItem_write(handle: QTableWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QTableWidgetItem_write'; function QTableWidgetItem_type(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_type'; function QTableWidget_create(parent: QWidgetH = nil): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_create'; procedure QTableWidget_destroy(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_destroy'; function QTableWidget_create(rows: Integer; columns: Integer; parent: QWidgetH = nil): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_create2'; procedure QTableWidget_setRowCount(handle: QTableWidgetH; rows: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setRowCount'; function QTableWidget_rowCount(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_rowCount'; procedure QTableWidget_setColumnCount(handle: QTableWidgetH; columns: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setColumnCount'; function QTableWidget_columnCount(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_columnCount'; function QTableWidget_row(handle: QTableWidgetH; item: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_row'; function QTableWidget_column(handle: QTableWidgetH; item: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_column'; function QTableWidget_item(handle: QTableWidgetH; row: Integer; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_item'; procedure QTableWidget_setItem(handle: QTableWidgetH; row: Integer; column: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setItem'; function QTableWidget_takeItem(handle: QTableWidgetH; row: Integer; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeItem'; function QTableWidget_verticalHeaderItem(handle: QTableWidgetH; row: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_verticalHeaderItem'; procedure QTableWidget_setVerticalHeaderItem(handle: QTableWidgetH; row: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setVerticalHeaderItem'; function QTableWidget_takeVerticalHeaderItem(handle: QTableWidgetH; row: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeVerticalHeaderItem'; function QTableWidget_horizontalHeaderItem(handle: QTableWidgetH; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_horizontalHeaderItem'; procedure QTableWidget_setHorizontalHeaderItem(handle: QTableWidgetH; column: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setHorizontalHeaderItem'; function QTableWidget_takeHorizontalHeaderItem(handle: QTableWidgetH; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeHorizontalHeaderItem'; procedure QTableWidget_setVerticalHeaderLabels(handle: QTableWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTableWidget_setVerticalHeaderLabels'; procedure QTableWidget_setHorizontalHeaderLabels(handle: QTableWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTableWidget_setHorizontalHeaderLabels'; function QTableWidget_currentRow(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_currentRow'; function QTableWidget_currentColumn(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_currentColumn'; function QTableWidget_currentItem(handle: QTableWidgetH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_currentItem'; procedure QTableWidget_setCurrentItem(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentItem'; procedure QTableWidget_setCurrentItem(handle: QTableWidgetH; item: QTableWidgetItemH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentItem2'; procedure QTableWidget_setCurrentCell(handle: QTableWidgetH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentCell'; procedure QTableWidget_setCurrentCell(handle: QTableWidgetH; row: Integer; column: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentCell2'; procedure QTableWidget_sortItems(handle: QTableWidgetH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QTableWidget_sortItems'; procedure QTableWidget_setSortingEnabled(handle: QTableWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setSortingEnabled'; function QTableWidget_isSortingEnabled(handle: QTableWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTableWidget_isSortingEnabled'; procedure QTableWidget_editItem(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_editItem'; procedure QTableWidget_openPersistentEditor(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_openPersistentEditor'; procedure QTableWidget_closePersistentEditor(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_closePersistentEditor'; function QTableWidget_cellWidget(handle: QTableWidgetH; row: Integer; column: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_cellWidget'; procedure QTableWidget_setCellWidget(handle: QTableWidgetH; row: Integer; column: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_setCellWidget'; procedure QTableWidget_removeCellWidget(handle: QTableWidgetH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeCellWidget'; function QTableWidget_isItemSelected(handle: QTableWidgetH; item: QTableWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTableWidget_isItemSelected'; procedure QTableWidget_setItemSelected(handle: QTableWidgetH; item: QTableWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setItemSelected'; procedure QTableWidget_setRangeSelected(handle: QTableWidgetH; range: QTableWidgetSelectionRangeH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setRangeSelected'; procedure QTableWidget_selectedItems(handle: QTableWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTableWidget_selectedItems'; procedure QTableWidget_findItems(handle: QTableWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QTableWidget_findItems'; function QTableWidget_visualRow(handle: QTableWidgetH; logicalRow: Integer): Integer; cdecl; external Qt4PasLib name 'QTableWidget_visualRow'; function QTableWidget_visualColumn(handle: QTableWidgetH; logicalColumn: Integer): Integer; cdecl; external Qt4PasLib name 'QTableWidget_visualColumn'; function QTableWidget_itemAt(handle: QTableWidgetH; p: PQtPoint): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemAt'; function QTableWidget_itemAt(handle: QTableWidgetH; x: Integer; y: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemAt2'; procedure QTableWidget_visualItemRect(handle: QTableWidgetH; retval: PRect; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_visualItemRect'; function QTableWidget_itemPrototype(handle: QTableWidgetH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemPrototype'; procedure QTableWidget_setItemPrototype(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setItemPrototype'; procedure QTableWidget_scrollToItem(handle: QTableWidgetH; item: QTableWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTableWidget_scrollToItem'; procedure QTableWidget_insertRow(handle: QTableWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QTableWidget_insertRow'; procedure QTableWidget_insertColumn(handle: QTableWidgetH; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_insertColumn'; procedure QTableWidget_removeRow(handle: QTableWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeRow'; procedure QTableWidget_removeColumn(handle: QTableWidgetH; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeColumn'; procedure QTableWidget_clear(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_clear'; procedure QTableWidget_clearContents(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_clearContents'; type QTableWidget_itemPressed_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemClicked_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemDoubleClicked_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemActivated_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemEntered_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemChanged_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_currentItemChanged_Event = procedure (current: QTableWidgetItemH; previous: QTableWidgetItemH) of object cdecl; QTableWidget_itemSelectionChanged_Event = procedure () of object cdecl; QTableWidget_cellPressed_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellClicked_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellDoubleClicked_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellActivated_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellEntered_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellChanged_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_currentCellChanged_Event = procedure (currentRow: Integer; currentColumn: Integer; previousRow: Integer; previousColumn: Integer) of object cdecl; function QItemEditorCreatorBase_createWidget(handle: QItemEditorCreatorBaseH; parent: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QItemEditorCreatorBase_createWidget'; procedure QItemEditorCreatorBase_valuePropertyName(handle: QItemEditorCreatorBaseH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QItemEditorCreatorBase_valuePropertyName'; function QItemEditorFactory_create(): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemEditorFactory_create'; procedure QItemEditorFactory_destroy(handle: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemEditorFactory_destroy'; function QItemEditorFactory_createEditor(handle: QItemEditorFactoryH; _type: QVariantType; parent: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QItemEditorFactory_createEditor'; procedure QItemEditorFactory_valuePropertyName(handle: QItemEditorFactoryH; retval: QByteArrayH; _type: QVariantType); cdecl; external Qt4PasLib name 'QItemEditorFactory_valuePropertyName'; procedure QItemEditorFactory_registerEditor(handle: QItemEditorFactoryH; _type: QVariantType; creator: QItemEditorCreatorBaseH); cdecl; external Qt4PasLib name 'QItemEditorFactory_registerEditor'; function QItemEditorFactory_defaultFactory(): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemEditorFactory_defaultFactory'; procedure QItemEditorFactory_setDefaultFactory(factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemEditorFactory_setDefaultFactory'; function QStyledItemDelegate_create(parent: QObjectH = nil): QStyledItemDelegateH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_create'; procedure QStyledItemDelegate_destroy(handle: QStyledItemDelegateH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_destroy'; procedure QStyledItemDelegate_paint(handle: QStyledItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_paint'; procedure QStyledItemDelegate_sizeHint(handle: QStyledItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_sizeHint'; function QStyledItemDelegate_createEditor(handle: QStyledItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_createEditor'; procedure QStyledItemDelegate_setEditorData(handle: QStyledItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setEditorData'; procedure QStyledItemDelegate_setModelData(handle: QStyledItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setModelData'; procedure QStyledItemDelegate_updateEditorGeometry(handle: QStyledItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_updateEditorGeometry'; function QStyledItemDelegate_itemEditorFactory(handle: QStyledItemDelegateH): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_itemEditorFactory'; procedure QStyledItemDelegate_setItemEditorFactory(handle: QStyledItemDelegateH; factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setItemEditorFactory'; procedure QStyledItemDelegate_displayText(handle: QStyledItemDelegateH; retval: PWideString; value: QVariantH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_displayText'; type QDialogDialogCode = ( // QDialog::DialogCode (1) QDialogRejected, QDialogAccepted ); function QDialog_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QDialogH; cdecl; external Qt4PasLib name 'QDialog_create'; procedure QDialog_destroy(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_destroy'; function QDialog_result(handle: QDialogH): Integer; cdecl; external Qt4PasLib name 'QDialog_result'; procedure QDialog_setVisible(handle: QDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QDialog_setVisible'; procedure QDialog_setOrientation(handle: QDialogH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QDialog_setOrientation'; function QDialog_orientation(handle: QDialogH): QtOrientation; cdecl; external Qt4PasLib name 'QDialog_orientation'; procedure QDialog_setExtension(handle: QDialogH; extension: QWidgetH); cdecl; external Qt4PasLib name 'QDialog_setExtension'; function QDialog_extension(handle: QDialogH): QWidgetH; cdecl; external Qt4PasLib name 'QDialog_extension'; procedure QDialog_sizeHint(handle: QDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QDialog_sizeHint'; procedure QDialog_minimumSizeHint(handle: QDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QDialog_minimumSizeHint'; procedure QDialog_setSizeGripEnabled(handle: QDialogH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QDialog_setSizeGripEnabled'; function QDialog_isSizeGripEnabled(handle: QDialogH): Boolean; cdecl; external Qt4PasLib name 'QDialog_isSizeGripEnabled'; procedure QDialog_setModal(handle: QDialogH; modal: Boolean); cdecl; external Qt4PasLib name 'QDialog_setModal'; procedure QDialog_setResult(handle: QDialogH; r: Integer); cdecl; external Qt4PasLib name 'QDialog_setResult'; procedure QDialog_open(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_open'; function QDialog_exec(handle: QDialogH): Integer; cdecl; external Qt4PasLib name 'QDialog_exec'; procedure QDialog_done(handle: QDialogH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QDialog_done'; procedure QDialog_accept(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_accept'; procedure QDialog_reject(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_reject'; procedure QDialog_showExtension(handle: QDialogH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QDialog_showExtension'; type QDialog_finished_Event = procedure (result: Integer) of object cdecl; QDialog_accepted_Event = procedure () of object cdecl; QDialog_rejected_Event = procedure () of object cdecl; type QFontDialogFontDialogOption = cardinal; // QFontDialog::FontDialogOption QFontDialogFontDialogOptions = QFontDialogFontDialogOption; //QFlags<> (3) const QFontDialogNoButtons = $00000001; QFontDialogDontUseNativeDialog = $00000002; function QFontDialog_create(parent: QWidgetH = nil): QFontDialogH; cdecl; external Qt4PasLib name 'QFontDialog_create'; procedure QFontDialog_destroy(handle: QFontDialogH); cdecl; external Qt4PasLib name 'QFontDialog_destroy'; function QFontDialog_create(initial: QFontH; parent: QWidgetH = nil): QFontDialogH; cdecl; external Qt4PasLib name 'QFontDialog_create2'; procedure QFontDialog_setCurrentFont(handle: QFontDialogH; font: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_setCurrentFont'; procedure QFontDialog_currentFont(handle: QFontDialogH; retval: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_currentFont'; procedure QFontDialog_selectedFont(handle: QFontDialogH; retval: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_selectedFont'; procedure QFontDialog_setOption(handle: QFontDialogH; option: QFontDialogFontDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QFontDialog_setOption'; function QFontDialog_testOption(handle: QFontDialogH; option: QFontDialogFontDialogOption): Boolean; cdecl; external Qt4PasLib name 'QFontDialog_testOption'; procedure QFontDialog_setOptions(handle: QFontDialogH; options: QFontDialogFontDialogOptions); cdecl; external Qt4PasLib name 'QFontDialog_setOptions'; function QFontDialog_options(handle: QFontDialogH): QFontDialogFontDialogOptions; cdecl; external Qt4PasLib name 'QFontDialog_options'; procedure QFontDialog_open(handle: QFontDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QFontDialog_open'; procedure QFontDialog_setVisible(handle: QFontDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QFontDialog_setVisible'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH; title: PWideString; options: QFontDialogFontDialogOptions); cdecl; external Qt4PasLib name 'QFontDialog_getFont'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH; title: PWideString); cdecl; external Qt4PasLib name 'QFontDialog_getFont2'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QFontDialog_getFont3'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QFontDialog_getFont4'; type QMessageBoxIcon = ( //QMessageBox::Icon (2) QMessageBoxNoIcon = 0, QMessageBoxInformation = 1, QMessageBoxWarning = 2, QMessageBoxCritical = 3, QMessageBoxQuestion = 4 ); QMessageBoxButtonRole = ( //QMessageBox::ButtonRole (2) QMessageBoxInvalidRole = -1, QMessageBoxAcceptRole, QMessageBoxRejectRole, QMessageBoxDestructiveRole, QMessageBoxActionRole, QMessageBoxHelpRole, QMessageBoxYesRole, QMessageBoxNoRole, QMessageBoxResetRole, QMessageBoxApplyRole, QMessageBoxNRoles ); type QMessageBoxStandardButton = cardinal; // QMessageBox::StandardButton (4) QMessageBoxStandardButtons = QMessageBoxStandardButton; // QFlags<> const QMessageBoxNoButton = 0 { $0 }; QMessageBoxOk = 1024 { $400 }; QMessageBoxSave = 2048 { $800 }; QMessageBoxSaveAll = 4096 { $1000 }; QMessageBoxOpen = 8192 { $2000 }; QMessageBoxYes = 16384 { $4000 }; QMessageBoxYesToAll = 32768 { $8000 }; QMessageBoxNo = 65536 { $10000 }; QMessageBoxNoToAll = 131072 { $20000 }; QMessageBoxAbort = 262144 { $40000 }; QMessageBoxRetry = 524288 { $80000 }; QMessageBoxIgnore = 1048576 { $100000 }; QMessageBoxClose = 2097152 { $200000 }; QMessageBoxCancel = 4194304 { $400000 }; QMessageBoxDiscard = 8388608 { $800000 }; QMessageBoxHelp = 16777216 { $1000000 }; QMessageBoxApply = 33554432 { $2000000 }; QMessageBoxReset = 67108864 { $4000000 }; QMessageBoxRestoreDefaults = 134217728 { $8000000 }; QMessageBoxFirstButton = 1024 { $400 }; QMessageBoxLastButton = 134217728 { $8000000 }; QMessageBoxYesAll = 32768 { $8000 }; QMessageBoxNoAll = 131072 { $20000 }; QMessageBoxDefault = 256 { $100 }; QMessageBoxEscape = 512 { $200 }; QMessageBoxFlagMask = 768 { $300 }; QMessageBoxButtonMask = 4294966527 { $fffffcff }; function QMessageBox_create(parent: QWidgetH = nil): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create'; procedure QMessageBox_destroy(handle: QMessageBoxH); cdecl; external Qt4PasLib name 'QMessageBox_destroy'; function QMessageBox_create(icon: QMessageBoxIcon; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxNoButton; parent: QWidgetH = nil; flags: QtWindowFlags = QtDialog or QtMSWindowsFixedSizeDialogHint): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create2'; procedure QMessageBox_addButton(handle: QMessageBoxH; button: QAbstractButtonH; role: QMessageBoxButtonRole); cdecl; external Qt4PasLib name 'QMessageBox_addButton'; function QMessageBox_addButton(handle: QMessageBoxH; text: PWideString; role: QMessageBoxButtonRole): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_addButton2'; function QMessageBox_addButton(handle: QMessageBoxH; button: QMessageBoxStandardButton): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_addButton3'; procedure QMessageBox_removeButton(handle: QMessageBoxH; button: QAbstractButtonH); cdecl; external Qt4PasLib name 'QMessageBox_removeButton'; procedure QMessageBox_open(handle: QMessageBoxH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QMessageBox_open'; procedure QMessageBox_buttons(handle: QMessageBoxH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QMessageBox_buttons'; function QMessageBox_buttonRole(handle: QMessageBoxH; button: QAbstractButtonH): QMessageBoxButtonRole; cdecl; external Qt4PasLib name 'QMessageBox_buttonRole'; procedure QMessageBox_setStandardButtons(handle: QMessageBoxH; buttons: QMessageBoxStandardButtons); cdecl; external Qt4PasLib name 'QMessageBox_setStandardButtons'; function QMessageBox_standardButtons(handle: QMessageBoxH): QMessageBoxStandardButtons; cdecl; external Qt4PasLib name 'QMessageBox_standardButtons'; function QMessageBox_standardButton(handle: QMessageBoxH; button: QAbstractButtonH): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_standardButton'; function QMessageBox_button(handle: QMessageBoxH; which: QMessageBoxStandardButton): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_button'; function QMessageBox_defaultButton(handle: QMessageBoxH): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_defaultButton'; procedure QMessageBox_setDefaultButton(handle: QMessageBoxH; button: QPushButtonH); cdecl; external Qt4PasLib name 'QMessageBox_setDefaultButton'; procedure QMessageBox_setDefaultButton(handle: QMessageBoxH; button: QMessageBoxStandardButton); cdecl; external Qt4PasLib name 'QMessageBox_setDefaultButton2'; function QMessageBox_escapeButton(handle: QMessageBoxH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_escapeButton'; procedure QMessageBox_setEscapeButton(handle: QMessageBoxH; button: QAbstractButtonH); cdecl; external Qt4PasLib name 'QMessageBox_setEscapeButton'; procedure QMessageBox_setEscapeButton(handle: QMessageBoxH; button: QMessageBoxStandardButton); cdecl; external Qt4PasLib name 'QMessageBox_setEscapeButton2'; function QMessageBox_clickedButton(handle: QMessageBoxH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_clickedButton'; procedure QMessageBox_text(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_text'; procedure QMessageBox_setText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setText'; function QMessageBox_icon(handle: QMessageBoxH): QMessageBoxIcon; cdecl; external Qt4PasLib name 'QMessageBox_icon'; procedure QMessageBox_setIcon(handle: QMessageBoxH; AnonParam1: QMessageBoxIcon); cdecl; external Qt4PasLib name 'QMessageBox_setIcon'; procedure QMessageBox_iconPixmap(handle: QMessageBoxH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QMessageBox_iconPixmap'; procedure QMessageBox_setIconPixmap(handle: QMessageBoxH; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QMessageBox_setIconPixmap'; function QMessageBox_textFormat(handle: QMessageBoxH): QtTextFormat; cdecl; external Qt4PasLib name 'QMessageBox_textFormat'; procedure QMessageBox_setTextFormat(handle: QMessageBoxH; format: QtTextFormat); cdecl; external Qt4PasLib name 'QMessageBox_setTextFormat'; function QMessageBox_information(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_information'; function QMessageBox_question(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_question'; function QMessageBox_warning(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_warning'; function QMessageBox_critical(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_critical'; procedure QMessageBox_about(parent: QWidgetH; title: PWideString; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_about'; procedure QMessageBox_aboutQt(parent: QWidgetH; title: PWideString = nil); cdecl; external Qt4PasLib name 'QMessageBox_aboutQt'; procedure QMessageBox_sizeHint(handle: QMessageBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QMessageBox_sizeHint'; function QMessageBox_create(title: PWideString; text: PWideString; icon: QMessageBoxIcon; button0: Integer; button1: Integer; button2: Integer; parent: QWidgetH = nil; f: QtWindowFlags = QtDialog or QtMSWindowsFixedSizeDialogHint): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create3'; function QMessageBox_information(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_information3'; function QMessageBox_question(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_question3'; function QMessageBox_warning(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_warning3'; function QMessageBox_critical(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_critical3'; procedure QMessageBox_buttonText(handle: QMessageBoxH; retval: PWideString; button: Integer); cdecl; external Qt4PasLib name 'QMessageBox_buttonText'; procedure QMessageBox_setButtonText(handle: QMessageBoxH; button: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setButtonText'; procedure QMessageBox_informativeText(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_informativeText'; procedure QMessageBox_setInformativeText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setInformativeText'; procedure QMessageBox_detailedText(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_detailedText'; procedure QMessageBox_setDetailedText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setDetailedText'; procedure QMessageBox_setWindowTitle(handle: QMessageBoxH; title: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setWindowTitle'; procedure QMessageBox_setWindowModality(handle: QMessageBoxH; windowModality: QtWindowModality); cdecl; external Qt4PasLib name 'QMessageBox_setWindowModality'; procedure QMessageBox_standardIcon(retval: QPixmapH; icon: QMessageBoxIcon); cdecl; external Qt4PasLib name 'QMessageBox_standardIcon'; type QInputDialogInputMode = ( // QInputDialog::InputMode (1) QInputDialogTextInput, QInputDialogIntInput, QInputDialogDoubleInput ); type QInputDialogInputDialogOption = cardinal; // QInputDialog::InputDialogOption QInputDialogInputDialogOptions = QInputDialogInputDialogOption; //QFlags<> (3) const QInputDialogNoButtons = $00000001; QInputDialogUseListViewForComboBoxItems = $00000002; function QInputDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QInputDialogH; cdecl; external Qt4PasLib name 'QInputDialog_create'; procedure QInputDialog_destroy(handle: QInputDialogH); cdecl; external Qt4PasLib name 'QInputDialog_destroy'; procedure QInputDialog_setInputMode(handle: QInputDialogH; mode: QInputDialogInputMode); cdecl; external Qt4PasLib name 'QInputDialog_setInputMode'; function QInputDialog_inputMode(handle: QInputDialogH): QInputDialogInputMode; cdecl; external Qt4PasLib name 'QInputDialog_inputMode'; procedure QInputDialog_setLabelText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setLabelText'; procedure QInputDialog_labelText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_labelText'; procedure QInputDialog_setOption(handle: QInputDialogH; option: QInputDialogInputDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QInputDialog_setOption'; function QInputDialog_testOption(handle: QInputDialogH; option: QInputDialogInputDialogOption): Boolean; cdecl; external Qt4PasLib name 'QInputDialog_testOption'; procedure QInputDialog_setOptions(handle: QInputDialogH; options: QInputDialogInputDialogOptions); cdecl; external Qt4PasLib name 'QInputDialog_setOptions'; function QInputDialog_options(handle: QInputDialogH): QInputDialogInputDialogOptions; cdecl; external Qt4PasLib name 'QInputDialog_options'; procedure QInputDialog_setTextValue(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setTextValue'; procedure QInputDialog_textValue(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_textValue'; procedure QInputDialog_setTextEchoMode(handle: QInputDialogH; mode: QLineEditEchoMode); cdecl; external Qt4PasLib name 'QInputDialog_setTextEchoMode'; function QInputDialog_textEchoMode(handle: QInputDialogH): QLineEditEchoMode; cdecl; external Qt4PasLib name 'QInputDialog_textEchoMode'; procedure QInputDialog_setComboBoxEditable(handle: QInputDialogH; editable: Boolean); cdecl; external Qt4PasLib name 'QInputDialog_setComboBoxEditable'; function QInputDialog_isComboBoxEditable(handle: QInputDialogH): Boolean; cdecl; external Qt4PasLib name 'QInputDialog_isComboBoxEditable'; procedure QInputDialog_setComboBoxItems(handle: QInputDialogH; items: QStringListH); cdecl; external Qt4PasLib name 'QInputDialog_setComboBoxItems'; procedure QInputDialog_comboBoxItems(handle: QInputDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QInputDialog_comboBoxItems'; procedure QInputDialog_setIntValue(handle: QInputDialogH; value: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntValue'; function QInputDialog_intValue(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intValue'; procedure QInputDialog_setIntMinimum(handle: QInputDialogH; min: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntMinimum'; function QInputDialog_intMinimum(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intMinimum'; procedure QInputDialog_setIntMaximum(handle: QInputDialogH; max: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntMaximum'; function QInputDialog_intMaximum(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intMaximum'; procedure QInputDialog_setIntRange(handle: QInputDialogH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntRange'; procedure QInputDialog_setIntStep(handle: QInputDialogH; step: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntStep'; function QInputDialog_intStep(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intStep'; procedure QInputDialog_setDoubleValue(handle: QInputDialogH; value: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleValue'; function QInputDialog_doubleValue(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleValue'; procedure QInputDialog_setDoubleMinimum(handle: QInputDialogH; min: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleMinimum'; function QInputDialog_doubleMinimum(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleMinimum'; procedure QInputDialog_setDoubleMaximum(handle: QInputDialogH; max: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleMaximum'; function QInputDialog_doubleMaximum(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleMaximum'; procedure QInputDialog_setDoubleRange(handle: QInputDialogH; min: Double; max: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleRange'; procedure QInputDialog_setDoubleDecimals(handle: QInputDialogH; decimals: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleDecimals'; function QInputDialog_doubleDecimals(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_doubleDecimals'; procedure QInputDialog_setOkButtonText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setOkButtonText'; procedure QInputDialog_okButtonText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_okButtonText'; procedure QInputDialog_setCancelButtonText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setCancelButtonText'; procedure QInputDialog_cancelButtonText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_cancelButtonText'; procedure QInputDialog_open(handle: QInputDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QInputDialog_open'; procedure QInputDialog_minimumSizeHint(handle: QInputDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QInputDialog_minimumSizeHint'; procedure QInputDialog_sizeHint(handle: QInputDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QInputDialog_sizeHint'; procedure QInputDialog_setVisible(handle: QInputDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QInputDialog_setVisible'; procedure QInputDialog_getText(retval: PWideString; parent: QWidgetH; title: PWideString; _label: PWideString; echo: QLineEditEchoMode = QLineEditNormal; text: PWideString = nil; ok: PBoolean = nil; flags: QtWindowFlags = 0); cdecl; external Qt4PasLib name 'QInputDialog_getText'; function QInputDialog_getInt(parent: QWidgetH; title: PWideString; _label: PWideString; value: Integer = 0; minValue: Integer = -2147483647; maxValue: Integer = 2147483647; step: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Integer; cdecl; external Qt4PasLib name 'QInputDialog_getInt'; function QInputDialog_getDouble(parent: QWidgetH; title: PWideString; _label: PWideString; value: Double = 0; minValue: Double = -2147483647; maxValue: Double = 2147483647; decimals: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Double; cdecl; external Qt4PasLib name 'QInputDialog_getDouble'; procedure QInputDialog_getItem(retval: PWideString; parent: QWidgetH; title: PWideString; _label: PWideString; items: QStringListH; current: Integer = 0; editable: Boolean = True; ok: PBoolean = nil; flags: QtWindowFlags = 0); cdecl; external Qt4PasLib name 'QInputDialog_getItem'; function QInputDialog_getInteger(parent: QWidgetH; title: PWideString; _label: PWideString; value: Integer = 0; minValue: Integer = -2147483647; maxValue: Integer = 2147483647; step: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Integer; cdecl; external Qt4PasLib name 'QInputDialog_getInteger'; procedure QInputDialog_done(handle: QInputDialogH; result: Integer); cdecl; external Qt4PasLib name 'QInputDialog_done'; type QColorDialogColorDialogOption = cardinal; // QColorDialog::ColorDialogOption QColorDialogColorDialogOptions = QColorDialogColorDialogOption; //QFlags<> (3) const QColorDialogShowAlphaChannel = $00000001; QColorDialogNoButtons = $00000002; QColorDialogDontUseNativeDialog = $00000004; function QColorDialog_create(parent: QWidgetH = nil): QColorDialogH; cdecl; external Qt4PasLib name 'QColorDialog_create'; procedure QColorDialog_destroy(handle: QColorDialogH); cdecl; external Qt4PasLib name 'QColorDialog_destroy'; function QColorDialog_create(initial: PQColor; parent: QWidgetH = nil): QColorDialogH; cdecl; external Qt4PasLib name 'QColorDialog_create2'; procedure QColorDialog_setCurrentColor(handle: QColorDialogH; color: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_setCurrentColor'; procedure QColorDialog_currentColor(handle: QColorDialogH; retval: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_currentColor'; procedure QColorDialog_selectedColor(handle: QColorDialogH; retval: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_selectedColor'; procedure QColorDialog_setOption(handle: QColorDialogH; option: QColorDialogColorDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QColorDialog_setOption'; function QColorDialog_testOption(handle: QColorDialogH; option: QColorDialogColorDialogOption): Boolean; cdecl; external Qt4PasLib name 'QColorDialog_testOption'; procedure QColorDialog_setOptions(handle: QColorDialogH; options: QColorDialogColorDialogOptions); cdecl; external Qt4PasLib name 'QColorDialog_setOptions'; function QColorDialog_options(handle: QColorDialogH): QColorDialogColorDialogOptions; cdecl; external Qt4PasLib name 'QColorDialog_options'; procedure QColorDialog_open(handle: QColorDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QColorDialog_open'; procedure QColorDialog_setVisible(handle: QColorDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QColorDialog_setVisible'; procedure QColorDialog_getColor(retval: PQColor; initial: PQColor; parent: QWidgetH; title: PWideString; options: QColorDialogColorDialogOptions = 0); cdecl; external Qt4PasLib name 'QColorDialog_getColor'; procedure QColorDialog_getColor(retval: PQColor; initial: PQColor; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QColorDialog_getColor2'; function QColorDialog_getRgba(rgba: QRgb = 4294967295; ok: PBoolean = nil; parent: QWidgetH = nil): QRgb; cdecl; external Qt4PasLib name 'QColorDialog_getRgba'; function QColorDialog_customCount(): Integer; cdecl; external Qt4PasLib name 'QColorDialog_customCount'; function QColorDialog_customColor(index: Integer): QRgb; cdecl; external Qt4PasLib name 'QColorDialog_customColor'; procedure QColorDialog_setCustomColor(index: Integer; color: QRgb); cdecl; external Qt4PasLib name 'QColorDialog_setCustomColor'; procedure QColorDialog_setStandardColor(index: Integer; color: QRgb); cdecl; external Qt4PasLib name 'QColorDialog_setStandardColor'; type QFileDialogViewMode = ( // QFileDialog::ViewMode (1) QFileDialogDetail, QFileDialogList ); QFileDialogFileMode = ( // QFileDialog::FileMode (1) QFileDialogAnyFile, QFileDialogExistingFile, QFileDialogDirectory, QFileDialogExistingFiles, QFileDialogDirectoryOnly ); QFileDialogAcceptMode = ( // QFileDialog::AcceptMode (1) QFileDialogAcceptOpen, QFileDialogAcceptSave ); QFileDialogDialogLabel = ( // QFileDialog::DialogLabel (1) QFileDialogLookIn, QFileDialogFileName, QFileDialogFileType, QFileDialogAccept, QFileDialogReject ); type QFileDialogOption = cardinal; // QFileDialog::Option QFileDialogOptions = QFileDialogOption; //QFlags<> (3) const QFileDialogShowDirsOnly = $00000001; QFileDialogDontResolveSymlinks = $00000002; QFileDialogDontConfirmOverwrite = $00000004; QFileDialogDontUseSheet = $00000008; QFileDialogDontUseNativeDialog = $00000010; QFileDialogReadOnly = $00000020; QFileDialogHideNameFilterDetails = $00000040; function QFileDialog_create(parent: QWidgetH; f: QtWindowFlags): QFileDialogH; cdecl; external Qt4PasLib name 'QFileDialog_create'; procedure QFileDialog_destroy(handle: QFileDialogH); cdecl; external Qt4PasLib name 'QFileDialog_destroy'; function QFileDialog_create(parent: QWidgetH = nil; caption: PWideString = nil; directory: PWideString = nil; filter: PWideString = nil): QFileDialogH; cdecl; external Qt4PasLib name 'QFileDialog_create2'; procedure QFileDialog_setDirectory(handle: QFileDialogH; directory: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setDirectory'; procedure QFileDialog_setDirectory(handle: QFileDialogH; directory: QDirH); cdecl; external Qt4PasLib name 'QFileDialog_setDirectory2'; procedure QFileDialog_directory(handle: QFileDialogH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileDialog_directory'; procedure QFileDialog_selectFile(handle: QFileDialogH; filename: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectFile'; procedure QFileDialog_selectedFiles(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_selectedFiles'; procedure QFileDialog_setNameFilterDetailsVisible(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilterDetailsVisible'; function QFileDialog_isNameFilterDetailsVisible(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_isNameFilterDetailsVisible'; procedure QFileDialog_setNameFilter(handle: QFileDialogH; filter: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilter'; procedure QFileDialog_setNameFilters(handle: QFileDialogH; filters: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilters'; procedure QFileDialog_nameFilters(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_nameFilters'; procedure QFileDialog_selectNameFilter(handle: QFileDialogH; filter: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectNameFilter'; procedure QFileDialog_selectedNameFilter(handle: QFileDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectedNameFilter'; function QFileDialog_filter(handle: QFileDialogH): QDirFilters; cdecl; external Qt4PasLib name 'QFileDialog_filter'; procedure QFileDialog_setFilter(handle: QFileDialogH; filters: QDirFilters); cdecl; external Qt4PasLib name 'QFileDialog_setFilter'; procedure QFileDialog_setViewMode(handle: QFileDialogH; mode: QFileDialogViewMode); cdecl; external Qt4PasLib name 'QFileDialog_setViewMode'; function QFileDialog_viewMode(handle: QFileDialogH): QFileDialogViewMode; cdecl; external Qt4PasLib name 'QFileDialog_viewMode'; procedure QFileDialog_setFileMode(handle: QFileDialogH; mode: QFileDialogFileMode); cdecl; external Qt4PasLib name 'QFileDialog_setFileMode'; function QFileDialog_fileMode(handle: QFileDialogH): QFileDialogFileMode; cdecl; external Qt4PasLib name 'QFileDialog_fileMode'; procedure QFileDialog_setAcceptMode(handle: QFileDialogH; mode: QFileDialogAcceptMode); cdecl; external Qt4PasLib name 'QFileDialog_setAcceptMode'; function QFileDialog_acceptMode(handle: QFileDialogH): QFileDialogAcceptMode; cdecl; external Qt4PasLib name 'QFileDialog_acceptMode'; procedure QFileDialog_setReadOnly(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setReadOnly'; function QFileDialog_isReadOnly(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_isReadOnly'; procedure QFileDialog_setResolveSymlinks(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setResolveSymlinks'; function QFileDialog_resolveSymlinks(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_resolveSymlinks'; procedure QFileDialog_saveState(handle: QFileDialogH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QFileDialog_saveState'; function QFileDialog_restoreState(handle: QFileDialogH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_restoreState'; procedure QFileDialog_setConfirmOverwrite(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setConfirmOverwrite'; function QFileDialog_confirmOverwrite(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_confirmOverwrite'; procedure QFileDialog_setDefaultSuffix(handle: QFileDialogH; suffix: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setDefaultSuffix'; procedure QFileDialog_defaultSuffix(handle: QFileDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_defaultSuffix'; procedure QFileDialog_setHistory(handle: QFileDialogH; paths: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_setHistory'; procedure QFileDialog_history(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_history'; procedure QFileDialog_setItemDelegate(handle: QFileDialogH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QFileDialog_setItemDelegate'; function QFileDialog_itemDelegate(handle: QFileDialogH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QFileDialog_itemDelegate'; procedure QFileDialog_setIconProvider(handle: QFileDialogH; provider: QFileIconProviderH); cdecl; external Qt4PasLib name 'QFileDialog_setIconProvider'; function QFileDialog_iconProvider(handle: QFileDialogH): QFileIconProviderH; cdecl; external Qt4PasLib name 'QFileDialog_iconProvider'; procedure QFileDialog_setLabelText(handle: QFileDialogH; _label: QFileDialogDialogLabel; text: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setLabelText'; procedure QFileDialog_labelText(handle: QFileDialogH; retval: PWideString; _label: QFileDialogDialogLabel); cdecl; external Qt4PasLib name 'QFileDialog_labelText'; procedure QFileDialog_setProxyModel(handle: QFileDialogH; model: QAbstractProxyModelH); cdecl; external Qt4PasLib name 'QFileDialog_setProxyModel'; function QFileDialog_proxyModel(handle: QFileDialogH): QAbstractProxyModelH; cdecl; external Qt4PasLib name 'QFileDialog_proxyModel'; procedure QFileDialog_setOption(handle: QFileDialogH; option: QFileDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QFileDialog_setOption'; function QFileDialog_testOption(handle: QFileDialogH; option: QFileDialogOption): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_testOption'; procedure QFileDialog_setOptions(handle: QFileDialogH; options: QFileDialogOptions); cdecl; external Qt4PasLib name 'QFileDialog_setOptions'; function QFileDialog_options(handle: QFileDialogH): QFileDialogOptions; cdecl; external Qt4PasLib name 'QFileDialog_options'; procedure QFileDialog_open(handle: QFileDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QFileDialog_open'; procedure QFileDialog_setVisible(handle: QFileDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setVisible'; procedure QFileDialog_getOpenFileName(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getOpenFileName'; procedure QFileDialog_getSaveFileName(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getSaveFileName'; procedure QFileDialog_getExistingDirectory(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; options: QFileDialogOptions = QFileDialogShowDirsOnly); cdecl; external Qt4PasLib name 'QFileDialog_getExistingDirectory'; procedure QFileDialog_getOpenFileNames(retval: QStringListH; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getOpenFileNames'; type QFileDialog_fileSelected_Event = procedure (_file: PWideString) of object cdecl; QFileDialog_filesSelected_Event = procedure (files: QStringListH) of object cdecl; QFileDialog_currentChanged_Event = procedure (path: PWideString) of object cdecl; QFileDialog_directoryEntered_Event = procedure (directory: PWideString) of object cdecl; QFileDialog_filterSelected_Event = procedure (filter: PWideString) of object cdecl; function QProgressDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QProgressDialogH; cdecl; external Qt4PasLib name 'QProgressDialog_create'; procedure QProgressDialog_destroy(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_destroy'; function QProgressDialog_create(labelText: PWideString; cancelButtonText: PWideString; minimum: Integer; maximum: Integer; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QProgressDialogH; cdecl; external Qt4PasLib name 'QProgressDialog_create2'; procedure QProgressDialog_setLabel(handle: QProgressDialogH; _label: QLabelH); cdecl; external Qt4PasLib name 'QProgressDialog_setLabel'; procedure QProgressDialog_setCancelButton(handle: QProgressDialogH; button: QPushButtonH); cdecl; external Qt4PasLib name 'QProgressDialog_setCancelButton'; procedure QProgressDialog_setBar(handle: QProgressDialogH; bar: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressDialog_setBar'; function QProgressDialog_wasCanceled(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_wasCanceled'; function QProgressDialog_minimum(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_minimum'; function QProgressDialog_maximum(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_maximum'; function QProgressDialog_value(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_value'; procedure QProgressDialog_sizeHint(handle: QProgressDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressDialog_sizeHint'; procedure QProgressDialog_labelText(handle: QProgressDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_labelText'; function QProgressDialog_minimumDuration(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_minimumDuration'; procedure QProgressDialog_setAutoReset(handle: QProgressDialogH; reset: Boolean); cdecl; external Qt4PasLib name 'QProgressDialog_setAutoReset'; function QProgressDialog_autoReset(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_autoReset'; procedure QProgressDialog_setAutoClose(handle: QProgressDialogH; close: Boolean); cdecl; external Qt4PasLib name 'QProgressDialog_setAutoClose'; function QProgressDialog_autoClose(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_autoClose'; procedure QProgressDialog_open(handle: QProgressDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QProgressDialog_open'; procedure QProgressDialog_cancel(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_cancel'; procedure QProgressDialog_reset(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_reset'; procedure QProgressDialog_setMaximum(handle: QProgressDialogH; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMaximum'; procedure QProgressDialog_setMinimum(handle: QProgressDialogH; minimum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMinimum'; procedure QProgressDialog_setRange(handle: QProgressDialogH; minimum: Integer; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setRange'; procedure QProgressDialog_setValue(handle: QProgressDialogH; progress: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setValue'; procedure QProgressDialog_setLabelText(handle: QProgressDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_setLabelText'; procedure QProgressDialog_setCancelButtonText(handle: QProgressDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_setCancelButtonText'; procedure QProgressDialog_setMinimumDuration(handle: QProgressDialogH; ms: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMinimumDuration'; type QProgressDialog_canceled_Event = procedure () of object cdecl; type QAbstractPrintDialogPrintRange = ( // QAbstractPrintDialog::PrintRange (1) QAbstractPrintDialogAllPages, QAbstractPrintDialogSelection, QAbstractPrintDialogPageRange ); type QAbstractPrintDialogPrintDialogOption = cardinal; // QAbstractPrintDialog::PrintDialogOption QAbstractPrintDialogPrintDialogOptions = QAbstractPrintDialogPrintDialogOption; //QFlags<> (3) const QAbstractPrintDialogNone = $0000; QAbstractPrintDialogPrintToFile = $0001; QAbstractPrintDialogPrintSelection = $0002; QAbstractPrintDialogPrintPageRange = $0004; QAbstractPrintDialogPrintShowPageSize = $0008; QAbstractPrintDialogPrintCollateCopies = $0010; QAbstractPrintDialogDontUseSheet = $0020; function QAbstractPrintDialog_exec(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_exec'; procedure QAbstractPrintDialog_addEnabledOption(handle: QAbstractPrintDialogH; option: QAbstractPrintDialogPrintDialogOption); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_addEnabledOption'; procedure QAbstractPrintDialog_setEnabledOptions(handle: QAbstractPrintDialogH; options: QAbstractPrintDialogPrintDialogOptions); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setEnabledOptions'; function QAbstractPrintDialog_enabledOptions(handle: QAbstractPrintDialogH): QAbstractPrintDialogPrintDialogOptions; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_enabledOptions'; function QAbstractPrintDialog_isOptionEnabled(handle: QAbstractPrintDialogH; option: QAbstractPrintDialogPrintDialogOption): Boolean; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_isOptionEnabled'; procedure QAbstractPrintDialog_setPrintRange(handle: QAbstractPrintDialogH; range: QAbstractPrintDialogPrintRange); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setPrintRange'; function QAbstractPrintDialog_printRange(handle: QAbstractPrintDialogH): QAbstractPrintDialogPrintRange; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_printRange'; procedure QAbstractPrintDialog_setMinMax(handle: QAbstractPrintDialogH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setMinMax'; function QAbstractPrintDialog_minPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_minPage'; function QAbstractPrintDialog_maxPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_maxPage'; procedure QAbstractPrintDialog_setFromTo(handle: QAbstractPrintDialogH; fromPage: Integer; toPage: Integer); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setFromTo'; function QAbstractPrintDialog_fromPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_fromPage'; function QAbstractPrintDialog_toPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_toPage'; function QAbstractPrintDialog_printer(handle: QAbstractPrintDialogH): QPrinterH; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_printer'; function QPrintDialog_create(printer: QPrinterH; parent: QWidgetH = nil): QPrintDialogH; cdecl; external Qt4PasLib name 'QPrintDialog_create'; procedure QPrintDialog_destroy(handle: QPrintDialogH); cdecl; external Qt4PasLib name 'QPrintDialog_destroy'; function QPrintDialog_create(parent: QWidgetH = nil): QPrintDialogH; cdecl; external Qt4PasLib name 'QPrintDialog_create2'; function QPrintDialog_exec(handle: QPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QPrintDialog_exec'; {$if defined(BINUX) or defined(QTOPIA)} procedure QPrintDialog_accept(handle: QPrintDialogH); cdecl; external Qt4PasLib name 'QPrintDialog_accept'; {$endif} procedure QPrintDialog_done(handle: QPrintDialogH; result: Integer); cdecl; external Qt4PasLib name 'QPrintDialog_done'; procedure QPrintDialog_setOption(handle: QPrintDialogH; option: QAbstractPrintDialogPrintDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPrintDialog_setOption'; function QPrintDialog_testOption(handle: QPrintDialogH; option: QAbstractPrintDialogPrintDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPrintDialog_testOption'; procedure QPrintDialog_setOptions(handle: QPrintDialogH; options: QAbstractPrintDialogPrintDialogOptions); cdecl; external Qt4PasLib name 'QPrintDialog_setOptions'; function QPrintDialog_options(handle: QPrintDialogH): QAbstractPrintDialogPrintDialogOptions; cdecl; external Qt4PasLib name 'QPrintDialog_options'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QPrintDialog_setVisible(handle: QPrintDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintDialog_setVisible'; {$endif} procedure QPrintDialog_open(handle: QPrintDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPrintDialog_open'; type QPrintDialog_accepted_Event = procedure (printer: QPrinterH) of object cdecl; type QPageSetupDialogPageSetupDialogOption = cardinal; // QPageSetupDialog::PageSetupDialogOption QPageSetupDialogPageSetupDialogOptions = QPageSetupDialogPageSetupDialogOption; //QFlags<> (3) const QPageSetupDialogNone = $00000000; QPageSetupDialogDontUseSheet = $00000001; QPageSetupDialogOwnsPrinter = $80000000; function QPageSetupDialog_create(printer: QPrinterH; parent: QWidgetH = nil): QPageSetupDialogH; cdecl; external Qt4PasLib name 'QPageSetupDialog_create'; procedure QPageSetupDialog_destroy(handle: QPageSetupDialogH); cdecl; external Qt4PasLib name 'QPageSetupDialog_destroy'; function QPageSetupDialog_create(parent: QWidgetH = nil): QPageSetupDialogH; cdecl; external Qt4PasLib name 'QPageSetupDialog_create2'; procedure QPageSetupDialog_addEnabledOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption); cdecl; external Qt4PasLib name 'QPageSetupDialog_addEnabledOption'; procedure QPageSetupDialog_setEnabledOptions(handle: QPageSetupDialogH; options: QPageSetupDialogPageSetupDialogOptions); cdecl; external Qt4PasLib name 'QPageSetupDialog_setEnabledOptions'; function QPageSetupDialog_enabledOptions(handle: QPageSetupDialogH): QPageSetupDialogPageSetupDialogOptions; cdecl; external Qt4PasLib name 'QPageSetupDialog_enabledOptions'; function QPageSetupDialog_isOptionEnabled(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPageSetupDialog_isOptionEnabled'; procedure QPageSetupDialog_setOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPageSetupDialog_setOption'; function QPageSetupDialog_testOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPageSetupDialog_testOption'; procedure QPageSetupDialog_setOptions(handle: QPageSetupDialogH; options: QPageSetupDialogPageSetupDialogOptions); cdecl; external Qt4PasLib name 'QPageSetupDialog_setOptions'; function QPageSetupDialog_options(handle: QPageSetupDialogH): QPageSetupDialogPageSetupDialogOptions; cdecl; external Qt4PasLib name 'QPageSetupDialog_options'; function QPageSetupDialog_exec(handle: QPageSetupDialogH): Integer; cdecl; external Qt4PasLib name 'QPageSetupDialog_exec'; procedure QPageSetupDialog_open(handle: QPageSetupDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPageSetupDialog_open'; {$ifdef DARWIN } procedure QPageSetupDialog_setVisible(handle: QPageSetupDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPageSetupDialog_setVisible'; {$endif} function QPrintPreviewDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewDialogH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_create'; procedure QPrintPreviewDialog_destroy(handle: QPrintPreviewDialogH); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_destroy'; function QPrintPreviewDialog_create(printer: QPrinterH; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewDialogH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_create2'; procedure QPrintPreviewDialog_open(handle: QPrintPreviewDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_open'; function QPrintPreviewDialog_printer(handle: QPrintPreviewDialogH): QPrinterH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_printer'; procedure QPrintPreviewDialog_setVisible(handle: QPrintPreviewDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_setVisible'; procedure QPrintPreviewDialog_done(handle: QPrintPreviewDialogH; result: Integer); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_done'; type QPrintPreviewDialog_paintRequested_Event = procedure (printer: QPrinterH) of object cdecl; type QSystemTrayIconActivationReason = ( // QSystemTrayIcon::ActivationReason (1) QSystemTrayIconUnknown, QSystemTrayIconContext, QSystemTrayIconDoubleClick, QSystemTrayIconTrigger, QSystemTrayIconMiddleClick ); QSystemTrayIconMessageIcon = ( // QSystemTrayIcon::MessageIcon (1) QSystemTrayIconNoIcon, QSystemTrayIconInformation, QSystemTrayIconWarning, QSystemTrayIconCritical ); function QSystemTrayIcon_create(parent: QObjectH = nil): QSystemTrayIconH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_create'; procedure QSystemTrayIcon_destroy(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_destroy'; function QSystemTrayIcon_create(icon: QIconH; parent: QObjectH = nil): QSystemTrayIconH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_create2'; procedure QSystemTrayIcon_setContextMenu(handle: QSystemTrayIconH; menu: QMenuH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setContextMenu'; function QSystemTrayIcon_contextMenu(handle: QSystemTrayIconH): QMenuH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_contextMenu'; procedure QSystemTrayIcon_icon(handle: QSystemTrayIconH; retval: QIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_icon'; procedure QSystemTrayIcon_setIcon(handle: QSystemTrayIconH; icon: QIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setIcon'; procedure QSystemTrayIcon_toolTip(handle: QSystemTrayIconH; retval: PWideString); cdecl; external Qt4PasLib name 'QSystemTrayIcon_toolTip'; procedure QSystemTrayIcon_setToolTip(handle: QSystemTrayIconH; tip: PWideString); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setToolTip'; function QSystemTrayIcon_isSystemTrayAvailable(): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_isSystemTrayAvailable'; function QSystemTrayIcon_supportsMessages(): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_supportsMessages'; procedure QSystemTrayIcon_showMessage(handle: QSystemTrayIconH; title: PWideString; msg: PWideString; icon: QSystemTrayIconMessageIcon = QSystemTrayIconInformation; msecs: Integer = 10000); cdecl; external Qt4PasLib name 'QSystemTrayIcon_showMessage'; procedure QSystemTrayIcon_geometry(handle: QSystemTrayIconH; retval: PRect); cdecl; external Qt4PasLib name 'QSystemTrayIcon_geometry'; function QSystemTrayIcon_isVisible(handle: QSystemTrayIconH): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_isVisible'; procedure QSystemTrayIcon_setVisible(handle: QSystemTrayIconH; visible: Boolean); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setVisible'; procedure QSystemTrayIcon_show(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_show'; procedure QSystemTrayIcon_hide(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hide'; type QSystemTrayIcon_activated_Event = procedure (reason: QSystemTrayIconActivationReason) of object cdecl; QSystemTrayIcon_messageClicked_Event = procedure () of object cdecl; type QDesktopServicesStandardLocation = ( // QDesktopServices::StandardLocation (1) QDesktopServicesDesktopLocation, QDesktopServicesDocumentsLocation, QDesktopServicesFontsLocation, QDesktopServicesApplicationsLocation, QDesktopServicesMusicLocation, QDesktopServicesMoviesLocation, QDesktopServicesPicturesLocation, QDesktopServicesTempLocation, QDesktopServicesHomeLocation, QDesktopServicesDataLocation, QDesktopServicesCacheLocation ); function QDesktopServices_openUrl(url: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QDesktopServices_openUrl'; procedure QDesktopServices_setUrlHandler(scheme: PWideString; receiver: QObjectH; method: PAnsiChar); cdecl; external Qt4PasLib name 'QDesktopServices_setUrlHandler'; procedure QDesktopServices_unsetUrlHandler(scheme: PWideString); cdecl; external Qt4PasLib name 'QDesktopServices_unsetUrlHandler'; procedure QDesktopServices_storageLocation(retval: PWideString; _type: QDesktopServicesStandardLocation); cdecl; external Qt4PasLib name 'QDesktopServices_storageLocation'; procedure QDesktopServices_displayName(retval: PWideString; _type: QDesktopServicesStandardLocation); cdecl; external Qt4PasLib name 'QDesktopServices_displayName'; type QStyleStateFlag = cardinal; // QStyle::StateFlag QStyleState = QStyleStateFlag; //QFlags<> (3) const QStyleState_None = $00000000; QStyleState_Enabled = $00000001; QStyleState_Raised = $00000002; QStyleState_Sunken = $00000004; QStyleState_Off = $00000008; QStyleState_NoChange = $00000010; QStyleState_On = $00000020; QStyleState_DownArrow = $00000040; QStyleState_Horizontal = $00000080; QStyleState_HasFocus = $00000100; QStyleState_Top = $00000200; QStyleState_Bottom = $00000400; QStyleState_FocusAtBorder = $00000800; QStyleState_AutoRaise = $00001000; QStyleState_MouseOver = $00002000; QStyleState_UpArrow = $00004000; QStyleState_Selected = $00008000; QStyleState_Active = $00010000; QStyleState_Window = $00020000; QStyleState_Open = $00040000; QStyleState_Children = $00080000; QStyleState_Item = $00100000; QStyleState_Sibling = $00200000; QStyleState_Editing = $00400000; QStyleState_KeyboardFocusChange = $00800000; QStyleState_ReadOnly = $02000000; QStyleState_Small = $04000000; QStyleState_Mini = $08000000; type QStyleControlElement = ( //QStyle::ControlElement (2) QStyleCE_PushButton, QStyleCE_PushButtonBevel, QStyleCE_PushButtonLabel, QStyleCE_CheckBox, QStyleCE_CheckBoxLabel, QStyleCE_RadioButton, QStyleCE_RadioButtonLabel, QStyleCE_TabBarTab, QStyleCE_TabBarTabShape, QStyleCE_TabBarTabLabel, QStyleCE_ProgressBar, QStyleCE_ProgressBarGroove, QStyleCE_ProgressBarContents, QStyleCE_ProgressBarLabel, QStyleCE_MenuItem, QStyleCE_MenuScroller, QStyleCE_MenuVMargin, QStyleCE_MenuHMargin, QStyleCE_MenuTearoff, QStyleCE_MenuEmptyArea, QStyleCE_MenuBarItem, QStyleCE_MenuBarEmptyArea, QStyleCE_ToolButtonLabel, QStyleCE_Header, QStyleCE_HeaderSection, QStyleCE_HeaderLabel, QStyleCE_Q3DockWindowEmptyArea, QStyleCE_ToolBoxTab, QStyleCE_SizeGrip, QStyleCE_Splitter, QStyleCE_RubberBand, QStyleCE_DockWidgetTitle, QStyleCE_ScrollBarAddLine, QStyleCE_ScrollBarSubLine, QStyleCE_ScrollBarAddPage, QStyleCE_ScrollBarSubPage, QStyleCE_ScrollBarSlider, QStyleCE_ScrollBarFirst, QStyleCE_ScrollBarLast, QStyleCE_FocusFrame, QStyleCE_ComboBoxLabel, QStyleCE_ToolBar, QStyleCE_ToolBoxTabShape, QStyleCE_ToolBoxTabLabel, QStyleCE_HeaderEmptyArea, QStyleCE_ColumnViewGrip, QStyleCE_ItemViewItem, QStyleCE_ShapedFrame, QStyleCE_CustomBase = $f0000000 ); QStyleComplexControl = ( //QStyle::ComplexControl (2) QStyleCC_SpinBox, QStyleCC_ComboBox, QStyleCC_ScrollBar, QStyleCC_Slider, QStyleCC_ToolButton, QStyleCC_TitleBar, QStyleCC_Q3ListView, QStyleCC_Dial, QStyleCC_GroupBox, QStyleCC_MdiControls, QStyleCC_CustomBase = $f0000000 ); type QStyleSubControl = cardinal; // QStyle::SubControl QStyleSubControls = QStyleSubControl; //QFlags<> (3) const QStyleSC_None = $00000000; QStyleSC_ScrollBarAddLine = $00000001; QStyleSC_ScrollBarSubLine = $00000002; QStyleSC_ScrollBarAddPage = $00000004; QStyleSC_ScrollBarSubPage = $00000008; QStyleSC_ScrollBarFirst = $00000010; QStyleSC_ScrollBarLast = $00000020; QStyleSC_ScrollBarSlider = $00000040; QStyleSC_ScrollBarGroove = $00000080; QStyleSC_SpinBoxUp = $00000001; QStyleSC_SpinBoxDown = $00000002; QStyleSC_SpinBoxFrame = $00000004; QStyleSC_SpinBoxEditField = $00000008; QStyleSC_ComboBoxFrame = $00000001; QStyleSC_ComboBoxEditField = $00000002; QStyleSC_ComboBoxArrow = $00000004; QStyleSC_ComboBoxListBoxPopup = $00000008; QStyleSC_SliderGroove = $00000001; QStyleSC_SliderHandle = $00000002; QStyleSC_SliderTickmarks = $00000004; QStyleSC_ToolButton = $00000001; QStyleSC_ToolButtonMenu = $00000002; QStyleSC_TitleBarSysMenu = $00000001; QStyleSC_TitleBarMinButton = $00000002; QStyleSC_TitleBarMaxButton = $00000004; QStyleSC_TitleBarCloseButton = $00000008; QStyleSC_TitleBarNormalButton = $00000010; QStyleSC_TitleBarShadeButton = $00000020; QStyleSC_TitleBarUnshadeButton = $00000040; QStyleSC_TitleBarContextHelpButton = $00000080; QStyleSC_TitleBarLabel = $00000100; QStyleSC_Q3ListView = $00000001; QStyleSC_Q3ListViewBranch = $00000002; QStyleSC_Q3ListViewExpand = $00000004; QStyleSC_DialGroove = $00000001; QStyleSC_DialHandle = $00000002; QStyleSC_DialTickmarks = $00000004; QStyleSC_GroupBoxCheckBox = $00000001; QStyleSC_GroupBoxLabel = $00000002; QStyleSC_GroupBoxContents = $00000004; QStyleSC_GroupBoxFrame = $00000008; QStyleSC_MdiMinButton = $00000001; QStyleSC_MdiNormalButton = $00000002; QStyleSC_MdiCloseButton = $00000004; QStyleSC_All = $ffffffff; type QStyleContentsType = ( //QStyle::ContentsType (2) QStyleCT_PushButton, QStyleCT_CheckBox, QStyleCT_RadioButton, QStyleCT_ToolButton, QStyleCT_ComboBox, QStyleCT_Splitter, QStyleCT_Q3DockWindow, QStyleCT_ProgressBar, QStyleCT_MenuItem, QStyleCT_MenuBarItem, QStyleCT_MenuBar, QStyleCT_Menu, QStyleCT_TabBarTab, QStyleCT_Slider, QStyleCT_ScrollBar, QStyleCT_Q3Header, QStyleCT_LineEdit, QStyleCT_SpinBox, QStyleCT_SizeGrip, QStyleCT_TabWidget, QStyleCT_DialogButtons, QStyleCT_HeaderSection, QStyleCT_GroupBox, QStyleCT_MdiControls, QStyleCT_ItemViewItem, QStyleCT_CustomBase = $f0000000 ); QStyleStandardPixmap = ( //QStyle::StandardPixmap (2) QStyleSP_TitleBarMenuButton, QStyleSP_TitleBarMinButton, QStyleSP_TitleBarMaxButton, QStyleSP_TitleBarCloseButton, QStyleSP_TitleBarNormalButton, QStyleSP_TitleBarShadeButton, QStyleSP_TitleBarUnshadeButton, QStyleSP_TitleBarContextHelpButton, QStyleSP_DockWidgetCloseButton, QStyleSP_MessageBoxInformation, QStyleSP_MessageBoxWarning, QStyleSP_MessageBoxCritical, QStyleSP_MessageBoxQuestion, QStyleSP_DesktopIcon, QStyleSP_TrashIcon, QStyleSP_ComputerIcon, QStyleSP_DriveFDIcon, QStyleSP_DriveHDIcon, QStyleSP_DriveCDIcon, QStyleSP_DriveDVDIcon, QStyleSP_DriveNetIcon, QStyleSP_DirOpenIcon, QStyleSP_DirClosedIcon, QStyleSP_DirLinkIcon, QStyleSP_FileIcon, QStyleSP_FileLinkIcon, QStyleSP_ToolBarHorizontalExtensionButton, QStyleSP_ToolBarVerticalExtensionButton, QStyleSP_FileDialogStart, QStyleSP_FileDialogEnd, QStyleSP_FileDialogToParent, QStyleSP_FileDialogNewFolder, QStyleSP_FileDialogDetailedView, QStyleSP_FileDialogInfoView, QStyleSP_FileDialogContentsView, QStyleSP_FileDialogListView, QStyleSP_FileDialogBack, QStyleSP_DirIcon, QStyleSP_DialogOkButton, QStyleSP_DialogCancelButton, QStyleSP_DialogHelpButton, QStyleSP_DialogOpenButton, QStyleSP_DialogSaveButton, QStyleSP_DialogCloseButton, QStyleSP_DialogApplyButton, QStyleSP_DialogResetButton, QStyleSP_DialogDiscardButton, QStyleSP_DialogYesButton, QStyleSP_DialogNoButton, QStyleSP_ArrowUp, QStyleSP_ArrowDown, QStyleSP_ArrowLeft, QStyleSP_ArrowRight, QStyleSP_ArrowBack, QStyleSP_ArrowForward, QStyleSP_DirHomeIcon, QStyleSP_CommandLink, QStyleSP_VistaShield, QStyleSP_BrowserReload, QStyleSP_BrowserStop, QStyleSP_MediaPlay, QStyleSP_MediaStop, QStyleSP_MediaPause, QStyleSP_MediaSkipForward, QStyleSP_MediaSkipBackward, QStyleSP_MediaSeekForward, QStyleSP_MediaSeekBackward, QStyleSP_MediaVolume, QStyleSP_MediaVolumeMuted, QStyleSP_CustomBase = $f0000000 ); type QStylePrimitiveElement = cardinal; // QStyle::PrimitiveElement (4) const QStylePE_Q3CheckListController = 0 { $0 }; QStylePE_Q3CheckListExclusiveIndicator = 1 { $1 }; QStylePE_Q3CheckListIndicator = 2 { $2 }; QStylePE_Q3DockWindowSeparator = 3 { $3 }; QStylePE_Q3Separator = 4 { $4 }; QStylePE_Frame = 5 { $5 }; QStylePE_FrameDefaultButton = 6 { $6 }; QStylePE_FrameDockWidget = 7 { $7 }; QStylePE_FrameFocusRect = 8 { $8 }; QStylePE_FrameGroupBox = 9 { $9 }; QStylePE_FrameLineEdit = 10 { $a }; QStylePE_FrameMenu = 11 { $b }; QStylePE_FrameStatusBar = 12 { $c }; QStylePE_FrameStatusBarItem = 12 { $c }; QStylePE_FrameTabWidget = 13 { $d }; QStylePE_FrameWindow = 14 { $e }; QStylePE_FrameButtonBevel = 15 { $f }; QStylePE_FrameButtonTool = 16 { $10 }; QStylePE_FrameTabBarBase = 17 { $11 }; QStylePE_PanelButtonCommand = 18 { $12 }; QStylePE_PanelButtonBevel = 19 { $13 }; QStylePE_PanelButtonTool = 20 { $14 }; QStylePE_PanelMenuBar = 21 { $15 }; QStylePE_PanelToolBar = 22 { $16 }; QStylePE_PanelLineEdit = 23 { $17 }; QStylePE_IndicatorArrowDown = 24 { $18 }; QStylePE_IndicatorArrowLeft = 25 { $19 }; QStylePE_IndicatorArrowRight = 26 { $1a }; QStylePE_IndicatorArrowUp = 27 { $1b }; QStylePE_IndicatorBranch = 28 { $1c }; QStylePE_IndicatorButtonDropDown = 29 { $1d }; QStylePE_IndicatorViewItemCheck = 30 { $1e }; QStylePE_IndicatorItemViewItemCheck = 30 { $1e }; QStylePE_IndicatorCheckBox = 31 { $1f }; QStylePE_IndicatorDockWidgetResizeHandle = 32 { $20 }; QStylePE_IndicatorHeaderArrow = 33 { $21 }; QStylePE_IndicatorMenuCheckMark = 34 { $22 }; QStylePE_IndicatorProgressChunk = 35 { $23 }; QStylePE_IndicatorRadioButton = 36 { $24 }; QStylePE_IndicatorSpinDown = 37 { $25 }; QStylePE_IndicatorSpinMinus = 38 { $26 }; QStylePE_IndicatorSpinPlus = 39 { $27 }; QStylePE_IndicatorSpinUp = 40 { $28 }; QStylePE_IndicatorToolBarHandle = 41 { $29 }; QStylePE_IndicatorToolBarSeparator = 42 { $2a }; QStylePE_PanelTipLabel = 43 { $2b }; QStylePE_IndicatorTabTear = 44 { $2c }; QStylePE_PanelScrollAreaCorner = 45 { $2d }; QStylePE_Widget = 46 { $2e }; QStylePE_IndicatorColumnViewArrow = 47 { $2f }; QStylePE_IndicatorItemViewItemDrop = 48 { $30 }; QStylePE_PanelItemViewItem = 49 { $31 }; QStylePE_PanelItemViewRow = 50 { $32 }; QStylePE_PanelStatusBar = 51 { $33 }; QStylePE_IndicatorTabClose = 52 { $34 }; QStylePE_PanelMenu = 53 { $35 }; QStylePE_CustomBase = 251658240 { $f000000 }; type QStyleSubElement = cardinal; // QStyle::SubElement (4) const QStyleSE_PushButtonContents = 0 { $0 }; QStyleSE_PushButtonFocusRect = 1 { $1 }; QStyleSE_CheckBoxIndicator = 2 { $2 }; QStyleSE_CheckBoxContents = 3 { $3 }; QStyleSE_CheckBoxFocusRect = 4 { $4 }; QStyleSE_CheckBoxClickRect = 5 { $5 }; QStyleSE_RadioButtonIndicator = 6 { $6 }; QStyleSE_RadioButtonContents = 7 { $7 }; QStyleSE_RadioButtonFocusRect = 8 { $8 }; QStyleSE_RadioButtonClickRect = 9 { $9 }; QStyleSE_ComboBoxFocusRect = 10 { $a }; QStyleSE_SliderFocusRect = 11 { $b }; QStyleSE_Q3DockWindowHandleRect = 12 { $c }; QStyleSE_ProgressBarGroove = 13 { $d }; QStyleSE_ProgressBarContents = 14 { $e }; QStyleSE_ProgressBarLabel = 15 { $f }; QStyleSE_DialogButtonAccept = 16 { $10 }; QStyleSE_DialogButtonReject = 17 { $11 }; QStyleSE_DialogButtonApply = 18 { $12 }; QStyleSE_DialogButtonHelp = 19 { $13 }; QStyleSE_DialogButtonAll = 20 { $14 }; QStyleSE_DialogButtonAbort = 21 { $15 }; QStyleSE_DialogButtonIgnore = 22 { $16 }; QStyleSE_DialogButtonRetry = 23 { $17 }; QStyleSE_DialogButtonCustom = 24 { $18 }; QStyleSE_ToolBoxTabContents = 25 { $19 }; QStyleSE_HeaderLabel = 26 { $1a }; QStyleSE_HeaderArrow = 27 { $1b }; QStyleSE_TabWidgetTabBar = 28 { $1c }; QStyleSE_TabWidgetTabPane = 29 { $1d }; QStyleSE_TabWidgetTabContents = 30 { $1e }; QStyleSE_TabWidgetLeftCorner = 31 { $1f }; QStyleSE_TabWidgetRightCorner = 32 { $20 }; QStyleSE_ViewItemCheckIndicator = 33 { $21 }; QStyleSE_ItemViewItemCheckIndicator = 33 { $21 }; QStyleSE_TabBarTearIndicator = 34 { $22 }; QStyleSE_TreeViewDisclosureItem = 35 { $23 }; QStyleSE_LineEditContents = 36 { $24 }; QStyleSE_FrameContents = 37 { $25 }; QStyleSE_DockWidgetCloseButton = 38 { $26 }; QStyleSE_DockWidgetFloatButton = 39 { $27 }; QStyleSE_DockWidgetTitleBarText = 40 { $28 }; QStyleSE_DockWidgetIcon = 41 { $29 }; QStyleSE_CheckBoxLayoutItem = 42 { $2a }; QStyleSE_ComboBoxLayoutItem = 43 { $2b }; QStyleSE_DateTimeEditLayoutItem = 44 { $2c }; QStyleSE_DialogButtonBoxLayoutItem = 45 { $2d }; QStyleSE_LabelLayoutItem = 46 { $2e }; QStyleSE_ProgressBarLayoutItem = 47 { $2f }; QStyleSE_PushButtonLayoutItem = 48 { $30 }; QStyleSE_RadioButtonLayoutItem = 49 { $31 }; QStyleSE_SliderLayoutItem = 50 { $32 }; QStyleSE_SpinBoxLayoutItem = 51 { $33 }; QStyleSE_ToolButtonLayoutItem = 52 { $34 }; QStyleSE_FrameLayoutItem = 53 { $35 }; QStyleSE_GroupBoxLayoutItem = 54 { $36 }; QStyleSE_TabWidgetLayoutItem = 55 { $37 }; QStyleSE_ItemViewItemDecoration = 56 { $38 }; QStyleSE_ItemViewItemText = 57 { $39 }; QStyleSE_ItemViewItemFocusRect = 58 { $3a }; QStyleSE_TabBarTabLeftButton = 59 { $3b }; QStyleSE_TabBarTabRightButton = 60 { $3c }; QStyleSE_TabBarTabText = 61 { $3d }; QStyleSE_ShapedFrameContents = 62 { $3e }; QStyleSE_CustomBase = 4026531840 { $f0000000 }; type QStylePixelMetric = cardinal; // QStyle::PixelMetric (4) const QStylePM_ButtonMargin = 0 { $0 }; QStylePM_ButtonDefaultIndicator = 1 { $1 }; QStylePM_MenuButtonIndicator = 2 { $2 }; QStylePM_ButtonShiftHorizontal = 3 { $3 }; QStylePM_ButtonShiftVertical = 4 { $4 }; QStylePM_DefaultFrameWidth = 5 { $5 }; QStylePM_SpinBoxFrameWidth = 6 { $6 }; QStylePM_ComboBoxFrameWidth = 7 { $7 }; QStylePM_MaximumDragDistance = 8 { $8 }; QStylePM_ScrollBarExtent = 9 { $9 }; QStylePM_ScrollBarSliderMin = 10 { $a }; QStylePM_SliderThickness = 11 { $b }; QStylePM_SliderControlThickness = 12 { $c }; QStylePM_SliderLength = 13 { $d }; QStylePM_SliderTickmarkOffset = 14 { $e }; QStylePM_SliderSpaceAvailable = 15 { $f }; QStylePM_DockWidgetSeparatorExtent = 16 { $10 }; QStylePM_DockWidgetHandleExtent = 17 { $11 }; QStylePM_DockWidgetFrameWidth = 18 { $12 }; QStylePM_TabBarTabOverlap = 19 { $13 }; QStylePM_TabBarTabHSpace = 20 { $14 }; QStylePM_TabBarTabVSpace = 21 { $15 }; QStylePM_TabBarBaseHeight = 22 { $16 }; QStylePM_TabBarBaseOverlap = 23 { $17 }; QStylePM_ProgressBarChunkWidth = 24 { $18 }; QStylePM_SplitterWidth = 25 { $19 }; QStylePM_TitleBarHeight = 26 { $1a }; QStylePM_MenuScrollerHeight = 27 { $1b }; QStylePM_MenuHMargin = 28 { $1c }; QStylePM_MenuVMargin = 29 { $1d }; QStylePM_MenuPanelWidth = 30 { $1e }; QStylePM_MenuTearoffHeight = 31 { $1f }; QStylePM_MenuDesktopFrameWidth = 32 { $20 }; QStylePM_MenuBarPanelWidth = 33 { $21 }; QStylePM_MenuBarItemSpacing = 34 { $22 }; QStylePM_MenuBarVMargin = 35 { $23 }; QStylePM_MenuBarHMargin = 36 { $24 }; QStylePM_IndicatorWidth = 37 { $25 }; QStylePM_IndicatorHeight = 38 { $26 }; QStylePM_ExclusiveIndicatorWidth = 39 { $27 }; QStylePM_ExclusiveIndicatorHeight = 40 { $28 }; QStylePM_CheckListButtonSize = 41 { $29 }; QStylePM_CheckListControllerSize = 42 { $2a }; QStylePM_DialogButtonsSeparator = 43 { $2b }; QStylePM_DialogButtonsButtonWidth = 44 { $2c }; QStylePM_DialogButtonsButtonHeight = 45 { $2d }; QStylePM_MdiSubWindowFrameWidth = 46 { $2e }; QStylePM_MDIFrameWidth = 46 { $2e }; QStylePM_MdiSubWindowMinimizedWidth = 47 { $2f }; QStylePM_MDIMinimizedWidth = 47 { $2f }; QStylePM_HeaderMargin = 48 { $30 }; QStylePM_HeaderMarkSize = 49 { $31 }; QStylePM_HeaderGripMargin = 50 { $32 }; QStylePM_TabBarTabShiftHorizontal = 51 { $33 }; QStylePM_TabBarTabShiftVertical = 52 { $34 }; QStylePM_TabBarScrollButtonWidth = 53 { $35 }; QStylePM_ToolBarFrameWidth = 54 { $36 }; QStylePM_ToolBarHandleExtent = 55 { $37 }; QStylePM_ToolBarItemSpacing = 56 { $38 }; QStylePM_ToolBarItemMargin = 57 { $39 }; QStylePM_ToolBarSeparatorExtent = 58 { $3a }; QStylePM_ToolBarExtensionExtent = 59 { $3b }; QStylePM_SpinBoxSliderHeight = 60 { $3c }; QStylePM_DefaultTopLevelMargin = 61 { $3d }; QStylePM_DefaultChildMargin = 62 { $3e }; QStylePM_DefaultLayoutSpacing = 63 { $3f }; QStylePM_ToolBarIconSize = 64 { $40 }; QStylePM_ListViewIconSize = 65 { $41 }; QStylePM_IconViewIconSize = 66 { $42 }; QStylePM_SmallIconSize = 67 { $43 }; QStylePM_LargeIconSize = 68 { $44 }; QStylePM_FocusFrameVMargin = 69 { $45 }; QStylePM_FocusFrameHMargin = 70 { $46 }; QStylePM_ToolTipLabelFrameWidth = 71 { $47 }; QStylePM_CheckBoxLabelSpacing = 72 { $48 }; QStylePM_TabBarIconSize = 73 { $49 }; QStylePM_SizeGripSize = 74 { $4a }; QStylePM_DockWidgetTitleMargin = 75 { $4b }; QStylePM_MessageBoxIconSize = 76 { $4c }; QStylePM_ButtonIconSize = 77 { $4d }; QStylePM_DockWidgetTitleBarButtonMargin = 78 { $4e }; QStylePM_RadioButtonLabelSpacing = 79 { $4f }; QStylePM_LayoutLeftMargin = 80 { $50 }; QStylePM_LayoutTopMargin = 81 { $51 }; QStylePM_LayoutRightMargin = 82 { $52 }; QStylePM_LayoutBottomMargin = 83 { $53 }; QStylePM_LayoutHorizontalSpacing = 84 { $54 }; QStylePM_LayoutVerticalSpacing = 85 { $55 }; QStylePM_TabBar_ScrollButtonOverlap = 86 { $56 }; QStylePM_TextCursorWidth = 87 { $57 }; QStylePM_TabCloseIndicatorWidth = 88 { $58 }; QStylePM_TabCloseIndicatorHeight = 89 { $59 }; QStylePM_ScrollView_ScrollBarSpacing = 90 { $5a }; QStylePM_SubMenuOverlap = 91 { $5b }; QStylePM_CustomBase = 4026531840 { $f0000000 }; type QStyleStyleHint = cardinal; // QStyle::StyleHint (4) const QStyleSH_EtchDisabledText = 0 { $0 }; QStyleSH_DitherDisabledText = 1 { $1 }; QStyleSH_ScrollBar_MiddleClickAbsolutePosition = 2 { $2 }; QStyleSH_ScrollBar_ScrollWhenPointerLeavesControl = 3 { $3 }; QStyleSH_TabBar_SelectMouseType = 4 { $4 }; QStyleSH_TabBar_Alignment = 5 { $5 }; QStyleSH_Header_ArrowAlignment = 6 { $6 }; QStyleSH_Slider_SnapToValue = 7 { $7 }; QStyleSH_Slider_SloppyKeyEvents = 8 { $8 }; QStyleSH_ProgressDialog_CenterCancelButton = 9 { $9 }; QStyleSH_ProgressDialog_TextLabelAlignment = 10 { $a }; QStyleSH_PrintDialog_RightAlignButtons = 11 { $b }; QStyleSH_MainWindow_SpaceBelowMenuBar = 12 { $c }; QStyleSH_FontDialog_SelectAssociatedText = 13 { $d }; QStyleSH_Menu_AllowActiveAndDisabled = 14 { $e }; QStyleSH_Menu_SpaceActivatesItem = 15 { $f }; QStyleSH_Menu_SubMenuPopupDelay = 16 { $10 }; QStyleSH_ScrollView_FrameOnlyAroundContents = 17 { $11 }; QStyleSH_MenuBar_AltKeyNavigation = 18 { $12 }; QStyleSH_ComboBox_ListMouseTracking = 19 { $13 }; QStyleSH_Menu_MouseTracking = 20 { $14 }; QStyleSH_MenuBar_MouseTracking = 21 { $15 }; QStyleSH_ItemView_ChangeHighlightOnFocus = 22 { $16 }; QStyleSH_Widget_ShareActivation = 23 { $17 }; QStyleSH_Workspace_FillSpaceOnMaximize = 24 { $18 }; QStyleSH_ComboBox_Popup = 25 { $19 }; QStyleSH_TitleBar_NoBorder = 26 { $1a }; QStyleSH_Slider_StopMouseOverSlider = 27 { $1b }; QStyleSH_ScrollBar_StopMouseOverSlider = 27 { $1b }; QStyleSH_BlinkCursorWhenTextSelected = 28 { $1c }; QStyleSH_RichText_FullWidthSelection = 29 { $1d }; QStyleSH_Menu_Scrollable = 30 { $1e }; QStyleSH_GroupBox_TextLabelVerticalAlignment = 31 { $1f }; QStyleSH_GroupBox_TextLabelColor = 32 { $20 }; QStyleSH_Menu_SloppySubMenus = 33 { $21 }; QStyleSH_Table_GridLineColor = 34 { $22 }; QStyleSH_LineEdit_PasswordCharacter = 35 { $23 }; QStyleSH_DialogButtons_DefaultButton = 36 { $24 }; QStyleSH_ToolBox_SelectedPageTitleBold = 37 { $25 }; QStyleSH_TabBar_PreferNoArrows = 38 { $26 }; QStyleSH_ScrollBar_LeftClickAbsolutePosition = 39 { $27 }; QStyleSH_Q3ListViewExpand_SelectMouseType = 40 { $28 }; QStyleSH_UnderlineShortcut = 41 { $29 }; QStyleSH_SpinBox_AnimateButton = 42 { $2a }; QStyleSH_SpinBox_KeyPressAutoRepeatRate = 43 { $2b }; QStyleSH_SpinBox_ClickAutoRepeatRate = 44 { $2c }; QStyleSH_Menu_FillScreenWithScroll = 45 { $2d }; QStyleSH_ToolTipLabel_Opacity = 46 { $2e }; QStyleSH_DrawMenuBarSeparator = 47 { $2f }; QStyleSH_TitleBar_ModifyNotification = 48 { $30 }; QStyleSH_Button_FocusPolicy = 49 { $31 }; QStyleSH_MenuBar_DismissOnSecondClick = 50 { $32 }; QStyleSH_MessageBox_UseBorderForButtonSpacing = 51 { $33 }; QStyleSH_TitleBar_AutoRaise = 52 { $34 }; QStyleSH_ToolButton_PopupDelay = 53 { $35 }; QStyleSH_FocusFrame_Mask = 54 { $36 }; QStyleSH_RubberBand_Mask = 55 { $37 }; QStyleSH_WindowFrame_Mask = 56 { $38 }; QStyleSH_SpinControls_DisableOnBounds = 57 { $39 }; QStyleSH_Dial_BackgroundRole = 58 { $3a }; QStyleSH_ComboBox_LayoutDirection = 59 { $3b }; QStyleSH_ItemView_EllipsisLocation = 60 { $3c }; QStyleSH_ItemView_ShowDecorationSelected = 61 { $3d }; QStyleSH_ItemView_ActivateItemOnSingleClick = 62 { $3e }; QStyleSH_ScrollBar_ContextMenu = 63 { $3f }; QStyleSH_ScrollBar_RollBetweenButtons = 64 { $40 }; QStyleSH_Slider_AbsoluteSetButtons = 65 { $41 }; QStyleSH_Slider_PageSetButtons = 66 { $42 }; QStyleSH_Menu_KeyboardSearch = 67 { $43 }; QStyleSH_TabBar_ElideMode = 68 { $44 }; QStyleSH_DialogButtonLayout = 69 { $45 }; QStyleSH_ComboBox_PopupFrameStyle = 70 { $46 }; QStyleSH_MessageBox_TextInteractionFlags = 71 { $47 }; QStyleSH_DialogButtonBox_ButtonsHaveIcons = 72 { $48 }; QStyleSH_SpellCheckUnderlineStyle = 73 { $49 }; QStyleSH_MessageBox_CenterButtons = 74 { $4a }; QStyleSH_Menu_SelectionWrap = 75 { $4b }; QStyleSH_ItemView_MovementWithoutUpdatingSelection = 76 { $4c }; QStyleSH_ToolTip_Mask = 77 { $4d }; QStyleSH_FocusFrame_AboveWidget = 78 { $4e }; QStyleSH_TextControl_FocusIndicatorTextCharFormat = 79 { $4f }; QStyleSH_WizardStyle = 80 { $50 }; QStyleSH_ItemView_ArrowKeysNavigateIntoChildren = 81 { $51 }; QStyleSH_Menu_Mask = 82 { $52 }; QStyleSH_Menu_FlashTriggeredItem = 83 { $53 }; QStyleSH_Menu_FadeOutOnHide = 84 { $54 }; QStyleSH_SpinBox_ClickAutoRepeatThreshold = 85 { $55 }; QStyleSH_ItemView_PaintAlternatingRowColorsForEmptyArea = 86 { $56 }; QStyleSH_FormLayoutWrapPolicy = 87 { $57 }; QStyleSH_TabWidget_DefaultTabPosition = 88 { $58 }; QStyleSH_ToolBar_Movable = 89 { $59 }; QStyleSH_FormLayoutFieldGrowthPolicy = 90 { $5a }; QStyleSH_FormLayoutFormAlignment = 91 { $5b }; QStyleSH_FormLayoutLabelAlignment = 92 { $5c }; QStyleSH_ItemView_DrawDelegateFrame = 93 { $5d }; QStyleSH_TabBar_CloseButtonPosition = 94 { $5e }; QStyleSH_DockWidget_ButtonsHaveFrame = 95 { $5f }; QStyleSH_CustomBase = 4026531840 { $f0000000 }; procedure QStyle_polish(handle: QStyleH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QStyle_polish'; procedure QStyle_unpolish(handle: QStyleH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QStyle_unpolish'; procedure QStyle_polish(handle: QStyleH; AnonParam1: QApplicationH); cdecl; external Qt4PasLib name 'QStyle_polish2'; procedure QStyle_unpolish(handle: QStyleH; AnonParam1: QApplicationH); cdecl; external Qt4PasLib name 'QStyle_unpolish2'; procedure QStyle_polish(handle: QStyleH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QStyle_polish3'; procedure QStyle_itemTextRect(handle: QStyleH; retval: PRect; fm: QFontMetricsH; r: PRect; flags: Integer; enabled: Boolean; text: PWideString); cdecl; external Qt4PasLib name 'QStyle_itemTextRect'; procedure QStyle_itemPixmapRect(handle: QStyleH; retval: PRect; r: PRect; flags: Integer; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QStyle_itemPixmapRect'; procedure QStyle_drawItemText(handle: QStyleH; painter: QPainterH; rect: PRect; flags: Integer; pal: QPaletteH; enabled: Boolean; text: PWideString; textRole: QPaletteColorRole = QPaletteNoRole); cdecl; external Qt4PasLib name 'QStyle_drawItemText'; procedure QStyle_drawItemPixmap(handle: QStyleH; painter: QPainterH; rect: PRect; alignment: Integer; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QStyle_drawItemPixmap'; procedure QStyle_standardPalette(handle: QStyleH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QStyle_standardPalette'; procedure QStyle_drawPrimitive(handle: QStyleH; pe: QStylePrimitiveElement; opt: QStyleOptionH; p: QPainterH; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawPrimitive'; procedure QStyle_drawControl(handle: QStyleH; element: QStyleControlElement; opt: QStyleOptionH; p: QPainterH; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawControl'; procedure QStyle_subElementRect(handle: QStyleH; retval: PRect; subElement: QStyleSubElement; option: QStyleOptionH; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_subElementRect'; procedure QStyle_drawComplexControl(handle: QStyleH; cc: QStyleComplexControl; opt: QStyleOptionComplexH; p: QPainterH; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawComplexControl'; function QStyle_hitTestComplexControl(handle: QStyleH; cc: QStyleComplexControl; opt: QStyleOptionComplexH; pt: PQtPoint; widget: QWidgetH = nil): QStyleSubControl; cdecl; external Qt4PasLib name 'QStyle_hitTestComplexControl'; procedure QStyle_subControlRect(handle: QStyleH; retval: PRect; cc: QStyleComplexControl; opt: QStyleOptionComplexH; sc: QStyleSubControl; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_subControlRect'; function QStyle_pixelMetric(handle: QStyleH; metric: QStylePixelMetric; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_pixelMetric'; procedure QStyle_sizeFromContents(handle: QStyleH; retval: PSize; ct: QStyleContentsType; opt: QStyleOptionH; contentsSize: PSize; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_sizeFromContents'; function QStyle_styleHint(handle: QStyleH; stylehint: QStyleStyleHint; opt: QStyleOptionH = nil; widget: QWidgetH = nil; returnData: QStyleHintReturnH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_styleHint'; procedure QStyle_standardPixmap(handle: QStyleH; retval: QPixmapH; standardPixmap: QStyleStandardPixmap; opt: QStyleOptionH = nil; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_standardPixmap'; procedure QStyle_standardIcon(handle: QStyleH; retval: QIconH; standardIcon: QStyleStandardPixmap; option: QStyleOptionH = nil; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_standardIcon'; procedure QStyle_generatedIconPixmap(handle: QStyleH; retval: QPixmapH; iconMode: QIconMode; pixmap: QPixmapH; opt: QStyleOptionH); cdecl; external Qt4PasLib name 'QStyle_generatedIconPixmap'; procedure QStyle_visualRect(retval: PRect; direction: QtLayoutDirection; boundingRect: PRect; logicalRect: PRect); cdecl; external Qt4PasLib name 'QStyle_visualRect'; procedure QStyle_visualPos(retval: PQtPoint; direction: QtLayoutDirection; boundingRect: PRect; logicalPos: PQtPoint); cdecl; external Qt4PasLib name 'QStyle_visualPos'; function QStyle_sliderPositionFromValue(min: Integer; max: Integer; val: Integer; space: Integer; upsideDown: Boolean = False): Integer; cdecl; external Qt4PasLib name 'QStyle_sliderPositionFromValue'; function QStyle_sliderValueFromPosition(min: Integer; max: Integer; pos: Integer; space: Integer; upsideDown: Boolean = False): Integer; cdecl; external Qt4PasLib name 'QStyle_sliderValueFromPosition'; function QStyle_visualAlignment(direction: QtLayoutDirection; alignment: QtAlignment): QtAlignment; cdecl; external Qt4PasLib name 'QStyle_visualAlignment'; procedure QStyle_alignedRect(retval: PRect; direction: QtLayoutDirection; alignment: QtAlignment; size: PSize; rectangle: PRect); cdecl; external Qt4PasLib name 'QStyle_alignedRect'; function QStyle_layoutSpacing(handle: QStyleH; control1: QSizePolicyControlType; control2: QSizePolicyControlType; orientation: QtOrientation; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_layoutSpacing'; function QStyle_combinedLayoutSpacing(handle: QStyleH; controls1: QSizePolicyControlTypes; controls2: QSizePolicyControlTypes; orientation: QtOrientation; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_combinedLayoutSpacing'; type QStyleOptionOptionType = ( //QStyleOption::OptionType (2) QStyleOptionSO_Default, QStyleOptionSO_FocusRect, QStyleOptionSO_Button, QStyleOptionSO_Tab, QStyleOptionSO_MenuItem, QStyleOptionSO_Frame, QStyleOptionSO_ProgressBar, QStyleOptionSO_ToolBox, QStyleOptionSO_Header, QStyleOptionSO_Q3DockWindow, QStyleOptionSO_DockWidget, QStyleOptionSO_Q3ListViewItem, QStyleOptionSO_ViewItem, QStyleOptionSO_TabWidgetFrame, QStyleOptionSO_TabBarBase, QStyleOptionSO_RubberBand, QStyleOptionSO_ToolBar, QStyleOptionSO_GraphicsItem, QStyleOptionSO_CustomBase = $f00, QStyleOptionSO_Complex = $f0000, QStyleOptionSO_Slider, QStyleOptionSO_SpinBox, QStyleOptionSO_ToolButton, QStyleOptionSO_ComboBox, QStyleOptionSO_Q3ListView, QStyleOptionSO_TitleBar, QStyleOptionSO_GroupBox, QStyleOptionSO_SizeGrip, QStyleOptionSO_ComplexCustomBase = $f000000 ); QStyleOptionStyleOptionVersion = ( //QStyleOption::StyleOptionVersion (2) QStyleOptionVersion = 1 ); type QStyleOptionFocusRectStyleOptionVersion = ( //QStyleOptionFocusRect::StyleOptionVersion (2) QStyleOptionFocusRectVersion = 1 ); type QStyleOptionFrameStyleOptionVersion = ( //QStyleOptionFrame::StyleOptionVersion (2) QStyleOptionFrameVersion = 1 ); type QStyleOptionFrameV2StyleOptionVersion = ( //QStyleOptionFrameV2::StyleOptionVersion (2) QStyleOptionFrameV2Version = 2 ); type QStyleOptionFrameV2FrameFeature = cardinal; // QStyleOptionFrameV2::FrameFeature QStyleOptionFrameV2FrameFeatures = QStyleOptionFrameV2FrameFeature; //QFlags<> (3) const QStyleOptionFrameV2None = $00; QStyleOptionFrameV2Flat = $01; type QStyleOptionFrameV3StyleOptionVersion = ( //QStyleOptionFrameV3::StyleOptionVersion (2) QStyleOptionFrameV3Version = 3 ); type QStyleOptionTabWidgetFrameStyleOptionVersion = ( //QStyleOptionTabWidgetFrame::StyleOptionVersion (2) QStyleOptionTabWidgetFrameVersion = 1 ); type QStyleOptionTabBarBaseStyleOptionVersion = ( //QStyleOptionTabBarBase::StyleOptionVersion (2) QStyleOptionTabBarBaseVersion = 1 ); type QStyleOptionTabBarBaseV2StyleOptionVersion = ( //QStyleOptionTabBarBaseV2::StyleOptionVersion (2) QStyleOptionTabBarBaseV2Version = 2 ); type QStyleOptionHeaderSectionPosition = ( // QStyleOptionHeader::SectionPosition (1) QStyleOptionHeaderBeginning, QStyleOptionHeaderMiddle, QStyleOptionHeaderEnd, QStyleOptionHeaderOnlyOneSection ); QStyleOptionHeaderSelectedPosition = ( // QStyleOptionHeader::SelectedPosition (1) QStyleOptionHeaderNotAdjacent, QStyleOptionHeaderNextIsSelected, QStyleOptionHeaderPreviousIsSelected, QStyleOptionHeaderNextAndPreviousAreSelected ); QStyleOptionHeaderSortIndicator = ( // QStyleOptionHeader::SortIndicator (1) QStyleOptionHeaderNone, QStyleOptionHeaderSortUp, QStyleOptionHeaderSortDown ); QStyleOptionHeaderStyleOptionVersion = ( //QStyleOptionHeader::StyleOptionVersion (2) QStyleOptionHeaderVersion = 1 ); type QStyleOptionButtonStyleOptionVersion = ( //QStyleOptionButton::StyleOptionVersion (2) QStyleOptionButtonVersion = 1 ); type QStyleOptionButtonButtonFeature = cardinal; // QStyleOptionButton::ButtonFeature QStyleOptionButtonButtonFeatures = QStyleOptionButtonButtonFeature; //QFlags<> (3) const QStyleOptionButtonNone = $00; QStyleOptionButtonFlat = $01; QStyleOptionButtonHasMenu = $02; QStyleOptionButtonDefaultButton = $04; QStyleOptionButtonAutoDefaultButton = $08; QStyleOptionButtonCommandLinkButton = $10; type QStyleOptionTabTabPosition = ( // QStyleOptionTab::TabPosition (1) QStyleOptionTabBeginning, QStyleOptionTabMiddle, QStyleOptionTabEnd, QStyleOptionTabOnlyOneTab ); QStyleOptionTabSelectedPosition = ( // QStyleOptionTab::SelectedPosition (1) QStyleOptionTabNotAdjacent, QStyleOptionTabNextIsSelected, QStyleOptionTabPreviousIsSelected ); QStyleOptionTabStyleOptionVersion = ( //QStyleOptionTab::StyleOptionVersion (2) QStyleOptionTabVersion = 1 ); type QStyleOptionTabCornerWidget = cardinal; // QStyleOptionTab::CornerWidget QStyleOptionTabCornerWidgets = QStyleOptionTabCornerWidget; //QFlags<> (3) const QStyleOptionTabNoCornerWidgets = $00; QStyleOptionTabLeftCornerWidget = $01; QStyleOptionTabRightCornerWidget = $02; type QStyleOptionTabV2StyleOptionVersion = ( //QStyleOptionTabV2::StyleOptionVersion (2) QStyleOptionTabV2Version = 2 ); type QStyleOptionTabV3StyleOptionVersion = ( //QStyleOptionTabV3::StyleOptionVersion (2) QStyleOptionTabV3Version = 3 ); type QStyleOptionToolBarToolBarPosition = ( // QStyleOptionToolBar::ToolBarPosition (1) QStyleOptionToolBarBeginning, QStyleOptionToolBarMiddle, QStyleOptionToolBarEnd, QStyleOptionToolBarOnlyOne ); QStyleOptionToolBarStyleOptionVersion = ( //QStyleOptionToolBar::StyleOptionVersion (2) QStyleOptionToolBarVersion = 1 ); type QStyleOptionToolBarToolBarFeature = cardinal; // QStyleOptionToolBar::ToolBarFeature QStyleOptionToolBarToolBarFeatures = QStyleOptionToolBarToolBarFeature; //QFlags<> (3) const QStyleOptionToolBarNone = $0; QStyleOptionToolBarMovable = $1; type QStyleOptionProgressBarStyleOptionVersion = ( //QStyleOptionProgressBar::StyleOptionVersion (2) QStyleOptionProgressBarVersion = 1 ); type QStyleOptionProgressBarV2StyleOptionVersion = ( //QStyleOptionProgressBarV2::StyleOptionVersion (2) QStyleOptionProgressBarV2Version = 2 ); type QStyleOptionMenuItemMenuItemType = ( // QStyleOptionMenuItem::MenuItemType (1) QStyleOptionMenuItemNormal, QStyleOptionMenuItemDefaultItem, QStyleOptionMenuItemSeparator, QStyleOptionMenuItemSubMenu, QStyleOptionMenuItemScroller, QStyleOptionMenuItemTearOff, QStyleOptionMenuItemMargin, QStyleOptionMenuItemEmptyArea ); QStyleOptionMenuItemCheckType = ( // QStyleOptionMenuItem::CheckType (1) QStyleOptionMenuItemNotCheckable, QStyleOptionMenuItemExclusive, QStyleOptionMenuItemNonExclusive ); QStyleOptionMenuItemStyleOptionVersion = ( //QStyleOptionMenuItem::StyleOptionVersion (2) QStyleOptionMenuItemVersion = 1 ); type QStyleOptionQ3ListViewItemStyleOptionVersion = ( //QStyleOptionQ3ListViewItem::StyleOptionVersion (2) QStyleOptionQ3ListViewItemVersion = 1 ); type QStyleOptionQ3ListViewItemQ3ListViewItemFeature = cardinal; // QStyleOptionQ3ListViewItem::Q3ListViewItemFeature QStyleOptionQ3ListViewItemQ3ListViewItemFeatures = QStyleOptionQ3ListViewItemQ3ListViewItemFeature; //QFlags<> (3) const QStyleOptionQ3ListViewItemNone = $00; QStyleOptionQ3ListViewItemExpandable = $01; QStyleOptionQ3ListViewItemMultiLine = $02; QStyleOptionQ3ListViewItemVisible = $04; QStyleOptionQ3ListViewItemParentControl = $08; type QStyleOptionQ3DockWindowStyleOptionVersion = ( //QStyleOptionQ3DockWindow::StyleOptionVersion (2) QStyleOptionQ3DockWindowVersion = 1 ); type QStyleOptionDockWidgetStyleOptionVersion = ( //QStyleOptionDockWidget::StyleOptionVersion (2) QStyleOptionDockWidgetVersion = 1 ); type QStyleOptionViewItemPosition = ( // QStyleOptionViewItem::Position (1) QStyleOptionViewItemLeft, QStyleOptionViewItemRight, QStyleOptionViewItemTop, QStyleOptionViewItemBottom ); QStyleOptionViewItemStyleOptionVersion = ( //QStyleOptionViewItem::StyleOptionVersion (2) QStyleOptionViewItemVersion = 1 ); type QStyleOptionViewItemV4ViewItemPosition = ( // QStyleOptionViewItemV4::ViewItemPosition (1) QStyleOptionViewItemV4Invalid, QStyleOptionViewItemV4Beginning, QStyleOptionViewItemV4Middle, QStyleOptionViewItemV4End, QStyleOptionViewItemV4OnlyOne ); QStyleOptionViewItemV4StyleOptionVersion = ( //QStyleOptionViewItemV4::StyleOptionVersion (2) QStyleOptionViewItemV4Version = 4 ); type QStyleOptionToolBoxStyleOptionVersion = ( //QStyleOptionToolBox::StyleOptionVersion (2) QStyleOptionToolBoxVersion = 1 ); type QStyleOptionToolBoxV2TabPosition = ( // QStyleOptionToolBoxV2::TabPosition (1) QStyleOptionToolBoxV2Beginning, QStyleOptionToolBoxV2Middle, QStyleOptionToolBoxV2End, QStyleOptionToolBoxV2OnlyOneTab ); QStyleOptionToolBoxV2SelectedPosition = ( // QStyleOptionToolBoxV2::SelectedPosition (1) QStyleOptionToolBoxV2NotAdjacent, QStyleOptionToolBoxV2NextIsSelected, QStyleOptionToolBoxV2PreviousIsSelected ); QStyleOptionToolBoxV2StyleOptionVersion = ( //QStyleOptionToolBoxV2::StyleOptionVersion (2) QStyleOptionToolBoxV2Version = 2 ); type QStyleOptionRubberBandStyleOptionVersion = ( //QStyleOptionRubberBand::StyleOptionVersion (2) QStyleOptionRubberBandVersion = 1 ); type QStyleOptionComplexStyleOptionVersion = ( //QStyleOptionComplex::StyleOptionVersion (2) QStyleOptionComplexVersion = 1 ); type QStyleOptionSliderStyleOptionVersion = ( //QStyleOptionSlider::StyleOptionVersion (2) QStyleOptionSliderVersion = 1 ); type QStyleOptionSpinBoxStyleOptionVersion = ( //QStyleOptionSpinBox::StyleOptionVersion (2) QStyleOptionSpinBoxVersion = 1 ); type QStyleOptionQ3ListViewStyleOptionVersion = ( //QStyleOptionQ3ListView::StyleOptionVersion (2) QStyleOptionQ3ListViewVersion = 1 ); type QStyleOptionToolButtonStyleOptionVersion = ( //QStyleOptionToolButton::StyleOptionVersion (2) QStyleOptionToolButtonVersion = 1 ); type QStyleOptionComboBoxStyleOptionVersion = ( //QStyleOptionComboBox::StyleOptionVersion (2) QStyleOptionComboBoxVersion = 1 ); type QStyleOptionTitleBarStyleOptionVersion = ( //QStyleOptionTitleBar::StyleOptionVersion (2) QStyleOptionTitleBarVersion = 1 ); type QStyleOptionGroupBoxStyleOptionVersion = ( //QStyleOptionGroupBox::StyleOptionVersion (2) QStyleOptionGroupBoxVersion = 1 ); type QStyleOptionSizeGripStyleOptionVersion = ( //QStyleOptionSizeGrip::StyleOptionVersion (2) QStyleOptionSizeGripVersion = 1 ); type QStyleOptionGraphicsItemStyleOptionVersion = ( //QStyleOptionGraphicsItem::StyleOptionVersion (2) QStyleOptionGraphicsItemVersion = 1 ); type QStyleHintReturnHintReturnType = ( //QStyleHintReturn::HintReturnType (2) QStyleHintReturnSH_Default = $f000, QStyleHintReturnSH_Mask, QStyleHintReturnSH_Variant ); QStyleHintReturnStyleOptionVersion = ( //QStyleHintReturn::StyleOptionVersion (2) QStyleHintReturnVersion = 1 ); type QStyleHintReturnMaskStyleOptionVersion = ( //QStyleHintReturnMask::StyleOptionVersion (2) QStyleHintReturnMaskVersion = 1 ); type QStyleHintReturnVariantStyleOptionVersion = ( //QStyleHintReturnVariant::StyleOptionVersion (2) QStyleHintReturnVariantVersion = 1 ); type QStyleOptionStyleOptionType = cardinal; // QStyleOption::StyleOptionType (4) const QStyleOptionType = 0 { $0 }; type QStyleOptionFocusRectStyleOptionType = cardinal; // QStyleOptionFocusRect::StyleOptionType (4) const QStyleOptionFocusRectType = 1 { $1 }; type QStyleOptionFrameStyleOptionType = cardinal; // QStyleOptionFrame::StyleOptionType (4) const QStyleOptionFrameType = 5 { $5 }; type QStyleOptionTabWidgetFrameStyleOptionType = cardinal; // QStyleOptionTabWidgetFrame::StyleOptionType (4) const QStyleOptionTabWidgetFrameType = 13 { $d }; type QStyleOptionTabBarBaseStyleOptionType = cardinal; // QStyleOptionTabBarBase::StyleOptionType (4) const QStyleOptionTabBarBaseType = 14 { $e }; type QStyleOptionHeaderStyleOptionType = cardinal; // QStyleOptionHeader::StyleOptionType (4) const QStyleOptionHeaderType = 8 { $8 }; type QStyleOptionButtonStyleOptionType = cardinal; // QStyleOptionButton::StyleOptionType (4) const QStyleOptionButtonType = 2 { $2 }; type QStyleOptionTabStyleOptionType = cardinal; // QStyleOptionTab::StyleOptionType (4) const QStyleOptionTabType = 3 { $3 }; type QStyleOptionToolBarStyleOptionType = cardinal; // QStyleOptionToolBar::StyleOptionType (4) const QStyleOptionToolBarType = 16 { $10 }; type QStyleOptionProgressBarStyleOptionType = cardinal; // QStyleOptionProgressBar::StyleOptionType (4) const QStyleOptionProgressBarType = 6 { $6 }; type QStyleOptionProgressBarV2StyleOptionType = cardinal; // QStyleOptionProgressBarV2::StyleOptionType (4) const QStyleOptionProgressBarV2Type = 6 { $6 }; type QStyleOptionMenuItemStyleOptionType = cardinal; // QStyleOptionMenuItem::StyleOptionType (4) const QStyleOptionMenuItemType = 4 { $4 }; type QStyleOptionQ3ListViewItemStyleOptionType = cardinal; // QStyleOptionQ3ListViewItem::StyleOptionType (4) const QStyleOptionQ3ListViewItemType = 11 { $b }; type QStyleOptionQ3DockWindowStyleOptionType = cardinal; // QStyleOptionQ3DockWindow::StyleOptionType (4) const QStyleOptionQ3DockWindowType = 9 { $9 }; type QStyleOptionDockWidgetStyleOptionType = cardinal; // QStyleOptionDockWidget::StyleOptionType (4) const QStyleOptionDockWidgetType = 10 { $a }; type QStyleOptionViewItemStyleOptionType = cardinal; // QStyleOptionViewItem::StyleOptionType (4) const QStyleOptionViewItemType = 12 { $c }; type QStyleOptionToolBoxStyleOptionType = cardinal; // QStyleOptionToolBox::StyleOptionType (4) const QStyleOptionToolBoxType = 7 { $7 }; type QStyleOptionRubberBandStyleOptionType = cardinal; // QStyleOptionRubberBand::StyleOptionType (4) const QStyleOptionRubberBandType = 15 { $f }; type QStyleOptionComplexStyleOptionType = cardinal; // QStyleOptionComplex::StyleOptionType (4) const QStyleOptionComplexType = 983040 { $f0000 }; type QStyleOptionSliderStyleOptionType = cardinal; // QStyleOptionSlider::StyleOptionType (4) const QStyleOptionSliderType = 983041 { $f0001 }; type QStyleOptionSpinBoxStyleOptionType = cardinal; // QStyleOptionSpinBox::StyleOptionType (4) const QStyleOptionSpinBoxType = 983042 { $f0002 }; type QStyleOptionQ3ListViewStyleOptionType = cardinal; // QStyleOptionQ3ListView::StyleOptionType (4) const QStyleOptionQ3ListViewType = 983045 { $f0005 }; type QStyleOptionToolButtonStyleOptionType = cardinal; // QStyleOptionToolButton::StyleOptionType (4) const QStyleOptionToolButtonType = 983043 { $f0003 }; type QStyleOptionToolButtonToolButtonFeature = cardinal; // QStyleOptionToolButton::ToolButtonFeature (4) QStyleOptionToolButtonToolButtonFeatures = QStyleOptionToolButtonToolButtonFeature; // QFlags<> const QStyleOptionToolButtonNone = 0 { $0 }; QStyleOptionToolButtonArrow = 1 { $1 }; QStyleOptionToolButtonMenu = 4 { $4 }; QStyleOptionToolButtonMenuButtonPopup = 4 { $4 }; QStyleOptionToolButtonPopupDelay = 8 { $8 }; QStyleOptionToolButtonHasMenu = 16 { $10 }; type QStyleOptionComboBoxStyleOptionType = cardinal; // QStyleOptionComboBox::StyleOptionType (4) const QStyleOptionComboBoxType = 983044 { $f0004 }; type QStyleOptionTitleBarStyleOptionType = cardinal; // QStyleOptionTitleBar::StyleOptionType (4) const QStyleOptionTitleBarType = 983046 { $f0006 }; type QStyleOptionGroupBoxStyleOptionType = cardinal; // QStyleOptionGroupBox::StyleOptionType (4) const QStyleOptionGroupBoxType = 983047 { $f0007 }; type QStyleOptionSizeGripStyleOptionType = cardinal; // QStyleOptionSizeGrip::StyleOptionType (4) const QStyleOptionSizeGripType = 983048 { $f0008 }; type QStyleOptionGraphicsItemStyleOptionType = cardinal; // QStyleOptionGraphicsItem::StyleOptionType (4) const QStyleOptionGraphicsItemType = 17 { $11 }; type QStyleHintReturnStyleOptionType = cardinal; // QStyleHintReturn::StyleOptionType (4) const QStyleHintReturnType = 61440 { $f000 }; type QStyleHintReturnMaskStyleOptionType = cardinal; // QStyleHintReturnMask::StyleOptionType (4) const QStyleHintReturnMaskType = 61441 { $f001 }; type QStyleHintReturnVariantStyleOptionType = cardinal; // QStyleHintReturnVariant::StyleOptionType (4) const QStyleHintReturnVariantType = 61442 { $f002 }; function QStyleOption_version(handle : QStyleOptionH) : Integer; cdecl; external Qt4PasLib name 'QStyleOption_version'; procedure QStyleOption_setVersion(handle : QStyleOptionH; version : Integer); cdecl; external Qt4PasLib name 'QStyleOption_setVersion'; function QStyleOption__type(handle : QStyleOptionH) : Integer; cdecl; external Qt4PasLib name 'QStyleOption__type'; procedure QStyleOption_setType(handle : QStyleOptionH; _type : Integer); cdecl; external Qt4PasLib name 'QStyleOption_setType'; function QStyleOption_state(handle : QStyleOptionH) : QStyleState; cdecl; external Qt4PasLib name 'QStyleOption_state'; procedure QStyleOption_setState(handle : QStyleOptionH; state : QStyleState); cdecl; external Qt4PasLib name 'QStyleOption_setState'; function QStyleOption_direction(handle : QStyleOptionH) : QtLayoutDirection; cdecl; external Qt4PasLib name 'QStyleOption_direction'; procedure QStyleOption_setDirection(handle : QStyleOptionH; direction : QtLayoutDirection); cdecl; external Qt4PasLib name 'QStyleOption_setDirection'; procedure QStyleOption_rect(handle : QStyleOptionH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOption_rect'; procedure QStyleOption_setRect(handle : QStyleOptionH; rect : PRect); cdecl; external Qt4PasLib name 'QStyleOption_setRect'; procedure QStyleOption_fontMetrics(handle : QStyleOptionH; retval : QFontMetricsH ); cdecl; external Qt4PasLib name 'QStyleOption_fontMetrics'; procedure QStyleOption_setFontMetrics(handle : QStyleOptionH; fontMetrics : QFontMetricsH); cdecl; external Qt4PasLib name 'QStyleOption_setFontMetrics'; procedure QStyleOption_palette(handle : QStyleOptionH; retval : QPaletteH ); cdecl; external Qt4PasLib name 'QStyleOption_palette'; procedure QStyleOption_setPalette(handle : QStyleOptionH; palette : QPaletteH); cdecl; external Qt4PasLib name 'QStyleOption_setPalette'; function QStyleOption_create(version: QStyleOptionStyleOptionVersion = QStyleOptionVersion; _type: QStyleOptionOptionType = QStyleOptionSO_Default): QStyleOptionH; cdecl; external Qt4PasLib name 'QStyleOption_create'; procedure QStyleOption_destroy(handle: QStyleOptionH); cdecl; external Qt4PasLib name 'QStyleOption_destroy'; function QStyleOption_create(other: QStyleOptionH): QStyleOptionH; cdecl; external Qt4PasLib name 'QStyleOption_create2'; procedure QStyleOption_init(handle: QStyleOptionH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStyleOption_init'; procedure QStyleOption_initFrom(handle: QStyleOptionH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStyleOption_initFrom'; procedure QStyleOptionFocusRect_backgroundColor(handle : QStyleOptionFocusRectH; retval : PQColor ); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_backgroundColor'; procedure QStyleOptionFocusRect_setBackgroundColor(handle : QStyleOptionFocusRectH; backgroundColor : PQColor); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_setBackgroundColor'; function QStyleOptionFocusRect_create(): QStyleOptionFocusRectH; cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_create'; procedure QStyleOptionFocusRect_destroy(handle: QStyleOptionFocusRectH); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_destroy'; function QStyleOptionFocusRect_create(other: QStyleOptionFocusRectH): QStyleOptionFocusRectH; cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_create2'; function QStyleOptionFrame_lineWidth(handle : QStyleOptionFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionFrame_lineWidth'; procedure QStyleOptionFrame_setLineWidth(handle : QStyleOptionFrameH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionFrame_setLineWidth'; function QStyleOptionFrame_midLineWidth(handle : QStyleOptionFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionFrame_midLineWidth'; procedure QStyleOptionFrame_setMidLineWidth(handle : QStyleOptionFrameH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionFrame_setMidLineWidth'; function QStyleOptionFrame_create(): QStyleOptionFrameH; cdecl; external Qt4PasLib name 'QStyleOptionFrame_create'; procedure QStyleOptionFrame_destroy(handle: QStyleOptionFrameH); cdecl; external Qt4PasLib name 'QStyleOptionFrame_destroy'; function QStyleOptionFrame_create(other: QStyleOptionFrameH): QStyleOptionFrameH; cdecl; external Qt4PasLib name 'QStyleOptionFrame_create2'; function QStyleOptionFrameV2_features(handle : QStyleOptionFrameV2H) : QStyleOptionFrameV2FrameFeatures; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_features'; procedure QStyleOptionFrameV2_setFeatures(handle : QStyleOptionFrameV2H; features : QStyleOptionFrameV2FrameFeatures); cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_setFeatures'; function QStyleOptionFrameV2_create(): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create'; procedure QStyleOptionFrameV2_destroy(handle: QStyleOptionFrameV2H); cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_destroy'; function QStyleOptionFrameV2_create(other: QStyleOptionFrameV2H): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create2'; function QStyleOptionFrameV2_create(other: QStyleOptionFrameH): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create3'; function QStyleOptionFrameV3_frameShape(handle : QStyleOptionFrameV3H) : QFrameShape; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_frameShape'; procedure QStyleOptionFrameV3_setFrameShape(handle : QStyleOptionFrameV3H; frameShape : QFrameShape); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_setFrameShape'; function QStyleOptionFrameV3_unused(handle : QStyleOptionFrameV3H) : LongWord; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_unused'; procedure QStyleOptionFrameV3_setUnused(handle : QStyleOptionFrameV3H; unused : LongWord); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_setUnused'; function QStyleOptionFrameV3_create(): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create'; procedure QStyleOptionFrameV3_destroy(handle: QStyleOptionFrameV3H); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_destroy'; function QStyleOptionFrameV3_create(other: QStyleOptionFrameV3H): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create2'; function QStyleOptionFrameV3_create(other: QStyleOptionFrameH): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create3'; function QStyleOptionTabWidgetFrame_lineWidth(handle : QStyleOptionTabWidgetFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_lineWidth'; procedure QStyleOptionTabWidgetFrame_setLineWidth(handle : QStyleOptionTabWidgetFrameH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setLineWidth'; function QStyleOptionTabWidgetFrame_midLineWidth(handle : QStyleOptionTabWidgetFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_midLineWidth'; procedure QStyleOptionTabWidgetFrame_setMidLineWidth(handle : QStyleOptionTabWidgetFrameH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setMidLineWidth'; function QStyleOptionTabWidgetFrame_shape(handle : QStyleOptionTabWidgetFrameH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_shape'; procedure QStyleOptionTabWidgetFrame_setShape(handle : QStyleOptionTabWidgetFrameH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setShape'; procedure QStyleOptionTabWidgetFrame_tabBarSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_tabBarSize'; procedure QStyleOptionTabWidgetFrame_setTabBarSize(handle : QStyleOptionTabWidgetFrameH; tabBarSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setTabBarSize'; procedure QStyleOptionTabWidgetFrame_rightCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_rightCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_setRightCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; rightCornerWidgetSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setRightCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_leftCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_leftCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_setLeftCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; leftCornerWidgetSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setLeftCornerWidgetSize'; function QStyleOptionTabWidgetFrame_create(): QStyleOptionTabWidgetFrameH; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_create'; procedure QStyleOptionTabWidgetFrame_destroy(handle: QStyleOptionTabWidgetFrameH); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_destroy'; function QStyleOptionTabWidgetFrame_create(other: QStyleOptionTabWidgetFrameH): QStyleOptionTabWidgetFrameH; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_create2'; function QStyleOptionTabBarBase_shape(handle : QStyleOptionTabBarBaseH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_shape'; procedure QStyleOptionTabBarBase_setShape(handle : QStyleOptionTabBarBaseH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setShape'; procedure QStyleOptionTabBarBase_tabBarRect(handle : QStyleOptionTabBarBaseH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_tabBarRect'; procedure QStyleOptionTabBarBase_setTabBarRect(handle : QStyleOptionTabBarBaseH; tabBarRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setTabBarRect'; procedure QStyleOptionTabBarBase_selectedTabRect(handle : QStyleOptionTabBarBaseH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_selectedTabRect'; procedure QStyleOptionTabBarBase_setSelectedTabRect(handle : QStyleOptionTabBarBaseH; selectedTabRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setSelectedTabRect'; function QStyleOptionTabBarBase_create(): QStyleOptionTabBarBaseH; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_create'; procedure QStyleOptionTabBarBase_destroy(handle: QStyleOptionTabBarBaseH); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_destroy'; function QStyleOptionTabBarBase_create(other: QStyleOptionTabBarBaseH): QStyleOptionTabBarBaseH; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_create2'; function QStyleOptionTabBarBaseV2_documentMode(handle : QStyleOptionTabBarBaseV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_documentMode'; procedure QStyleOptionTabBarBaseV2_setDocumentMode(handle : QStyleOptionTabBarBaseV2H; documentMode : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_setDocumentMode'; function QStyleOptionTabBarBaseV2_create(): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create'; procedure QStyleOptionTabBarBaseV2_destroy(handle: QStyleOptionTabBarBaseV2H); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_destroy'; function QStyleOptionTabBarBaseV2_create(other: QStyleOptionTabBarBaseV2H): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create2'; function QStyleOptionTabBarBaseV2_create(other: QStyleOptionTabBarBaseH): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create3'; function QStyleOptionHeader_section(handle : QStyleOptionHeaderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionHeader_section'; procedure QStyleOptionHeader_setSection(handle : QStyleOptionHeaderH; section : Integer); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSection'; procedure QStyleOptionHeader_text(handle : QStyleOptionHeaderH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionHeader_text'; procedure QStyleOptionHeader_setText(handle : QStyleOptionHeaderH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setText'; function QStyleOptionHeader_textAlignment(handle : QStyleOptionHeaderH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionHeader_textAlignment'; procedure QStyleOptionHeader_setTextAlignment(handle : QStyleOptionHeaderH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setTextAlignment'; procedure QStyleOptionHeader_icon(handle : QStyleOptionHeaderH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionHeader_icon'; procedure QStyleOptionHeader_setIcon(handle : QStyleOptionHeaderH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setIcon'; function QStyleOptionHeader_iconAlignment(handle : QStyleOptionHeaderH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionHeader_iconAlignment'; procedure QStyleOptionHeader_setIconAlignment(handle : QStyleOptionHeaderH; iconAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setIconAlignment'; function QStyleOptionHeader_position(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSectionPosition; cdecl; external Qt4PasLib name 'QStyleOptionHeader_position'; procedure QStyleOptionHeader_setPosition(handle : QStyleOptionHeaderH; position : QStyleOptionHeaderSectionPosition); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setPosition'; function QStyleOptionHeader_selectedPosition(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionHeader_selectedPosition'; procedure QStyleOptionHeader_setSelectedPosition(handle : QStyleOptionHeaderH; selectedPosition : QStyleOptionHeaderSelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSelectedPosition'; function QStyleOptionHeader_sortIndicator(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSortIndicator; cdecl; external Qt4PasLib name 'QStyleOptionHeader_sortIndicator'; procedure QStyleOptionHeader_setSortIndicator(handle : QStyleOptionHeaderH; sortIndicator : QStyleOptionHeaderSortIndicator); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSortIndicator'; function QStyleOptionHeader_orientation(handle : QStyleOptionHeaderH) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionHeader_orientation'; procedure QStyleOptionHeader_setOrientation(handle : QStyleOptionHeaderH; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setOrientation'; function QStyleOptionHeader_create(): QStyleOptionHeaderH; cdecl; external Qt4PasLib name 'QStyleOptionHeader_create'; procedure QStyleOptionHeader_destroy(handle: QStyleOptionHeaderH); cdecl; external Qt4PasLib name 'QStyleOptionHeader_destroy'; function QStyleOptionHeader_create(other: QStyleOptionHeaderH): QStyleOptionHeaderH; cdecl; external Qt4PasLib name 'QStyleOptionHeader_create2'; function QStyleOptionButton_features(handle : QStyleOptionButtonH) : QStyleOptionButtonButtonFeatures; cdecl; external Qt4PasLib name 'QStyleOptionButton_features'; procedure QStyleOptionButton_setFeatures(handle : QStyleOptionButtonH; features : QStyleOptionButtonButtonFeatures); cdecl; external Qt4PasLib name 'QStyleOptionButton_setFeatures'; procedure QStyleOptionButton_text(handle : QStyleOptionButtonH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionButton_text'; procedure QStyleOptionButton_setText(handle : QStyleOptionButtonH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionButton_setText'; procedure QStyleOptionButton_icon(handle : QStyleOptionButtonH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionButton_icon'; procedure QStyleOptionButton_setIcon(handle : QStyleOptionButtonH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionButton_setIcon'; procedure QStyleOptionButton_iconSize(handle : QStyleOptionButtonH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionButton_iconSize'; procedure QStyleOptionButton_setIconSize(handle : QStyleOptionButtonH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionButton_setIconSize'; function QStyleOptionButton_create(): QStyleOptionButtonH; cdecl; external Qt4PasLib name 'QStyleOptionButton_create'; procedure QStyleOptionButton_destroy(handle: QStyleOptionButtonH); cdecl; external Qt4PasLib name 'QStyleOptionButton_destroy'; function QStyleOptionButton_create(other: QStyleOptionButtonH): QStyleOptionButtonH; cdecl; external Qt4PasLib name 'QStyleOptionButton_create2'; function QStyleOptionTab_shape(handle : QStyleOptionTabH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTab_shape'; procedure QStyleOptionTab_setShape(handle : QStyleOptionTabH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTab_setShape'; procedure QStyleOptionTab_text(handle : QStyleOptionTabH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionTab_text'; procedure QStyleOptionTab_setText(handle : QStyleOptionTabH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionTab_setText'; procedure QStyleOptionTab_icon(handle : QStyleOptionTabH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionTab_icon'; procedure QStyleOptionTab_setIcon(handle : QStyleOptionTabH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionTab_setIcon'; function QStyleOptionTab_row(handle : QStyleOptionTabH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTab_row'; procedure QStyleOptionTab_setRow(handle : QStyleOptionTabH; row : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTab_setRow'; function QStyleOptionTab_position(handle : QStyleOptionTabH) : QStyleOptionTabTabPosition; cdecl; external Qt4PasLib name 'QStyleOptionTab_position'; procedure QStyleOptionTab_setPosition(handle : QStyleOptionTabH; position : QStyleOptionTabTabPosition); cdecl; external Qt4PasLib name 'QStyleOptionTab_setPosition'; function QStyleOptionTab_selectedPosition(handle : QStyleOptionTabH) : QStyleOptionTabSelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionTab_selectedPosition'; procedure QStyleOptionTab_setSelectedPosition(handle : QStyleOptionTabH; selectedPosition : QStyleOptionTabSelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionTab_setSelectedPosition'; function QStyleOptionTab_cornerWidgets(handle : QStyleOptionTabH) : QStyleOptionTabCornerWidgets; cdecl; external Qt4PasLib name 'QStyleOptionTab_cornerWidgets'; procedure QStyleOptionTab_setCornerWidgets(handle : QStyleOptionTabH; cornerWidgets : QStyleOptionTabCornerWidgets); cdecl; external Qt4PasLib name 'QStyleOptionTab_setCornerWidgets'; function QStyleOptionTab_create(): QStyleOptionTabH; cdecl; external Qt4PasLib name 'QStyleOptionTab_create'; procedure QStyleOptionTab_destroy(handle: QStyleOptionTabH); cdecl; external Qt4PasLib name 'QStyleOptionTab_destroy'; function QStyleOptionTab_create(other: QStyleOptionTabH): QStyleOptionTabH; cdecl; external Qt4PasLib name 'QStyleOptionTab_create2'; procedure QStyleOptionTabV2_iconSize(handle : QStyleOptionTabV2H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_iconSize'; procedure QStyleOptionTabV2_setIconSize(handle : QStyleOptionTabV2H; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_setIconSize'; function QStyleOptionTabV2_create(): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create'; procedure QStyleOptionTabV2_destroy(handle: QStyleOptionTabV2H); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_destroy'; function QStyleOptionTabV2_create(other: QStyleOptionTabV2H): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create2'; function QStyleOptionTabV2_create(other: QStyleOptionTabH): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create3'; function QStyleOptionTabV3_documentMode(handle : QStyleOptionTabV3H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_documentMode'; procedure QStyleOptionTabV3_setDocumentMode(handle : QStyleOptionTabV3H; documentMode : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setDocumentMode'; procedure QStyleOptionTabV3_leftButtonSize(handle : QStyleOptionTabV3H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_leftButtonSize'; procedure QStyleOptionTabV3_setLeftButtonSize(handle : QStyleOptionTabV3H; leftButtonSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setLeftButtonSize'; procedure QStyleOptionTabV3_rightButtonSize(handle : QStyleOptionTabV3H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_rightButtonSize'; procedure QStyleOptionTabV3_setRightButtonSize(handle : QStyleOptionTabV3H; rightButtonSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setRightButtonSize'; function QStyleOptionTabV3_create(): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create'; procedure QStyleOptionTabV3_destroy(handle: QStyleOptionTabV3H); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_destroy'; function QStyleOptionTabV3_create(other: QStyleOptionTabV3H): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create2'; function QStyleOptionTabV3_create(other: QStyleOptionTabV2H): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create3'; function QStyleOptionTabV3_create(other: QStyleOptionTabH): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create4'; function QStyleOptionToolBar_positionOfLine(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_positionOfLine'; procedure QStyleOptionToolBar_setPositionOfLine(handle : QStyleOptionToolBarH; positionOfLine : QStyleOptionToolBarToolBarPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setPositionOfLine'; function QStyleOptionToolBar_positionWithinLine(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_positionWithinLine'; procedure QStyleOptionToolBar_setPositionWithinLine(handle : QStyleOptionToolBarH; positionWithinLine : QStyleOptionToolBarToolBarPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setPositionWithinLine'; function QStyleOptionToolBar_toolBarArea(handle : QStyleOptionToolBarH) : QtToolBarArea; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_toolBarArea'; procedure QStyleOptionToolBar_setToolBarArea(handle : QStyleOptionToolBarH; toolBarArea : QtToolBarArea); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setToolBarArea'; function QStyleOptionToolBar_features(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarFeatures; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_features'; procedure QStyleOptionToolBar_setFeatures(handle : QStyleOptionToolBarH; features : QStyleOptionToolBarToolBarFeatures); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setFeatures'; function QStyleOptionToolBar_lineWidth(handle : QStyleOptionToolBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_lineWidth'; procedure QStyleOptionToolBar_setLineWidth(handle : QStyleOptionToolBarH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setLineWidth'; function QStyleOptionToolBar_midLineWidth(handle : QStyleOptionToolBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_midLineWidth'; procedure QStyleOptionToolBar_setMidLineWidth(handle : QStyleOptionToolBarH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setMidLineWidth'; function QStyleOptionToolBar_create(): QStyleOptionToolBarH; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_create'; procedure QStyleOptionToolBar_destroy(handle: QStyleOptionToolBarH); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_destroy'; function QStyleOptionToolBar_create(other: QStyleOptionToolBarH): QStyleOptionToolBarH; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_create2'; function QStyleOptionProgressBar_minimum(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_minimum'; procedure QStyleOptionProgressBar_setMinimum(handle : QStyleOptionProgressBarH; minimum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setMinimum'; function QStyleOptionProgressBar_maximum(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_maximum'; procedure QStyleOptionProgressBar_setMaximum(handle : QStyleOptionProgressBarH; maximum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setMaximum'; function QStyleOptionProgressBar_progress(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_progress'; procedure QStyleOptionProgressBar_setProgress(handle : QStyleOptionProgressBarH; progress : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setProgress'; procedure QStyleOptionProgressBar_text(handle : QStyleOptionProgressBarH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_text'; procedure QStyleOptionProgressBar_setText(handle : QStyleOptionProgressBarH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setText'; function QStyleOptionProgressBar_textAlignment(handle : QStyleOptionProgressBarH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_textAlignment'; procedure QStyleOptionProgressBar_setTextAlignment(handle : QStyleOptionProgressBarH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setTextAlignment'; function QStyleOptionProgressBar_textVisible(handle : QStyleOptionProgressBarH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_textVisible'; procedure QStyleOptionProgressBar_setTextVisible(handle : QStyleOptionProgressBarH; textVisible : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setTextVisible'; function QStyleOptionProgressBar_create(): QStyleOptionProgressBarH; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_create'; procedure QStyleOptionProgressBar_destroy(handle: QStyleOptionProgressBarH); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_destroy'; function QStyleOptionProgressBar_create(other: QStyleOptionProgressBarH): QStyleOptionProgressBarH; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_create2'; function QStyleOptionProgressBarV2_orientation(handle : QStyleOptionProgressBarV2H) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_orientation'; procedure QStyleOptionProgressBarV2_setOrientation(handle : QStyleOptionProgressBarV2H; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setOrientation'; function QStyleOptionProgressBarV2_invertedAppearance(handle : QStyleOptionProgressBarV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_invertedAppearance'; procedure QStyleOptionProgressBarV2_setInvertedAppearance(handle : QStyleOptionProgressBarV2H; invertedAppearance : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setInvertedAppearance'; function QStyleOptionProgressBarV2_bottomToTop(handle : QStyleOptionProgressBarV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_bottomToTop'; procedure QStyleOptionProgressBarV2_setBottomToTop(handle : QStyleOptionProgressBarV2H; bottomToTop : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setBottomToTop'; function QStyleOptionProgressBarV2_create(): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create'; procedure QStyleOptionProgressBarV2_destroy(handle: QStyleOptionProgressBarV2H); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_destroy'; function QStyleOptionProgressBarV2_create(other: QStyleOptionProgressBarH): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create2'; function QStyleOptionProgressBarV2_create(other: QStyleOptionProgressBarV2H): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create3'; function QStyleOptionMenuItem_menuItemType(handle : QStyleOptionMenuItemH) : QStyleOptionMenuItemMenuItemType; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuItemType'; procedure QStyleOptionMenuItem_setMenuItemType(handle : QStyleOptionMenuItemH; menuItemType : QStyleOptionMenuItemMenuItemType); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuItemType'; function QStyleOptionMenuItem_checkType(handle : QStyleOptionMenuItemH) : QStyleOptionMenuItemCheckType; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_checkType'; procedure QStyleOptionMenuItem_setCheckType(handle : QStyleOptionMenuItemH; checkType : QStyleOptionMenuItemCheckType); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setCheckType'; function QStyleOptionMenuItem_checked(handle : QStyleOptionMenuItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_checked'; procedure QStyleOptionMenuItem_setChecked(handle : QStyleOptionMenuItemH; checked : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setChecked'; function QStyleOptionMenuItem_menuHasCheckableItems(handle : QStyleOptionMenuItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuHasCheckableItems'; procedure QStyleOptionMenuItem_setMenuHasCheckableItems(handle : QStyleOptionMenuItemH; menuHasCheckableItems : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuHasCheckableItems'; procedure QStyleOptionMenuItem_menuRect(handle : QStyleOptionMenuItemH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuRect'; procedure QStyleOptionMenuItem_setMenuRect(handle : QStyleOptionMenuItemH; menuRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuRect'; procedure QStyleOptionMenuItem_text(handle : QStyleOptionMenuItemH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_text'; procedure QStyleOptionMenuItem_setText(handle : QStyleOptionMenuItemH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setText'; procedure QStyleOptionMenuItem_icon(handle : QStyleOptionMenuItemH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_icon'; procedure QStyleOptionMenuItem_setIcon(handle : QStyleOptionMenuItemH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setIcon'; function QStyleOptionMenuItem_maxIconWidth(handle : QStyleOptionMenuItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_maxIconWidth'; procedure QStyleOptionMenuItem_setMaxIconWidth(handle : QStyleOptionMenuItemH; maxIconWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMaxIconWidth'; function QStyleOptionMenuItem_tabWidth(handle : QStyleOptionMenuItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_tabWidth'; procedure QStyleOptionMenuItem_setTabWidth(handle : QStyleOptionMenuItemH; tabWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setTabWidth'; procedure QStyleOptionMenuItem_font(handle : QStyleOptionMenuItemH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_font'; procedure QStyleOptionMenuItem_setFont(handle : QStyleOptionMenuItemH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setFont'; function QStyleOptionMenuItem_create(): QStyleOptionMenuItemH; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_create'; procedure QStyleOptionMenuItem_destroy(handle: QStyleOptionMenuItemH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_destroy'; function QStyleOptionMenuItem_create(other: QStyleOptionMenuItemH): QStyleOptionMenuItemH; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_create2'; function QStyleOptionQ3ListViewItem_features(handle : QStyleOptionQ3ListViewItemH) : QStyleOptionQ3ListViewItemQ3ListViewItemFeatures; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_features'; procedure QStyleOptionQ3ListViewItem_setFeatures(handle : QStyleOptionQ3ListViewItemH; features : QStyleOptionQ3ListViewItemQ3ListViewItemFeatures); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setFeatures'; function QStyleOptionQ3ListViewItem_height(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_height'; procedure QStyleOptionQ3ListViewItem_setHeight(handle : QStyleOptionQ3ListViewItemH; height : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setHeight'; function QStyleOptionQ3ListViewItem_totalHeight(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_totalHeight'; procedure QStyleOptionQ3ListViewItem_setTotalHeight(handle : QStyleOptionQ3ListViewItemH; totalHeight : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setTotalHeight'; function QStyleOptionQ3ListViewItem_itemY(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_itemY'; procedure QStyleOptionQ3ListViewItem_setItemY(handle : QStyleOptionQ3ListViewItemH; itemY : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setItemY'; function QStyleOptionQ3ListViewItem_childCount(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_childCount'; procedure QStyleOptionQ3ListViewItem_setChildCount(handle : QStyleOptionQ3ListViewItemH; childCount : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setChildCount'; function QStyleOptionQ3ListViewItem_create(): QStyleOptionQ3ListViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_create'; procedure QStyleOptionQ3ListViewItem_destroy(handle: QStyleOptionQ3ListViewItemH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_destroy'; function QStyleOptionQ3ListViewItem_create(other: QStyleOptionQ3ListViewItemH): QStyleOptionQ3ListViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_create2'; function QStyleOptionQ3DockWindow_docked(handle : QStyleOptionQ3DockWindowH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_docked'; procedure QStyleOptionQ3DockWindow_setDocked(handle : QStyleOptionQ3DockWindowH; docked : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_setDocked'; function QStyleOptionQ3DockWindow_closeEnabled(handle : QStyleOptionQ3DockWindowH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_closeEnabled'; procedure QStyleOptionQ3DockWindow_setCloseEnabled(handle : QStyleOptionQ3DockWindowH; closeEnabled : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_setCloseEnabled'; function QStyleOptionQ3DockWindow_create(): QStyleOptionQ3DockWindowH; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_create'; procedure QStyleOptionQ3DockWindow_destroy(handle: QStyleOptionQ3DockWindowH); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_destroy'; function QStyleOptionQ3DockWindow_create(other: QStyleOptionQ3DockWindowH): QStyleOptionQ3DockWindowH; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_create2'; procedure QStyleOptionDockWidget_title(handle : QStyleOptionDockWidgetH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_title'; procedure QStyleOptionDockWidget_setTitle(handle : QStyleOptionDockWidgetH; title : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setTitle'; function QStyleOptionDockWidget_closable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_closable'; procedure QStyleOptionDockWidget_setClosable(handle : QStyleOptionDockWidgetH; closable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setClosable'; function QStyleOptionDockWidget_movable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_movable'; procedure QStyleOptionDockWidget_setMovable(handle : QStyleOptionDockWidgetH; movable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setMovable'; function QStyleOptionDockWidget_floatable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_floatable'; procedure QStyleOptionDockWidget_setFloatable(handle : QStyleOptionDockWidgetH; floatable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setFloatable'; function QStyleOptionDockWidget_create(): QStyleOptionDockWidgetH; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_create'; procedure QStyleOptionDockWidget_destroy(handle: QStyleOptionDockWidgetH); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_destroy'; function QStyleOptionDockWidget_create(other: QStyleOptionDockWidgetH): QStyleOptionDockWidgetH; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_create2'; function QStyleOptionViewItem_displayAlignment(handle : QStyleOptionViewItemH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_displayAlignment'; procedure QStyleOptionViewItem_setDisplayAlignment(handle : QStyleOptionViewItemH; displayAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDisplayAlignment'; function QStyleOptionViewItem_decorationAlignment(handle : QStyleOptionViewItemH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationAlignment'; procedure QStyleOptionViewItem_setDecorationAlignment(handle : QStyleOptionViewItemH; decorationAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationAlignment'; function QStyleOptionViewItem_textElideMode(handle : QStyleOptionViewItemH) : QtTextElideMode; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_textElideMode'; procedure QStyleOptionViewItem_setTextElideMode(handle : QStyleOptionViewItemH; textElideMode : QtTextElideMode); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setTextElideMode'; function QStyleOptionViewItem_decorationPosition(handle : QStyleOptionViewItemH) : QStyleOptionViewItemPosition; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationPosition'; procedure QStyleOptionViewItem_setDecorationPosition(handle : QStyleOptionViewItemH; decorationPosition : QStyleOptionViewItemPosition); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationPosition'; procedure QStyleOptionViewItem_decorationSize(handle : QStyleOptionViewItemH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationSize'; procedure QStyleOptionViewItem_setDecorationSize(handle : QStyleOptionViewItemH; decorationSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationSize'; procedure QStyleOptionViewItem_font(handle : QStyleOptionViewItemH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_font'; procedure QStyleOptionViewItem_setFont(handle : QStyleOptionViewItemH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setFont'; function QStyleOptionViewItem_showDecorationSelected(handle : QStyleOptionViewItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_showDecorationSelected'; procedure QStyleOptionViewItem_setShowDecorationSelected(handle : QStyleOptionViewItemH; showDecorationSelected : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setShowDecorationSelected'; function QStyleOptionViewItem_create(): QStyleOptionViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_create'; procedure QStyleOptionViewItem_destroy(handle: QStyleOptionViewItemH); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_destroy'; function QStyleOptionViewItem_create(other: QStyleOptionViewItemH): QStyleOptionViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_create2'; procedure QStyleOptionViewItemV4_index(handle : QStyleOptionViewItemV4H; retval : QModelIndexH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_index'; procedure QStyleOptionViewItemV4_setIndex(handle : QStyleOptionViewItemV4H; index : QModelIndexH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setIndex'; function QStyleOptionViewItemV4_checkState(handle : QStyleOptionViewItemV4H) : QtCheckState; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_checkState'; procedure QStyleOptionViewItemV4_setCheckState(handle : QStyleOptionViewItemV4H; checkState : QtCheckState); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setCheckState'; procedure QStyleOptionViewItemV4_icon(handle : QStyleOptionViewItemV4H; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_icon'; procedure QStyleOptionViewItemV4_setIcon(handle : QStyleOptionViewItemV4H; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setIcon'; procedure QStyleOptionViewItemV4_text(handle : QStyleOptionViewItemV4H; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_text'; procedure QStyleOptionViewItemV4_setText(handle : QStyleOptionViewItemV4H; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setText'; function QStyleOptionViewItemV4_viewItemPosition(handle : QStyleOptionViewItemV4H) : QStyleOptionViewItemV4ViewItemPosition; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_viewItemPosition'; procedure QStyleOptionViewItemV4_setViewItemPosition(handle : QStyleOptionViewItemV4H; viewItemPosition : QStyleOptionViewItemV4ViewItemPosition); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setViewItemPosition'; procedure QStyleOptionViewItemV4_backgroundBrush(handle : QStyleOptionViewItemV4H; retval : QBrushH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_backgroundBrush'; procedure QStyleOptionViewItemV4_setBackgroundBrush(handle : QStyleOptionViewItemV4H; backgroundBrush : QBrushH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setBackgroundBrush'; function QStyleOptionViewItemV4_create(): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create'; procedure QStyleOptionViewItemV4_destroy(handle: QStyleOptionViewItemV4H); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_destroy'; function QStyleOptionViewItemV4_create(other: QStyleOptionViewItemV4H): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create2'; function QStyleOptionViewItemV4_create(other: QStyleOptionViewItemH): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create3'; procedure QStyleOptionToolBox_text(handle : QStyleOptionToolBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_text'; procedure QStyleOptionToolBox_setText(handle : QStyleOptionToolBoxH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_setText'; procedure QStyleOptionToolBox_icon(handle : QStyleOptionToolBoxH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_icon'; procedure QStyleOptionToolBox_setIcon(handle : QStyleOptionToolBoxH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_setIcon'; function QStyleOptionToolBox_create(): QStyleOptionToolBoxH; cdecl; external Qt4PasLib name 'QStyleOptionToolBox_create'; procedure QStyleOptionToolBox_destroy(handle: QStyleOptionToolBoxH); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_destroy'; function QStyleOptionToolBox_create(other: QStyleOptionToolBoxH): QStyleOptionToolBoxH; cdecl; external Qt4PasLib name 'QStyleOptionToolBox_create2'; function QStyleOptionToolBoxV2_position(handle : QStyleOptionToolBoxV2H) : QStyleOptionToolBoxV2TabPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_position'; procedure QStyleOptionToolBoxV2_setPosition(handle : QStyleOptionToolBoxV2H; position : QStyleOptionToolBoxV2TabPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_setPosition'; function QStyleOptionToolBoxV2_selectedPosition(handle : QStyleOptionToolBoxV2H) : QStyleOptionToolBoxV2SelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_selectedPosition'; procedure QStyleOptionToolBoxV2_setSelectedPosition(handle : QStyleOptionToolBoxV2H; selectedPosition : QStyleOptionToolBoxV2SelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_setSelectedPosition'; function QStyleOptionToolBoxV2_create(): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create'; procedure QStyleOptionToolBoxV2_destroy(handle: QStyleOptionToolBoxV2H); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_destroy'; function QStyleOptionToolBoxV2_create(other: QStyleOptionToolBoxV2H): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create2'; function QStyleOptionToolBoxV2_create(other: QStyleOptionToolBoxH): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create3'; function QStyleOptionRubberBand_shape(handle : QStyleOptionRubberBandH) : QRubberBandShape; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_shape'; procedure QStyleOptionRubberBand_setShape(handle : QStyleOptionRubberBandH; shape : QRubberBandShape); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_setShape'; function QStyleOptionRubberBand_opaque(handle : QStyleOptionRubberBandH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_opaque'; procedure QStyleOptionRubberBand_setOpaque(handle : QStyleOptionRubberBandH; opaque : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_setOpaque'; function QStyleOptionRubberBand_create(): QStyleOptionRubberBandH; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_create'; procedure QStyleOptionRubberBand_destroy(handle: QStyleOptionRubberBandH); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_destroy'; function QStyleOptionRubberBand_create(other: QStyleOptionRubberBandH): QStyleOptionRubberBandH; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_create2'; function QStyleOptionComplex_subControls(handle : QStyleOptionComplexH) : QStyleSubControls; cdecl; external Qt4PasLib name 'QStyleOptionComplex_subControls'; procedure QStyleOptionComplex_setSubControls(handle : QStyleOptionComplexH; subControls : QStyleSubControls); cdecl; external Qt4PasLib name 'QStyleOptionComplex_setSubControls'; function QStyleOptionComplex_activeSubControls(handle : QStyleOptionComplexH) : QStyleSubControls; cdecl; external Qt4PasLib name 'QStyleOptionComplex_activeSubControls'; procedure QStyleOptionComplex_setActiveSubControls(handle : QStyleOptionComplexH; activeSubControls : QStyleSubControls); cdecl; external Qt4PasLib name 'QStyleOptionComplex_setActiveSubControls'; function QStyleOptionComplex_create(version: Integer; _type: Integer): QStyleOptionComplexH; cdecl; external Qt4PasLib name 'QStyleOptionComplex_create'; procedure QStyleOptionComplex_destroy(handle: QStyleOptionComplexH); cdecl; external Qt4PasLib name 'QStyleOptionComplex_destroy'; function QStyleOptionComplex_create(other: QStyleOptionComplexH): QStyleOptionComplexH; cdecl; external Qt4PasLib name 'QStyleOptionComplex_create2'; function QStyleOptionSlider_orientation(handle : QStyleOptionSliderH) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionSlider_orientation'; procedure QStyleOptionSlider_setOrientation(handle : QStyleOptionSliderH; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setOrientation'; function QStyleOptionSlider_minimum(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_minimum'; procedure QStyleOptionSlider_setMinimum(handle : QStyleOptionSliderH; minimum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setMinimum'; function QStyleOptionSlider_maximum(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_maximum'; procedure QStyleOptionSlider_setMaximum(handle : QStyleOptionSliderH; maximum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setMaximum'; function QStyleOptionSlider_tickPosition(handle : QStyleOptionSliderH) : QSliderTickPosition; cdecl; external Qt4PasLib name 'QStyleOptionSlider_tickPosition'; procedure QStyleOptionSlider_setTickPosition(handle : QStyleOptionSliderH; tickPosition : QSliderTickPosition); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setTickPosition'; function QStyleOptionSlider_tickInterval(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_tickInterval'; procedure QStyleOptionSlider_setTickInterval(handle : QStyleOptionSliderH; tickInterval : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setTickInterval'; function QStyleOptionSlider_upsideDown(handle : QStyleOptionSliderH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSlider_upsideDown'; procedure QStyleOptionSlider_setUpsideDown(handle : QStyleOptionSliderH; upsideDown : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setUpsideDown'; function QStyleOptionSlider_sliderPosition(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_sliderPosition'; procedure QStyleOptionSlider_setSliderPosition(handle : QStyleOptionSliderH; sliderPosition : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSliderPosition'; function QStyleOptionSlider_sliderValue(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_sliderValue'; procedure QStyleOptionSlider_setSliderValue(handle : QStyleOptionSliderH; sliderValue : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSliderValue'; function QStyleOptionSlider_singleStep(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_singleStep'; procedure QStyleOptionSlider_setSingleStep(handle : QStyleOptionSliderH; singleStep : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSingleStep'; function QStyleOptionSlider_pageStep(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_pageStep'; procedure QStyleOptionSlider_setPageStep(handle : QStyleOptionSliderH; pageStep : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setPageStep'; function QStyleOptionSlider_notchTarget(handle : QStyleOptionSliderH) : qreal; cdecl; external Qt4PasLib name 'QStyleOptionSlider_notchTarget'; procedure QStyleOptionSlider_setNotchTarget(handle : QStyleOptionSliderH; notchTarget : qreal); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setNotchTarget'; function QStyleOptionSlider_dialWrapping(handle : QStyleOptionSliderH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSlider_dialWrapping'; procedure QStyleOptionSlider_setDialWrapping(handle : QStyleOptionSliderH; dialWrapping : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setDialWrapping'; function QStyleOptionSlider_create(): QStyleOptionSliderH; cdecl; external Qt4PasLib name 'QStyleOptionSlider_create'; procedure QStyleOptionSlider_destroy(handle: QStyleOptionSliderH); cdecl; external Qt4PasLib name 'QStyleOptionSlider_destroy'; function QStyleOptionSlider_create(other: QStyleOptionSliderH): QStyleOptionSliderH; cdecl; external Qt4PasLib name 'QStyleOptionSlider_create2'; function QStyleOptionSpinBox_buttonSymbols(handle : QStyleOptionSpinBoxH) : QAbstractSpinBoxButtonSymbols; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_buttonSymbols'; procedure QStyleOptionSpinBox_setButtonSymbols(handle : QStyleOptionSpinBoxH; buttonSymbols : QAbstractSpinBoxButtonSymbols); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setButtonSymbols'; function QStyleOptionSpinBox_stepEnabled(handle : QStyleOptionSpinBoxH) : QAbstractSpinBoxStepEnabled; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_stepEnabled'; procedure QStyleOptionSpinBox_setStepEnabled(handle : QStyleOptionSpinBoxH; stepEnabled : QAbstractSpinBoxStepEnabled); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setStepEnabled'; function QStyleOptionSpinBox_frame(handle : QStyleOptionSpinBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_frame'; procedure QStyleOptionSpinBox_setFrame(handle : QStyleOptionSpinBoxH; frame : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setFrame'; function QStyleOptionSpinBox_create(): QStyleOptionSpinBoxH; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_create'; procedure QStyleOptionSpinBox_destroy(handle: QStyleOptionSpinBoxH); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_destroy'; function QStyleOptionSpinBox_create(other: QStyleOptionSpinBoxH): QStyleOptionSpinBoxH; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_create2'; procedure QStyleOptionQ3ListView_viewportPalette(handle : QStyleOptionQ3ListViewH; retval : QPaletteH ); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_viewportPalette'; procedure QStyleOptionQ3ListView_setViewportPalette(handle : QStyleOptionQ3ListViewH; viewportPalette : QPaletteH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setViewportPalette'; function QStyleOptionQ3ListView_viewportBGRole(handle : QStyleOptionQ3ListViewH) : QPaletteColorRole; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_viewportBGRole'; procedure QStyleOptionQ3ListView_setViewportBGRole(handle : QStyleOptionQ3ListViewH; viewportBGRole : QPaletteColorRole); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setViewportBGRole'; function QStyleOptionQ3ListView_sortColumn(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_sortColumn'; procedure QStyleOptionQ3ListView_setSortColumn(handle : QStyleOptionQ3ListViewH; sortColumn : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setSortColumn'; function QStyleOptionQ3ListView_itemMargin(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_itemMargin'; procedure QStyleOptionQ3ListView_setItemMargin(handle : QStyleOptionQ3ListViewH; itemMargin : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setItemMargin'; function QStyleOptionQ3ListView_treeStepSize(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_treeStepSize'; procedure QStyleOptionQ3ListView_setTreeStepSize(handle : QStyleOptionQ3ListViewH; treeStepSize : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setTreeStepSize'; function QStyleOptionQ3ListView_rootIsDecorated(handle : QStyleOptionQ3ListViewH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_rootIsDecorated'; procedure QStyleOptionQ3ListView_setRootIsDecorated(handle : QStyleOptionQ3ListViewH; rootIsDecorated : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setRootIsDecorated'; function QStyleOptionQ3ListView_create(): QStyleOptionQ3ListViewH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_create'; procedure QStyleOptionQ3ListView_destroy(handle: QStyleOptionQ3ListViewH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_destroy'; function QStyleOptionQ3ListView_create(other: QStyleOptionQ3ListViewH): QStyleOptionQ3ListViewH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_create2'; function QStyleOptionToolButton_features(handle : QStyleOptionToolButtonH) : QStyleOptionToolButtonToolButtonFeatures; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_features'; procedure QStyleOptionToolButton_setFeatures(handle : QStyleOptionToolButtonH; features : QStyleOptionToolButtonToolButtonFeatures); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setFeatures'; procedure QStyleOptionToolButton_icon(handle : QStyleOptionToolButtonH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_icon'; procedure QStyleOptionToolButton_setIcon(handle : QStyleOptionToolButtonH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setIcon'; procedure QStyleOptionToolButton_iconSize(handle : QStyleOptionToolButtonH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_iconSize'; procedure QStyleOptionToolButton_setIconSize(handle : QStyleOptionToolButtonH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setIconSize'; procedure QStyleOptionToolButton_text(handle : QStyleOptionToolButtonH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_text'; procedure QStyleOptionToolButton_setText(handle : QStyleOptionToolButtonH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setText'; function QStyleOptionToolButton_arrowType(handle : QStyleOptionToolButtonH) : QtArrowType; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_arrowType'; procedure QStyleOptionToolButton_setArrowType(handle : QStyleOptionToolButtonH; arrowType : QtArrowType); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setArrowType'; function QStyleOptionToolButton_toolButtonStyle(handle : QStyleOptionToolButtonH) : QtToolButtonStyle; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_toolButtonStyle'; procedure QStyleOptionToolButton_setToolButtonStyle(handle : QStyleOptionToolButtonH; toolButtonStyle : QtToolButtonStyle); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setToolButtonStyle'; procedure QStyleOptionToolButton_pos(handle : QStyleOptionToolButtonH; retval : PQtPoint ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_pos'; procedure QStyleOptionToolButton_setPos(handle : QStyleOptionToolButtonH; pos : PQtPoint); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setPos'; procedure QStyleOptionToolButton_font(handle : QStyleOptionToolButtonH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_font'; procedure QStyleOptionToolButton_setFont(handle : QStyleOptionToolButtonH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setFont'; function QStyleOptionToolButton_create(): QStyleOptionToolButtonH; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_create'; procedure QStyleOptionToolButton_destroy(handle: QStyleOptionToolButtonH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_destroy'; function QStyleOptionToolButton_create(other: QStyleOptionToolButtonH): QStyleOptionToolButtonH; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_create2'; function QStyleOptionComboBox_editable(handle : QStyleOptionComboBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_editable'; procedure QStyleOptionComboBox_setEditable(handle : QStyleOptionComboBoxH; editable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setEditable'; procedure QStyleOptionComboBox_popupRect(handle : QStyleOptionComboBoxH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_popupRect'; procedure QStyleOptionComboBox_setPopupRect(handle : QStyleOptionComboBoxH; popupRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setPopupRect'; function QStyleOptionComboBox_frame(handle : QStyleOptionComboBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_frame'; procedure QStyleOptionComboBox_setFrame(handle : QStyleOptionComboBoxH; frame : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setFrame'; procedure QStyleOptionComboBox_currentText(handle : QStyleOptionComboBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_currentText'; procedure QStyleOptionComboBox_setCurrentText(handle : QStyleOptionComboBoxH; currentText : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setCurrentText'; procedure QStyleOptionComboBox_currentIcon(handle : QStyleOptionComboBoxH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_currentIcon'; procedure QStyleOptionComboBox_setCurrentIcon(handle : QStyleOptionComboBoxH; currentIcon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setCurrentIcon'; procedure QStyleOptionComboBox_iconSize(handle : QStyleOptionComboBoxH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_iconSize'; procedure QStyleOptionComboBox_setIconSize(handle : QStyleOptionComboBoxH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setIconSize'; function QStyleOptionComboBox_create(): QStyleOptionComboBoxH; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_create'; procedure QStyleOptionComboBox_destroy(handle: QStyleOptionComboBoxH); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_destroy'; function QStyleOptionComboBox_create(other: QStyleOptionComboBoxH): QStyleOptionComboBoxH; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_create2'; procedure QStyleOptionTitleBar_text(handle : QStyleOptionTitleBarH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_text'; procedure QStyleOptionTitleBar_setText(handle : QStyleOptionTitleBarH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setText'; procedure QStyleOptionTitleBar_icon(handle : QStyleOptionTitleBarH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_icon'; procedure QStyleOptionTitleBar_setIcon(handle : QStyleOptionTitleBarH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setIcon'; function QStyleOptionTitleBar_titleBarState(handle : QStyleOptionTitleBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_titleBarState'; procedure QStyleOptionTitleBar_setTitleBarState(handle : QStyleOptionTitleBarH; titleBarState : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setTitleBarState'; function QStyleOptionTitleBar_titleBarFlags(handle : QStyleOptionTitleBarH) : QtWindowFlags; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_titleBarFlags'; procedure QStyleOptionTitleBar_setTitleBarFlags(handle : QStyleOptionTitleBarH; titleBarFlags : QtWindowFlags); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setTitleBarFlags'; function QStyleOptionTitleBar_create(): QStyleOptionTitleBarH; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_create'; procedure QStyleOptionTitleBar_destroy(handle: QStyleOptionTitleBarH); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_destroy'; function QStyleOptionTitleBar_create(other: QStyleOptionTitleBarH): QStyleOptionTitleBarH; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_create2'; function QStyleOptionGroupBox_features(handle : QStyleOptionGroupBoxH) : QStyleOptionFrameV2FrameFeatures; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_features'; procedure QStyleOptionGroupBox_setFeatures(handle : QStyleOptionGroupBoxH; features : QStyleOptionFrameV2FrameFeatures); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setFeatures'; procedure QStyleOptionGroupBox_text(handle : QStyleOptionGroupBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_text'; procedure QStyleOptionGroupBox_setText(handle : QStyleOptionGroupBoxH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setText'; function QStyleOptionGroupBox_textAlignment(handle : QStyleOptionGroupBoxH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_textAlignment'; procedure QStyleOptionGroupBox_setTextAlignment(handle : QStyleOptionGroupBoxH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setTextAlignment'; procedure QStyleOptionGroupBox_textColor(handle : QStyleOptionGroupBoxH; retval : PQColor ); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_textColor'; procedure QStyleOptionGroupBox_setTextColor(handle : QStyleOptionGroupBoxH; textColor : PQColor); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setTextColor'; function QStyleOptionGroupBox_lineWidth(handle : QStyleOptionGroupBoxH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_lineWidth'; procedure QStyleOptionGroupBox_setLineWidth(handle : QStyleOptionGroupBoxH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setLineWidth'; function QStyleOptionGroupBox_midLineWidth(handle : QStyleOptionGroupBoxH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_midLineWidth'; procedure QStyleOptionGroupBox_setMidLineWidth(handle : QStyleOptionGroupBoxH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setMidLineWidth'; function QStyleOptionGroupBox_create(): QStyleOptionGroupBoxH; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_create'; procedure QStyleOptionGroupBox_destroy(handle: QStyleOptionGroupBoxH); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_destroy'; function QStyleOptionGroupBox_create(other: QStyleOptionGroupBoxH): QStyleOptionGroupBoxH; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_create2'; function QStyleOptionSizeGrip_corner(handle : QStyleOptionSizeGripH) : QtCorner; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_corner'; procedure QStyleOptionSizeGrip_setCorner(handle : QStyleOptionSizeGripH; corner : QtCorner); cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_setCorner'; function QStyleOptionSizeGrip_create(): QStyleOptionSizeGripH; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_create'; procedure QStyleOptionSizeGrip_destroy(handle: QStyleOptionSizeGripH); cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_destroy'; function QStyleOptionSizeGrip_create(other: QStyleOptionSizeGripH): QStyleOptionSizeGripH; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_create2'; procedure QStyleOptionGraphicsItem_exposedRect(handle : QStyleOptionGraphicsItemH; retval : QRectFH ); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_exposedRect'; procedure QStyleOptionGraphicsItem_setExposedRect(handle : QStyleOptionGraphicsItemH; exposedRect : QRectFH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setExposedRect'; procedure QStyleOptionGraphicsItem_matrix(handle : QStyleOptionGraphicsItemH; retval : QMatrixH ); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_matrix'; procedure QStyleOptionGraphicsItem_setMatrix(handle : QStyleOptionGraphicsItemH; matrix : QMatrixH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setMatrix'; function QStyleOptionGraphicsItem_levelOfDetail(handle : QStyleOptionGraphicsItemH) : qreal; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_levelOfDetail'; procedure QStyleOptionGraphicsItem_setLevelOfDetail(handle : QStyleOptionGraphicsItemH; levelOfDetail : qreal); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setLevelOfDetail'; function QStyleOptionGraphicsItem_create(): QStyleOptionGraphicsItemH; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_create'; procedure QStyleOptionGraphicsItem_destroy(handle: QStyleOptionGraphicsItemH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_destroy'; function QStyleOptionGraphicsItem_create(other: QStyleOptionGraphicsItemH): QStyleOptionGraphicsItemH; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_create2'; function QStyleHintReturn_version(handle : QStyleHintReturnH) : Integer; cdecl; external Qt4PasLib name 'QStyleHintReturn_version'; procedure QStyleHintReturn_setVersion(handle : QStyleHintReturnH; version : Integer); cdecl; external Qt4PasLib name 'QStyleHintReturn_setVersion'; function QStyleHintReturn__type(handle : QStyleHintReturnH) : Integer; cdecl; external Qt4PasLib name 'QStyleHintReturn__type'; procedure QStyleHintReturn_setType(handle : QStyleHintReturnH; _type : Integer); cdecl; external Qt4PasLib name 'QStyleHintReturn_setType'; function QStyleHintReturn_create(version: QStyleOptionStyleOptionVersion = QStyleOptionVersion; _type: QStyleHintReturnHintReturnType = QStyleHintReturnSH_Default): QStyleHintReturnH; cdecl; external Qt4PasLib name 'QStyleHintReturn_create'; procedure QStyleHintReturn_destroy(handle: QStyleHintReturnH); cdecl; external Qt4PasLib name 'QStyleHintReturn_destroy'; procedure QStyleHintReturnMask_region(handle : QStyleHintReturnMaskH; retval : QRegionH ); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_region'; procedure QStyleHintReturnMask_setRegion(handle : QStyleHintReturnMaskH; region : QRegionH); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_setRegion'; function QStyleHintReturnMask_create(): QStyleHintReturnMaskH; cdecl; external Qt4PasLib name 'QStyleHintReturnMask_create'; procedure QStyleHintReturnMask_destroy(handle: QStyleHintReturnMaskH); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_destroy'; procedure QStyleHintReturnVariant_variant(handle : QStyleHintReturnVariantH; retval : QVariantH ); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_variant'; procedure QStyleHintReturnVariant_setVariant(handle : QStyleHintReturnVariantH; variant : QVariantH); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_setVariant'; function QStyleHintReturnVariant_create(): QStyleHintReturnVariantH; cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_create'; procedure QStyleHintReturnVariant_destroy(handle: QStyleHintReturnVariantH); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_destroy'; procedure QStyleFactory_keys(retval: QStringListH); cdecl; external Qt4PasLib name 'QStyleFactory_keys'; function QStyleFactory_create(AnonParam1: PWideString): QStyleH; cdecl; external Qt4PasLib name 'QStyleFactory_create'; type QGraphicsSceneItemIndexMethod = ( //QGraphicsScene::ItemIndexMethod (2) QGraphicsSceneNoIndex = -1, QGraphicsSceneBspTreeIndex ); type QGraphicsSceneSceneLayer = cardinal; // QGraphicsScene::SceneLayer QGraphicsSceneSceneLayers = QGraphicsSceneSceneLayer; //QFlags<> (3) const QGraphicsSceneItemLayer = $1; QGraphicsSceneBackgroundLayer = $2; QGraphicsSceneForegroundLayer = $4; QGraphicsSceneAllLayers = $ffff; function QGraphicsScene_create(parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create'; procedure QGraphicsScene_destroy(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_destroy'; function QGraphicsScene_create(sceneRect: QRectFH; parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create2'; function QGraphicsScene_create(x: qreal; y: qreal; width: qreal; height: qreal; parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create3'; procedure QGraphicsScene_sceneRect(handle: QGraphicsSceneH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_sceneRect'; function QGraphicsScene_width(handle: QGraphicsSceneH): qreal; cdecl; external Qt4PasLib name 'QGraphicsScene_width'; function QGraphicsScene_height(handle: QGraphicsSceneH): qreal; cdecl; external Qt4PasLib name 'QGraphicsScene_height'; procedure QGraphicsScene_setSceneRect(handle: QGraphicsSceneH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_setSceneRect'; procedure QGraphicsScene_setSceneRect(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsScene_setSceneRect2'; procedure QGraphicsScene_render(handle: QGraphicsSceneH; painter: QPainterH; target: QRectFH = nil; source: QRectFH = nil; aspectRatioMode: QtAspectRatioMode = QtKeepAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsScene_render'; function QGraphicsScene_itemIndexMethod(handle: QGraphicsSceneH): QGraphicsSceneItemIndexMethod; cdecl; external Qt4PasLib name 'QGraphicsScene_itemIndexMethod'; procedure QGraphicsScene_setItemIndexMethod(handle: QGraphicsSceneH; method: QGraphicsSceneItemIndexMethod); cdecl; external Qt4PasLib name 'QGraphicsScene_setItemIndexMethod'; function QGraphicsScene_isSortCacheEnabled(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_isSortCacheEnabled'; procedure QGraphicsScene_setSortCacheEnabled(handle: QGraphicsSceneH; enabled: Boolean); cdecl; external Qt4PasLib name 'QGraphicsScene_setSortCacheEnabled'; function QGraphicsScene_bspTreeDepth(handle: QGraphicsSceneH): Integer; cdecl; external Qt4PasLib name 'QGraphicsScene_bspTreeDepth'; procedure QGraphicsScene_setBspTreeDepth(handle: QGraphicsSceneH; depth: Integer); cdecl; external Qt4PasLib name 'QGraphicsScene_setBspTreeDepth'; procedure QGraphicsScene_itemsBoundingRect(handle: QGraphicsSceneH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_itemsBoundingRect'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_items'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; pos: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsScene_items2'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; rect: QRectFH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items3'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; polygon: QPolygonFH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items4'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; path: QPainterPathH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items5'; procedure QGraphicsScene_collidingItems(handle: QGraphicsSceneH; retval: PPtrIntArray; item: QGraphicsItemH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_collidingItems'; function QGraphicsScene_itemAt(handle: QGraphicsSceneH; pos: PQtPointF): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_itemAt'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; x: qreal; y: qreal; w: qreal; h: qreal; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items6'; function QGraphicsScene_itemAt(handle: QGraphicsSceneH; x: qreal; y: qreal): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_itemAt2'; procedure QGraphicsScene_selectedItems(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_selectedItems'; procedure QGraphicsScene_selectionArea(handle: QGraphicsSceneH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsScene_selectionArea'; procedure QGraphicsScene_setSelectionArea(handle: QGraphicsSceneH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsScene_setSelectionArea'; procedure QGraphicsScene_setSelectionArea(handle: QGraphicsSceneH; path: QPainterPathH; AnonParam2: QtItemSelectionMode); cdecl; external Qt4PasLib name 'QGraphicsScene_setSelectionArea2'; function QGraphicsScene_createItemGroup(handle: QGraphicsSceneH; items: PPtrIntArray): QGraphicsItemGroupH; cdecl; external Qt4PasLib name 'QGraphicsScene_createItemGroup'; procedure QGraphicsScene_destroyItemGroup(handle: QGraphicsSceneH; group: QGraphicsItemGroupH); cdecl; external Qt4PasLib name 'QGraphicsScene_destroyItemGroup'; procedure QGraphicsScene_addItem(handle: QGraphicsSceneH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsScene_addItem'; function QGraphicsScene_addEllipse(handle: QGraphicsSceneH; rect: QRectFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsEllipseItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addEllipse'; function QGraphicsScene_addLine(handle: QGraphicsSceneH; line: QLineFH; pen: QPenH = nil): QGraphicsLineItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addLine'; function QGraphicsScene_addPath(handle: QGraphicsSceneH; path: QPainterPathH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsPathItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPath'; function QGraphicsScene_addPixmap(handle: QGraphicsSceneH; pixmap: QPixmapH): QGraphicsPixmapItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPixmap'; function QGraphicsScene_addPolygon(handle: QGraphicsSceneH; polygon: QPolygonFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsPolygonItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPolygon'; function QGraphicsScene_addRect(handle: QGraphicsSceneH; rect: QRectFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsRectItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addRect'; function QGraphicsScene_addText(handle: QGraphicsSceneH; text: PWideString; font: QFontH = nil): QGraphicsTextItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addText'; function QGraphicsScene_addSimpleText(handle: QGraphicsSceneH; text: PWideString; font: QFontH = nil): QGraphicsSimpleTextItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addSimpleText'; function QGraphicsScene_addWidget(handle: QGraphicsSceneH; widget: QWidgetH; wFlags: QtWindowFlags = 0): QGraphicsProxyWidgetH; cdecl; external Qt4PasLib name 'QGraphicsScene_addWidget'; function QGraphicsScene_addEllipse(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsEllipseItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addEllipse2'; function QGraphicsScene_addLine(handle: QGraphicsSceneH; x1: qreal; y1: qreal; x2: qreal; y2: qreal; pen: QPenH = nil): QGraphicsLineItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addLine2'; function QGraphicsScene_addRect(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsRectItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addRect2'; procedure QGraphicsScene_removeItem(handle: QGraphicsSceneH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsScene_removeItem'; function QGraphicsScene_focusItem(handle: QGraphicsSceneH): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_focusItem'; procedure QGraphicsScene_setFocusItem(handle: QGraphicsSceneH; item: QGraphicsItemH; focusReason: QtFocusReason = QtOtherFocusReason); cdecl; external Qt4PasLib name 'QGraphicsScene_setFocusItem'; function QGraphicsScene_hasFocus(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_hasFocus'; procedure QGraphicsScene_setFocus(handle: QGraphicsSceneH; focusReason: QtFocusReason = QtOtherFocusReason); cdecl; external Qt4PasLib name 'QGraphicsScene_setFocus'; procedure QGraphicsScene_clearFocus(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clearFocus'; procedure QGraphicsScene_setStickyFocus(handle: QGraphicsSceneH; enabled: Boolean); cdecl; external Qt4PasLib name 'QGraphicsScene_setStickyFocus'; function QGraphicsScene_stickyFocus(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_stickyFocus'; function QGraphicsScene_mouseGrabberItem(handle: QGraphicsSceneH): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_mouseGrabberItem'; procedure QGraphicsScene_backgroundBrush(handle: QGraphicsSceneH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_backgroundBrush'; procedure QGraphicsScene_setBackgroundBrush(handle: QGraphicsSceneH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_setBackgroundBrush'; procedure QGraphicsScene_foregroundBrush(handle: QGraphicsSceneH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_foregroundBrush'; procedure QGraphicsScene_setForegroundBrush(handle: QGraphicsSceneH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_setForegroundBrush'; procedure QGraphicsScene_inputMethodQuery(handle: QGraphicsSceneH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QGraphicsScene_inputMethodQuery'; procedure QGraphicsScene_views(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_views'; procedure QGraphicsScene_update(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsScene_update'; procedure QGraphicsScene_invalidate(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsScene_invalidate'; function QGraphicsScene_style(handle: QGraphicsSceneH): QStyleH; cdecl; external Qt4PasLib name 'QGraphicsScene_style'; procedure QGraphicsScene_setStyle(handle: QGraphicsSceneH; style: QStyleH); cdecl; external Qt4PasLib name 'QGraphicsScene_setStyle'; procedure QGraphicsScene_font(handle: QGraphicsSceneH; retval: QFontH); cdecl; external Qt4PasLib name 'QGraphicsScene_font'; procedure QGraphicsScene_setFont(handle: QGraphicsSceneH; font: QFontH); cdecl; external Qt4PasLib name 'QGraphicsScene_setFont'; procedure QGraphicsScene_palette(handle: QGraphicsSceneH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QGraphicsScene_palette'; procedure QGraphicsScene_setPalette(handle: QGraphicsSceneH; palette: QPaletteH); cdecl; external Qt4PasLib name 'QGraphicsScene_setPalette'; function QGraphicsScene_activeWindow(handle: QGraphicsSceneH): QGraphicsWidgetH; cdecl; external Qt4PasLib name 'QGraphicsScene_activeWindow'; procedure QGraphicsScene_setActiveWindow(handle: QGraphicsSceneH; widget: QGraphicsWidgetH); cdecl; external Qt4PasLib name 'QGraphicsScene_setActiveWindow'; procedure QGraphicsScene_update(handle: QGraphicsSceneH; rect: QRectFH = nil); cdecl; external Qt4PasLib name 'QGraphicsScene_update2'; procedure QGraphicsScene_invalidate(handle: QGraphicsSceneH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsScene_invalidate2'; procedure QGraphicsScene_advance(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_advance'; procedure QGraphicsScene_clearSelection(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clearSelection'; procedure QGraphicsScene_clear(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clear'; type QGraphicsScene_sceneRectChanged_Event = procedure (rect: QRectFH) of object cdecl; QGraphicsScene_selectionChanged_Event = procedure () of object cdecl; type QGraphicsViewViewportAnchor = ( // QGraphicsView::ViewportAnchor (1) QGraphicsViewNoAnchor, QGraphicsViewAnchorViewCenter, QGraphicsViewAnchorUnderMouse ); QGraphicsViewDragMode = ( // QGraphicsView::DragMode (1) QGraphicsViewNoDrag, QGraphicsViewScrollHandDrag, QGraphicsViewRubberBandDrag ); QGraphicsViewViewportUpdateMode = ( // QGraphicsView::ViewportUpdateMode (1) QGraphicsViewFullViewportUpdate, QGraphicsViewMinimalViewportUpdate, QGraphicsViewSmartViewportUpdate, QGraphicsViewNoViewportUpdate, QGraphicsViewBoundingRectViewportUpdate ); type QGraphicsViewCacheModeFlag = cardinal; // QGraphicsView::CacheModeFlag QGraphicsViewCacheMode = QGraphicsViewCacheModeFlag; //QFlags<> (3) const QGraphicsViewCacheNone = $0; QGraphicsViewCacheBackground = $1; type QGraphicsViewOptimizationFlag = cardinal; // QGraphicsView::OptimizationFlag QGraphicsViewOptimizationFlags = QGraphicsViewOptimizationFlag; //QFlags<> (3) const QGraphicsViewDontClipPainter = $1; QGraphicsViewDontSavePainterState = $2; QGraphicsViewDontAdjustForAntialiasing = $4; function QGraphicsView_create(parent: QWidgetH = nil): QGraphicsViewH; cdecl; external Qt4PasLib name 'QGraphicsView_create'; procedure QGraphicsView_destroy(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_destroy'; function QGraphicsView_create(scene: QGraphicsSceneH; parent: QWidgetH = nil): QGraphicsViewH; cdecl; external Qt4PasLib name 'QGraphicsView_create2'; procedure QGraphicsView_sizeHint(handle: QGraphicsViewH; retval: PSize); cdecl; external Qt4PasLib name 'QGraphicsView_sizeHint'; function QGraphicsView_renderHints(handle: QGraphicsViewH): QPainterRenderHints; cdecl; external Qt4PasLib name 'QGraphicsView_renderHints'; procedure QGraphicsView_setRenderHint(handle: QGraphicsViewH; hint: QPainterRenderHint; enabled: Boolean = True); cdecl; external Qt4PasLib name 'QGraphicsView_setRenderHint'; procedure QGraphicsView_setRenderHints(handle: QGraphicsViewH; hints: QPainterRenderHints); cdecl; external Qt4PasLib name 'QGraphicsView_setRenderHints'; function QGraphicsView_alignment(handle: QGraphicsViewH): QtAlignment; cdecl; external Qt4PasLib name 'QGraphicsView_alignment'; procedure QGraphicsView_setAlignment(handle: QGraphicsViewH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QGraphicsView_setAlignment'; function QGraphicsView_transformationAnchor(handle: QGraphicsViewH): QGraphicsViewViewportAnchor; cdecl; external Qt4PasLib name 'QGraphicsView_transformationAnchor'; procedure QGraphicsView_setTransformationAnchor(handle: QGraphicsViewH; anchor: QGraphicsViewViewportAnchor); cdecl; external Qt4PasLib name 'QGraphicsView_setTransformationAnchor'; function QGraphicsView_resizeAnchor(handle: QGraphicsViewH): QGraphicsViewViewportAnchor; cdecl; external Qt4PasLib name 'QGraphicsView_resizeAnchor'; procedure QGraphicsView_setResizeAnchor(handle: QGraphicsViewH; anchor: QGraphicsViewViewportAnchor); cdecl; external Qt4PasLib name 'QGraphicsView_setResizeAnchor'; function QGraphicsView_viewportUpdateMode(handle: QGraphicsViewH): QGraphicsViewViewportUpdateMode; cdecl; external Qt4PasLib name 'QGraphicsView_viewportUpdateMode'; procedure QGraphicsView_setViewportUpdateMode(handle: QGraphicsViewH; mode: QGraphicsViewViewportUpdateMode); cdecl; external Qt4PasLib name 'QGraphicsView_setViewportUpdateMode'; function QGraphicsView_optimizationFlags(handle: QGraphicsViewH): QGraphicsViewOptimizationFlags; cdecl; external Qt4PasLib name 'QGraphicsView_optimizationFlags'; procedure QGraphicsView_setOptimizationFlag(handle: QGraphicsViewH; flag: QGraphicsViewOptimizationFlag; enabled: Boolean = True); cdecl; external Qt4PasLib name 'QGraphicsView_setOptimizationFlag'; procedure QGraphicsView_setOptimizationFlags(handle: QGraphicsViewH; flags: QGraphicsViewOptimizationFlags); cdecl; external Qt4PasLib name 'QGraphicsView_setOptimizationFlags'; function QGraphicsView_dragMode(handle: QGraphicsViewH): QGraphicsViewDragMode; cdecl; external Qt4PasLib name 'QGraphicsView_dragMode'; procedure QGraphicsView_setDragMode(handle: QGraphicsViewH; mode: QGraphicsViewDragMode); cdecl; external Qt4PasLib name 'QGraphicsView_setDragMode'; function QGraphicsView_rubberBandSelectionMode(handle: QGraphicsViewH): QtItemSelectionMode; cdecl; external Qt4PasLib name 'QGraphicsView_rubberBandSelectionMode'; procedure QGraphicsView_setRubberBandSelectionMode(handle: QGraphicsViewH; mode: QtItemSelectionMode); cdecl; external Qt4PasLib name 'QGraphicsView_setRubberBandSelectionMode'; function QGraphicsView_cacheMode(handle: QGraphicsViewH): QGraphicsViewCacheMode; cdecl; external Qt4PasLib name 'QGraphicsView_cacheMode'; procedure QGraphicsView_setCacheMode(handle: QGraphicsViewH; mode: QGraphicsViewCacheMode); cdecl; external Qt4PasLib name 'QGraphicsView_setCacheMode'; procedure QGraphicsView_resetCachedContent(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetCachedContent'; function QGraphicsView_isInteractive(handle: QGraphicsViewH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsView_isInteractive'; procedure QGraphicsView_setInteractive(handle: QGraphicsViewH; allowed: Boolean); cdecl; external Qt4PasLib name 'QGraphicsView_setInteractive'; function QGraphicsView_scene(handle: QGraphicsViewH): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsView_scene'; procedure QGraphicsView_setScene(handle: QGraphicsViewH; scene: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsView_setScene'; procedure QGraphicsView_sceneRect(handle: QGraphicsViewH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_sceneRect'; procedure QGraphicsView_setSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_setSceneRect'; procedure QGraphicsView_setSceneRect(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_setSceneRect2'; procedure QGraphicsView_matrix(handle: QGraphicsViewH; retval: QMatrixH); cdecl; external Qt4PasLib name 'QGraphicsView_matrix'; procedure QGraphicsView_setMatrix(handle: QGraphicsViewH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QGraphicsView_setMatrix'; procedure QGraphicsView_resetMatrix(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetMatrix'; procedure QGraphicsView_transform(handle: QGraphicsViewH; retval: QTransformH); cdecl; external Qt4PasLib name 'QGraphicsView_transform'; procedure QGraphicsView_viewportTransform(handle: QGraphicsViewH; retval: QTransformH); cdecl; external Qt4PasLib name 'QGraphicsView_viewportTransform'; procedure QGraphicsView_setTransform(handle: QGraphicsViewH; matrix: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QGraphicsView_setTransform'; procedure QGraphicsView_resetTransform(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetTransform'; procedure QGraphicsView_rotate(handle: QGraphicsViewH; angle: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_rotate'; procedure QGraphicsView_scale(handle: QGraphicsViewH; sx: qreal; sy: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_scale'; procedure QGraphicsView_shear(handle: QGraphicsViewH; sh: qreal; sv: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_shear'; procedure QGraphicsView_translate(handle: QGraphicsViewH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_translate'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; pos: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn2'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn3'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; rect: QRectFH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible2'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; item: QGraphicsItemH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible3'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; rect: QRectFH; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView2'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; item: QGraphicsItemH; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView3'; procedure QGraphicsView_render(handle: QGraphicsViewH; painter: QPainterH; target: QRectFH = nil; source: PRect = nil; aspectRatioMode: QtAspectRatioMode = QtKeepAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_render'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsView_items'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; pos: PQtPoint); cdecl; external Qt4PasLib name 'QGraphicsView_items2'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_items3'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; rect: PRect; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items4'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; x: Integer; y: Integer; w: Integer; h: Integer; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items5'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; polygon: QPolygonH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items6'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; path: QPainterPathH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items7'; function QGraphicsView_itemAt(handle: QGraphicsViewH; pos: PQtPoint): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsView_itemAt'; function QGraphicsView_itemAt(handle: QGraphicsViewH; x: Integer; y: Integer): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsView_itemAt2'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: PQtPointF; point: PQtPoint); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; rect: PRect); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene2'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene3'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene4'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: PQtPoint; point: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene2'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene3'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene4'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: PQtPointF; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene5'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene6'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: PQtPoint; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene5'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene6'; procedure QGraphicsView_inputMethodQuery(handle: QGraphicsViewH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QGraphicsView_inputMethodQuery'; procedure QGraphicsView_backgroundBrush(handle: QGraphicsViewH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_backgroundBrush'; procedure QGraphicsView_setBackgroundBrush(handle: QGraphicsViewH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_setBackgroundBrush'; procedure QGraphicsView_foregroundBrush(handle: QGraphicsViewH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_foregroundBrush'; procedure QGraphicsView_setForegroundBrush(handle: QGraphicsViewH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_setForegroundBrush'; procedure QGraphicsView_invalidateScene(handle: QGraphicsViewH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsView_invalidateScene'; procedure QGraphicsView_updateSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_updateSceneRect'; type QSslKeyType = ( // QSsl::KeyType (1) QSslPrivateKey, QSslPublicKey ); QSslEncodingFormat = ( // QSsl::EncodingFormat (1) QSslPem, QSslDer ); QSslKeyAlgorithm = ( // QSsl::KeyAlgorithm (1) QSslRsa, QSslDsa ); QSslAlternateNameEntryType = ( // QSsl::AlternateNameEntryType (1) QSslEmailEntry, QSslDnsEntry ); QSslSslProtocol = ( //QSsl::SslProtocol (2) QSslUnknownProtocol = -1, QSslSslV3, QSslSslV2, QSslTlsV1, QSslAnyProtocol ); function QSslCipher_create(): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create'; procedure QSslCipher_destroy(handle: QSslCipherH); cdecl; external Qt4PasLib name 'QSslCipher_destroy'; function QSslCipher_create(name: PWideString; protocol: QSslSslProtocol): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create2'; function QSslCipher_create(other: QSslCipherH): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create3'; function QSslCipher_isNull(handle: QSslCipherH): Boolean; cdecl; external Qt4PasLib name 'QSslCipher_isNull'; procedure QSslCipher_name(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_name'; function QSslCipher_supportedBits(handle: QSslCipherH): Integer; cdecl; external Qt4PasLib name 'QSslCipher_supportedBits'; function QSslCipher_usedBits(handle: QSslCipherH): Integer; cdecl; external Qt4PasLib name 'QSslCipher_usedBits'; procedure QSslCipher_keyExchangeMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_keyExchangeMethod'; procedure QSslCipher_authenticationMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_authenticationMethod'; procedure QSslCipher_encryptionMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_encryptionMethod'; procedure QSslCipher_protocolString(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_protocolString'; function QSslCipher_protocol(handle: QSslCipherH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslCipher_protocol'; function QSslKey_create(): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create'; procedure QSslKey_destroy(handle: QSslKeyH); cdecl; external Qt4PasLib name 'QSslKey_destroy'; function QSslKey_create(encoded: QByteArrayH; algorithm: QSslKeyAlgorithm; format: QSslEncodingFormat = QSslPem; _type: QSslKeyType = QSslPrivateKey; passPhrase: QByteArrayH = nil): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create2'; function QSslKey_create(device: QIODeviceH; algorithm: QSslKeyAlgorithm; format: QSslEncodingFormat = QSslPem; _type: QSslKeyType = QSslPrivateKey; passPhrase: QByteArrayH = nil): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create3'; function QSslKey_create(other: QSslKeyH): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create4'; function QSslKey_isNull(handle: QSslKeyH): Boolean; cdecl; external Qt4PasLib name 'QSslKey_isNull'; procedure QSslKey_clear(handle: QSslKeyH); cdecl; external Qt4PasLib name 'QSslKey_clear'; function QSslKey_length(handle: QSslKeyH): Integer; cdecl; external Qt4PasLib name 'QSslKey_length'; function QSslKey_type(handle: QSslKeyH): QSslKeyType; cdecl; external Qt4PasLib name 'QSslKey_type'; function QSslKey_algorithm(handle: QSslKeyH): QSslKeyAlgorithm; cdecl; external Qt4PasLib name 'QSslKey_algorithm'; procedure QSslKey_toPem(handle: QSslKeyH; retval: QByteArrayH; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslKey_toPem'; procedure QSslKey_toDer(handle: QSslKeyH; retval: QByteArrayH; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslKey_toDer'; function QSslKey_handle(handle: QSslKeyH): QtHANDLE; cdecl; external Qt4PasLib name 'QSslKey_handle'; type QSslErrorSslError = ( //QSslError::SslError (2) QSslErrorUnspecifiedError = -1, QSslErrorNoError, QSslErrorUnableToGetIssuerCertificate, QSslErrorUnableToDecryptCertificateSignature, QSslErrorUnableToDecodeIssuerPublicKey, QSslErrorCertificateSignatureFailed, QSslErrorCertificateNotYetValid, QSslErrorCertificateExpired, QSslErrorInvalidNotBeforeField, QSslErrorInvalidNotAfterField, QSslErrorSelfSignedCertificate, QSslErrorSelfSignedCertificateInChain, QSslErrorUnableToGetLocalIssuerCertificate, QSslErrorUnableToVerifyFirstCertificate, QSslErrorCertificateRevoked, QSslErrorInvalidCaCertificate, QSslErrorPathLengthExceeded, QSslErrorInvalidPurpose, QSslErrorCertificateUntrusted, QSslErrorCertificateRejected, QSslErrorSubjectIssuerMismatch, QSslErrorAuthorityIssuerSerialNumberMismatch, QSslErrorNoPeerCertificate, QSslErrorHostNameMismatch, QSslErrorNoSslSupport ); function QSslError_create(error: QSslErrorSslError = QSslErrorNoError; certificate: QSslCertificateH = nil): QSslErrorH; cdecl; external Qt4PasLib name 'QSslError_create'; procedure QSslError_destroy(handle: QSslErrorH); cdecl; external Qt4PasLib name 'QSslError_destroy'; function QSslError_create(other: QSslErrorH): QSslErrorH; cdecl; external Qt4PasLib name 'QSslError_create2'; function QSslError_error(handle: QSslErrorH): QSslErrorSslError; cdecl; external Qt4PasLib name 'QSslError_error'; procedure QSslError_errorString(handle: QSslErrorH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslError_errorString'; procedure QSslError_certificate(handle: QSslErrorH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslError_certificate'; type QAbstractSocketSocketState = ( // QAbstractSocket::SocketState (1) QAbstractSocketUnconnectedState, QAbstractSocketHostLookupState, QAbstractSocketConnectingState, QAbstractSocketConnectedState, QAbstractSocketBoundState, QAbstractSocketListeningState, QAbstractSocketClosingState ); QAbstractSocketSocketType = ( //QAbstractSocket::SocketType (2) QAbstractSocketUnknownSocketType = -1, QAbstractSocketTcpSocket, QAbstractSocketUdpSocket ); QAbstractSocketNetworkLayerProtocol = ( //QAbstractSocket::NetworkLayerProtocol (2) QAbstractSocketUnknownNetworkLayerProtocol = -1, QAbstractSocketIPv4Protocol, QAbstractSocketIPv6Protocol ); QAbstractSocketSocketError = ( //QAbstractSocket::SocketError (2) QAbstractSocketUnknownSocketError = -1, QAbstractSocketConnectionRefusedError, QAbstractSocketRemoteHostClosedError, QAbstractSocketHostNotFoundError, QAbstractSocketSocketAccessError, QAbstractSocketSocketResourceError, QAbstractSocketSocketTimeoutError, QAbstractSocketDatagramTooLargeError, QAbstractSocketNetworkError, QAbstractSocketAddressInUseError, QAbstractSocketSocketAddressNotAvailableError, QAbstractSocketUnsupportedSocketOperationError, QAbstractSocketUnfinishedSocketOperationError, QAbstractSocketProxyAuthenticationRequiredError, QAbstractSocketSslHandshakeFailedError, QAbstractSocketProxyConnectionRefusedError, QAbstractSocketProxyConnectionClosedError, QAbstractSocketProxyConnectionTimeoutError, QAbstractSocketProxyNotFoundError, QAbstractSocketProxyProtocolError ); function QAbstractSocket_create(socketType: QAbstractSocketSocketType; parent: QObjectH): QAbstractSocketH; cdecl; external Qt4PasLib name 'QAbstractSocket_create'; procedure QAbstractSocket_destroy(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_destroy'; procedure QAbstractSocket_connectToHost(handle: QAbstractSocketH; hostName: PWideString; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QAbstractSocket_connectToHost'; procedure QAbstractSocket_connectToHost(handle: QAbstractSocketH; address: QHostAddressH; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QAbstractSocket_connectToHost2'; procedure QAbstractSocket_disconnectFromHost(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_disconnectFromHost'; function QAbstractSocket_isValid(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_isValid'; function QAbstractSocket_bytesAvailable(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_bytesAvailable'; function QAbstractSocket_bytesToWrite(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_bytesToWrite'; function QAbstractSocket_canReadLine(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_canReadLine'; function QAbstractSocket_localPort(handle: QAbstractSocketH): Word; cdecl; external Qt4PasLib name 'QAbstractSocket_localPort'; procedure QAbstractSocket_localAddress(handle: QAbstractSocketH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QAbstractSocket_localAddress'; function QAbstractSocket_peerPort(handle: QAbstractSocketH): Word; cdecl; external Qt4PasLib name 'QAbstractSocket_peerPort'; procedure QAbstractSocket_peerAddress(handle: QAbstractSocketH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QAbstractSocket_peerAddress'; procedure QAbstractSocket_peerName(handle: QAbstractSocketH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSocket_peerName'; function QAbstractSocket_readBufferSize(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_readBufferSize'; procedure QAbstractSocket_setReadBufferSize(handle: QAbstractSocketH; size: int64); cdecl; external Qt4PasLib name 'QAbstractSocket_setReadBufferSize'; procedure QAbstractSocket_abort(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_abort'; function QAbstractSocket_socketDescriptor(handle: QAbstractSocketH): Integer; cdecl; external Qt4PasLib name 'QAbstractSocket_socketDescriptor'; function QAbstractSocket_socketType(handle: QAbstractSocketH): QAbstractSocketSocketType; cdecl; external Qt4PasLib name 'QAbstractSocket_socketType'; function QAbstractSocket_error(handle: QAbstractSocketH): QAbstractSocketSocketError; cdecl; external Qt4PasLib name 'QAbstractSocket_error'; procedure QAbstractSocket_close(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_close'; function QAbstractSocket_isSequential(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_isSequential'; function QAbstractSocket_atEnd(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_atEnd'; function QAbstractSocket_flush(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_flush'; function QAbstractSocket_waitForConnected(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForConnected'; function QAbstractSocket_waitForReadyRead(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForReadyRead'; function QAbstractSocket_waitForBytesWritten(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForBytesWritten'; function QAbstractSocket_waitForDisconnected(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForDisconnected'; procedure QAbstractSocket_setProxy(handle: QAbstractSocketH; networkProxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QAbstractSocket_setProxy'; procedure QAbstractSocket_proxy(handle: QAbstractSocketH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QAbstractSocket_proxy'; type QAbstractSocket_hostFound_Event = procedure () of object cdecl; QAbstractSocket_connected_Event = procedure () of object cdecl; QAbstractSocket_disconnected_Event = procedure () of object cdecl; QAbstractSocket_stateChanged_Event = procedure (AnonParam1: QAbstractSocketSocketState) of object cdecl; QAbstractSocket_error_Event = procedure (AnonParam1: QAbstractSocketSocketError) of object cdecl; QAbstractSocket_proxyAuthenticationRequired_Event = procedure (proxy: QNetworkProxyH; authenticator: QAuthenticatorH) of object cdecl; type QUdpSocketBindFlag = cardinal; // QUdpSocket::BindFlag QUdpSocketBindMode = QUdpSocketBindFlag; //QFlags<> (3) const QUdpSocketDefaultForPlatform = $0; QUdpSocketShareAddress = $1; QUdpSocketDontShareAddress = $2; QUdpSocketReuseAddressHint = $4; function QUdpSocket_create(parent: QObjectH = nil): QUdpSocketH; cdecl; external Qt4PasLib name 'QUdpSocket_create'; procedure QUdpSocket_destroy(handle: QUdpSocketH); cdecl; external Qt4PasLib name 'QUdpSocket_destroy'; function QUdpSocket_bind(handle: QUdpSocketH; address: QHostAddressH; port: Word): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind'; function QUdpSocket_bind(handle: QUdpSocketH; port: Word = 0): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind2'; function QUdpSocket_bind(handle: QUdpSocketH; address: QHostAddressH; port: Word; mode: QUdpSocketBindMode): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind3'; function QUdpSocket_bind(handle: QUdpSocketH; port: Word; mode: QUdpSocketBindMode): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind4'; function QUdpSocket_hasPendingDatagrams(handle: QUdpSocketH): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_hasPendingDatagrams'; function QUdpSocket_pendingDatagramSize(handle: QUdpSocketH): int64; cdecl; external Qt4PasLib name 'QUdpSocket_pendingDatagramSize'; function QUdpSocket_readDatagram(handle: QUdpSocketH; data: PAnsiChar; maxlen: int64; host: QHostAddressH = nil; port: PWord = nil): int64; cdecl; external Qt4PasLib name 'QUdpSocket_readDatagram'; function QUdpSocket_writeDatagram(handle: QUdpSocketH; data: PAnsiChar; len: int64; host: QHostAddressH; port: Word): int64; cdecl; external Qt4PasLib name 'QUdpSocket_writeDatagram'; function QUdpSocket_writeDatagram(handle: QUdpSocketH; datagram: QByteArrayH; host: QHostAddressH; port: Word): int64; cdecl; external Qt4PasLib name 'QUdpSocket_writeDatagram2'; function QTcpSocket_create(parent: QObjectH = nil): QTcpSocketH; cdecl; external Qt4PasLib name 'QTcpSocket_create'; procedure QTcpSocket_destroy(handle: QTcpSocketH); cdecl; external Qt4PasLib name 'QTcpSocket_destroy'; function QTcpServer_create(parent: QObjectH = nil): QTcpServerH; cdecl; external Qt4PasLib name 'QTcpServer_create'; procedure QTcpServer_destroy(handle: QTcpServerH); cdecl; external Qt4PasLib name 'QTcpServer_destroy'; function QTcpServer_listen(handle: QTcpServerH; address: QHostAddressH; port: Word = 0): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_listen'; procedure QTcpServer_close(handle: QTcpServerH); cdecl; external Qt4PasLib name 'QTcpServer_close'; function QTcpServer_isListening(handle: QTcpServerH): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_isListening'; procedure QTcpServer_setMaxPendingConnections(handle: QTcpServerH; numConnections: Integer); cdecl; external Qt4PasLib name 'QTcpServer_setMaxPendingConnections'; function QTcpServer_maxPendingConnections(handle: QTcpServerH): Integer; cdecl; external Qt4PasLib name 'QTcpServer_maxPendingConnections'; function QTcpServer_serverPort(handle: QTcpServerH): Word; cdecl; external Qt4PasLib name 'QTcpServer_serverPort'; procedure QTcpServer_serverAddress(handle: QTcpServerH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QTcpServer_serverAddress'; function QTcpServer_socketDescriptor(handle: QTcpServerH): Integer; cdecl; external Qt4PasLib name 'QTcpServer_socketDescriptor'; function QTcpServer_setSocketDescriptor(handle: QTcpServerH; socketDescriptor: Integer): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_setSocketDescriptor'; function QTcpServer_waitForNewConnection(handle: QTcpServerH; msec: Integer = 0; timedOut: PBoolean = nil): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_waitForNewConnection'; function QTcpServer_hasPendingConnections(handle: QTcpServerH): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_hasPendingConnections'; function QTcpServer_nextPendingConnection(handle: QTcpServerH): QTcpSocketH; cdecl; external Qt4PasLib name 'QTcpServer_nextPendingConnection'; function QTcpServer_serverError(handle: QTcpServerH): QAbstractSocketSocketError; cdecl; external Qt4PasLib name 'QTcpServer_serverError'; procedure QTcpServer_errorString(handle: QTcpServerH; retval: PWideString); cdecl; external Qt4PasLib name 'QTcpServer_errorString'; procedure QTcpServer_setProxy(handle: QTcpServerH; networkProxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QTcpServer_setProxy'; procedure QTcpServer_proxy(handle: QTcpServerH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QTcpServer_proxy'; type QTcpServer_newConnection_Event = procedure () of object cdecl; type QSslSocketSslMode = ( // QSslSocket::SslMode (1) QSslSocketUnencryptedMode, QSslSocketSslClientMode, QSslSocketSslServerMode ); QSslSocketPeerVerifyMode = ( // QSslSocket::PeerVerifyMode (1) QSslSocketVerifyNone, QSslSocketQueryPeer, QSslSocketVerifyPeer, QSslSocketAutoVerifyPeer ); function QSslConfiguration_create(): QSslConfigurationH; cdecl; external Qt4PasLib name 'QSslConfiguration_create'; procedure QSslConfiguration_destroy(handle: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_destroy'; function QSslConfiguration_create(other: QSslConfigurationH): QSslConfigurationH; cdecl; external Qt4PasLib name 'QSslConfiguration_create2'; function QSslConfiguration_isNull(handle: QSslConfigurationH): Boolean; cdecl; external Qt4PasLib name 'QSslConfiguration_isNull'; function QSslConfiguration_protocol(handle: QSslConfigurationH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslConfiguration_protocol'; procedure QSslConfiguration_setProtocol(handle: QSslConfigurationH; protocol: QSslSslProtocol); cdecl; external Qt4PasLib name 'QSslConfiguration_setProtocol'; function QSslConfiguration_peerVerifyMode(handle: QSslConfigurationH): QSslSocketPeerVerifyMode; cdecl; external Qt4PasLib name 'QSslConfiguration_peerVerifyMode'; procedure QSslConfiguration_setPeerVerifyMode(handle: QSslConfigurationH; mode: QSslSocketPeerVerifyMode); cdecl; external Qt4PasLib name 'QSslConfiguration_setPeerVerifyMode'; function QSslConfiguration_peerVerifyDepth(handle: QSslConfigurationH): Integer; cdecl; external Qt4PasLib name 'QSslConfiguration_peerVerifyDepth'; procedure QSslConfiguration_setPeerVerifyDepth(handle: QSslConfigurationH; depth: Integer); cdecl; external Qt4PasLib name 'QSslConfiguration_setPeerVerifyDepth'; procedure QSslConfiguration_localCertificate(handle: QSslConfigurationH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_localCertificate'; procedure QSslConfiguration_setLocalCertificate(handle: QSslConfigurationH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_setLocalCertificate'; procedure QSslConfiguration_peerCertificate(handle: QSslConfigurationH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_peerCertificate'; procedure QSslConfiguration_sessionCipher(handle: QSslConfigurationH; retval: QSslCipherH); cdecl; external Qt4PasLib name 'QSslConfiguration_sessionCipher'; procedure QSslConfiguration_privateKey(handle: QSslConfigurationH; retval: QSslKeyH); cdecl; external Qt4PasLib name 'QSslConfiguration_privateKey'; procedure QSslConfiguration_setPrivateKey(handle: QSslConfigurationH; key: QSslKeyH); cdecl; external Qt4PasLib name 'QSslConfiguration_setPrivateKey'; procedure QSslConfiguration_defaultConfiguration(retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_defaultConfiguration'; procedure QSslConfiguration_setDefaultConfiguration(configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_setDefaultConfiguration'; function QSslSocket_create(parent: QObjectH = nil): QSslSocketH; cdecl; external Qt4PasLib name 'QSslSocket_create'; procedure QSslSocket_destroy(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_destroy'; procedure QSslSocket_connectToHostEncrypted(handle: QSslSocketH; hostName: PWideString; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QSslSocket_connectToHostEncrypted'; function QSslSocket_mode(handle: QSslSocketH): QSslSocketSslMode; cdecl; external Qt4PasLib name 'QSslSocket_mode'; function QSslSocket_isEncrypted(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_isEncrypted'; function QSslSocket_protocol(handle: QSslSocketH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslSocket_protocol'; procedure QSslSocket_setProtocol(handle: QSslSocketH; protocol: QSslSslProtocol); cdecl; external Qt4PasLib name 'QSslSocket_setProtocol'; function QSslSocket_peerVerifyMode(handle: QSslSocketH): QSslSocketPeerVerifyMode; cdecl; external Qt4PasLib name 'QSslSocket_peerVerifyMode'; procedure QSslSocket_setPeerVerifyMode(handle: QSslSocketH; mode: QSslSocketPeerVerifyMode); cdecl; external Qt4PasLib name 'QSslSocket_setPeerVerifyMode'; function QSslSocket_peerVerifyDepth(handle: QSslSocketH): Integer; cdecl; external Qt4PasLib name 'QSslSocket_peerVerifyDepth'; procedure QSslSocket_setPeerVerifyDepth(handle: QSslSocketH; depth: Integer); cdecl; external Qt4PasLib name 'QSslSocket_setPeerVerifyDepth'; function QSslSocket_bytesAvailable(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_bytesAvailable'; function QSslSocket_bytesToWrite(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_bytesToWrite'; function QSslSocket_canReadLine(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_canReadLine'; procedure QSslSocket_close(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_close'; function QSslSocket_atEnd(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_atEnd'; function QSslSocket_flush(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_flush'; procedure QSslSocket_abort(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_abort'; procedure QSslSocket_setReadBufferSize(handle: QSslSocketH; size: int64); cdecl; external Qt4PasLib name 'QSslSocket_setReadBufferSize'; function QSslSocket_encryptedBytesAvailable(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_encryptedBytesAvailable'; function QSslSocket_encryptedBytesToWrite(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_encryptedBytesToWrite'; procedure QSslSocket_sslConfiguration(handle: QSslSocketH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslSocket_sslConfiguration'; procedure QSslSocket_setSslConfiguration(handle: QSslSocketH; config: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslSocket_setSslConfiguration'; procedure QSslSocket_setLocalCertificate(handle: QSslSocketH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_setLocalCertificate'; procedure QSslSocket_setLocalCertificate(handle: QSslSocketH; fileName: PWideString; format: QSslEncodingFormat = QSslPem); cdecl; external Qt4PasLib name 'QSslSocket_setLocalCertificate2'; procedure QSslSocket_localCertificate(handle: QSslSocketH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_localCertificate'; procedure QSslSocket_peerCertificate(handle: QSslSocketH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_peerCertificate'; procedure QSslSocket_sessionCipher(handle: QSslSocketH; retval: QSslCipherH); cdecl; external Qt4PasLib name 'QSslSocket_sessionCipher'; procedure QSslSocket_setPrivateKey(handle: QSslSocketH; key: QSslKeyH); cdecl; external Qt4PasLib name 'QSslSocket_setPrivateKey'; procedure QSslSocket_setPrivateKey(handle: QSslSocketH; fileName: PWideString; algorithm: QSslKeyAlgorithm = QSslRsa; format: QSslEncodingFormat = QSslPem; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslSocket_setPrivateKey2'; procedure QSslSocket_privateKey(handle: QSslSocketH; retval: QSslKeyH); cdecl; external Qt4PasLib name 'QSslSocket_privateKey'; procedure QSslSocket_setCiphers(handle: QSslSocketH; ciphers: PWideString); cdecl; external Qt4PasLib name 'QSslSocket_setCiphers'; procedure QSslSocket_addCaCertificate(handle: QSslSocketH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_addCaCertificate'; procedure QSslSocket_addDefaultCaCertificate(certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_addDefaultCaCertificate'; function QSslSocket_waitForConnected(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForConnected'; function QSslSocket_waitForEncrypted(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForEncrypted'; function QSslSocket_waitForReadyRead(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForReadyRead'; function QSslSocket_waitForBytesWritten(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForBytesWritten'; function QSslSocket_waitForDisconnected(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForDisconnected'; function QSslSocket_supportsSsl(): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_supportsSsl'; procedure QSslSocket_startClientEncryption(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_startClientEncryption'; procedure QSslSocket_startServerEncryption(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_startServerEncryption'; procedure QSslSocket_ignoreSslErrors(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_ignoreSslErrors'; type QNetworkAccessManagerOperation = ( //QNetworkAccessManager::Operation (2) QNetworkAccessManagerUnknownOperation = 0, QNetworkAccessManagerHeadOperation = 1, QNetworkAccessManagerGetOperation, QNetworkAccessManagerPutOperation, QNetworkAccessManagerPostOperation ); function QNetworkAccessManager_create(parent: QObjectH = nil): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_create'; procedure QNetworkAccessManager_destroy(handle: QNetworkAccessManagerH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_destroy'; procedure QNetworkAccessManager_proxy(handle: QNetworkAccessManagerH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_proxy'; procedure QNetworkAccessManager_setProxy(handle: QNetworkAccessManagerH; proxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setProxy'; function QNetworkAccessManager_proxyFactory(handle: QNetworkAccessManagerH): QNetworkProxyFactoryH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_proxyFactory'; procedure QNetworkAccessManager_setProxyFactory(handle: QNetworkAccessManagerH; factory: QNetworkProxyFactoryH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setProxyFactory'; function QNetworkAccessManager_cache(handle: QNetworkAccessManagerH): QAbstractNetworkCacheH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_cache'; procedure QNetworkAccessManager_setCache(handle: QNetworkAccessManagerH; cache: QAbstractNetworkCacheH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setCache'; function QNetworkAccessManager_cookieJar(handle: QNetworkAccessManagerH): QNetworkCookieJarH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_cookieJar'; procedure QNetworkAccessManager_setCookieJar(handle: QNetworkAccessManagerH; cookieJar: QNetworkCookieJarH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setCookieJar'; function QNetworkAccessManager_head(handle: QNetworkAccessManagerH; request: QNetworkRequestH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_head'; function QNetworkAccessManager_get(handle: QNetworkAccessManagerH; request: QNetworkRequestH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_get'; function QNetworkAccessManager_post(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QIODeviceH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_post'; function QNetworkAccessManager_post(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QByteArrayH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_post2'; function QNetworkAccessManager_put(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QIODeviceH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_put'; function QNetworkAccessManager_put(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QByteArrayH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_put2'; type QNetworkAccessManager_proxyAuthenticationRequired_Event = procedure (proxy: QNetworkProxyH; authenticator: QAuthenticatorH) of object cdecl; QNetworkAccessManager_authenticationRequired_Event = procedure (reply: QNetworkReplyH; authenticator: QAuthenticatorH) of object cdecl; QNetworkAccessManager_finished_Event = procedure (reply: QNetworkReplyH) of object cdecl; type QNetworkRequestKnownHeaders = ( // QNetworkRequest::KnownHeaders (1) QNetworkRequestContentTypeHeader, QNetworkRequestContentLengthHeader, QNetworkRequestLocationHeader, QNetworkRequestLastModifiedHeader, QNetworkRequestCookieHeader, QNetworkRequestSetCookieHeader ); QNetworkRequestCacheLoadControl = ( // QNetworkRequest::CacheLoadControl (1) QNetworkRequestAlwaysNetwork, QNetworkRequestPreferNetwork, QNetworkRequestPreferCache, QNetworkRequestAlwaysCache ); QNetworkRequestAttribute = ( //QNetworkRequest::Attribute (2) QNetworkRequestHttpStatusCodeAttribute, QNetworkRequestHttpReasonPhraseAttribute, QNetworkRequestRedirectionTargetAttribute, QNetworkRequestConnectionEncryptedAttribute, QNetworkRequestCacheLoadControlAttribute, QNetworkRequestCacheSaveControlAttribute, QNetworkRequestSourceIsFromCacheAttribute, QNetworkRequestUser = 1000, QNetworkRequestUserMax = 32767 ); function QNetworkRequest_create(url: QUrlH = nil): QNetworkRequestH; cdecl; external Qt4PasLib name 'QNetworkRequest_create'; procedure QNetworkRequest_destroy(handle: QNetworkRequestH); cdecl; external Qt4PasLib name 'QNetworkRequest_destroy'; function QNetworkRequest_create(other: QNetworkRequestH): QNetworkRequestH; cdecl; external Qt4PasLib name 'QNetworkRequest_create2'; procedure QNetworkRequest_url(handle: QNetworkRequestH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkRequest_url'; procedure QNetworkRequest_setUrl(handle: QNetworkRequestH; url: QUrlH); cdecl; external Qt4PasLib name 'QNetworkRequest_setUrl'; procedure QNetworkRequest_header(handle: QNetworkRequestH; retval: QVariantH; header: QNetworkRequestKnownHeaders); cdecl; external Qt4PasLib name 'QNetworkRequest_header'; procedure QNetworkRequest_setHeader(handle: QNetworkRequestH; header: QNetworkRequestKnownHeaders; value: QVariantH); cdecl; external Qt4PasLib name 'QNetworkRequest_setHeader'; function QNetworkRequest_hasRawHeader(handle: QNetworkRequestH; headerName: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QNetworkRequest_hasRawHeader'; procedure QNetworkRequest_rawHeader(handle: QNetworkRequestH; retval: QByteArrayH; headerName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkRequest_rawHeader'; procedure QNetworkRequest_setRawHeader(handle: QNetworkRequestH; headerName: QByteArrayH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkRequest_setRawHeader'; procedure QNetworkRequest_attribute(handle: QNetworkRequestH; retval: QVariantH; code: QNetworkRequestAttribute; defaultValue: QVariantH = nil); cdecl; external Qt4PasLib name 'QNetworkRequest_attribute'; procedure QNetworkRequest_setAttribute(handle: QNetworkRequestH; code: QNetworkRequestAttribute; value: QVariantH); cdecl; external Qt4PasLib name 'QNetworkRequest_setAttribute'; procedure QNetworkRequest_sslConfiguration(handle: QNetworkRequestH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkRequest_sslConfiguration'; procedure QNetworkRequest_setSslConfiguration(handle: QNetworkRequestH; configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkRequest_setSslConfiguration'; type QNetworkReplyNetworkError = ( //QNetworkReply::NetworkError (2) QNetworkReplyNoError = 0, QNetworkReplyConnectionRefusedError = 1, QNetworkReplyRemoteHostClosedError, QNetworkReplyHostNotFoundError, QNetworkReplyTimeoutError, QNetworkReplyOperationCanceledError, QNetworkReplySslHandshakeFailedError, QNetworkReplyUnknownNetworkError = 99, QNetworkReplyProxyConnectionRefusedError = 101, QNetworkReplyProxyConnectionClosedError, QNetworkReplyProxyNotFoundError, QNetworkReplyProxyTimeoutError, QNetworkReplyProxyAuthenticationRequiredError, QNetworkReplyUnknownProxyError = 199, QNetworkReplyContentAccessDenied = 201, QNetworkReplyContentOperationNotPermittedError, QNetworkReplyContentNotFoundError, QNetworkReplyAuthenticationRequiredError, QNetworkReplyUnknownContentError = 299, QNetworkReplyProtocolUnknownError = 301, QNetworkReplyProtocolInvalidOperationError, QNetworkReplyProtocolFailure = 399 ); procedure QNetworkReply_abort(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_abort'; procedure QNetworkReply_close(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_close'; function QNetworkReply_isSequential(handle: QNetworkReplyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkReply_isSequential'; function QNetworkReply_readBufferSize(handle: QNetworkReplyH): int64; cdecl; external Qt4PasLib name 'QNetworkReply_readBufferSize'; procedure QNetworkReply_setReadBufferSize(handle: QNetworkReplyH; size: int64); cdecl; external Qt4PasLib name 'QNetworkReply_setReadBufferSize'; function QNetworkReply_manager(handle: QNetworkReplyH): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QNetworkReply_manager'; function QNetworkReply_operation(handle: QNetworkReplyH): QNetworkAccessManagerOperation; cdecl; external Qt4PasLib name 'QNetworkReply_operation'; procedure QNetworkReply_request(handle: QNetworkReplyH; retval: QNetworkRequestH); cdecl; external Qt4PasLib name 'QNetworkReply_request'; function QNetworkReply_error(handle: QNetworkReplyH): QNetworkReplyNetworkError; cdecl; external Qt4PasLib name 'QNetworkReply_error'; procedure QNetworkReply_url(handle: QNetworkReplyH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkReply_url'; procedure QNetworkReply_header(handle: QNetworkReplyH; retval: QVariantH; header: QNetworkRequestKnownHeaders); cdecl; external Qt4PasLib name 'QNetworkReply_header'; function QNetworkReply_hasRawHeader(handle: QNetworkReplyH; headerName: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QNetworkReply_hasRawHeader'; procedure QNetworkReply_rawHeader(handle: QNetworkReplyH; retval: QByteArrayH; headerName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkReply_rawHeader'; procedure QNetworkReply_attribute(handle: QNetworkReplyH; retval: QVariantH; code: QNetworkRequestAttribute); cdecl; external Qt4PasLib name 'QNetworkReply_attribute'; procedure QNetworkReply_sslConfiguration(handle: QNetworkReplyH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkReply_sslConfiguration'; procedure QNetworkReply_setSslConfiguration(handle: QNetworkReplyH; configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkReply_setSslConfiguration'; procedure QNetworkReply_ignoreSslErrors(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_ignoreSslErrors'; type QNetworkReply_metaDataChanged_Event = procedure () of object cdecl; QNetworkReply_finished_Event = procedure () of object cdecl; QNetworkReply_error_Event = procedure (AnonParam1: QNetworkReplyNetworkError) of object cdecl; QNetworkReply_uploadProgress_Event = procedure (bytesSent: int64; bytesTotal: int64) of object cdecl; QNetworkReply_downloadProgress_Event = procedure (bytesReceived: int64; bytesTotal: int64) of object cdecl; type QNetworkCookieRawForm = ( // QNetworkCookie::RawForm (1) QNetworkCookieNameAndValueOnly, QNetworkCookieFull ); function QNetworkCookie_create(name: QByteArrayH = nil; value: QByteArrayH = nil): QNetworkCookieH; cdecl; external Qt4PasLib name 'QNetworkCookie_create'; procedure QNetworkCookie_destroy(handle: QNetworkCookieH); cdecl; external Qt4PasLib name 'QNetworkCookie_destroy'; function QNetworkCookie_create(other: QNetworkCookieH): QNetworkCookieH; cdecl; external Qt4PasLib name 'QNetworkCookie_create2'; function QNetworkCookie_isSecure(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isSecure'; procedure QNetworkCookie_setSecure(handle: QNetworkCookieH; enable: Boolean); cdecl; external Qt4PasLib name 'QNetworkCookie_setSecure'; function QNetworkCookie_isHttpOnly(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isHttpOnly'; procedure QNetworkCookie_setHttpOnly(handle: QNetworkCookieH; enable: Boolean); cdecl; external Qt4PasLib name 'QNetworkCookie_setHttpOnly'; function QNetworkCookie_isSessionCookie(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isSessionCookie'; procedure QNetworkCookie_expirationDate(handle: QNetworkCookieH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QNetworkCookie_expirationDate'; procedure QNetworkCookie_setExpirationDate(handle: QNetworkCookieH; date: QDateTimeH); cdecl; external Qt4PasLib name 'QNetworkCookie_setExpirationDate'; procedure QNetworkCookie_domain(handle: QNetworkCookieH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_domain'; procedure QNetworkCookie_setDomain(handle: QNetworkCookieH; domain: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_setDomain'; procedure QNetworkCookie_path(handle: QNetworkCookieH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_path'; procedure QNetworkCookie_setPath(handle: QNetworkCookieH; path: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_setPath'; procedure QNetworkCookie_name(handle: QNetworkCookieH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_name'; procedure QNetworkCookie_setName(handle: QNetworkCookieH; cookieName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_setName'; procedure QNetworkCookie_value(handle: QNetworkCookieH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_value'; procedure QNetworkCookie_setValue(handle: QNetworkCookieH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_setValue'; procedure QNetworkCookie_toRawForm(handle: QNetworkCookieH; retval: QByteArrayH; form: QNetworkCookieRawForm = QNetworkCookieFull); cdecl; external Qt4PasLib name 'QNetworkCookie_toRawForm'; function QNetworkCookieJar_create(parent: QObjectH = nil): QNetworkCookieJarH; cdecl; external Qt4PasLib name 'QNetworkCookieJar_create'; procedure QNetworkCookieJar_destroy(handle: QNetworkCookieJarH); cdecl; external Qt4PasLib name 'QNetworkCookieJar_destroy'; function QLCLNetworkCookieJar_create(parent: QObjectH = nil): QLCLNetworkCookieJarH; cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_create'; procedure QLCLNetworkCookieJar_destroy(handle: QLCLNetworkCookieJarH); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_destroy'; procedure QLCLNetworkCookieJar_setRawCookies(handle: QLCLNetworkCookieJarH; rawCookies: PAnsiChar); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_setRawCookies'; procedure QLCLNetworkCookieJar_getRawCookies(handle: QLCLNetworkCookieJarH; rawCookies: QByteArrayH); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_getRawCookies'; type QNetworkProxyQueryQueryType = ( //QNetworkProxyQuery::QueryType (2) QNetworkProxyQueryTcpSocket, QNetworkProxyQueryUdpSocket, QNetworkProxyQueryTcpServer = 100, QNetworkProxyQueryUrlRequest ); type QNetworkProxyProxyType = ( // QNetworkProxy::ProxyType (1) QNetworkProxyDefaultProxy, QNetworkProxySocks5Proxy, QNetworkProxyNoProxy, QNetworkProxyHttpProxy, QNetworkProxyHttpCachingProxy, QNetworkProxyFtpCachingProxy ); type QNetworkProxyCapability = cardinal; // QNetworkProxy::Capability QNetworkProxyCapabilities = QNetworkProxyCapability; //QFlags<> (3) const QNetworkProxyTunnelingCapability = $0001; QNetworkProxyListeningCapability = $0002; QNetworkProxyUdpTunnelingCapability = $0004; QNetworkProxyCachingCapability = $0008; QNetworkProxyHostNameLookupCapability = $0010; function QNetworkProxyQuery_create(): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create'; procedure QNetworkProxyQuery_destroy(handle: QNetworkProxyQueryH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_destroy'; function QNetworkProxyQuery_create(requestUrl: QUrlH; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryUrlRequest): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create2'; function QNetworkProxyQuery_create(hostname: PWideString; port: Integer; protocolTag: PWideString = nil; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryTcpSocket): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create3'; function QNetworkProxyQuery_create(bindPort: Word; protocolTag: PWideString = nil; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryTcpServer): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create4'; function QNetworkProxyQuery_create(other: QNetworkProxyQueryH): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create5'; function QNetworkProxyQuery_queryType(handle: QNetworkProxyQueryH): QNetworkProxyQueryQueryType; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_queryType'; procedure QNetworkProxyQuery_setQueryType(handle: QNetworkProxyQueryH; _type: QNetworkProxyQueryQueryType); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setQueryType'; function QNetworkProxyQuery_peerPort(handle: QNetworkProxyQueryH): Integer; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_peerPort'; procedure QNetworkProxyQuery_setPeerPort(handle: QNetworkProxyQueryH; port: Integer); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setPeerPort'; procedure QNetworkProxyQuery_peerHostName(handle: QNetworkProxyQueryH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_peerHostName'; procedure QNetworkProxyQuery_setPeerHostName(handle: QNetworkProxyQueryH; hostname: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setPeerHostName'; function QNetworkProxyQuery_localPort(handle: QNetworkProxyQueryH): Integer; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_localPort'; procedure QNetworkProxyQuery_setLocalPort(handle: QNetworkProxyQueryH; port: Integer); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setLocalPort'; procedure QNetworkProxyQuery_protocolTag(handle: QNetworkProxyQueryH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_protocolTag'; procedure QNetworkProxyQuery_setProtocolTag(handle: QNetworkProxyQueryH; protocolTag: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setProtocolTag'; procedure QNetworkProxyQuery_url(handle: QNetworkProxyQueryH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_url'; procedure QNetworkProxyQuery_setUrl(handle: QNetworkProxyQueryH; url: QUrlH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setUrl'; function QNetworkProxy_create(): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create'; procedure QNetworkProxy_destroy(handle: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_destroy'; function QNetworkProxy_create(_type: QNetworkProxyProxyType; hostName: PWideString = nil; port: Word = 0; user: PWideString = nil; password: PWideString = nil): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create2'; function QNetworkProxy_create(other: QNetworkProxyH): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create3'; procedure QNetworkProxy_setType(handle: QNetworkProxyH; _type: QNetworkProxyProxyType); cdecl; external Qt4PasLib name 'QNetworkProxy_setType'; function QNetworkProxy_type(handle: QNetworkProxyH): QNetworkProxyProxyType; cdecl; external Qt4PasLib name 'QNetworkProxy_type'; procedure QNetworkProxy_setCapabilities(handle: QNetworkProxyH; capab: QNetworkProxyCapabilities); cdecl; external Qt4PasLib name 'QNetworkProxy_setCapabilities'; function QNetworkProxy_capabilities(handle: QNetworkProxyH): QNetworkProxyCapabilities; cdecl; external Qt4PasLib name 'QNetworkProxy_capabilities'; function QNetworkProxy_isCachingProxy(handle: QNetworkProxyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkProxy_isCachingProxy'; function QNetworkProxy_isTransparentProxy(handle: QNetworkProxyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkProxy_isTransparentProxy'; procedure QNetworkProxy_setUser(handle: QNetworkProxyH; userName: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setUser'; procedure QNetworkProxy_user(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_user'; procedure QNetworkProxy_setPassword(handle: QNetworkProxyH; password: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setPassword'; procedure QNetworkProxy_password(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_password'; procedure QNetworkProxy_setHostName(handle: QNetworkProxyH; hostName: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setHostName'; procedure QNetworkProxy_hostName(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_hostName'; procedure QNetworkProxy_setPort(handle: QNetworkProxyH; port: Word); cdecl; external Qt4PasLib name 'QNetworkProxy_setPort'; function QNetworkProxy_port(handle: QNetworkProxyH): Word; cdecl; external Qt4PasLib name 'QNetworkProxy_port'; procedure QNetworkProxy_setApplicationProxy(proxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_setApplicationProxy'; procedure QNetworkProxy_applicationProxy(retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_applicationProxy'; procedure QNetworkProxyFactory_setApplicationProxyFactory(factory: QNetworkProxyFactoryH); cdecl; external Qt4PasLib name 'QNetworkProxyFactory_setApplicationProxyFactory'; function QAuthenticator_create(): QAuthenticatorH; cdecl; external Qt4PasLib name 'QAuthenticator_create'; procedure QAuthenticator_destroy(handle: QAuthenticatorH); cdecl; external Qt4PasLib name 'QAuthenticator_destroy'; function QAuthenticator_create(other: QAuthenticatorH): QAuthenticatorH; cdecl; external Qt4PasLib name 'QAuthenticator_create2'; procedure QAuthenticator_user(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_user'; procedure QAuthenticator_setUser(handle: QAuthenticatorH; user: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_setUser'; procedure QAuthenticator_password(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_password'; procedure QAuthenticator_setPassword(handle: QAuthenticatorH; password: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_setPassword'; procedure QAuthenticator_realm(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_realm'; function QAuthenticator_isNull(handle: QAuthenticatorH): Boolean; cdecl; external Qt4PasLib name 'QAuthenticator_isNull'; procedure QAuthenticator_detach(handle: QAuthenticatorH); cdecl; external Qt4PasLib name 'QAuthenticator_detach'; function QWebHitTestResult_create(): QWebHitTestResultH; cdecl; external Qt4PasLib name 'QWebHitTestResult_create'; procedure QWebHitTestResult_destroy(handle: QWebHitTestResultH); cdecl; external Qt4PasLib name 'QWebHitTestResult_destroy'; function QWebHitTestResult_create(other: QWebHitTestResultH): QWebHitTestResultH; cdecl; external Qt4PasLib name 'QWebHitTestResult_create2'; function QWebHitTestResult_isNull(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isNull'; procedure QWebHitTestResult_pos(handle: QWebHitTestResultH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebHitTestResult_pos'; procedure QWebHitTestResult_boundingRect(handle: QWebHitTestResultH; retval: PRect); cdecl; external Qt4PasLib name 'QWebHitTestResult_boundingRect'; procedure QWebHitTestResult_title(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_title'; procedure QWebHitTestResult_linkText(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkText'; procedure QWebHitTestResult_linkUrl(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkUrl'; procedure QWebHitTestResult_linkTitle(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkTitle'; function QWebHitTestResult_linkTargetFrame(handle: QWebHitTestResultH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebHitTestResult_linkTargetFrame'; procedure QWebHitTestResult_alternateText(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_alternateText'; procedure QWebHitTestResult_imageUrl(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_imageUrl'; procedure QWebHitTestResult_pixmap(handle: QWebHitTestResultH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QWebHitTestResult_pixmap'; function QWebHitTestResult_isContentEditable(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isContentEditable'; function QWebHitTestResult_isContentSelected(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isContentSelected'; function QWebHitTestResult_frame(handle: QWebHitTestResultH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebHitTestResult_frame'; function QWebFrame_page(handle: QWebFrameH): QWebPageH; cdecl; external Qt4PasLib name 'QWebFrame_page'; procedure QWebFrame_load(handle: QWebFrameH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_load'; procedure QWebFrame_load(handle: QWebFrameH; request: QNetworkRequestH; operation: QNetworkAccessManagerOperation = QNetworkAccessManagerGetOperation; body: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QWebFrame_load2'; procedure QWebFrame_setHtml(handle: QWebFrameH; html: PWideString; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebFrame_setHtml'; procedure QWebFrame_setContent(handle: QWebFrameH; data: QByteArrayH; mimeType: PWideString = nil; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebFrame_setContent'; procedure QWebFrame_addToJavaScriptWindowObject(handle: QWebFrameH; name: PWideString; _object: QObjectH); cdecl; external Qt4PasLib name 'QWebFrame_addToJavaScriptWindowObject'; procedure QWebFrame_toHtml(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_toHtml'; procedure QWebFrame_toPlainText(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_toPlainText'; procedure QWebFrame_renderTreeDump(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_renderTreeDump'; procedure QWebFrame_title(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_title'; procedure QWebFrame_setUrl(handle: QWebFrameH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_setUrl'; procedure QWebFrame_url(handle: QWebFrameH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_url'; procedure QWebFrame_icon(handle: QWebFrameH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebFrame_icon'; procedure QWebFrame_frameName(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_frameName'; function QWebFrame_parentFrame(handle: QWebFrameH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebFrame_parentFrame'; procedure QWebFrame_childFrames(handle: QWebFrameH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebFrame_childFrames'; function QWebFrame_scrollBarPolicy(handle: QWebFrameH; orientation: QtOrientation): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarPolicy'; procedure QWebFrame_setScrollBarPolicy(handle: QWebFrameH; orientation: QtOrientation; policy: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QWebFrame_setScrollBarPolicy'; procedure QWebFrame_setScrollBarValue(handle: QWebFrameH; orientation: QtOrientation; value: Integer); cdecl; external Qt4PasLib name 'QWebFrame_setScrollBarValue'; function QWebFrame_scrollBarValue(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarValue'; function QWebFrame_scrollBarMinimum(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarMinimum'; function QWebFrame_scrollBarMaximum(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarMaximum'; procedure QWebFrame_scroll(handle: QWebFrameH; AnonParam1: Integer; AnonParam2: Integer); cdecl; external Qt4PasLib name 'QWebFrame_scroll'; procedure QWebFrame_scrollPosition(handle: QWebFrameH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_scrollPosition'; procedure QWebFrame_setScrollPosition(handle: QWebFrameH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_setScrollPosition'; procedure QWebFrame_render(handle: QWebFrameH; painter: QPainterH; clip: QRegionH); cdecl; external Qt4PasLib name 'QWebFrame_render'; procedure QWebFrame_render(handle: QWebFrameH; painter: QPainterH); cdecl; external Qt4PasLib name 'QWebFrame_render2'; procedure QWebFrame_setTextSizeMultiplier(handle: QWebFrameH; factor: qreal); cdecl; external Qt4PasLib name 'QWebFrame_setTextSizeMultiplier'; function QWebFrame_textSizeMultiplier(handle: QWebFrameH): qreal; cdecl; external Qt4PasLib name 'QWebFrame_textSizeMultiplier'; function QWebFrame_zoomFactor(handle: QWebFrameH): qreal; cdecl; external Qt4PasLib name 'QWebFrame_zoomFactor'; procedure QWebFrame_setZoomFactor(handle: QWebFrameH; factor: qreal); cdecl; external Qt4PasLib name 'QWebFrame_setZoomFactor'; procedure QWebFrame_pos(handle: QWebFrameH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_pos'; procedure QWebFrame_geometry(handle: QWebFrameH; retval: PRect); cdecl; external Qt4PasLib name 'QWebFrame_geometry'; procedure QWebFrame_contentsSize(handle: QWebFrameH; retval: PSize); cdecl; external Qt4PasLib name 'QWebFrame_contentsSize'; procedure QWebFrame_hitTestContent(handle: QWebFrameH; retval: QWebHitTestResultH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_hitTestContent'; function QWebFrame_event(handle: QWebFrameH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebFrame_event'; procedure QWebFrame_evaluateJavaScript(handle: QWebFrameH; retval: QVariantH; scriptSource: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_evaluateJavaScript'; procedure QWebFrame_print(handle: QWebFrameH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QWebFrame_print'; type QWebFrame_javaScriptWindowObjectCleared_Event = procedure () of object cdecl; QWebFrame_provisionalLoad_Event = procedure () of object cdecl; QWebFrame_titleChanged_Event = procedure (title: PWideString) of object cdecl; QWebFrame_urlChanged_Event = procedure (url: QUrlH) of object cdecl; QWebFrame_initialLayoutCompleted_Event = procedure () of object cdecl; QWebFrame_iconChanged_Event = procedure () of object cdecl; procedure QWebSecurityOrigin_allOrigins(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_allOrigins'; procedure QWebSecurityOrigin_scheme(handle: QWebSecurityOriginH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_scheme'; procedure QWebSecurityOrigin_host(handle: QWebSecurityOriginH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_host'; function QWebSecurityOrigin_port(handle: QWebSecurityOriginH): Integer; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_port'; function QWebSecurityOrigin_databaseUsage(handle: QWebSecurityOriginH): int64; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databaseUsage'; function QWebSecurityOrigin_databaseQuota(handle: QWebSecurityOriginH): int64; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databaseQuota'; procedure QWebSecurityOrigin_setDatabaseQuota(handle: QWebSecurityOriginH; quota: int64); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_setDatabaseQuota'; procedure QWebSecurityOrigin_databases(handle: QWebSecurityOriginH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databases'; function QWebSecurityOrigin_create(other: QWebSecurityOriginH): QWebSecurityOriginH; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_create'; procedure QWebSecurityOrigin_destroy(handle: QWebSecurityOriginH); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_destroy'; function QWebDatabase_create(other: QWebDatabaseH): QWebDatabaseH; cdecl; external Qt4PasLib name 'QWebDatabase_create'; procedure QWebDatabase_destroy(handle: QWebDatabaseH); cdecl; external Qt4PasLib name 'QWebDatabase_destroy'; procedure QWebDatabase_name(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_name'; procedure QWebDatabase_displayName(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_displayName'; function QWebDatabase_expectedSize(handle: QWebDatabaseH): int64; cdecl; external Qt4PasLib name 'QWebDatabase_expectedSize'; function QWebDatabase_size(handle: QWebDatabaseH): int64; cdecl; external Qt4PasLib name 'QWebDatabase_size'; procedure QWebDatabase_fileName(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_fileName'; procedure QWebDatabase_origin(handle: QWebDatabaseH; retval: QWebSecurityOriginH); cdecl; external Qt4PasLib name 'QWebDatabase_origin'; procedure QWebDatabase_removeDatabase(db: QWebDatabaseH); cdecl; external Qt4PasLib name 'QWebDatabase_removeDatabase'; function QWebHistoryItem_create(other: QWebHistoryItemH): QWebHistoryItemH; cdecl; external Qt4PasLib name 'QWebHistoryItem_create'; procedure QWebHistoryItem_destroy(handle: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistoryItem_destroy'; procedure QWebHistoryItem_originalUrl(handle: QWebHistoryItemH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHistoryItem_originalUrl'; procedure QWebHistoryItem_url(handle: QWebHistoryItemH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHistoryItem_url'; procedure QWebHistoryItem_title(handle: QWebHistoryItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHistoryItem_title'; procedure QWebHistoryItem_lastVisited(handle: QWebHistoryItemH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QWebHistoryItem_lastVisited'; procedure QWebHistoryItem_icon(handle: QWebHistoryItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebHistoryItem_icon'; procedure QWebHistoryItem_userData(handle: QWebHistoryItemH; retval: QVariantH); cdecl; external Qt4PasLib name 'QWebHistoryItem_userData'; procedure QWebHistoryItem_setUserData(handle: QWebHistoryItemH; userData: QVariantH); cdecl; external Qt4PasLib name 'QWebHistoryItem_setUserData'; function QWebHistoryItem_isValid(handle: QWebHistoryItemH): Boolean; cdecl; external Qt4PasLib name 'QWebHistoryItem_isValid'; procedure QWebHistory_clear(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_clear'; procedure QWebHistory_items(handle: QWebHistoryH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebHistory_items'; procedure QWebHistory_backItems(handle: QWebHistoryH; retval: PPtrIntArray; maxItems: Integer); cdecl; external Qt4PasLib name 'QWebHistory_backItems'; procedure QWebHistory_forwardItems(handle: QWebHistoryH; retval: PPtrIntArray; maxItems: Integer); cdecl; external Qt4PasLib name 'QWebHistory_forwardItems'; function QWebHistory_canGoBack(handle: QWebHistoryH): Boolean; cdecl; external Qt4PasLib name 'QWebHistory_canGoBack'; function QWebHistory_canGoForward(handle: QWebHistoryH): Boolean; cdecl; external Qt4PasLib name 'QWebHistory_canGoForward'; procedure QWebHistory_back(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_back'; procedure QWebHistory_forward(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_forward'; procedure QWebHistory_goToItem(handle: QWebHistoryH; item: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_goToItem'; procedure QWebHistory_backItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_backItem'; procedure QWebHistory_currentItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_currentItem'; procedure QWebHistory_forwardItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_forwardItem'; procedure QWebHistory_itemAt(handle: QWebHistoryH; retval: QWebHistoryItemH; i: Integer); cdecl; external Qt4PasLib name 'QWebHistory_itemAt'; function QWebHistory_currentItemIndex(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_currentItemIndex'; function QWebHistory_count(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_count'; function QWebHistory_maximumItemCount(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_maximumItemCount'; procedure QWebHistory_setMaximumItemCount(handle: QWebHistoryH; count: Integer); cdecl; external Qt4PasLib name 'QWebHistory_setMaximumItemCount'; procedure QWebHistoryInterface_setDefaultInterface(defaultInterface: QWebHistoryInterfaceH); cdecl; external Qt4PasLib name 'QWebHistoryInterface_setDefaultInterface'; function QWebHistoryInterface_defaultInterface(): QWebHistoryInterfaceH; cdecl; external Qt4PasLib name 'QWebHistoryInterface_defaultInterface'; function QWebHistoryInterface_historyContains(handle: QWebHistoryInterfaceH; url: PWideString): Boolean; cdecl; external Qt4PasLib name 'QWebHistoryInterface_historyContains'; procedure QWebHistoryInterface_addHistoryEntry(handle: QWebHistoryInterfaceH; url: PWideString); cdecl; external Qt4PasLib name 'QWebHistoryInterface_addHistoryEntry'; type QWebPageNavigationType = ( // QWebPage::NavigationType (1) QWebPageNavigationTypeLinkClicked, QWebPageNavigationTypeFormSubmitted, QWebPageNavigationTypeBackOrForward, QWebPageNavigationTypeReload, QWebPageNavigationTypeFormResubmitted, QWebPageNavigationTypeOther ); QWebPageLinkDelegationPolicy = ( // QWebPage::LinkDelegationPolicy (1) QWebPageDontDelegateLinks, QWebPageDelegateExternalLinks, QWebPageDelegateAllLinks ); QWebPageWebWindowType = ( // QWebPage::WebWindowType (1) QWebPageWebBrowserWindow, QWebPageWebModalDialog ); QWebPageExtension = ( // QWebPage::Extension (1) QWebPageChooseMultipleFilesExtension ); QWebPageWebAction = ( //QWebPage::WebAction (2) QWebPageNoWebAction = -1, QWebPageOpenLink, QWebPageOpenLinkInNewWindow, QWebPageOpenFrameInNewWindow, QWebPageDownloadLinkToDisk, QWebPageCopyLinkToClipboard, QWebPageOpenImageInNewWindow, QWebPageDownloadImageToDisk, QWebPageCopyImageToClipboard, QWebPageBack, QWebPageForward, QWebPageStop, QWebPageReload, QWebPageCut, QWebPageCopy, QWebPagePaste, QWebPageUndo, QWebPageRedo, QWebPageMoveToNextChar, QWebPageMoveToPreviousChar, QWebPageMoveToNextWord, QWebPageMoveToPreviousWord, QWebPageMoveToNextLine, QWebPageMoveToPreviousLine, QWebPageMoveToStartOfLine, QWebPageMoveToEndOfLine, QWebPageMoveToStartOfBlock, QWebPageMoveToEndOfBlock, QWebPageMoveToStartOfDocument, QWebPageMoveToEndOfDocument, QWebPageSelectNextChar, QWebPageSelectPreviousChar, QWebPageSelectNextWord, QWebPageSelectPreviousWord, QWebPageSelectNextLine, QWebPageSelectPreviousLine, QWebPageSelectStartOfLine, QWebPageSelectEndOfLine, QWebPageSelectStartOfBlock, QWebPageSelectEndOfBlock, QWebPageSelectStartOfDocument, QWebPageSelectEndOfDocument, QWebPageDeleteStartOfWord, QWebPageDeleteEndOfWord, QWebPageSetTextDirectionDefault, QWebPageSetTextDirectionLeftToRight, QWebPageSetTextDirectionRightToLeft, QWebPageToggleBold, QWebPageToggleItalic, QWebPageToggleUnderline, QWebPageInspectElement, QWebPageInsertParagraphSeparator, QWebPageInsertLineSeparator, QWebPageSelectAll, QWebPageWebActionCount ); type QWebPageFindFlag = cardinal; // QWebPage::FindFlag QWebPageFindFlags = QWebPageFindFlag; //QFlags<> (3) const QWebPageFindBackward = 1; QWebPageFindCaseSensitively = 2; QWebPageFindWrapsAroundDocument = 4; function QWebPage_create(parent: QObjectH = nil): QWebPageH; cdecl; external Qt4PasLib name 'QWebPage_create'; procedure QWebPage_destroy(handle: QWebPageH); cdecl; external Qt4PasLib name 'QWebPage_destroy'; function QWebPage_mainFrame(handle: QWebPageH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebPage_mainFrame'; function QWebPage_currentFrame(handle: QWebPageH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebPage_currentFrame'; function QWebPage_history(handle: QWebPageH): QWebHistoryH; cdecl; external Qt4PasLib name 'QWebPage_history'; function QWebPage_settings(handle: QWebPageH): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebPage_settings'; procedure QWebPage_setView(handle: QWebPageH; view: QWidgetH); cdecl; external Qt4PasLib name 'QWebPage_setView'; function QWebPage_view(handle: QWebPageH): QWidgetH; cdecl; external Qt4PasLib name 'QWebPage_view'; function QWebPage_isModified(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_isModified'; function QWebPage_undoStack(handle: QWebPageH): QUndoStackH; cdecl; external Qt4PasLib name 'QWebPage_undoStack'; procedure QWebPage_setNetworkAccessManager(handle: QWebPageH; manager: QNetworkAccessManagerH); cdecl; external Qt4PasLib name 'QWebPage_setNetworkAccessManager'; function QWebPage_networkAccessManager(handle: QWebPageH): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QWebPage_networkAccessManager'; procedure QWebPage_setPluginFactory(handle: QWebPageH; factory: QWebPluginFactoryH); cdecl; external Qt4PasLib name 'QWebPage_setPluginFactory'; function QWebPage_pluginFactory(handle: QWebPageH): QWebPluginFactoryH; cdecl; external Qt4PasLib name 'QWebPage_pluginFactory'; function QWebPage_totalBytes(handle: QWebPageH): qword; cdecl; external Qt4PasLib name 'QWebPage_totalBytes'; function QWebPage_bytesReceived(handle: QWebPageH): qword; cdecl; external Qt4PasLib name 'QWebPage_bytesReceived'; procedure QWebPage_selectedText(handle: QWebPageH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebPage_selectedText'; function QWebPage_action(handle: QWebPageH; action: QWebPageWebAction): QActionH; cdecl; external Qt4PasLib name 'QWebPage_action'; procedure QWebPage_triggerAction(handle: QWebPageH; action: QWebPageWebAction; checked: Boolean = False); cdecl; external Qt4PasLib name 'QWebPage_triggerAction'; procedure QWebPage_viewportSize(handle: QWebPageH; retval: PSize); cdecl; external Qt4PasLib name 'QWebPage_viewportSize'; procedure QWebPage_setViewportSize(handle: QWebPageH; size: PSize); cdecl; external Qt4PasLib name 'QWebPage_setViewportSize'; function QWebPage_event(handle: QWebPageH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_event'; function QWebPage_focusNextPrevChild(handle: QWebPageH; next: Boolean): Boolean; cdecl; external Qt4PasLib name 'QWebPage_focusNextPrevChild'; procedure QWebPage_inputMethodQuery(handle: QWebPageH; retval: QVariantH; _property: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWebPage_inputMethodQuery'; function QWebPage_findText(handle: QWebPageH; subString: PWideString; options: QWebPageFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QWebPage_findText'; procedure QWebPage_setForwardUnsupportedContent(handle: QWebPageH; forward: Boolean); cdecl; external Qt4PasLib name 'QWebPage_setForwardUnsupportedContent'; function QWebPage_forwardUnsupportedContent(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_forwardUnsupportedContent'; procedure QWebPage_setLinkDelegationPolicy(handle: QWebPageH; policy: QWebPageLinkDelegationPolicy); cdecl; external Qt4PasLib name 'QWebPage_setLinkDelegationPolicy'; function QWebPage_linkDelegationPolicy(handle: QWebPageH): QWebPageLinkDelegationPolicy; cdecl; external Qt4PasLib name 'QWebPage_linkDelegationPolicy'; procedure QWebPage_setPalette(handle: QWebPageH; palette: QPaletteH); cdecl; external Qt4PasLib name 'QWebPage_setPalette'; procedure QWebPage_palette(handle: QWebPageH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QWebPage_palette'; procedure QWebPage_setContentEditable(handle: QWebPageH; editable: Boolean); cdecl; external Qt4PasLib name 'QWebPage_setContentEditable'; function QWebPage_isContentEditable(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_isContentEditable'; function QWebPage_swallowContextMenuEvent(handle: QWebPageH; event: QContextMenuEventH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_swallowContextMenuEvent'; procedure QWebPage_updatePositionDependentActions(handle: QWebPageH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebPage_updatePositionDependentActions'; function QWebPage_createStandardContextMenu(handle: QWebPageH): QMenuH; cdecl; external Qt4PasLib name 'QWebPage_createStandardContextMenu'; function QWebPage_supportsExtension(handle: QWebPageH; extension: QWebPageExtension): Boolean; cdecl; external Qt4PasLib name 'QWebPage_supportsExtension'; type QWebPage_loadStarted_Event = procedure () of object cdecl; QWebPage_loadProgress_Event = procedure (progress: Integer) of object cdecl; QWebPage_loadFinished_Event = procedure (ok: Boolean) of object cdecl; QWebPage_linkHovered_Event = procedure (link: PWideString; title: PWideString; textContent: PWideString) of object cdecl; QWebPage_statusBarMessage_Event = procedure (text: PWideString) of object cdecl; QWebPage_selectionChanged_Event = procedure () of object cdecl; QWebPage_frameCreated_Event = procedure (frame: QWebFrameH) of object cdecl; QWebPage_geometryChangeRequested_Event = procedure (geom: PRect) of object cdecl; QWebPage_repaintRequested_Event = procedure (dirtyRect: PRect) of object cdecl; QWebPage_scrollRequested_Event = procedure (dx: Integer; dy: Integer; scrollViewRect: PRect) of object cdecl; QWebPage_windowCloseRequested_Event = procedure () of object cdecl; QWebPage_printRequested_Event = procedure (frame: QWebFrameH) of object cdecl; QWebPage_linkClicked_Event = procedure (url: QUrlH) of object cdecl; QWebPage_toolBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_statusBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_menuBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_unsupportedContent_Event = procedure (reply: QNetworkReplyH) of object cdecl; QWebPage_downloadRequested_Event = procedure (request: QNetworkRequestH) of object cdecl; QWebPage_microFocusChanged_Event = procedure () of object cdecl; QWebPage_contentsChanged_Event = procedure () of object cdecl; QWebPage_databaseQuotaExceeded_Event = procedure (frame: QWebFrameH; databaseName: PWideString) of object cdecl; QWebPage_saveFrameStateRequested_Event = procedure (frame: QWebFrameH; item: QWebHistoryItemH) of object cdecl; QWebPage_restoreFrameStateRequested_Event = procedure (frame: QWebFrameH) of object cdecl; function QLCLWebPage_create(parent: QObjectH = nil): QLCLWebPageH; cdecl; external Qt4PasLib name 'QLCLWebPage_create'; procedure QLCLWebPage_destroy(handle: QLCLWebPageH); cdecl; external Qt4PasLib name 'QLCLWebPage_destroy'; procedure QLCLWebPage_override_userAgentForUrl(handle: QLCLWebPageH; hook: QLCLWebPage_userAgentForUrl_Override); cdecl; external Qt4PasLib name 'QLCLWebPage_override_userAgentForUrl'; procedure QLCLWebPage_DefaultUserAgentForUrl(handle: QLCLWebPageH; retval: PWideString; url: QUrlH); cdecl; external Qt4PasLib name 'QLCLWebPage_DefaultUserAgentForUrl'; type QWebSettingsFontFamily = ( // QWebSettings::FontFamily (1) QWebSettingsStandardFont, QWebSettingsFixedFont, QWebSettingsSerifFont, QWebSettingsSansSerifFont, QWebSettingsCursiveFont, QWebSettingsFantasyFont ); QWebSettingsWebAttribute = ( // QWebSettings::WebAttribute (1) QWebSettingsAutoLoadImages, QWebSettingsJavascriptEnabled, QWebSettingsJavaEnabled, QWebSettingsPluginsEnabled, QWebSettingsPrivateBrowsingEnabled, QWebSettingsJavascriptCanOpenWindows, QWebSettingsJavascriptCanAccessClipboard, QWebSettingsDeveloperExtrasEnabled, QWebSettingsLinksIncludedInFocusChain, QWebSettingsZoomTextOnly, QWebSettingsPrintElementBackgrounds, QWebSettingsOfflineStorageDatabaseEnabled, QWebSettingsOfflineWebApplicationCacheEnabled, QWebSettingsLocalStorageDatabaseEnabled ); QWebSettingsWebGraphic = ( // QWebSettings::WebGraphic (1) QWebSettingsMissingImageGraphic, QWebSettingsMissingPluginGraphic, QWebSettingsDefaultFrameIconGraphic, QWebSettingsTextAreaSizeGripCornerGraphic ); QWebSettingsFontSize = ( // QWebSettings::FontSize (1) QWebSettingsMinimumFontSize, QWebSettingsMinimumLogicalFontSize, QWebSettingsDefaultFontSize, QWebSettingsDefaultFixedFontSize ); function QWebSettings_globalSettings(): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebSettings_globalSettings'; procedure QWebSettings_setFontFamily(handle: QWebSettingsH; which: QWebSettingsFontFamily; family: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setFontFamily'; procedure QWebSettings_fontFamily(handle: QWebSettingsH; retval: PWideString; which: QWebSettingsFontFamily); cdecl; external Qt4PasLib name 'QWebSettings_fontFamily'; procedure QWebSettings_resetFontFamily(handle: QWebSettingsH; which: QWebSettingsFontFamily); cdecl; external Qt4PasLib name 'QWebSettings_resetFontFamily'; procedure QWebSettings_setFontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize; size: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setFontSize'; function QWebSettings_fontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize): Integer; cdecl; external Qt4PasLib name 'QWebSettings_fontSize'; procedure QWebSettings_resetFontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize); cdecl; external Qt4PasLib name 'QWebSettings_resetFontSize'; procedure QWebSettings_setAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute; _on: Boolean); cdecl; external Qt4PasLib name 'QWebSettings_setAttribute'; function QWebSettings_testAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute): Boolean; cdecl; external Qt4PasLib name 'QWebSettings_testAttribute'; procedure QWebSettings_resetAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute); cdecl; external Qt4PasLib name 'QWebSettings_resetAttribute'; procedure QWebSettings_setUserStyleSheetUrl(handle: QWebSettingsH; location: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_setUserStyleSheetUrl'; procedure QWebSettings_userStyleSheetUrl(handle: QWebSettingsH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_userStyleSheetUrl'; procedure QWebSettings_setIconDatabasePath(location: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setIconDatabasePath'; procedure QWebSettings_iconDatabasePath(retval: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_iconDatabasePath'; procedure QWebSettings_clearIconDatabase(); cdecl; external Qt4PasLib name 'QWebSettings_clearIconDatabase'; procedure QWebSettings_iconForUrl(retval: QIconH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_iconForUrl'; procedure QWebSettings_setWebGraphic(_type: QWebSettingsWebGraphic; graphic: QPixmapH); cdecl; external Qt4PasLib name 'QWebSettings_setWebGraphic'; procedure QWebSettings_webGraphic(retval: QPixmapH; _type: QWebSettingsWebGraphic); cdecl; external Qt4PasLib name 'QWebSettings_webGraphic'; procedure QWebSettings_setMaximumPagesInCache(pages: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setMaximumPagesInCache'; function QWebSettings_maximumPagesInCache(): Integer; cdecl; external Qt4PasLib name 'QWebSettings_maximumPagesInCache'; procedure QWebSettings_setObjectCacheCapacities(cacheMinDeadCapacity: Integer; cacheMaxDead: Integer; totalCapacity: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setObjectCacheCapacities'; procedure QWebSettings_setOfflineStoragePath(path: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setOfflineStoragePath'; procedure QWebSettings_offlineStoragePath(retval: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_offlineStoragePath'; procedure QWebSettings_setOfflineStorageDefaultQuota(maximumSize: int64); cdecl; external Qt4PasLib name 'QWebSettings_setOfflineStorageDefaultQuota'; function QWebSettings_offlineStorageDefaultQuota(): int64; cdecl; external Qt4PasLib name 'QWebSettings_offlineStorageDefaultQuota'; function QWebView_create(parent: QWidgetH = nil): QWebViewH; cdecl; external Qt4PasLib name 'QWebView_create'; procedure QWebView_destroy(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_destroy'; function QWebView_page(handle: QWebViewH): QWebPageH; cdecl; external Qt4PasLib name 'QWebView_page'; procedure QWebView_setPage(handle: QWebViewH; page: QWebPageH); cdecl; external Qt4PasLib name 'QWebView_setPage'; procedure QWebView_load(handle: QWebViewH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebView_load'; procedure QWebView_load(handle: QWebViewH; request: QNetworkRequestH; operation: QNetworkAccessManagerOperation = QNetworkAccessManagerGetOperation; body: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QWebView_load2'; procedure QWebView_setHtml(handle: QWebViewH; html: PWideString; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebView_setHtml'; procedure QWebView_setContent(handle: QWebViewH; data: QByteArrayH; mimeType: PWideString = nil; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebView_setContent'; function QWebView_history(handle: QWebViewH): QWebHistoryH; cdecl; external Qt4PasLib name 'QWebView_history'; function QWebView_settings(handle: QWebViewH): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebView_settings'; procedure QWebView_title(handle: QWebViewH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebView_title'; procedure QWebView_setUrl(handle: QWebViewH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebView_setUrl'; procedure QWebView_url(handle: QWebViewH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebView_url'; procedure QWebView_icon(handle: QWebViewH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebView_icon'; procedure QWebView_selectedText(handle: QWebViewH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebView_selectedText'; function QWebView_pageAction(handle: QWebViewH; action: QWebPageWebAction): QActionH; cdecl; external Qt4PasLib name 'QWebView_pageAction'; procedure QWebView_triggerPageAction(handle: QWebViewH; action: QWebPageWebAction; checked: Boolean = False); cdecl; external Qt4PasLib name 'QWebView_triggerPageAction'; function QWebView_isModified(handle: QWebViewH): Boolean; cdecl; external Qt4PasLib name 'QWebView_isModified'; procedure QWebView_inputMethodQuery(handle: QWebViewH; retval: QVariantH; _property: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWebView_inputMethodQuery'; procedure QWebView_sizeHint(handle: QWebViewH; retval: PSize); cdecl; external Qt4PasLib name 'QWebView_sizeHint'; function QWebView_zoomFactor(handle: QWebViewH): qreal; cdecl; external Qt4PasLib name 'QWebView_zoomFactor'; procedure QWebView_setZoomFactor(handle: QWebViewH; factor: qreal); cdecl; external Qt4PasLib name 'QWebView_setZoomFactor'; procedure QWebView_setTextSizeMultiplier(handle: QWebViewH; factor: qreal); cdecl; external Qt4PasLib name 'QWebView_setTextSizeMultiplier'; function QWebView_textSizeMultiplier(handle: QWebViewH): qreal; cdecl; external Qt4PasLib name 'QWebView_textSizeMultiplier'; function QWebView_findText(handle: QWebViewH; subString: PWideString; options: QWebPageFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QWebView_findText'; function QWebView_event(handle: QWebViewH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebView_event'; procedure QWebView_stop(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_stop'; procedure QWebView_back(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_back'; procedure QWebView_forward(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_forward'; procedure QWebView_reload(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_reload'; procedure QWebView_print(handle: QWebViewH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QWebView_print'; type QWebView_loadStarted_Event = procedure () of object cdecl; QWebView_loadProgress_Event = procedure (progress: Integer) of object cdecl; QWebView_loadFinished_Event = procedure (AnonParam1: Boolean) of object cdecl; QWebView_titleChanged_Event = procedure (title: PWideString) of object cdecl; QWebView_statusBarMessage_Event = procedure (text: PWideString) of object cdecl; QWebView_linkClicked_Event = procedure (url: QUrlH) of object cdecl; QWebView_selectionChanged_Event = procedure () of object cdecl; QWebView_iconChanged_Event = procedure () of object cdecl; QWebView_urlChanged_Event = procedure (url: QUrlH) of object cdecl; function QLCLWebView_create(parent: QWidgetH = nil): QLCLWebViewH; cdecl; external Qt4PasLib name 'QLCLWebView_create'; procedure QLCLWebView_destroy(handle: QLCLWebViewH); cdecl; external Qt4PasLib name 'QLCLWebView_destroy'; procedure QLCLWebView_override_createWindow(handle: QLCLWebViewH; hook: QLCLWebView_createWindow_Override); cdecl; external Qt4PasLib name 'QLCLWebView_override_createWindow'; function QCoreApplication_hook_create(handle: QObjectH): QCoreApplication_hookH; cdecl; external Qt4PasLib name 'QCoreApplication_hook_create'; procedure QCoreApplication_hook_destroy(handle: QCoreApplication_hookH); cdecl; external Qt4PasLib name 'QCoreApplication_hook_destroy'; procedure QCoreApplication_hook_hook_aboutToQuit(handle: QCoreApplication_hookH; hook: QCoreApplication_aboutToQuit_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_aboutToQuit'; procedure QCoreApplication_hook_hook_unixSignal(handle: QCoreApplication_hookH; hook: QCoreApplication_unixSignal_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_unixSignal'; function QTimer_hook_create(handle: QObjectH): QTimer_hookH; cdecl; external Qt4PasLib name 'QTimer_hook_create'; procedure QTimer_hook_destroy(handle: QTimer_hookH); cdecl; external Qt4PasLib name 'QTimer_hook_destroy'; procedure QTimer_hook_hook_timeout(handle: QTimer_hookH; hook: QTimer_timeout_Event); cdecl; external Qt4PasLib name 'QTimer_hook_hook_timeout'; function QModelIndex_hook_create(handle: QObjectH): QModelIndex_hookH; cdecl; external Qt4PasLib name 'QModelIndex_hook_create'; procedure QModelIndex_hook_destroy(handle: QModelIndex_hookH); cdecl; external Qt4PasLib name 'QModelIndex_hook_destroy'; function QPersistentModelIndex_hook_create(handle: QObjectH): QPersistentModelIndex_hookH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_hook_create'; procedure QPersistentModelIndex_hook_destroy(handle: QPersistentModelIndex_hookH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_hook_destroy'; function QAbstractItemModel_hook_create(handle: QObjectH): QAbstractItemModel_hookH; cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_create'; procedure QAbstractItemModel_hook_destroy(handle: QAbstractItemModel_hookH); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_destroy'; procedure QAbstractItemModel_hook_hook_dataChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_dataChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_dataChanged'; procedure QAbstractItemModel_hook_hook_headerDataChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_headerDataChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_headerDataChanged'; procedure QAbstractItemModel_hook_hook_layoutChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_layoutChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_layoutChanged'; procedure QAbstractItemModel_hook_hook_layoutAboutToBeChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_layoutAboutToBeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_layoutAboutToBeChanged'; procedure QAbstractItemModel_hook_hook_rowsAboutToBeInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsAboutToBeInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsAboutToBeInserted'; procedure QAbstractItemModel_hook_hook_rowsInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsInserted'; procedure QAbstractItemModel_hook_hook_rowsAboutToBeRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsAboutToBeRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsAboutToBeRemoved'; procedure QAbstractItemModel_hook_hook_rowsRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsRemoved'; procedure QAbstractItemModel_hook_hook_columnsAboutToBeInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsAboutToBeInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsAboutToBeInserted'; procedure QAbstractItemModel_hook_hook_columnsInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsInserted'; procedure QAbstractItemModel_hook_hook_columnsAboutToBeRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsAboutToBeRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsAboutToBeRemoved'; procedure QAbstractItemModel_hook_hook_columnsRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsRemoved'; procedure QAbstractItemModel_hook_hook_modelAboutToBeReset(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_modelAboutToBeReset_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_modelAboutToBeReset'; procedure QAbstractItemModel_hook_hook_modelReset(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_modelReset_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_modelReset'; function QAbstractTableModel_hook_create(handle: QObjectH): QAbstractTableModel_hookH; cdecl; external Qt4PasLib name 'QAbstractTableModel_hook_create'; procedure QAbstractTableModel_hook_destroy(handle: QAbstractTableModel_hookH); cdecl; external Qt4PasLib name 'QAbstractTableModel_hook_destroy'; function QAbstractListModel_hook_create(handle: QObjectH): QAbstractListModel_hookH; cdecl; external Qt4PasLib name 'QAbstractListModel_hook_create'; procedure QAbstractListModel_hook_destroy(handle: QAbstractListModel_hookH); cdecl; external Qt4PasLib name 'QAbstractListModel_hook_destroy'; function QSocketNotifier_hook_create(handle: QObjectH): QSocketNotifier_hookH; cdecl; external Qt4PasLib name 'QSocketNotifier_hook_create'; procedure QSocketNotifier_hook_destroy(handle: QSocketNotifier_hookH); cdecl; external Qt4PasLib name 'QSocketNotifier_hook_destroy'; procedure QSocketNotifier_hook_hook_activated(handle: QSocketNotifier_hookH; hook: QSocketNotifier_activated_Event); cdecl; external Qt4PasLib name 'QSocketNotifier_hook_hook_activated'; function QThread_hook_create(handle: QObjectH): QThread_hookH; cdecl; external Qt4PasLib name 'QThread_hook_create'; procedure QThread_hook_destroy(handle: QThread_hookH); cdecl; external Qt4PasLib name 'QThread_hook_destroy'; procedure QThread_hook_hook_started(handle: QThread_hookH; hook: QThread_started_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_started'; procedure QThread_hook_hook_finished(handle: QThread_hookH; hook: QThread_finished_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_finished'; procedure QThread_hook_hook_terminated(handle: QThread_hookH; hook: QThread_terminated_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_terminated'; function QIODevice_hook_create(handle: QObjectH): QIODevice_hookH; cdecl; external Qt4PasLib name 'QIODevice_hook_create'; procedure QIODevice_hook_destroy(handle: QIODevice_hookH); cdecl; external Qt4PasLib name 'QIODevice_hook_destroy'; procedure QIODevice_hook_hook_readyRead(handle: QIODevice_hookH; hook: QIODevice_readyRead_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_readyRead'; procedure QIODevice_hook_hook_bytesWritten(handle: QIODevice_hookH; hook: QIODevice_bytesWritten_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_bytesWritten'; procedure QIODevice_hook_hook_aboutToClose(handle: QIODevice_hookH; hook: QIODevice_aboutToClose_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_aboutToClose'; procedure QIODevice_hook_hook_readChannelFinished(handle: QIODevice_hookH; hook: QIODevice_readChannelFinished_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_readChannelFinished'; function QProcess_hook_create(handle: QObjectH): QProcess_hookH; cdecl; external Qt4PasLib name 'QProcess_hook_create'; procedure QProcess_hook_destroy(handle: QProcess_hookH); cdecl; external Qt4PasLib name 'QProcess_hook_destroy'; procedure QProcess_hook_hook_started(handle: QProcess_hookH; hook: QProcess_started_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_started'; procedure QProcess_hook_hook_finished(handle: QProcess_hookH; hook: QProcess_finished_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_finished'; procedure QProcess_hook_hook_finished2(handle: QProcess_hookH; hook: QProcess_finished2_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_finished2'; procedure QProcess_hook_hook_error(handle: QProcess_hookH; hook: QProcess_error_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_error'; procedure QProcess_hook_hook_stateChanged(handle: QProcess_hookH; hook: QProcess_stateChanged_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_stateChanged'; procedure QProcess_hook_hook_readyReadStandardOutput(handle: QProcess_hookH; hook: QProcess_readyReadStandardOutput_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_readyReadStandardOutput'; procedure QProcess_hook_hook_readyReadStandardError(handle: QProcess_hookH; hook: QProcess_readyReadStandardError_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_readyReadStandardError'; function QFileSystemWatcher_hook_create(handle: QObjectH): QFileSystemWatcher_hookH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_create'; procedure QFileSystemWatcher_hook_destroy(handle: QFileSystemWatcher_hookH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_destroy'; procedure QFileSystemWatcher_hook_hook_fileChanged(handle: QFileSystemWatcher_hookH; hook: QFileSystemWatcher_fileChanged_Event); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_hook_fileChanged'; procedure QFileSystemWatcher_hook_hook_directoryChanged(handle: QFileSystemWatcher_hookH; hook: QFileSystemWatcher_directoryChanged_Event); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_hook_directoryChanged'; function QApplication_hook_create(handle: QObjectH): QApplication_hookH; cdecl; external Qt4PasLib name 'QApplication_hook_create'; procedure QApplication_hook_destroy(handle: QApplication_hookH); cdecl; external Qt4PasLib name 'QApplication_hook_destroy'; procedure QApplication_hook_hook_lastWindowClosed(handle: QApplication_hookH; hook: QApplication_lastWindowClosed_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_lastWindowClosed'; procedure QApplication_hook_hook_focusChanged(handle: QApplication_hookH; hook: QApplication_focusChanged_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_focusChanged'; procedure QApplication_hook_hook_fontDatabaseChanged(handle: QApplication_hookH; hook: QApplication_fontDatabaseChanged_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_fontDatabaseChanged'; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QApplication_hook_hook_commitDataRequest(handle: QApplication_hookH; hook: QApplication_commitDataRequest_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_commitDataRequest'; procedure QApplication_hook_hook_saveStateRequest(handle: QApplication_hookH; hook: QApplication_saveStateRequest_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_saveStateRequest'; {$endif} function QWidget_hook_create(handle: QObjectH): QWidget_hookH; cdecl; external Qt4PasLib name 'QWidget_hook_create'; procedure QWidget_hook_destroy(handle: QWidget_hookH); cdecl; external Qt4PasLib name 'QWidget_hook_destroy'; procedure QWidget_hook_hook_customContextMenuRequested(handle: QWidget_hookH; hook: QWidget_customContextMenuRequested_Event); cdecl; external Qt4PasLib name 'QWidget_hook_hook_customContextMenuRequested'; function QLayout_hook_create(handle: QObjectH): QLayout_hookH; cdecl; external Qt4PasLib name 'QLayout_hook_create'; procedure QLayout_hook_destroy(handle: QLayout_hookH); cdecl; external Qt4PasLib name 'QLayout_hook_destroy'; function QStackedLayout_hook_create(handle: QObjectH): QStackedLayout_hookH; cdecl; external Qt4PasLib name 'QStackedLayout_hook_create'; procedure QStackedLayout_hook_destroy(handle: QStackedLayout_hookH); cdecl; external Qt4PasLib name 'QStackedLayout_hook_destroy'; procedure QStackedLayout_hook_hook_widgetRemoved(handle: QStackedLayout_hookH; hook: QStackedLayout_widgetRemoved_Event); cdecl; external Qt4PasLib name 'QStackedLayout_hook_hook_widgetRemoved'; procedure QStackedLayout_hook_hook_currentChanged(handle: QStackedLayout_hookH; hook: QStackedLayout_currentChanged_Event); cdecl; external Qt4PasLib name 'QStackedLayout_hook_hook_currentChanged'; function QAction_hook_create(handle: QObjectH): QAction_hookH; cdecl; external Qt4PasLib name 'QAction_hook_create'; procedure QAction_hook_destroy(handle: QAction_hookH); cdecl; external Qt4PasLib name 'QAction_hook_destroy'; procedure QAction_hook_hook_changed(handle: QAction_hookH; hook: QAction_changed_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_changed'; procedure QAction_hook_hook_triggered(handle: QAction_hookH; hook: QAction_triggered_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_triggered'; procedure QAction_hook_hook_triggered2(handle: QAction_hookH; hook: QAction_triggered2_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_triggered2'; procedure QAction_hook_hook_hovered(handle: QAction_hookH; hook: QAction_hovered_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_hovered'; procedure QAction_hook_hook_toggled(handle: QAction_hookH; hook: QAction_toggled_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_toggled'; function QActionGroup_hook_create(handle: QObjectH): QActionGroup_hookH; cdecl; external Qt4PasLib name 'QActionGroup_hook_create'; procedure QActionGroup_hook_destroy(handle: QActionGroup_hookH); cdecl; external Qt4PasLib name 'QActionGroup_hook_destroy'; procedure QActionGroup_hook_hook_triggered(handle: QActionGroup_hookH; hook: QActionGroup_triggered_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_triggered'; procedure QActionGroup_hook_hook_selected(handle: QActionGroup_hookH; hook: QActionGroup_selected_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_selected'; procedure QActionGroup_hook_hook_hovered(handle: QActionGroup_hookH; hook: QActionGroup_hovered_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_hovered'; function QClipboard_hook_create(handle: QObjectH): QClipboard_hookH; cdecl; external Qt4PasLib name 'QClipboard_hook_create'; procedure QClipboard_hook_destroy(handle: QClipboard_hookH); cdecl; external Qt4PasLib name 'QClipboard_hook_destroy'; procedure QClipboard_hook_hook_changed(handle: QClipboard_hookH; hook: QClipboard_changed_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_changed'; procedure QClipboard_hook_hook_selectionChanged(handle: QClipboard_hookH; hook: QClipboard_selectionChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_selectionChanged'; procedure QClipboard_hook_hook_findBufferChanged(handle: QClipboard_hookH; hook: QClipboard_findBufferChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_findBufferChanged'; procedure QClipboard_hook_hook_dataChanged(handle: QClipboard_hookH; hook: QClipboard_dataChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_dataChanged'; function QDesktopWidget_hook_create(handle: QObjectH): QDesktopWidget_hookH; cdecl; external Qt4PasLib name 'QDesktopWidget_hook_create'; procedure QDesktopWidget_hook_destroy(handle: QDesktopWidget_hookH); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_destroy'; procedure QDesktopWidget_hook_hook_resized(handle: QDesktopWidget_hookH; hook: QDesktopWidget_resized_Event); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_hook_resized'; procedure QDesktopWidget_hook_hook_workAreaResized(handle: QDesktopWidget_hookH; hook: QDesktopWidget_workAreaResized_Event); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_hook_workAreaResized'; function QDrag_hook_create(handle: QObjectH): QDrag_hookH; cdecl; external Qt4PasLib name 'QDrag_hook_create'; procedure QDrag_hook_destroy(handle: QDrag_hookH); cdecl; external Qt4PasLib name 'QDrag_hook_destroy'; procedure QDrag_hook_hook_actionChanged(handle: QDrag_hookH; hook: QDrag_actionChanged_Event); cdecl; external Qt4PasLib name 'QDrag_hook_hook_actionChanged'; procedure QDrag_hook_hook_targetChanged(handle: QDrag_hookH; hook: QDrag_targetChanged_Event); cdecl; external Qt4PasLib name 'QDrag_hook_hook_targetChanged'; function QShortcut_hook_create(handle: QObjectH): QShortcut_hookH; cdecl; external Qt4PasLib name 'QShortcut_hook_create'; procedure QShortcut_hook_destroy(handle: QShortcut_hookH); cdecl; external Qt4PasLib name 'QShortcut_hook_destroy'; procedure QShortcut_hook_hook_activated(handle: QShortcut_hookH; hook: QShortcut_activated_Event); cdecl; external Qt4PasLib name 'QShortcut_hook_hook_activated'; procedure QShortcut_hook_hook_activatedAmbiguously(handle: QShortcut_hookH; hook: QShortcut_activatedAmbiguously_Event); cdecl; external Qt4PasLib name 'QShortcut_hook_hook_activatedAmbiguously'; function QAbstractTextDocumentLayout_hook_create(handle: QObjectH): QAbstractTextDocumentLayout_hookH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_create'; procedure QAbstractTextDocumentLayout_hook_destroy(handle: QAbstractTextDocumentLayout_hookH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_destroy'; procedure QAbstractTextDocumentLayout_hook_hook_update(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_update_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_update'; procedure QAbstractTextDocumentLayout_hook_hook_update2(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_update2_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_update2'; procedure QAbstractTextDocumentLayout_hook_hook_updateBlock(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_updateBlock_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_updateBlock'; procedure QAbstractTextDocumentLayout_hook_hook_documentSizeChanged(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_documentSizeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_documentSizeChanged'; procedure QAbstractTextDocumentLayout_hook_hook_pageCountChanged(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_pageCountChanged_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_pageCountChanged'; function QTextObjectInterface_hook_create(handle: QObjectH): QTextObjectInterface_hookH; cdecl; external Qt4PasLib name 'QTextObjectInterface_hook_create'; procedure QTextObjectInterface_hook_destroy(handle: QTextObjectInterface_hookH); cdecl; external Qt4PasLib name 'QTextObjectInterface_hook_destroy'; function QFrame_hook_create(handle: QObjectH): QFrame_hookH; cdecl; external Qt4PasLib name 'QFrame_hook_create'; procedure QFrame_hook_destroy(handle: QFrame_hookH); cdecl; external Qt4PasLib name 'QFrame_hook_destroy'; function QStackedWidget_hook_create(handle: QObjectH): QStackedWidget_hookH; cdecl; external Qt4PasLib name 'QStackedWidget_hook_create'; procedure QStackedWidget_hook_destroy(handle: QStackedWidget_hookH); cdecl; external Qt4PasLib name 'QStackedWidget_hook_destroy'; procedure QStackedWidget_hook_hook_currentChanged(handle: QStackedWidget_hookH; hook: QStackedWidget_currentChanged_Event); cdecl; external Qt4PasLib name 'QStackedWidget_hook_hook_currentChanged'; procedure QStackedWidget_hook_hook_widgetRemoved(handle: QStackedWidget_hookH; hook: QStackedWidget_widgetRemoved_Event); cdecl; external Qt4PasLib name 'QStackedWidget_hook_hook_widgetRemoved'; function QAbstractScrollArea_hook_create(handle: QObjectH): QAbstractScrollArea_hookH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_hook_create'; procedure QAbstractScrollArea_hook_destroy(handle: QAbstractScrollArea_hookH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_hook_destroy'; function QAbstractSlider_hook_create(handle: QObjectH): QAbstractSlider_hookH; cdecl; external Qt4PasLib name 'QAbstractSlider_hook_create'; procedure QAbstractSlider_hook_destroy(handle: QAbstractSlider_hookH); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_destroy'; procedure QAbstractSlider_hook_hook_valueChanged(handle: QAbstractSlider_hookH; hook: QAbstractSlider_valueChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_valueChanged'; procedure QAbstractSlider_hook_hook_sliderPressed(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderPressed_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderPressed'; procedure QAbstractSlider_hook_hook_sliderMoved(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderMoved_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderMoved'; procedure QAbstractSlider_hook_hook_sliderReleased(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderReleased_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderReleased'; procedure QAbstractSlider_hook_hook_rangeChanged(handle: QAbstractSlider_hookH; hook: QAbstractSlider_rangeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_rangeChanged'; procedure QAbstractSlider_hook_hook_actionTriggered(handle: QAbstractSlider_hookH; hook: QAbstractSlider_actionTriggered_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_actionTriggered'; function QScrollBar_hook_create(handle: QObjectH): QScrollBar_hookH; cdecl; external Qt4PasLib name 'QScrollBar_hook_create'; procedure QScrollBar_hook_destroy(handle: QScrollBar_hookH); cdecl; external Qt4PasLib name 'QScrollBar_hook_destroy'; function QMenu_hook_create(handle: QObjectH): QMenu_hookH; cdecl; external Qt4PasLib name 'QMenu_hook_create'; procedure QMenu_hook_destroy(handle: QMenu_hookH); cdecl; external Qt4PasLib name 'QMenu_hook_destroy'; procedure QMenu_hook_hook_aboutToShow(handle: QMenu_hookH; hook: QMenu_aboutToShow_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_aboutToShow'; procedure QMenu_hook_hook_aboutToHide(handle: QMenu_hookH; hook: QMenu_aboutToHide_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_aboutToHide'; procedure QMenu_hook_hook_triggered(handle: QMenu_hookH; hook: QMenu_triggered_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_triggered'; procedure QMenu_hook_hook_hovered(handle: QMenu_hookH; hook: QMenu_hovered_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_hovered'; function QMenuBar_hook_create(handle: QObjectH): QMenuBar_hookH; cdecl; external Qt4PasLib name 'QMenuBar_hook_create'; procedure QMenuBar_hook_destroy(handle: QMenuBar_hookH); cdecl; external Qt4PasLib name 'QMenuBar_hook_destroy'; procedure QMenuBar_hook_hook_triggered(handle: QMenuBar_hookH; hook: QMenuBar_triggered_Event); cdecl; external Qt4PasLib name 'QMenuBar_hook_hook_triggered'; procedure QMenuBar_hook_hook_hovered(handle: QMenuBar_hookH; hook: QMenuBar_hovered_Event); cdecl; external Qt4PasLib name 'QMenuBar_hook_hook_hovered'; function QButtonGroup_hook_create(handle: QObjectH): QButtonGroup_hookH; cdecl; external Qt4PasLib name 'QButtonGroup_hook_create'; procedure QButtonGroup_hook_destroy(handle: QButtonGroup_hookH); cdecl; external Qt4PasLib name 'QButtonGroup_hook_destroy'; procedure QButtonGroup_hook_hook_buttonClicked(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonClicked_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonClicked'; procedure QButtonGroup_hook_hook_buttonClicked2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonClicked2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonClicked2'; procedure QButtonGroup_hook_hook_buttonPressed(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonPressed_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonPressed'; procedure QButtonGroup_hook_hook_buttonPressed2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonPressed2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonPressed2'; procedure QButtonGroup_hook_hook_buttonReleased(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonReleased_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonReleased'; procedure QButtonGroup_hook_hook_buttonReleased2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonReleased2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonReleased2'; function QAbstractButton_hook_create(handle: QObjectH): QAbstractButton_hookH; cdecl; external Qt4PasLib name 'QAbstractButton_hook_create'; procedure QAbstractButton_hook_destroy(handle: QAbstractButton_hookH); cdecl; external Qt4PasLib name 'QAbstractButton_hook_destroy'; procedure QAbstractButton_hook_hook_pressed(handle: QAbstractButton_hookH; hook: QAbstractButton_pressed_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_pressed'; procedure QAbstractButton_hook_hook_released(handle: QAbstractButton_hookH; hook: QAbstractButton_released_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_released'; procedure QAbstractButton_hook_hook_clicked(handle: QAbstractButton_hookH; hook: QAbstractButton_clicked_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked'; procedure QAbstractButton_hook_hook_clicked2(handle: QAbstractButton_hookH; hook: QAbstractButton_clicked2_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked2'; procedure QAbstractButton_hook_hook_toggled(handle: QAbstractButton_hookH; hook: QAbstractButton_toggled_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_toggled'; function QPushButton_hook_create(handle: QObjectH): QPushButton_hookH; cdecl; external Qt4PasLib name 'QPushButton_hook_create'; procedure QPushButton_hook_destroy(handle: QPushButton_hookH); cdecl; external Qt4PasLib name 'QPushButton_hook_destroy'; function QLineEdit_hook_create(handle: QObjectH): QLineEdit_hookH; cdecl; external Qt4PasLib name 'QLineEdit_hook_create'; procedure QLineEdit_hook_destroy(handle: QLineEdit_hookH); cdecl; external Qt4PasLib name 'QLineEdit_hook_destroy'; procedure QLineEdit_hook_hook_textChanged(handle: QLineEdit_hookH; hook: QLineEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_textChanged'; procedure QLineEdit_hook_hook_textEdited(handle: QLineEdit_hookH; hook: QLineEdit_textEdited_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_textEdited'; procedure QLineEdit_hook_hook_cursorPositionChanged(handle: QLineEdit_hookH; hook: QLineEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_cursorPositionChanged'; procedure QLineEdit_hook_hook_returnPressed(handle: QLineEdit_hookH; hook: QLineEdit_returnPressed_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_returnPressed'; procedure QLineEdit_hook_hook_editingFinished(handle: QLineEdit_hookH; hook: QLineEdit_editingFinished_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_editingFinished'; procedure QLineEdit_hook_hook_selectionChanged(handle: QLineEdit_hookH; hook: QLineEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_selectionChanged'; function QPlainTextEdit_hook_create(handle: QObjectH): QPlainTextEdit_hookH; cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_create'; procedure QPlainTextEdit_hook_destroy(handle: QPlainTextEdit_hookH); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_destroy'; procedure QPlainTextEdit_hook_hook_textChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_textChanged'; procedure QPlainTextEdit_hook_hook_undoAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_undoAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_undoAvailable'; procedure QPlainTextEdit_hook_hook_redoAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_redoAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_redoAvailable'; procedure QPlainTextEdit_hook_hook_copyAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_copyAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_copyAvailable'; procedure QPlainTextEdit_hook_hook_selectionChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_selectionChanged'; procedure QPlainTextEdit_hook_hook_cursorPositionChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_cursorPositionChanged'; procedure QPlainTextEdit_hook_hook_updateRequest(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_updateRequest_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_updateRequest'; procedure QPlainTextEdit_hook_hook_blockCountChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_blockCountChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_blockCountChanged'; procedure QPlainTextEdit_hook_hook_modificationChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_modificationChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_modificationChanged'; function QPlainTextDocumentLayout_hook_create(handle: QObjectH): QPlainTextDocumentLayout_hookH; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hook_create'; procedure QPlainTextDocumentLayout_hook_destroy(handle: QPlainTextDocumentLayout_hookH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hook_destroy'; function QTextEdit_hook_create(handle: QObjectH): QTextEdit_hookH; cdecl; external Qt4PasLib name 'QTextEdit_hook_create'; procedure QTextEdit_hook_destroy(handle: QTextEdit_hookH); cdecl; external Qt4PasLib name 'QTextEdit_hook_destroy'; procedure QTextEdit_hook_hook_textChanged(handle: QTextEdit_hookH; hook: QTextEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_textChanged'; procedure QTextEdit_hook_hook_undoAvailable(handle: QTextEdit_hookH; hook: QTextEdit_undoAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_undoAvailable'; procedure QTextEdit_hook_hook_redoAvailable(handle: QTextEdit_hookH; hook: QTextEdit_redoAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_redoAvailable'; procedure QTextEdit_hook_hook_currentCharFormatChanged(handle: QTextEdit_hookH; hook: QTextEdit_currentCharFormatChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_currentCharFormatChanged'; procedure QTextEdit_hook_hook_copyAvailable(handle: QTextEdit_hookH; hook: QTextEdit_copyAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_copyAvailable'; procedure QTextEdit_hook_hook_selectionChanged(handle: QTextEdit_hookH; hook: QTextEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_selectionChanged'; procedure QTextEdit_hook_hook_cursorPositionChanged(handle: QTextEdit_hookH; hook: QTextEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_cursorPositionChanged'; function QTabWidget_hook_create(handle: QObjectH): QTabWidget_hookH; cdecl; external Qt4PasLib name 'QTabWidget_hook_create'; procedure QTabWidget_hook_destroy(handle: QTabWidget_hookH); cdecl; external Qt4PasLib name 'QTabWidget_hook_destroy'; procedure QTabWidget_hook_hook_currentChanged(handle: QTabWidget_hookH; hook: QTabWidget_currentChanged_Event); cdecl; external Qt4PasLib name 'QTabWidget_hook_hook_currentChanged'; procedure QTabWidget_hook_hook_tabCloseRequested(handle: QTabWidget_hookH; hook: QTabWidget_tabCloseRequested_Event); cdecl; external Qt4PasLib name 'QTabWidget_hook_hook_tabCloseRequested'; function QMainWindow_hook_create(handle: QObjectH): QMainWindow_hookH; cdecl; external Qt4PasLib name 'QMainWindow_hook_create'; procedure QMainWindow_hook_destroy(handle: QMainWindow_hookH); cdecl; external Qt4PasLib name 'QMainWindow_hook_destroy'; procedure QMainWindow_hook_hook_iconSizeChanged(handle: QMainWindow_hookH; hook: QMainWindow_iconSizeChanged_Event); cdecl; external Qt4PasLib name 'QMainWindow_hook_hook_iconSizeChanged'; procedure QMainWindow_hook_hook_toolButtonStyleChanged(handle: QMainWindow_hookH; hook: QMainWindow_toolButtonStyleChanged_Event); cdecl; external Qt4PasLib name 'QMainWindow_hook_hook_toolButtonStyleChanged'; function QToolBar_hook_create(handle: QObjectH): QToolBar_hookH; cdecl; external Qt4PasLib name 'QToolBar_hook_create'; procedure QToolBar_hook_destroy(handle: QToolBar_hookH); cdecl; external Qt4PasLib name 'QToolBar_hook_destroy'; procedure QToolBar_hook_hook_actionTriggered(handle: QToolBar_hookH; hook: QToolBar_actionTriggered_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_actionTriggered'; procedure QToolBar_hook_hook_movableChanged(handle: QToolBar_hookH; hook: QToolBar_movableChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_movableChanged'; procedure QToolBar_hook_hook_allowedAreasChanged(handle: QToolBar_hookH; hook: QToolBar_allowedAreasChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_allowedAreasChanged'; procedure QToolBar_hook_hook_orientationChanged(handle: QToolBar_hookH; hook: QToolBar_orientationChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_orientationChanged'; procedure QToolBar_hook_hook_iconSizeChanged(handle: QToolBar_hookH; hook: QToolBar_iconSizeChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_iconSizeChanged'; procedure QToolBar_hook_hook_toolButtonStyleChanged(handle: QToolBar_hookH; hook: QToolBar_toolButtonStyleChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_toolButtonStyleChanged'; function QLCDNumber_hook_create(handle: QObjectH): QLCDNumber_hookH; cdecl; external Qt4PasLib name 'QLCDNumber_hook_create'; procedure QLCDNumber_hook_destroy(handle: QLCDNumber_hookH); cdecl; external Qt4PasLib name 'QLCDNumber_hook_destroy'; procedure QLCDNumber_hook_hook_overflow(handle: QLCDNumber_hookH; hook: QLCDNumber_overflow_Event); cdecl; external Qt4PasLib name 'QLCDNumber_hook_hook_overflow'; function QAbstractSpinBox_hook_create(handle: QObjectH): QAbstractSpinBox_hookH; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_create'; procedure QAbstractSpinBox_hook_destroy(handle: QAbstractSpinBox_hookH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_destroy'; procedure QAbstractSpinBox_hook_hook_editingFinished(handle: QAbstractSpinBox_hookH; hook: QAbstractSpinBox_editingFinished_Event); cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_hook_editingFinished'; function QSpinBox_hook_create(handle: QObjectH): QSpinBox_hookH; cdecl; external Qt4PasLib name 'QSpinBox_hook_create'; procedure QSpinBox_hook_destroy(handle: QSpinBox_hookH); cdecl; external Qt4PasLib name 'QSpinBox_hook_destroy'; procedure QSpinBox_hook_hook_valueChanged(handle: QSpinBox_hookH; hook: QSpinBox_valueChanged_Event); cdecl; external Qt4PasLib name 'QSpinBox_hook_hook_valueChanged'; procedure QSpinBox_hook_hook_valueChanged2(handle: QSpinBox_hookH; hook: QSpinBox_valueChanged2_Event); cdecl; external Qt4PasLib name 'QSpinBox_hook_hook_valueChanged2'; function QDoubleSpinBox_hook_create(handle: QObjectH): QDoubleSpinBox_hookH; cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_create'; procedure QDoubleSpinBox_hook_destroy(handle: QDoubleSpinBox_hookH); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_destroy'; procedure QDoubleSpinBox_hook_hook_valueChanged(handle: QDoubleSpinBox_hookH; hook: QDoubleSpinBox_valueChanged_Event); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_hook_valueChanged'; procedure QDoubleSpinBox_hook_hook_valueChanged2(handle: QDoubleSpinBox_hookH; hook: QDoubleSpinBox_valueChanged2_Event); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_hook_valueChanged2'; function QSplitter_hook_create(handle: QObjectH): QSplitter_hookH; cdecl; external Qt4PasLib name 'QSplitter_hook_create'; procedure QSplitter_hook_destroy(handle: QSplitter_hookH); cdecl; external Qt4PasLib name 'QSplitter_hook_destroy'; procedure QSplitter_hook_hook_splitterMoved(handle: QSplitter_hookH; hook: QSplitter_splitterMoved_Event); cdecl; external Qt4PasLib name 'QSplitter_hook_hook_splitterMoved'; function QSplitterHandle_hook_create(handle: QObjectH): QSplitterHandle_hookH; cdecl; external Qt4PasLib name 'QSplitterHandle_hook_create'; procedure QSplitterHandle_hook_destroy(handle: QSplitterHandle_hookH); cdecl; external Qt4PasLib name 'QSplitterHandle_hook_destroy'; function QComboBox_hook_create(handle: QObjectH): QComboBox_hookH; cdecl; external Qt4PasLib name 'QComboBox_hook_create'; procedure QComboBox_hook_destroy(handle: QComboBox_hookH); cdecl; external Qt4PasLib name 'QComboBox_hook_destroy'; procedure QComboBox_hook_hook_editTextChanged(handle: QComboBox_hookH; hook: QComboBox_editTextChanged_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_editTextChanged'; procedure QComboBox_hook_hook_activated(handle: QComboBox_hookH; hook: QComboBox_activated_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_activated'; procedure QComboBox_hook_hook_activated2(handle: QComboBox_hookH; hook: QComboBox_activated2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_activated2'; procedure QComboBox_hook_hook_highlighted(handle: QComboBox_hookH; hook: QComboBox_highlighted_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_highlighted'; procedure QComboBox_hook_hook_highlighted2(handle: QComboBox_hookH; hook: QComboBox_highlighted2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_highlighted2'; procedure QComboBox_hook_hook_currentIndexChanged(handle: QComboBox_hookH; hook: QComboBox_currentIndexChanged_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_currentIndexChanged'; procedure QComboBox_hook_hook_currentIndexChanged2(handle: QComboBox_hookH; hook: QComboBox_currentIndexChanged2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_currentIndexChanged2'; function QCheckBox_hook_create(handle: QObjectH): QCheckBox_hookH; cdecl; external Qt4PasLib name 'QCheckBox_hook_create'; procedure QCheckBox_hook_destroy(handle: QCheckBox_hookH); cdecl; external Qt4PasLib name 'QCheckBox_hook_destroy'; procedure QCheckBox_hook_hook_stateChanged(handle: QCheckBox_hookH; hook: QCheckBox_stateChanged_Event); cdecl; external Qt4PasLib name 'QCheckBox_hook_hook_stateChanged'; function QSlider_hook_create(handle: QObjectH): QSlider_hookH; cdecl; external Qt4PasLib name 'QSlider_hook_create'; procedure QSlider_hook_destroy(handle: QSlider_hookH); cdecl; external Qt4PasLib name 'QSlider_hook_destroy'; function QTextBrowser_hook_create(handle: QObjectH): QTextBrowser_hookH; cdecl; external Qt4PasLib name 'QTextBrowser_hook_create'; procedure QTextBrowser_hook_destroy(handle: QTextBrowser_hookH); cdecl; external Qt4PasLib name 'QTextBrowser_hook_destroy'; procedure QTextBrowser_hook_hook_backwardAvailable(handle: QTextBrowser_hookH; hook: QTextBrowser_backwardAvailable_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_backwardAvailable'; procedure QTextBrowser_hook_hook_forwardAvailable(handle: QTextBrowser_hookH; hook: QTextBrowser_forwardAvailable_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_forwardAvailable'; procedure QTextBrowser_hook_hook_historyChanged(handle: QTextBrowser_hookH; hook: QTextBrowser_historyChanged_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_historyChanged'; procedure QTextBrowser_hook_hook_sourceChanged(handle: QTextBrowser_hookH; hook: QTextBrowser_sourceChanged_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_sourceChanged'; procedure QTextBrowser_hook_hook_highlighted(handle: QTextBrowser_hookH; hook: QTextBrowser_highlighted_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_highlighted'; procedure QTextBrowser_hook_hook_highlighted2(handle: QTextBrowser_hookH; hook: QTextBrowser_highlighted2_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_highlighted2'; procedure QTextBrowser_hook_hook_anchorClicked(handle: QTextBrowser_hookH; hook: QTextBrowser_anchorClicked_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_anchorClicked'; function QLabel_hook_create(handle: QObjectH): QLabel_hookH; cdecl; external Qt4PasLib name 'QLabel_hook_create'; procedure QLabel_hook_destroy(handle: QLabel_hookH); cdecl; external Qt4PasLib name 'QLabel_hook_destroy'; procedure QLabel_hook_hook_linkActivated(handle: QLabel_hookH; hook: QLabel_linkActivated_Event); cdecl; external Qt4PasLib name 'QLabel_hook_hook_linkActivated'; procedure QLabel_hook_hook_linkHovered(handle: QLabel_hookH; hook: QLabel_linkHovered_Event); cdecl; external Qt4PasLib name 'QLabel_hook_hook_linkHovered'; function QGroupBox_hook_create(handle: QObjectH): QGroupBox_hookH; cdecl; external Qt4PasLib name 'QGroupBox_hook_create'; procedure QGroupBox_hook_destroy(handle: QGroupBox_hookH); cdecl; external Qt4PasLib name 'QGroupBox_hook_destroy'; procedure QGroupBox_hook_hook_clicked(handle: QGroupBox_hookH; hook: QGroupBox_clicked_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_clicked'; procedure QGroupBox_hook_hook_clicked2(handle: QGroupBox_hookH; hook: QGroupBox_clicked2_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_clicked2'; procedure QGroupBox_hook_hook_toggled(handle: QGroupBox_hookH; hook: QGroupBox_toggled_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_toggled'; function QDockWidget_hook_create(handle: QObjectH): QDockWidget_hookH; cdecl; external Qt4PasLib name 'QDockWidget_hook_create'; procedure QDockWidget_hook_destroy(handle: QDockWidget_hookH); cdecl; external Qt4PasLib name 'QDockWidget_hook_destroy'; procedure QDockWidget_hook_hook_featuresChanged(handle: QDockWidget_hookH; hook: QDockWidget_featuresChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_featuresChanged'; procedure QDockWidget_hook_hook_topLevelChanged(handle: QDockWidget_hookH; hook: QDockWidget_topLevelChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_topLevelChanged'; procedure QDockWidget_hook_hook_allowedAreasChanged(handle: QDockWidget_hookH; hook: QDockWidget_allowedAreasChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_allowedAreasChanged'; procedure QDockWidget_hook_hook_visibilityChanged(handle: QDockWidget_hookH; hook: QDockWidget_visibilityChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_visibilityChanged'; procedure QDockWidget_hook_hook_dockLocationChanged(handle: QDockWidget_hookH; hook: QDockWidget_dockLocationChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_dockLocationChanged'; function QTabBar_hook_create(handle: QObjectH): QTabBar_hookH; cdecl; external Qt4PasLib name 'QTabBar_hook_create'; procedure QTabBar_hook_destroy(handle: QTabBar_hookH); cdecl; external Qt4PasLib name 'QTabBar_hook_destroy'; procedure QTabBar_hook_hook_currentChanged(handle: QTabBar_hookH; hook: QTabBar_currentChanged_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_currentChanged'; procedure QTabBar_hook_hook_tabCloseRequested(handle: QTabBar_hookH; hook: QTabBar_tabCloseRequested_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_tabCloseRequested'; procedure QTabBar_hook_hook_tabMoved(handle: QTabBar_hookH; hook: QTabBar_tabMoved_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_tabMoved'; function QProgressBar_hook_create(handle: QObjectH): QProgressBar_hookH; cdecl; external Qt4PasLib name 'QProgressBar_hook_create'; procedure QProgressBar_hook_destroy(handle: QProgressBar_hookH); cdecl; external Qt4PasLib name 'QProgressBar_hook_destroy'; procedure QProgressBar_hook_hook_valueChanged(handle: QProgressBar_hookH; hook: QProgressBar_valueChanged_Event); cdecl; external Qt4PasLib name 'QProgressBar_hook_hook_valueChanged'; function QStatusBar_hook_create(handle: QObjectH): QStatusBar_hookH; cdecl; external Qt4PasLib name 'QStatusBar_hook_create'; procedure QStatusBar_hook_destroy(handle: QStatusBar_hookH); cdecl; external Qt4PasLib name 'QStatusBar_hook_destroy'; procedure QStatusBar_hook_hook_messageChanged(handle: QStatusBar_hookH; hook: QStatusBar_messageChanged_Event); cdecl; external Qt4PasLib name 'QStatusBar_hook_hook_messageChanged'; function QToolBox_hook_create(handle: QObjectH): QToolBox_hookH; cdecl; external Qt4PasLib name 'QToolBox_hook_create'; procedure QToolBox_hook_destroy(handle: QToolBox_hookH); cdecl; external Qt4PasLib name 'QToolBox_hook_destroy'; procedure QToolBox_hook_hook_currentChanged(handle: QToolBox_hookH; hook: QToolBox_currentChanged_Event); cdecl; external Qt4PasLib name 'QToolBox_hook_hook_currentChanged'; function QToolButton_hook_create(handle: QObjectH): QToolButton_hookH; cdecl; external Qt4PasLib name 'QToolButton_hook_create'; procedure QToolButton_hook_destroy(handle: QToolButton_hookH); cdecl; external Qt4PasLib name 'QToolButton_hook_destroy'; procedure QToolButton_hook_hook_triggered(handle: QToolButton_hookH; hook: QToolButton_triggered_Event); cdecl; external Qt4PasLib name 'QToolButton_hook_hook_triggered'; function QMdiArea_hook_create(handle: QObjectH): QMdiArea_hookH; cdecl; external Qt4PasLib name 'QMdiArea_hook_create'; procedure QMdiArea_hook_destroy(handle: QMdiArea_hookH); cdecl; external Qt4PasLib name 'QMdiArea_hook_destroy'; procedure QMdiArea_hook_hook_subWindowActivated(handle: QMdiArea_hookH; hook: QMdiArea_subWindowActivated_Event); cdecl; external Qt4PasLib name 'QMdiArea_hook_hook_subWindowActivated'; function QMdiSubWindow_hook_create(handle: QObjectH): QMdiSubWindow_hookH; cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_create'; procedure QMdiSubWindow_hook_destroy(handle: QMdiSubWindow_hookH); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_destroy'; procedure QMdiSubWindow_hook_hook_windowStateChanged(handle: QMdiSubWindow_hookH; hook: QMdiSubWindow_windowStateChanged_Event); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_hook_windowStateChanged'; procedure QMdiSubWindow_hook_hook_aboutToActivate(handle: QMdiSubWindow_hookH; hook: QMdiSubWindow_aboutToActivate_Event); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_hook_aboutToActivate'; function QCalendarWidget_hook_create(handle: QObjectH): QCalendarWidget_hookH; cdecl; external Qt4PasLib name 'QCalendarWidget_hook_create'; procedure QCalendarWidget_hook_destroy(handle: QCalendarWidget_hookH); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_destroy'; procedure QCalendarWidget_hook_hook_selectionChanged(handle: QCalendarWidget_hookH; hook: QCalendarWidget_selectionChanged_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_selectionChanged'; procedure QCalendarWidget_hook_hook_clicked(handle: QCalendarWidget_hookH; hook: QCalendarWidget_clicked_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_clicked'; procedure QCalendarWidget_hook_hook_activated(handle: QCalendarWidget_hookH; hook: QCalendarWidget_activated_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_activated'; procedure QCalendarWidget_hook_hook_currentPageChanged(handle: QCalendarWidget_hookH; hook: QCalendarWidget_currentPageChanged_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_currentPageChanged'; function QPrintPreviewWidget_hook_create(handle: QObjectH): QPrintPreviewWidget_hookH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_create'; procedure QPrintPreviewWidget_hook_destroy(handle: QPrintPreviewWidget_hookH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_destroy'; procedure QPrintPreviewWidget_hook_hook_paintRequested(handle: QPrintPreviewWidget_hookH; hook: QPrintPreviewWidget_paintRequested_Event); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_hook_paintRequested'; procedure QPrintPreviewWidget_hook_hook_previewChanged(handle: QPrintPreviewWidget_hookH; hook: QPrintPreviewWidget_previewChanged_Event); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_hook_previewChanged'; function QAbstractItemView_hook_create(handle: QObjectH): QAbstractItemView_hookH; cdecl; external Qt4PasLib name 'QAbstractItemView_hook_create'; procedure QAbstractItemView_hook_destroy(handle: QAbstractItemView_hookH); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_destroy'; procedure QAbstractItemView_hook_hook_pressed(handle: QAbstractItemView_hookH; hook: QAbstractItemView_pressed_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_pressed'; procedure QAbstractItemView_hook_hook_clicked(handle: QAbstractItemView_hookH; hook: QAbstractItemView_clicked_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_clicked'; procedure QAbstractItemView_hook_hook_doubleClicked(handle: QAbstractItemView_hookH; hook: QAbstractItemView_doubleClicked_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_doubleClicked'; procedure QAbstractItemView_hook_hook_activated(handle: QAbstractItemView_hookH; hook: QAbstractItemView_activated_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_activated'; procedure QAbstractItemView_hook_hook_entered(handle: QAbstractItemView_hookH; hook: QAbstractItemView_entered_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_entered'; procedure QAbstractItemView_hook_hook_viewportEntered(handle: QAbstractItemView_hookH; hook: QAbstractItemView_viewportEntered_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_viewportEntered'; function QListView_hook_create(handle: QObjectH): QListView_hookH; cdecl; external Qt4PasLib name 'QListView_hook_create'; procedure QListView_hook_destroy(handle: QListView_hookH); cdecl; external Qt4PasLib name 'QListView_hook_destroy'; function QItemSelectionRange_hook_create(handle: QObjectH): QItemSelectionRange_hookH; cdecl; external Qt4PasLib name 'QItemSelectionRange_hook_create'; procedure QItemSelectionRange_hook_destroy(handle: QItemSelectionRange_hookH); cdecl; external Qt4PasLib name 'QItemSelectionRange_hook_destroy'; function QItemSelectionModel_hook_create(handle: QObjectH): QItemSelectionModel_hookH; cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_create'; procedure QItemSelectionModel_hook_destroy(handle: QItemSelectionModel_hookH); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_destroy'; procedure QItemSelectionModel_hook_hook_currentChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentChanged'; procedure QItemSelectionModel_hook_hook_currentRowChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentRowChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentRowChanged'; procedure QItemSelectionModel_hook_hook_currentColumnChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentColumnChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentColumnChanged'; function QListWidgetItem_hook_create(handle: QObjectH): QListWidgetItem_hookH; cdecl; external Qt4PasLib name 'QListWidgetItem_hook_create'; procedure QListWidgetItem_hook_destroy(handle: QListWidgetItem_hookH); cdecl; external Qt4PasLib name 'QListWidgetItem_hook_destroy'; function QListWidget_hook_create(handle: QObjectH): QListWidget_hookH; cdecl; external Qt4PasLib name 'QListWidget_hook_create'; procedure QListWidget_hook_destroy(handle: QListWidget_hookH); cdecl; external Qt4PasLib name 'QListWidget_hook_destroy'; procedure QListWidget_hook_hook_itemPressed(handle: QListWidget_hookH; hook: QListWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemPressed'; procedure QListWidget_hook_hook_itemClicked(handle: QListWidget_hookH; hook: QListWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemClicked'; procedure QListWidget_hook_hook_itemDoubleClicked(handle: QListWidget_hookH; hook: QListWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemDoubleClicked'; procedure QListWidget_hook_hook_itemActivated(handle: QListWidget_hookH; hook: QListWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemActivated'; procedure QListWidget_hook_hook_itemEntered(handle: QListWidget_hookH; hook: QListWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemEntered'; procedure QListWidget_hook_hook_itemChanged(handle: QListWidget_hookH; hook: QListWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemChanged'; procedure QListWidget_hook_hook_currentItemChanged(handle: QListWidget_hookH; hook: QListWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentItemChanged'; procedure QListWidget_hook_hook_currentTextChanged(handle: QListWidget_hookH; hook: QListWidget_currentTextChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentTextChanged'; procedure QListWidget_hook_hook_currentRowChanged(handle: QListWidget_hookH; hook: QListWidget_currentRowChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentRowChanged'; procedure QListWidget_hook_hook_itemSelectionChanged(handle: QListWidget_hookH; hook: QListWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemSelectionChanged'; function QTreeView_hook_create(handle: QObjectH): QTreeView_hookH; cdecl; external Qt4PasLib name 'QTreeView_hook_create'; procedure QTreeView_hook_destroy(handle: QTreeView_hookH); cdecl; external Qt4PasLib name 'QTreeView_hook_destroy'; procedure QTreeView_hook_hook_expanded(handle: QTreeView_hookH; hook: QTreeView_expanded_Event); cdecl; external Qt4PasLib name 'QTreeView_hook_hook_expanded'; procedure QTreeView_hook_hook_collapsed(handle: QTreeView_hookH; hook: QTreeView_collapsed_Event); cdecl; external Qt4PasLib name 'QTreeView_hook_hook_collapsed'; function QTreeWidgetItem_hook_create(handle: QObjectH): QTreeWidgetItem_hookH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_hook_create'; procedure QTreeWidgetItem_hook_destroy(handle: QTreeWidgetItem_hookH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_hook_destroy'; function QTreeWidget_hook_create(handle: QObjectH): QTreeWidget_hookH; cdecl; external Qt4PasLib name 'QTreeWidget_hook_create'; procedure QTreeWidget_hook_destroy(handle: QTreeWidget_hookH); cdecl; external Qt4PasLib name 'QTreeWidget_hook_destroy'; procedure QTreeWidget_hook_hook_itemPressed(handle: QTreeWidget_hookH; hook: QTreeWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemPressed'; procedure QTreeWidget_hook_hook_itemClicked(handle: QTreeWidget_hookH; hook: QTreeWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemClicked'; procedure QTreeWidget_hook_hook_itemDoubleClicked(handle: QTreeWidget_hookH; hook: QTreeWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemDoubleClicked'; procedure QTreeWidget_hook_hook_itemActivated(handle: QTreeWidget_hookH; hook: QTreeWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemActivated'; procedure QTreeWidget_hook_hook_itemEntered(handle: QTreeWidget_hookH; hook: QTreeWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemEntered'; procedure QTreeWidget_hook_hook_itemChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemChanged'; procedure QTreeWidget_hook_hook_itemExpanded(handle: QTreeWidget_hookH; hook: QTreeWidget_itemExpanded_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemExpanded'; procedure QTreeWidget_hook_hook_itemCollapsed(handle: QTreeWidget_hookH; hook: QTreeWidget_itemCollapsed_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemCollapsed'; procedure QTreeWidget_hook_hook_currentItemChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_currentItemChanged'; procedure QTreeWidget_hook_hook_itemSelectionChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemSelectionChanged'; function QHeaderView_hook_create(handle: QObjectH): QHeaderView_hookH; cdecl; external Qt4PasLib name 'QHeaderView_hook_create'; procedure QHeaderView_hook_destroy(handle: QHeaderView_hookH); cdecl; external Qt4PasLib name 'QHeaderView_hook_destroy'; procedure QHeaderView_hook_hook_sectionMoved(handle: QHeaderView_hookH; hook: QHeaderView_sectionMoved_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionMoved'; procedure QHeaderView_hook_hook_sectionResized(handle: QHeaderView_hookH; hook: QHeaderView_sectionResized_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionResized'; procedure QHeaderView_hook_hook_sectionPressed(handle: QHeaderView_hookH; hook: QHeaderView_sectionPressed_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionPressed'; procedure QHeaderView_hook_hook_sectionClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionClicked'; procedure QHeaderView_hook_hook_sectionEntered(handle: QHeaderView_hookH; hook: QHeaderView_sectionEntered_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionEntered'; procedure QHeaderView_hook_hook_sectionDoubleClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionDoubleClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionDoubleClicked'; procedure QHeaderView_hook_hook_sectionCountChanged(handle: QHeaderView_hookH; hook: QHeaderView_sectionCountChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionCountChanged'; procedure QHeaderView_hook_hook_sectionHandleDoubleClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionHandleDoubleClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionHandleDoubleClicked'; procedure QHeaderView_hook_hook_sectionAutoResize(handle: QHeaderView_hookH; hook: QHeaderView_sectionAutoResize_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionAutoResize'; procedure QHeaderView_hook_hook_geometriesChanged(handle: QHeaderView_hookH; hook: QHeaderView_geometriesChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_geometriesChanged'; procedure QHeaderView_hook_hook_sortIndicatorChanged(handle: QHeaderView_hookH; hook: QHeaderView_sortIndicatorChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sortIndicatorChanged'; function QStandardItem_hook_create(handle: QObjectH): QStandardItem_hookH; cdecl; external Qt4PasLib name 'QStandardItem_hook_create'; procedure QStandardItem_hook_destroy(handle: QStandardItem_hookH); cdecl; external Qt4PasLib name 'QStandardItem_hook_destroy'; function QStandardItemModel_hook_create(handle: QObjectH): QStandardItemModel_hookH; cdecl; external Qt4PasLib name 'QStandardItemModel_hook_create'; procedure QStandardItemModel_hook_destroy(handle: QStandardItemModel_hookH); cdecl; external Qt4PasLib name 'QStandardItemModel_hook_destroy'; procedure QStandardItemModel_hook_hook_itemChanged(handle: QStandardItemModel_hookH; hook: QStandardItemModel_itemChanged_Event); cdecl; external Qt4PasLib name 'QStandardItemModel_hook_hook_itemChanged'; function QAbstractItemDelegate_hook_create(handle: QObjectH): QAbstractItemDelegate_hookH; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_create'; procedure QAbstractItemDelegate_hook_destroy(handle: QAbstractItemDelegate_hookH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_destroy'; procedure QAbstractItemDelegate_hook_hook_commitData(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_commitData_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_commitData'; procedure QAbstractItemDelegate_hook_hook_closeEditor(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_closeEditor_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_closeEditor'; procedure QAbstractItemDelegate_hook_hook_closeEditor2(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_closeEditor2_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_closeEditor2'; procedure QAbstractItemDelegate_hook_hook_sizeHintChanged(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_sizeHintChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_sizeHintChanged'; function QTableView_hook_create(handle: QObjectH): QTableView_hookH; cdecl; external Qt4PasLib name 'QTableView_hook_create'; procedure QTableView_hook_destroy(handle: QTableView_hookH); cdecl; external Qt4PasLib name 'QTableView_hook_destroy'; function QTableWidgetSelectionRange_hook_create(handle: QObjectH): QTableWidgetSelectionRange_hookH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_hook_create'; procedure QTableWidgetSelectionRange_hook_destroy(handle: QTableWidgetSelectionRange_hookH); cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_hook_destroy'; function QTableWidgetItem_hook_create(handle: QObjectH): QTableWidgetItem_hookH; cdecl; external Qt4PasLib name 'QTableWidgetItem_hook_create'; procedure QTableWidgetItem_hook_destroy(handle: QTableWidgetItem_hookH); cdecl; external Qt4PasLib name 'QTableWidgetItem_hook_destroy'; function QTableWidget_hook_create(handle: QObjectH): QTableWidget_hookH; cdecl; external Qt4PasLib name 'QTableWidget_hook_create'; procedure QTableWidget_hook_destroy(handle: QTableWidget_hookH); cdecl; external Qt4PasLib name 'QTableWidget_hook_destroy'; procedure QTableWidget_hook_hook_itemPressed(handle: QTableWidget_hookH; hook: QTableWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemPressed'; procedure QTableWidget_hook_hook_itemClicked(handle: QTableWidget_hookH; hook: QTableWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemClicked'; procedure QTableWidget_hook_hook_itemDoubleClicked(handle: QTableWidget_hookH; hook: QTableWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemDoubleClicked'; procedure QTableWidget_hook_hook_itemActivated(handle: QTableWidget_hookH; hook: QTableWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemActivated'; procedure QTableWidget_hook_hook_itemEntered(handle: QTableWidget_hookH; hook: QTableWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemEntered'; procedure QTableWidget_hook_hook_itemChanged(handle: QTableWidget_hookH; hook: QTableWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemChanged'; procedure QTableWidget_hook_hook_currentItemChanged(handle: QTableWidget_hookH; hook: QTableWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_currentItemChanged'; procedure QTableWidget_hook_hook_itemSelectionChanged(handle: QTableWidget_hookH; hook: QTableWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemSelectionChanged'; procedure QTableWidget_hook_hook_cellPressed(handle: QTableWidget_hookH; hook: QTableWidget_cellPressed_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellPressed'; procedure QTableWidget_hook_hook_cellClicked(handle: QTableWidget_hookH; hook: QTableWidget_cellClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellClicked'; procedure QTableWidget_hook_hook_cellDoubleClicked(handle: QTableWidget_hookH; hook: QTableWidget_cellDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellDoubleClicked'; procedure QTableWidget_hook_hook_cellActivated(handle: QTableWidget_hookH; hook: QTableWidget_cellActivated_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellActivated'; procedure QTableWidget_hook_hook_cellEntered(handle: QTableWidget_hookH; hook: QTableWidget_cellEntered_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellEntered'; procedure QTableWidget_hook_hook_cellChanged(handle: QTableWidget_hookH; hook: QTableWidget_cellChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellChanged'; procedure QTableWidget_hook_hook_currentCellChanged(handle: QTableWidget_hookH; hook: QTableWidget_currentCellChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_currentCellChanged'; function QDialog_hook_create(handle: QObjectH): QDialog_hookH; cdecl; external Qt4PasLib name 'QDialog_hook_create'; procedure QDialog_hook_destroy(handle: QDialog_hookH); cdecl; external Qt4PasLib name 'QDialog_hook_destroy'; procedure QDialog_hook_hook_finished(handle: QDialog_hookH; hook: QDialog_finished_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_finished'; procedure QDialog_hook_hook_accepted(handle: QDialog_hookH; hook: QDialog_accepted_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_accepted'; procedure QDialog_hook_hook_rejected(handle: QDialog_hookH; hook: QDialog_rejected_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_rejected'; function QFileDialog_hook_create(handle: QObjectH): QFileDialog_hookH; cdecl; external Qt4PasLib name 'QFileDialog_hook_create'; procedure QFileDialog_hook_destroy(handle: QFileDialog_hookH); cdecl; external Qt4PasLib name 'QFileDialog_hook_destroy'; procedure QFileDialog_hook_hook_fileSelected(handle: QFileDialog_hookH; hook: QFileDialog_fileSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_fileSelected'; procedure QFileDialog_hook_hook_filesSelected(handle: QFileDialog_hookH; hook: QFileDialog_filesSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_filesSelected'; procedure QFileDialog_hook_hook_currentChanged(handle: QFileDialog_hookH; hook: QFileDialog_currentChanged_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_currentChanged'; procedure QFileDialog_hook_hook_directoryEntered(handle: QFileDialog_hookH; hook: QFileDialog_directoryEntered_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_directoryEntered'; procedure QFileDialog_hook_hook_filterSelected(handle: QFileDialog_hookH; hook: QFileDialog_filterSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_filterSelected'; function QProgressDialog_hook_create(handle: QObjectH): QProgressDialog_hookH; cdecl; external Qt4PasLib name 'QProgressDialog_hook_create'; procedure QProgressDialog_hook_destroy(handle: QProgressDialog_hookH); cdecl; external Qt4PasLib name 'QProgressDialog_hook_destroy'; procedure QProgressDialog_hook_hook_canceled(handle: QProgressDialog_hookH; hook: QProgressDialog_canceled_Event); cdecl; external Qt4PasLib name 'QProgressDialog_hook_hook_canceled'; function QAbstractPrintDialog_hook_create(handle: QObjectH): QAbstractPrintDialog_hookH; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_hook_create'; procedure QAbstractPrintDialog_hook_destroy(handle: QAbstractPrintDialog_hookH); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_hook_destroy'; function QPrintDialog_hook_create(handle: QObjectH): QPrintDialog_hookH; cdecl; external Qt4PasLib name 'QPrintDialog_hook_create'; procedure QPrintDialog_hook_destroy(handle: QPrintDialog_hookH); cdecl; external Qt4PasLib name 'QPrintDialog_hook_destroy'; procedure QPrintDialog_hook_hook_accepted(handle: QPrintDialog_hookH; hook: QPrintDialog_accepted_Event); cdecl; external Qt4PasLib name 'QPrintDialog_hook_hook_accepted'; function QPrintPreviewDialog_hook_create(handle: QObjectH): QPrintPreviewDialog_hookH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_create'; procedure QPrintPreviewDialog_hook_destroy(handle: QPrintPreviewDialog_hookH); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_destroy'; procedure QPrintPreviewDialog_hook_hook_paintRequested(handle: QPrintPreviewDialog_hookH; hook: QPrintPreviewDialog_paintRequested_Event); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_hook_paintRequested'; function QSystemTrayIcon_hook_create(handle: QObjectH): QSystemTrayIcon_hookH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_create'; procedure QSystemTrayIcon_hook_destroy(handle: QSystemTrayIcon_hookH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_destroy'; procedure QSystemTrayIcon_hook_hook_activated(handle: QSystemTrayIcon_hookH; hook: QSystemTrayIcon_activated_Event); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_hook_activated'; procedure QSystemTrayIcon_hook_hook_messageClicked(handle: QSystemTrayIcon_hookH; hook: QSystemTrayIcon_messageClicked_Event); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_hook_messageClicked'; function QGraphicsScene_hook_create(handle: QObjectH): QGraphicsScene_hookH; cdecl; external Qt4PasLib name 'QGraphicsScene_hook_create'; procedure QGraphicsScene_hook_destroy(handle: QGraphicsScene_hookH); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_destroy'; procedure QGraphicsScene_hook_hook_sceneRectChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_sceneRectChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_sceneRectChanged'; procedure QGraphicsScene_hook_hook_selectionChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_selectionChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_selectionChanged'; function QAbstractSocket_hook_create(handle: QObjectH): QAbstractSocket_hookH; cdecl; external Qt4PasLib name 'QAbstractSocket_hook_create'; procedure QAbstractSocket_hook_destroy(handle: QAbstractSocket_hookH); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_destroy'; procedure QAbstractSocket_hook_hook_hostFound(handle: QAbstractSocket_hookH; hook: QAbstractSocket_hostFound_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_hostFound'; procedure QAbstractSocket_hook_hook_connected(handle: QAbstractSocket_hookH; hook: QAbstractSocket_connected_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_connected'; procedure QAbstractSocket_hook_hook_disconnected(handle: QAbstractSocket_hookH; hook: QAbstractSocket_disconnected_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_disconnected'; procedure QAbstractSocket_hook_hook_stateChanged(handle: QAbstractSocket_hookH; hook: QAbstractSocket_stateChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_stateChanged'; procedure QAbstractSocket_hook_hook_error(handle: QAbstractSocket_hookH; hook: QAbstractSocket_error_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_error'; procedure QAbstractSocket_hook_hook_proxyAuthenticationRequired(handle: QAbstractSocket_hookH; hook: QAbstractSocket_proxyAuthenticationRequired_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_proxyAuthenticationRequired'; function QUdpSocket_hook_create(handle: QObjectH): QUdpSocket_hookH; cdecl; external Qt4PasLib name 'QUdpSocket_hook_create'; procedure QUdpSocket_hook_destroy(handle: QUdpSocket_hookH); cdecl; external Qt4PasLib name 'QUdpSocket_hook_destroy'; function QTcpSocket_hook_create(handle: QObjectH): QTcpSocket_hookH; cdecl; external Qt4PasLib name 'QTcpSocket_hook_create'; procedure QTcpSocket_hook_destroy(handle: QTcpSocket_hookH); cdecl; external Qt4PasLib name 'QTcpSocket_hook_destroy'; function QTcpServer_hook_create(handle: QObjectH): QTcpServer_hookH; cdecl; external Qt4PasLib name 'QTcpServer_hook_create'; procedure QTcpServer_hook_destroy(handle: QTcpServer_hookH); cdecl; external Qt4PasLib name 'QTcpServer_hook_destroy'; procedure QTcpServer_hook_hook_newConnection(handle: QTcpServer_hookH; hook: QTcpServer_newConnection_Event); cdecl; external Qt4PasLib name 'QTcpServer_hook_hook_newConnection'; function QNetworkAccessManager_hook_create(handle: QObjectH): QNetworkAccessManager_hookH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_create'; procedure QNetworkAccessManager_hook_destroy(handle: QNetworkAccessManager_hookH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_destroy'; procedure QNetworkAccessManager_hook_hook_proxyAuthenticationRequired(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_proxyAuthenticationRequired_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_proxyAuthenticationRequired'; procedure QNetworkAccessManager_hook_hook_authenticationRequired(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_authenticationRequired_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_authenticationRequired'; procedure QNetworkAccessManager_hook_hook_finished(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_finished_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_finished'; function QNetworkReply_hook_create(handle: QObjectH): QNetworkReply_hookH; cdecl; external Qt4PasLib name 'QNetworkReply_hook_create'; procedure QNetworkReply_hook_destroy(handle: QNetworkReply_hookH); cdecl; external Qt4PasLib name 'QNetworkReply_hook_destroy'; procedure QNetworkReply_hook_hook_metaDataChanged(handle: QNetworkReply_hookH; hook: QNetworkReply_metaDataChanged_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_metaDataChanged'; procedure QNetworkReply_hook_hook_finished(handle: QNetworkReply_hookH; hook: QNetworkReply_finished_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_finished'; procedure QNetworkReply_hook_hook_error(handle: QNetworkReply_hookH; hook: QNetworkReply_error_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_error'; procedure QNetworkReply_hook_hook_uploadProgress(handle: QNetworkReply_hookH; hook: QNetworkReply_uploadProgress_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_uploadProgress'; procedure QNetworkReply_hook_hook_downloadProgress(handle: QNetworkReply_hookH; hook: QNetworkReply_downloadProgress_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_downloadProgress'; function QWebHitTestResult_hook_create(handle: QObjectH): QWebHitTestResult_hookH; cdecl; external Qt4PasLib name 'QWebHitTestResult_hook_create'; procedure QWebHitTestResult_hook_destroy(handle: QWebHitTestResult_hookH); cdecl; external Qt4PasLib name 'QWebHitTestResult_hook_destroy'; function QWebFrame_hook_create(handle: QObjectH): QWebFrame_hookH; cdecl; external Qt4PasLib name 'QWebFrame_hook_create'; procedure QWebFrame_hook_destroy(handle: QWebFrame_hookH); cdecl; external Qt4PasLib name 'QWebFrame_hook_destroy'; procedure QWebFrame_hook_hook_javaScriptWindowObjectCleared(handle: QWebFrame_hookH; hook: QWebFrame_javaScriptWindowObjectCleared_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_javaScriptWindowObjectCleared'; procedure QWebFrame_hook_hook_provisionalLoad(handle: QWebFrame_hookH; hook: QWebFrame_provisionalLoad_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_provisionalLoad'; procedure QWebFrame_hook_hook_titleChanged(handle: QWebFrame_hookH; hook: QWebFrame_titleChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_titleChanged'; procedure QWebFrame_hook_hook_urlChanged(handle: QWebFrame_hookH; hook: QWebFrame_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_urlChanged'; procedure QWebFrame_hook_hook_initialLayoutCompleted(handle: QWebFrame_hookH; hook: QWebFrame_initialLayoutCompleted_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_initialLayoutCompleted'; procedure QWebFrame_hook_hook_iconChanged(handle: QWebFrame_hookH; hook: QWebFrame_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_iconChanged'; function QWebSecurityOrigin_hook_create(handle: QObjectH): QWebSecurityOrigin_hookH; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_hook_create'; procedure QWebSecurityOrigin_hook_destroy(handle: QWebSecurityOrigin_hookH); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_hook_destroy'; function QWebDatabase_hook_create(handle: QObjectH): QWebDatabase_hookH; cdecl; external Qt4PasLib name 'QWebDatabase_hook_create'; procedure QWebDatabase_hook_destroy(handle: QWebDatabase_hookH); cdecl; external Qt4PasLib name 'QWebDatabase_hook_destroy'; function QWebHistoryItem_hook_create(handle: QObjectH): QWebHistoryItem_hookH; cdecl; external Qt4PasLib name 'QWebHistoryItem_hook_create'; procedure QWebHistoryItem_hook_destroy(handle: QWebHistoryItem_hookH); cdecl; external Qt4PasLib name 'QWebHistoryItem_hook_destroy'; function QWebHistory_hook_create(handle: QObjectH): QWebHistory_hookH; cdecl; external Qt4PasLib name 'QWebHistory_hook_create'; procedure QWebHistory_hook_destroy(handle: QWebHistory_hookH); cdecl; external Qt4PasLib name 'QWebHistory_hook_destroy'; function QWebHistoryInterface_hook_create(handle: QObjectH): QWebHistoryInterface_hookH; cdecl; external Qt4PasLib name 'QWebHistoryInterface_hook_create'; procedure QWebHistoryInterface_hook_destroy(handle: QWebHistoryInterface_hookH); cdecl; external Qt4PasLib name 'QWebHistoryInterface_hook_destroy'; function QWebPage_hook_create(handle: QObjectH): QWebPage_hookH; cdecl; external Qt4PasLib name 'QWebPage_hook_create'; procedure QWebPage_hook_destroy(handle: QWebPage_hookH); cdecl; external Qt4PasLib name 'QWebPage_hook_destroy'; procedure QWebPage_hook_hook_loadStarted(handle: QWebPage_hookH; hook: QWebPage_loadStarted_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadStarted'; procedure QWebPage_hook_hook_loadProgress(handle: QWebPage_hookH; hook: QWebPage_loadProgress_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadProgress'; procedure QWebPage_hook_hook_loadFinished(handle: QWebPage_hookH; hook: QWebPage_loadFinished_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadFinished'; procedure QWebPage_hook_hook_linkHovered(handle: QWebPage_hookH; hook: QWebPage_linkHovered_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_linkHovered'; procedure QWebPage_hook_hook_statusBarMessage(handle: QWebPage_hookH; hook: QWebPage_statusBarMessage_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_statusBarMessage'; procedure QWebPage_hook_hook_selectionChanged(handle: QWebPage_hookH; hook: QWebPage_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_selectionChanged'; procedure QWebPage_hook_hook_frameCreated(handle: QWebPage_hookH; hook: QWebPage_frameCreated_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_frameCreated'; procedure QWebPage_hook_hook_geometryChangeRequested(handle: QWebPage_hookH; hook: QWebPage_geometryChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_geometryChangeRequested'; procedure QWebPage_hook_hook_repaintRequested(handle: QWebPage_hookH; hook: QWebPage_repaintRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_repaintRequested'; procedure QWebPage_hook_hook_scrollRequested(handle: QWebPage_hookH; hook: QWebPage_scrollRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_scrollRequested'; procedure QWebPage_hook_hook_windowCloseRequested(handle: QWebPage_hookH; hook: QWebPage_windowCloseRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_windowCloseRequested'; procedure QWebPage_hook_hook_printRequested(handle: QWebPage_hookH; hook: QWebPage_printRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_printRequested'; procedure QWebPage_hook_hook_linkClicked(handle: QWebPage_hookH; hook: QWebPage_linkClicked_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_linkClicked'; procedure QWebPage_hook_hook_toolBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_toolBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_toolBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_statusBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_statusBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_statusBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_menuBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_menuBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_menuBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_unsupportedContent(handle: QWebPage_hookH; hook: QWebPage_unsupportedContent_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_unsupportedContent'; procedure QWebPage_hook_hook_downloadRequested(handle: QWebPage_hookH; hook: QWebPage_downloadRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_downloadRequested'; procedure QWebPage_hook_hook_microFocusChanged(handle: QWebPage_hookH; hook: QWebPage_microFocusChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_microFocusChanged'; procedure QWebPage_hook_hook_contentsChanged(handle: QWebPage_hookH; hook: QWebPage_contentsChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_contentsChanged'; procedure QWebPage_hook_hook_databaseQuotaExceeded(handle: QWebPage_hookH; hook: QWebPage_databaseQuotaExceeded_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_databaseQuotaExceeded'; procedure QWebPage_hook_hook_saveFrameStateRequested(handle: QWebPage_hookH; hook: QWebPage_saveFrameStateRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_saveFrameStateRequested'; procedure QWebPage_hook_hook_restoreFrameStateRequested(handle: QWebPage_hookH; hook: QWebPage_restoreFrameStateRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_restoreFrameStateRequested'; function QWebSettings_hook_create(handle: QObjectH): QWebSettings_hookH; cdecl; external Qt4PasLib name 'QWebSettings_hook_create'; procedure QWebSettings_hook_destroy(handle: QWebSettings_hookH); cdecl; external Qt4PasLib name 'QWebSettings_hook_destroy'; function QWebView_hook_create(handle: QObjectH): QWebView_hookH; cdecl; external Qt4PasLib name 'QWebView_hook_create'; procedure QWebView_hook_destroy(handle: QWebView_hookH); cdecl; external Qt4PasLib name 'QWebView_hook_destroy'; procedure QWebView_hook_hook_loadStarted(handle: QWebView_hookH; hook: QWebView_loadStarted_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadStarted'; procedure QWebView_hook_hook_loadProgress(handle: QWebView_hookH; hook: QWebView_loadProgress_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadProgress'; procedure QWebView_hook_hook_loadFinished(handle: QWebView_hookH; hook: QWebView_loadFinished_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadFinished'; procedure QWebView_hook_hook_titleChanged(handle: QWebView_hookH; hook: QWebView_titleChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_titleChanged'; procedure QWebView_hook_hook_statusBarMessage(handle: QWebView_hookH; hook: QWebView_statusBarMessage_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_statusBarMessage'; procedure QWebView_hook_hook_linkClicked(handle: QWebView_hookH; hook: QWebView_linkClicked_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_linkClicked'; procedure QWebView_hook_hook_selectionChanged(handle: QWebView_hookH; hook: QWebView_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_selectionChanged'; procedure QWebView_hook_hook_iconChanged(handle: QWebView_hookH; hook: QWebView_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_iconChanged'; procedure QWebView_hook_hook_urlChanged(handle: QWebView_hookH; hook: QWebView_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_urlChanged'; //======================================================= // Dynamic Qt Version //======================================================= function QtVersion : PChar; cdecl; external Qt4PasLib name 'QtVersion'; //======================================================= // Special-Purpose Global Functions Exported by Qt //======================================================= {$IFDEF BINUX} procedure QtX11WaitForWindowManager(handle : QWidgetH); cdecl; external Qt4PasLib name 'qtx11waitforwindowmanager'; {$ENDIF} {$IFDEF DARWIN} procedure QtMacSetDockMenu(handle : QMenuH); cdecl; external Qt4PasLib name 'qtmacsetdockmenu'; {$ENDIF} //======================================================= // Drawing Utility Functions (qdrawutil.h) //======================================================= procedure q_DrawShadeRect(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadeRect'; procedure q_DrawShadeRect(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadeRect2'; procedure q_DrawPlainRect(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; p6: PQColor; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawPlainRect'; procedure q_DrawPlainRect(p: QPainterH; r: PRect; p3: PQColor; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawPlainRect2'; procedure q_DrawWinPanel(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawWinPanel'; procedure q_DrawWinPanel(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawWinPanel2'; procedure q_DrawShadeLine(p: QPainterH; x1: Integer; y1: Integer; x2: Integer; y2: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0); overload; cdecl; external Qt4PasLib name 'q_DrawShadeLine'; procedure q_DrawShadePanel(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadePanel'; procedure q_DrawShadePanel(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadePanel2'; //======================================================= // Pascal Bind Functions //======================================================= procedure initPWideStrings(CUPS, UOPS, LOPS, IPS, FPS: Pointer); cdecl; external Qt4PasLib name 'initPWideStrings'; procedure InitializePPtrIntArray(GPP, GPL, SPL: Pointer); cdecl; external Qt4PasLib name 'initializePPtrIntArray'; procedure InitializeQRealArray(GPP, GPL, SPL: Pointer); cdecl; external Qt4PasLib name 'initializeQRealArray'; implementation uses SysUtils,Math; function QtPoint(X,Y:integer): TQtPoint; begin Result.X:=X; Result.Y:=Y; end; function QtPointF(X,Y:QReal): TQtPointF; begin Result.X:=X; Result.Y:=Y; end; // AnsiString Access from c-code procedure CopyCharsToPAnsiString(Chars: PAnsiChar; var S: AnsiString); cdecl; export; begin S := Chars; end; function CharsOfPAnsiString(var S: AnsiString): PAnsiChar; cdecl; export; begin Result := PAnsiChar(Pointer(S)); end; procedure InitPAnsiString(var S: PAnsiString); cdecl; export; begin New(S); end; procedure FinalPAnsiString(var S: PAnsiString); cdecl; export; begin Dispose(S); end; // WideString Access from c-code procedure CopyUnicodeToPWideString(Unicode: PWideChar; var S: WideString; Len: Integer); cdecl; export; begin SetString(S, Unicode, Len); end; function UnicodeOfPWideString(var S: WideString): PWideChar; cdecl; export; const cEmptyStr = ''; begin if @S = nil then Result := cEmptyStr else Result := PWideChar(Pointer(S)); end; function LengthOfPWideString(var S: WideString): Integer; cdecl; export; begin if @S <> nil then Result := Length(S) else Result := 0; end; procedure InitPWideString(var S: PWideString); cdecl; export; begin New(S); end; procedure FinalPWideString(var S: PWideString); cdecl; export; begin Dispose(S); end; // PtrInt Array Access from c-code function GetPtrIntArrayAddr(var PArr : TPtrIntArray): PPtrInt; cdecl; export; begin Result:=@PArr[0]; end; function GetPtrIntArrayLength(var PArr: TPtrIntArray): Integer; cdecl; export; begin Result := Length(PArr); end; procedure SetPtrIntArrayLength(var PArr: TPtrIntArray; Len: Integer); cdecl; export; begin SetLength(PArr, Len); end; // QReal Array Access from c-code function GetQRealArrayAddr(var PArr : TQRealArray): PPtrInt; cdecl; export; begin Result := @PArr[0]; end; function GetQRealArrayLength(var PArr: TQRealArray): Integer; cdecl; export; begin Result := Length(PArr); end; procedure SetQRealArrayLength(var PArr: TQRealArray; Len: Integer); cdecl; export; begin SetLength(PArr, Len); end; initialization initPWideStrings(@CopyUnicodeToPWideString, @UnicodeOfPWideString, @LengthOfPWideString, @InitPWideString, @FinalPWideString); InitializePPtrIntArray(@GetPtrIntArrayAddr, @GetPtrIntArrayLength, @SetPtrIntArrayLength); InitializeQRealArray(@GetQRealArrayAddr, @GetQRealArrayLength, @SetQRealArrayLength); SetExceptionMask([exDenormalized,exInvalidOp,exOverflow,exPrecision,exUnderflow,exZeroDivide]); end. doublecmd-0.9.8/plugins/wlx/WlxMplayer/src/fpc-extra.cfg0000644000175000001440000000015711673054716022303 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-0.9.8/plugins/wlx/WlxMplayer/lib/0000755000175000001440000000000013615241421017672 5ustar alexxusersdoublecmd-0.9.8/plugins/wlx/WlxMplayer/README.txt0000644000175000001440000000254212014201074020615 0ustar alexxusers 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-0.9.8/plugins/wlx/WlxMplayer/COPYING.txt0000644000175000001440000002073512407332717021013 0ustar alexxusers 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. 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-0.9.8/plugins/wfx/0000755000175000001440000000000013615241421015012 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/sample/0000755000175000001440000000000013615241421016273 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/sample/src/0000755000175000001440000000000013615241421017062 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/sample/src/sample.lpr0000644000175000001440000000335412014201074021057 0ustar alexxuserslibrary 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-0.9.8/plugins/wfx/sample/src/sample.lpi0000644000175000001440000000416113022776142021060 0ustar alexxusers doublecmd-0.9.8/plugins/wfx/sample/lib/0000755000175000001440000000000013615241421017041 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/samba/0000755000175000001440000000000013615241421016075 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/samba/src/0000755000175000001440000000000013615241421016664 5ustar alexxusersdoublecmd-0.9.8/plugins/wfx/samba/src/smbfunc.pas0000644000175000001440000004217212727572262021051 0ustar alexxusers{ 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-0.9.8/plugins/wfx/samba/src/smbauthdlg.pas0000755000175000001440000000474612633246730021550 0ustar alexxusersunit 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-0.9.8/plugins/wfx/samba/src/smbauthdlg.lfm0000755000175000001440000002474411622223034021530 0ustar alexxusersobject 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-0.9.8/plugins/wfx/samba/src/samba.lpr0000644000175000001440000000053612014201074020462 0ustar alexxuserslibrary 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-0.9.8/plugins/wfx/samba/src/samba.lpi0000644000175000001440000001007713022776142020467 0ustar alexxusers <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="../lib/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="../lib/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-0.9.8/plugins/wfx/samba/src/libsmbclient.pas����������������������������������������������0000644�0001750�0000144�00000011511�12014201074�022027� 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-0.9.8/plugins/wfx/samba/lib/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016643� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/samba/COPYING.LESSER.txt������������������������������������������������0000644�0001750�0000144�00000063642�12504341721�020755� 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-0.9.8/plugins/wfx/samba/COPYING.GPL.txt���������������������������������������������������0000644�0001750�0000144�00000043254�12504341721�020377� 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-0.9.8/plugins/wfx/gvfs/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015757� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016546� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/src/gvfs.c���������������������������������������������������������0000644�0001750�0000144�00000162423�12467651404�017701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Double Commander ------------------------------------------------------------------------- WFX plugin for working with GVFS Copyright (C) 2009-2010 Koblov Alexander (Alexx2000@mail.ru) Based on: GVFS plugin for Tux Commander Copyright (C) 2008-2009 Tomas Bzatek <tbzatek@users.sourceforge.net> 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdint.h> #include <sys/stat.h> #include <errno.h> #include <glib.h> #include <gio/gio.h> #include <glib/gtypes.h> #include "wfxplugin.h" #define CONST_DEFAULT_QUERY_INFO_ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_NAME "," \ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "," G_FILE_ATTRIBUTE_STANDARD_SIZE "," \ G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET "," G_FILE_ATTRIBUTE_TIME_MODIFIED "," \ G_FILE_ATTRIBUTE_TIME_ACCESS "," G_FILE_ATTRIBUTE_TIME_CREATED "," \ G_FILE_ATTRIBUTE_UNIX_MODE "," G_FILE_ATTRIBUTE_UNIX_UID "," \ G_FILE_ATTRIBUTE_UNIX_GID #define TUXCMD_DEFAULT_COPY_FLAGS G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS #define GROUP_NAME "gvfs" #define PathDelim "/" #define cAddConnection "<Add connection>" #define cQuickConnection "<Quick connection>" #define cAnonymous "anonymous" #define cDefaultIniName "gvfs.ini" #define IS_DIR_SEP(ch) ((ch) == '/') #define Int32x32To64(a,b) ((gint64)(a)*(gint64)(b)) typedef int TVFSResult; typedef struct _Connection { gchar *Name; gchar *Type; gchar *Host; gchar *UserName; gchar *Password; gchar *Path; } TConnection, *PConnection; struct TVFSGlobs { PConnection Connection; gchar *RemotePath; GFile *file; GFileEnumerator *enumerator; GFile *enumerated_file; GMainLoop *mount_main_loop; TVFSResult mount_result; int mount_try; gboolean ftp_anonymous; }; typedef struct { gchar *Path; gint Index; GList *list; struct TVFSGlobs *globs; } TListRec, *PListRec; typedef struct _ProgressInfo { gchar SourceName[MAX_PATH]; gchar TargetName[MAX_PATH]; GCancellable *cancellable; } TProgressInfo, *PProgressInfo; //--------------------------------------------------------------------- // global variables //--------------------------------------------------------------------- int gPluginNumber; tProgressProc gProgressProc; tLogProc gLogProc; tRequestProc gRequestProc; gchar gDefaultIniName[MAX_PATH]; GList *ActiveConnectionList; GList *ConnectionList; PConnection gConnection; //--------------------------------------------------------------------- unsigned long FileTimeToUnixTime(LPFILETIME ft) { gint64 ll = ft->dwHighDateTime; ll = (ll << 32) | ft->dwLowDateTime; ll = (ll - 116444736000000000) / 10000000; return (unsigned long)ll; } gboolean UnixTimeToFileTime(unsigned long mtime, LPFILETIME ft) { gint64 ll = Int32x32To64(mtime, 10000000) + 116444736000000000; ft->dwLowDateTime = (DWORD)ll; ft->dwHighDateTime = ll >> 32; return TRUE; } static TVFSResult g_error_to_TVFSResult (GError *error) { g_print ("g_error_to_TVFSResult: code = %d\n", error->code); switch (error->code) { case G_IO_ERROR_FAILED: case G_IO_ERROR_NOT_FOUND: case G_IO_ERROR_PERMISSION_DENIED: return FS_FILE_NOTFOUND; break; case G_IO_ERROR_CANCELLED: return FS_FILE_USERABORT; break; case G_IO_ERROR_NOT_SUPPORTED: case G_IO_ERROR_FILENAME_TOO_LONG: return FS_FILE_NOTSUPPORTED; break; case G_IO_ERROR_IS_DIRECTORY: case G_IO_ERROR_NOT_REGULAR_FILE: case G_IO_ERROR_NOT_SYMBOLIC_LINK: case G_IO_ERROR_NOT_MOUNTABLE_FILE: case G_IO_ERROR_INVALID_FILENAME: case G_IO_ERROR_TOO_MANY_LINKS: case G_IO_ERROR_INVALID_ARGUMENT: case G_IO_ERROR_NOT_DIRECTORY: case G_IO_ERROR_NOT_MOUNTED: case G_IO_ERROR_ALREADY_MOUNTED: case G_IO_ERROR_WRONG_ETAG: case G_IO_ERROR_TIMED_OUT: case G_IO_ERROR_WOULD_RECURSE: case G_IO_ERROR_HOST_NOT_FOUND: return FS_FILE_READERROR; break; case G_IO_ERROR_NO_SPACE: case G_IO_ERROR_EXISTS: case G_IO_ERROR_NOT_EMPTY: case G_IO_ERROR_CLOSED: case G_IO_ERROR_PENDING: case G_IO_ERROR_READ_ONLY: case G_IO_ERROR_CANT_CREATE_BACKUP: case G_IO_ERROR_BUSY: case G_IO_ERROR_WOULD_BLOCK: case G_IO_ERROR_WOULD_MERGE: return FS_FILE_WRITEERROR; break; case G_IO_ERROR_FAILED_HANDLED: default: return FS_FILE_NOTSUPPORTED; } } static void ask_password_cb (GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, gpointer user_data) { struct TVFSGlobs *globs; char username[MAX_PATH]; char password[MAX_PATH]; int anonymous; char domain[MAX_PATH]; GPasswordSave password_save; gboolean mount_handled = FALSE; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); globs->mount_try++; /* First pass, look if we have a password to supply */ if (globs->mount_try == 1) { if ((flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED) && globs->ftp_anonymous) { printf ("(WW) ask_password_cb: mount_try = %d, trying FTP anonymous login...\n", globs->mount_try); g_mount_operation_set_anonymous (op, TRUE); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } if ((flags & G_ASK_PASSWORD_NEED_USERNAME) && (globs->Connection->UserName != NULL)) { printf ("(WW) ask_password_cb: mount_try = %d, trying login with saved username...\n", globs->mount_try); g_mount_operation_set_username (op, globs->Connection->UserName); mount_handled = TRUE; } if ((flags & G_ASK_PASSWORD_NEED_PASSWORD) && (globs->Connection->Password != NULL)) { printf ("(WW) ask_password_cb: mount_try = %d, trying login with saved password...\n", globs->mount_try); g_mount_operation_set_password (op, globs->Connection->Password); mount_handled = TRUE; } if (mount_handled) { g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } } /* Ask user for password */ g_print ("(WW) ask_password_cb: mount_try = %d, message = '%s'\n", globs->mount_try, message); /* Handle abort message from certain backends properly */ /* - e.g. SMB backends use this to mask multiple auth callbacks from smbclient */ if (default_user && strcmp (default_user, "ABORT") == 0) { g_print ("(WW) default_user == \"ABORT\", aborting\n"); g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } username[0] = 0; domain[0] = 0; password[0] = 0; anonymous = FALSE; password_save = G_PASSWORD_SAVE_NEVER; if (gRequestProc) { fprintf (stderr, " (II) Spawning callback_ask_password (%p)...\n", gRequestProc); g_strlcpy(username, default_user, MAX_PATH); g_strlcpy(domain, default_domain, MAX_PATH); if (flags & G_ASK_PASSWORD_NEED_USERNAME) { if (gRequestProc(gPluginNumber, RT_UserName, (char *)message, NULL, username, MAX_PATH)) { g_mount_operation_set_username (op, username); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_NEED_DOMAIN) { if (gRequestProc(gPluginNumber, RT_Other, (char *)message, "Domain:", domain, MAX_PATH)) { g_mount_operation_set_domain (op, domain); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_NEED_PASSWORD) { if (gRequestProc(gPluginNumber, RT_Password, (char *)message, NULL, password, MAX_PATH)) { g_mount_operation_set_password (op, password); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED) g_mount_operation_set_anonymous (op, anonymous); if (flags & G_ASK_PASSWORD_SAVING_SUPPORTED) g_mount_operation_set_password_save (op, password_save); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } /* Unhandled, abort */ g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); } static void ask_question_cb (GMountOperation *op, const gchar *message, const gchar *choices[], gpointer user_data) { struct TVFSGlobs *globs; int len; int choice; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); g_print ("(WW) ask_question_cb: message = '%s'\n", message); len = 0; while (choices[len] != NULL) { g_print ("(WW) ask_question_cb: choice[%d] = '%s'\n", len, choices[len]); len++; } choice = -1; /* if (globs->callback_ask_question) { fprintf (stderr, " (II) Spawning callback_ask_question (%p)...\n", globs->callback_ask_question); // At this moment, only SFTP uses ask_question and the second button is cancellation globs->callback_ask_question (message, choices, &choice, 1, globs->callback_data); fprintf (stderr, " (II) Received choice = %d\n", choice); if (choice >= 0) { g_mount_operation_set_choice (op, choice); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); } return; } */ g_mount_operation_reply (op, G_MOUNT_OPERATION_UNHANDLED); } static void mount_done_cb (GObject *object, GAsyncResult *res, gpointer user_data) { struct TVFSGlobs *globs; gboolean succeeded; GError *error = NULL; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); succeeded = g_file_mount_enclosing_volume_finish (G_FILE (object), res, &error); if (! succeeded) { g_print ("(EE) Error mounting location: %s\n", error->message); globs->mount_result = g_error_to_TVFSResult (error); g_error_free (error); } else { globs->mount_result = FS_FILE_OK; g_print ("(II) Mount successful.\n"); } g_main_loop_quit (globs->mount_main_loop); } static TVFSResult vfs_handle_mount (struct TVFSGlobs *globs, GFile *file) { GMountOperation *op; g_print ("(II) Mounting location...\n"); op = g_mount_operation_new (); g_signal_connect (op, "ask-password", (GCallback)ask_password_cb, globs); g_signal_connect (op, "ask-question", (GCallback)ask_question_cb, globs); globs->mount_result = FS_FILE_NOTFOUND; globs->mount_try = 0; /* Inspiration taken from Bastien Nocera's http://svn.gnome.org/viewvc/totem-pl-parser/trunk/plparse/totem-disc.c?view=markup */ globs->mount_main_loop = g_main_loop_new (NULL, FALSE); g_file_mount_enclosing_volume (file, G_MOUNT_MOUNT_NONE, op, NULL, mount_done_cb, globs); g_main_loop_run (globs->mount_main_loop); g_main_loop_unref (globs->mount_main_loop); globs->mount_main_loop = NULL; g_object_unref (op); return globs->mount_result; } struct TVFSGlobs * VFSNew () { struct TVFSGlobs *globs; globs = (struct TVFSGlobs *) malloc (sizeof (struct TVFSGlobs)); memset (globs, 0, sizeof (struct TVFSGlobs)); globs->file = NULL; globs->enumerator = NULL; globs->enumerated_file = NULL; return globs; } char * VFSGetServices () { GVfs *gvfs; const gchar* const * schemes; char *l = NULL; char *s; gvfs = g_vfs_get_default (); g_print ("(II) GVFS: is_active = %d\n", g_vfs_is_active (gvfs)); schemes = g_vfs_get_supported_uri_schemes (gvfs); for (; *schemes; schemes++) { if (l) { s = g_strdup_printf ("%s;%s", l, *schemes); g_free (l); l = s; } else l = g_strdup (*schemes); } g_print ("(II) GVFS: supported schemes: %s\n", l); return l; } char * VFSGetPrefix (struct TVFSGlobs *globs) { GFile *f; char *s; if (globs->file) { f = g_file_resolve_relative_path (globs->file, "/"); s = g_file_get_uri (f); g_object_unref (f); return s; } else return NULL; } char * VFSGetPath (struct TVFSGlobs *globs) { GFile *root; char *path, *s; if (globs->file) { root = g_file_resolve_relative_path (globs->file, "/"); if (root == NULL) return NULL; path = g_file_get_relative_path (root, globs->file); if (path == NULL) { g_object_unref (root); return NULL; } if (! g_path_is_absolute (path)) s = g_strdup_printf ("/%s", path); else s = g_strdup (path); g_print ("(II) VFSGetPath: '%s'\n", s); g_free (path); g_object_unref (root); return s; } else return NULL; } char * VFSGetPathURI (struct TVFSGlobs *globs) { if (globs->file) return g_file_get_uri (globs->file); else return NULL; } guint64 VFSGetFileSystemFree (struct TVFSGlobs *globs, char *APath) { GFileInfo *info; GError *error; guint64 res; if (globs->file == NULL) return 0; error = NULL; info = g_file_query_filesystem_info (globs->file, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error); if (error) { g_print ("(EE) VFSGetFileSystemFree: %s\n", error->message); g_error_free (error); return 0; } res = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); g_object_unref (info); return res; } guint64 VFSGetFileSystemSize (struct TVFSGlobs *globs, char *APath) { GFileInfo *info; GError *error; guint64 res; if (globs->file == NULL) return 0; error = NULL; info = g_file_query_filesystem_info (globs->file, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, NULL, &error); if (error) { g_print ("(EE) VFSGetFileSystemSize: %s\n", error->message); g_error_free (error); return 0; } res = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); g_object_unref (info); return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ TVFSResult VFSChangeDir (struct TVFSGlobs *globs, char *NewPath) { GFile *f; GFileEnumerator *en; GError *error, *error_shortcut; TVFSResult res; GFileInfo *info; gchar *target_uri; g_print ("VFSChangeDir: Enter\n"); if (globs->file == NULL) { g_print ("(EE) VFSChangeDir: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } g_print ("(II) VFSChangeDir: changing dir to '%s'\n", NewPath); f = g_file_resolve_relative_path (globs->file, NewPath); if (f == NULL) { g_print ("(EE) VFSChangeDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } res = FS_FILE_OK; while (1) { error = NULL; en = g_file_enumerate_children (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); /* if the target is shortcut, change the URI */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY)) { error_shortcut = NULL; info = g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error_shortcut); if (info) { target_uri = g_strdup (g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI)); g_object_unref (info); if (target_uri) { g_print ("(WW) VFSChangeDir: following shortcut, changing URI to '%s'\n", target_uri); g_object_unref (f); f = g_file_new_for_uri (target_uri); g_free (target_uri); g_error_free (error); continue; } } if (error_shortcut) g_error_free (error_shortcut); } /* Mount the target */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) { g_error_free (error); res = vfs_handle_mount (globs, f); if (res != FS_FILE_OK) { g_object_unref (f); return res; } else continue; } /* Any other errors --> report */ if (error) { g_print ("(EE) VFSChangeDir: g_file_enumerate_children() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } /* everything ok? */ break; } globs->enumerator = en; globs->enumerated_file = g_file_dup (f); g_object_unref (globs->file); globs->file = f; return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ static void GFileInfoToWin32FindData (GFile *reference_file, GFileInfo *info, WIN32_FIND_DATAA *FindData) { GFileInfo *symlink_info = NULL; GError *error = NULL; g_assert (info != NULL); g_assert (FindData != NULL); g_strlcpy(FindData->cFileName, g_file_info_get_name (info), MAX_PATH); // File size goffset filesize = g_file_info_get_size (info); FindData->nFileSizeLow = (DWORD)filesize; FindData->nFileSizeHigh = filesize >> 32; // File attributes FindData->dwFileAttributes |= FILE_ATTRIBUTE_UNIX_MODE; FindData->dwReserved0 = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE); // File date/time if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED), &FindData->ftLastWriteTime)) { FindData->ftLastWriteTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftLastWriteTime.dwLowDateTime = 0xFFFFFFFE; } if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS), &FindData->ftLastAccessTime)) { FindData->ftLastAccessTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftLastAccessTime.dwLowDateTime = 0xFFFFFFFE; } if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_CREATED), &FindData->ftCreationTime)) { FindData->ftCreationTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftCreationTime.dwLowDateTime = 0xFFFFFFFE; } // g_print ("(II) GFileInfoToWin32FindData: type = %d\n", g_file_info_get_file_type (info)); // g_print ("(II) GFileInfoToWin32FindData: UNIX_MODE = %d\n", FindData->dwReserved0); switch (g_file_info_get_file_type (info)) { case G_FILE_TYPE_DIRECTORY: case G_FILE_TYPE_SHORTCUT: /* Used in network:/// */ case G_FILE_TYPE_MOUNTABLE: FindData->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY; break; case G_FILE_TYPE_SYMBOLIC_LINK: FindData->dwReserved0 |= S_IFLNK; // Check: file is symlink to directory symlink_info = g_file_query_info (reference_file, G_FILE_ATTRIBUTE_UNIX_MODE, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) GFileInfoToWin32FindData: g_file_query_info() error: %s\n", error->message); g_error_free (error); } if (symlink_info) { if (g_file_info_get_file_type (symlink_info) == G_FILE_TYPE_DIRECTORY) { FindData->dwFileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; } g_object_unref (symlink_info); } break; case G_FILE_TYPE_UNKNOWN: case G_FILE_TYPE_REGULAR: case G_FILE_TYPE_SPECIAL: break; } /* fallback to default file mode if read fails */ if (FindData->dwReserved0 == 0) { if ((FindData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) FindData->dwReserved0 = S_IFDIR + S_IRWXU + S_IRGRP + S_IXGRP + S_IROTH + S_IXOTH; else FindData->dwReserved0 = S_IRUSR + S_IWUSR + S_IRGRP + S_IROTH; } } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ long VFSFileExists (struct TVFSGlobs *globs, const char *FileName, const long Use_lstat) { GFile *f; GError *error; GFileInfo *info; if (globs->file == NULL) { g_print ("(EE) VFSFileExists: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSMkDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; info = g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_NAME, Use_lstat ? G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS : G_FILE_QUERY_INFO_NONE, NULL, &error); g_object_unref (f); if (error) { // g_print ("(EE) VFSFileExists: g_file_query_info() error: %s\n", error->message); g_error_free (error); return FALSE; } g_object_unref (info); return TRUE; } TVFSResult VFSFileInfo (struct TVFSGlobs *globs, char *AFileName, WIN32_FIND_DATAA *FindData) { GFile *f; GError *error; GFileInfo *info; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSFileInfo: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, AFileName); if (f == NULL) { g_print ("(EE) VFSMkDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; info = g_file_query_info (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSFileInfo: g_file_query_info() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } GFileInfoToWin32FindData (f, info, FindData); g_object_unref (info); g_object_unref (f); return FS_FILE_OK; } TVFSResult VFSRemove (struct TVFSGlobs *globs, const char *APath) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSRemove: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, APath); if (f == NULL) { g_print ("(EE) VFSRemove: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_delete (f, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSRemove: g_file_delete() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSMakeSymLink (struct TVFSGlobs *globs, const char *NewFileName, const char *PointTo) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSMakeSymLink: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, NewFileName); if (f == NULL) { g_print ("(EE) VFSMakeSymLink: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_make_symbolic_link (f, PointTo, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSMakeSymLink: g_file_make_symbolic_link() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSChmod (struct TVFSGlobs *globs, const char *FileName, const uint Mode) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSChmod: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSChmod: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } // g_print ("(II) VFSChmod (%s, %d): Going to set permissions on '%s'\n", FileName, Mode, g_file_get_uri (f)); error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_MODE, Mode, G_FILE_QUERY_INFO_NONE, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSChmod: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSChown (struct TVFSGlobs *globs, const char *FileName, const uint UID, const uint GID) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSChown: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSChown: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_UID, UID, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) VFSChown: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_GID, GID, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) VFSChown: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } g_object_unref (f); return FS_FILE_OK; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ gboolean VFSIsOnSameFS (struct TVFSGlobs *globs, const char *Path1, const char *Path2) { GFile *file1, *file2; GFileInfo *info1, *info2; GError *error; gboolean res; if (globs->file == NULL) { g_print ("(EE) VFSIsOnSameFS: globs->file == NULL !\n"); return FALSE; } file1 = g_file_resolve_relative_path (globs->file, Path1); file2 = g_file_resolve_relative_path (globs->file, Path2); if (file1 == NULL) { g_print ("(EE) VFSIsOnSameFS: g_file_resolve_relative_path() failed.\n"); return FALSE; } if (file2 == NULL) { g_print ("(EE) VFSIsOnSameFS: g_file_resolve_relative_path() failed.\n"); return FALSE; } error = NULL; info1 = g_file_query_info (file1, G_FILE_ATTRIBUTE_ID_FILESYSTEM, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) { g_print ("(EE) VFSIsOnSameFS: g_file_query_info() error: %s\n", error->message); g_error_free (error); g_object_unref (file1); g_object_unref (file2); return FALSE; } info2 = g_file_query_info (file2, G_FILE_ATTRIBUTE_ID_FILESYSTEM, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) { g_print ("(EE) VFSIsOnSameFS: g_file_query_info() error: %s\n", error->message); g_error_free (error); g_object_unref (info1); g_object_unref (file1); g_object_unref (file2); return FALSE; } g_print ("(II) VFSIsOnSameFS: '%s' vs. '%s'\n", g_file_info_get_attribute_string (info1, G_FILE_ATTRIBUTE_ID_FILESYSTEM), g_file_info_get_attribute_string (info2, G_FILE_ATTRIBUTE_ID_FILESYSTEM)); res = strcmp (g_file_info_get_attribute_string (info1, G_FILE_ATTRIBUTE_ID_FILESYSTEM), g_file_info_get_attribute_string (info2, G_FILE_ATTRIBUTE_ID_FILESYSTEM)) == 0; g_object_unref (file1); g_object_unref (file2); g_object_unref (info1); g_object_unref (info2); return res; } gboolean VFSTwoSameFiles (struct TVFSGlobs *globs, const char *Path1, const char *Path2) { GFile *file1, *file2; gboolean res; if (globs->file == NULL) { g_print ("(EE) VFSTwoSameFiles: globs->file == NULL !\n"); return FALSE; } file1 = g_file_resolve_relative_path (globs->file, Path1); file2 = g_file_resolve_relative_path (globs->file, Path2); if (file1 == NULL) { g_print ("(EE) VFSTwoSameFiles: g_file_resolve_relative_path() failed.\n"); return FALSE; } if (file2 == NULL) { g_print ("(EE) VFSTwoSameFiles: g_file_resolve_relative_path() failed.\n"); return FALSE; } /* FIXME: we should do some I/O test, we're esentially comparing strings at the moment */ res = g_file_equal (file1, file2); g_object_unref (file1); g_object_unref (file2); return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ static void vfs_copy_progress_callback (goffset current_num_bytes, goffset total_num_bytes, gpointer user_data) { PProgressInfo ProgressInfo; int Percent; // g_print ("(II) vfs_copy_progress_callback spawned: current_num_bytes = %lu, total_num_bytes = %lu\n", current_num_bytes, total_num_bytes); if (! user_data) return; ProgressInfo = (PProgressInfo)user_data; if (gProgressProc) { if (total_num_bytes == 0) { Percent = 0; } else { Percent = (current_num_bytes * 100) / total_num_bytes; } if (gProgressProc(gPluginNumber, ProgressInfo->SourceName, ProgressInfo->TargetName, Percent) == 1) { g_cancellable_cancel (ProgressInfo->cancellable); } } } //-------------------------------------------------------------------------------------------- PConnection g_list_lookup(GList *list, gchar *value) { GList* l; PConnection Connection; for( l = g_list_first(list); l != NULL; l = l->next ) { Connection = (PConnection) l->data; // g_print("g_list_lookup: Item = %s\n", Connection->Name); if (strcmp(value, Connection->Name) == 0) { return Connection; } } return NULL; } struct TVFSGlobs * g_list_lookup_globs(GList *list, gchar *value) { GList* l; struct TVFSGlobs *globs; for( l = g_list_first(list); l != NULL; l = l->next ) { globs = (struct TVFSGlobs *) l->data; // g_print("g_list_lookup: Item = %s\n", Connection->Name); if (strcmp(value, globs->Connection->Name) == 0) { return globs; } } return NULL; } gboolean g_key_file_save_to_file(GKeyFile *key_file, const gchar *file, GError **error) { gchar *data = NULL; gsize length = 0; gboolean Result = FALSE; data = g_key_file_to_data(key_file, &length, error); if (data) { Result = g_file_set_contents(file, data, length, error); g_free(data); } return Result; } PConnection NewConnection() { PConnection Connection = (PConnection) malloc(sizeof(TConnection)); memset (Connection, 0, sizeof (TConnection)); return Connection; } void FreeConnection(PConnection Connection) { if (Connection == NULL) { return; } if (Connection->Name != NULL) { free(Connection->Name); } if (Connection->Type != NULL) { free(Connection->Type); } if (Connection->Host != NULL) { free(Connection->Host); } if (Connection->UserName != NULL) { free(Connection->UserName); } if (Connection->Password != NULL) { free(Connection->Password); } if (Connection->Path != NULL) { free(Connection->Path); } free(Connection); Connection = NULL; } void ReadConnectionList() { GKeyFile *KeyFile; GError *error = NULL; TConnection *Connection; gchar key[MAX_PATH]; KeyFile = g_key_file_new(); if (!g_key_file_load_from_file(KeyFile, gDefaultIniName, G_KEY_FILE_KEEP_COMMENTS, &error)) { g_print(error->message); g_error_free(error); } else { int i; int Count = g_key_file_get_integer(KeyFile, GROUP_NAME, "ConnectionCount", NULL); for (i = 1; i <= Count; i++) { Connection = NewConnection(); sprintf(key, "Connection%dName", i); Connection->Name = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dType", i); Connection->Type = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dHost", i); Connection->Host = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dUserName", i); Connection->UserName = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dPassword", i); Connection->Password = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dPath", i); Connection->Path = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); ConnectionList = g_list_append(ConnectionList, Connection); } } g_key_file_free(KeyFile); } void WriteConnectionList() { GKeyFile *KeyFile; GError *error = NULL; GList* l; PConnection Connection; gchar key[MAX_PATH]; int i = 0; KeyFile = g_key_file_new(); for( l = g_list_first(ConnectionList); l != NULL; l = l->next ) { i++; Connection = (PConnection) l->data; if (Connection->Name != NULL) { sprintf(key, "Connection%dName", i); g_print("WriteConnectionList: %s = %s\n", key, Connection->Name); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Name); } if (Connection->Type != NULL) { sprintf(key, "Connection%dType", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Type); } if (Connection->Host != NULL) { sprintf(key, "Connection%dHost", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Host); } if (Connection->UserName != NULL) { sprintf(key, "Connection%dUserName", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->UserName); } if (Connection->Password != NULL) { sprintf(key, "Connection%dPassword", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Password); } if (Connection->Path != NULL) { sprintf(key, "Connection%dPath", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Path); } } // save connection count g_key_file_set_integer(KeyFile, GROUP_NAME, "ConnectionCount", i); // save data to file if (!g_key_file_save_to_file(KeyFile, gDefaultIniName, &error)) { if (error) { g_print ("(EE) Impossible to write config file: %s\n", error->message); g_error_free (error); } } g_key_file_free(KeyFile); } struct TVFSGlobs * NetworkConnect(gchar *ConnectionName) { struct TVFSGlobs *globs; g_print("NetworkConnect: Enter\n"); // find in active connection list globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, ConnectionName); if (globs == NULL) { // find in exists connection list PConnection Connection = (PConnection) g_list_lookup(ConnectionList, ConnectionName); if (Connection != NULL) { GFile *f, *f2; GFileInfo *info; GError *error; TVFSResult res; globs = VFSNew(NULL); globs->file = NULL; globs->ftp_anonymous = FALSE; globs->Connection = Connection; g_print("NetworkConnect: Host = %s\n", Connection->Host); gchar *Host = Connection->Host; if (strcmp (Connection->UserName, cAnonymous) == 0) { globs->ftp_anonymous = TRUE; } g_print ("(II) NetworkConnect: opening URI '%s'\n", Host); f = g_file_new_for_commandline_arg (Host); while (1) { error = NULL; g_print ("(II) NetworkConnect: Before - g_file_query_info\n"); info = g_file_query_info (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); g_print ("(II) NetworkConnect: After - g_file_query_info\n"); /* Fallback to parent directory if specified path doesn't exist */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) { g_print ("(II) NetworkConnect: Fallback to parent directory\n"); f2 = g_file_get_parent (f); if (f2) { g_object_unref (f); f = f2; g_error_free (error); continue; } } g_print ("(II) NetworkConnect: Before - Mount the target\n"); /* Mount the target */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) { g_print ("(II) NetworkConnect: Mount the target\n"); g_error_free (error); error = NULL; res = vfs_handle_mount (globs, f); if (res != FS_FILE_OK) return NULL; else continue; } /* Any other errors --> report */ if (error) { g_print ("(EE) NetworkConnect: g_file_query_info() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return NULL; } /* everything ok? */ break; } // while globs->file = f; ActiveConnectionList = g_list_append(ActiveConnectionList, globs); g_print("NetworkConnect: Exit = True\n"); return globs; } } return globs; } gboolean AddQuickConnection(PConnection Connection) { char host[MAX_PATH], home_dir[MAX_PATH], user[MAX_PATH], pwd[MAX_PATH]; host[0] = 0; user[0] = 0; pwd[0] = 0; home_dir[0] = '/'; home_dir[1] = 0; if (gRequestProc(gPluginNumber, RT_URL, NULL, NULL, host, MAX_PATH)) { Connection->Host = strdup(host); if (gRequestProc(gPluginNumber, RT_TargetDir, NULL, NULL, home_dir, MAX_PATH)) { Connection->Path = strdup(home_dir); /* test for FTP protocol (we only enable anonymous here) */ if (strcasestr (host, "ftp://") == host) { if (gRequestProc(gPluginNumber, RT_MsgYesNo, NULL, "Use anonymous login?", NULL, MAX_PATH)) { Connection->UserName = strdup(cAnonymous); return TRUE; } } if (gRequestProc(gPluginNumber, RT_UserName, NULL, NULL, user, MAX_PATH)) { Connection->UserName = strdup(user); if (gRequestProc(gPluginNumber, RT_Password, NULL, NULL, pwd, MAX_PATH)) { Connection->Password = strdup(pwd); return TRUE; } } } } return FALSE; } gboolean QuickConnection() { g_print("QuickConnection: Enter\n"); gboolean Result = FALSE; PConnection Connection = NewConnection(); if (AddQuickConnection(Connection)) { Connection->Name = strdup(cQuickConnection); ConnectionList = g_list_append(ConnectionList, Connection); Result = (NetworkConnect(Connection->Name) != NULL); ConnectionList = g_list_remove(ConnectionList, Connection); } if (!Result) { FreeConnection(Connection); } g_print("QuickConnection: Exit\n"); return Result; } void AddConnection() { g_print("AddConnection: Enter\n"); gchar name[MAX_PATH]; gboolean bCancel = TRUE; name[0] = 0; gConnection = NewConnection(); if (gRequestProc(gPluginNumber, RT_Other, "Network", "Connection name:", name, MAX_PATH)) { unsigned int i; for(i = 0; i < strlen(name); i++) { if (name[i] == '/') name[i] = '_'; } gConnection->Name = strdup(name); if (AddQuickConnection(gConnection)) { ConnectionList = g_list_append(ConnectionList, gConnection); bCancel = FALSE; } } if (bCancel) { FreeConnection(gConnection); } else { WriteConnectionList(); } g_print("AddConnection: Exit\n"); } gchar *ExtractConnectionName(gchar *Path) { if (Path == NULL) return NULL; char *tmp; if (IS_DIR_SEP(*Path)) tmp = strdup(Path + 1); else tmp = strdup(Path); char *connection_part = strchr(tmp, 0x2f); if (connection_part == NULL) { return tmp; } char *connection_name = (char*)malloc(connection_part - tmp + 1); snprintf(connection_name, connection_part - tmp + 1, "%s", tmp); free(tmp); return connection_name; } gchar *ExtractRemoteFileName(gchar *FileName) { if (FileName == NULL) return NULL; char *tmp; if (IS_DIR_SEP(*FileName)) tmp = strdup(FileName + 1); else tmp = strdup(FileName); char *file_name_part = strchr(tmp, 0x2f); if (file_name_part == NULL) { free(tmp); return PathDelim; } char *file_name = strdup(file_name_part); free(tmp); return file_name; } struct TVFSGlobs * GetConnectionByPath(gchar *Path) { struct TVFSGlobs *globs; gchar *ConnectionName = ExtractConnectionName(Path); g_print("GetConnectionByPath: ConnectionName = %s\n", ConnectionName); globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, ConnectionName); if (globs == NULL) { globs = NetworkConnect(ConnectionName); free(ConnectionName); return globs; } free(ConnectionName); /* if (globs->RemotePath != NULL) { free(globs->RemotePath); } */ globs->RemotePath = ExtractRemoteFileName(Path); g_print("GetConnectionByPath: RemotePath = %s\n", globs->RemotePath); return globs; } BOOL LocalFindNext(HANDLE Hdl, WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) Hdl; if (ListRec == NULL) { g_print("LocalFindNext: ListRec == NULL !\n"); return FALSE; } g_print("LocalFindNext: Path == %s\n", ListRec->Path); switch (ListRec->Index) { case 0: { g_print("LocalFindNext: Item == %s\n", cAddConnection); strcpy(FindData->cFileName, cAddConnection); break; } case 1: { g_print("LocalFindNext: Item == %s\n", cQuickConnection); strcpy(FindData->cFileName, cQuickConnection); break; } default: { if (ListRec->list == NULL) { return FALSE; } PConnection Connection = (PConnection) ListRec->list->data; g_strlcpy(FindData->cFileName, Connection->Name, MAX_PATH); ListRec->list = g_list_next(ListRec->list); return TRUE; } } g_print("LocalFindNext: Exit\n"); ListRec->Index++; return TRUE; } BOOL RemoteFindNext(HANDLE Hdl, WIN32_FIND_DATAA *FindData) { PListRec ListRec; struct TVFSGlobs *globs; char *sDir; GError *error; GFileInfo *info; GFile *f; g_print ("(EE) RemoteFindNext: Enter\n"); ListRec = (PListRec) Hdl; globs = ListRec->globs; sDir = ExtractRemoteFileName(ListRec->Path); if (globs->file == NULL) { g_print ("(EE) RemoteFindNext: globs->file == NULL !\n"); return FALSE; } if (globs->enumerator == NULL) { g_print ("(EE) RemoteFindNext: globs->enumerator == NULL !\n"); return FALSE; } error = NULL; info = g_file_enumerator_next_file (globs->enumerator, NULL, &error); if (error) { g_print ("(EE) RemoteFindNext: g_file_enumerator_next_file() error: %s\n", error->message); g_error_free (error); return FALSE; } if (! error && ! info) return FALSE; f = g_file_get_child (globs->enumerated_file, g_file_info_get_name (info)); GFileInfoToWin32FindData(f, info, FindData); g_object_unref (f); g_object_unref (info); return TRUE; } // Export functions-------------------------------------------------------------------------------------- int DCPCALL FsInit(int PluginNr,tProgressProc pProgressProc, tLogProc pLogProc,tRequestProc pRequestProc) { gProgressProc = pProgressProc; gLogProc = pLogProc; gRequestProc = pRequestProc; gPluginNumber = PluginNr; ActiveConnectionList = NULL; ConnectionList = NULL; g_type_init(); return 0; } HANDLE DCPCALL FsFindFirst(char* Path,WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) malloc(sizeof(TListRec)); memset(ListRec, 0, sizeof(TListRec)); ListRec->Path = Path; ListRec->Index = 0; HANDLE Handle = (HANDLE) ListRec; memset(FindData, 0, sizeof(WIN32_FIND_DATAA)); if (strcmp(Path, PathDelim) == 0) { ListRec->list = g_list_first(ConnectionList); LocalFindNext(Handle, FindData); return Handle; } else { ListRec->globs = GetConnectionByPath(Path); if (ListRec->globs == NULL) { free(ListRec); return (HANDLE)(-1); } VFSChangeDir(ListRec->globs, ListRec->globs->RemotePath); g_print("Call RemoteFindNext = %s\n", ListRec->globs->RemotePath); if (!RemoteFindNext(Handle, FindData)) { free(ListRec); return (HANDLE)(-1); } return Handle; } } BOOL DCPCALL FsFindNext(HANDLE Hdl,WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) Hdl; memset(FindData, 0, sizeof(WIN32_FIND_DATAA)); if (strcmp(ListRec->Path, PathDelim) == 0) { return LocalFindNext(Hdl, FindData); } else { return RemoteFindNext(Hdl, FindData); } } int DCPCALL FsFindClose(HANDLE Hdl) { PListRec ListRec; GError *error; TVFSResult res; ListRec = (PListRec) Hdl; if (ListRec->globs == NULL) { g_print ("(EE) FsFindClose: ListRec->globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (ListRec->globs->file == NULL) { g_print ("(EE) FsFindClose: ListRec->globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (ListRec->globs->enumerator == NULL) { g_print ("(EE) FsFindClose: ListRec->globs->enumerator == NULL !\n"); return FS_FILE_NOTSUPPORTED; } g_print ("(II) FsFindClose\n"); error = NULL; g_file_enumerator_close (ListRec->globs->enumerator, NULL, &error); g_object_unref (ListRec->globs->enumerator); ListRec->globs->enumerator = NULL; g_object_unref (ListRec->globs->enumerated_file); ListRec->globs->enumerated_file = NULL; if (error) { g_print ("(EE) FsFindClose: g_file_enumerator_close() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } BOOL DCPCALL FsMkDir(char* Path) { struct TVFSGlobs *globs; GFile *f; GError *error; globs = GetConnectionByPath(Path); if (globs == NULL) { g_print ("(EE) FsMkDir: globs == NULL !\n"); return FALSE; } if (globs->file == NULL) { g_print ("(EE) FsMkDir: globs->file == NULL !\n"); return FALSE; } f = g_file_resolve_relative_path (globs->file, globs->RemotePath); if (f == NULL) { g_print ("(EE) FsMkDir: g_file_resolve_relative_path() failed.\n"); return FALSE; } error = NULL; g_file_make_directory (f, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) FsMkDir: g_file_make_directory() error: %s\n", error->message); g_error_free (error); return FALSE; } return TRUE; } BOOL DCPCALL FsRemoveDir(char* RemoteName) { struct TVFSGlobs *globs; globs = GetConnectionByPath(RemoteName); return (VFSRemove(globs, globs->RemotePath) == FS_FILE_OK); } int DCPCALL FsRenMovFile(char* OldName,char* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; char *sSrcName; char *sDstName; globs = GetConnectionByPath(OldName); if (globs == NULL) { g_print ("(EE) FsRenMovFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsRenMovFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } sSrcName = globs->RemotePath; sDstName = ExtractRemoteFileName(NewName); src = g_file_resolve_relative_path (globs->file, sSrcName); if (src == NULL) { g_print ("(EE) FsRenMovFile: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } g_print ("FsRenMovFile: '%s' --> '%s'\n", sSrcName, sDstName); error = NULL; g_file_set_display_name (src, sDstName, NULL, &error); if (error) { g_print ("(WW) FsRenMovFile: g_file_set_display_name() failed (\"%s\"), using fallback g_file_move()\n", error->message); g_error_free (error); dst = g_file_resolve_relative_path (src, sDstName); if (dst == NULL) { g_print ("(EE) FsRenMovFile: g_file_resolve_relative_path() failed.\n"); g_object_unref (src); return FS_FILE_NOTFOUND; } error = NULL; g_file_move (src, dst, G_FILE_COPY_NO_FALLBACK_FOR_MOVE, NULL, NULL, NULL, &error); if (error) { g_print ("(EE) FsRenMovFile: g_file_move() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (src); g_object_unref (dst); return res; } g_object_unref (dst); } g_object_unref (src); return FS_FILE_OK; } int DCPCALL FsGetFile(char* RemoteName,char* LocalName,int CopyFlags, RemoteInfoStruct* ri) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; PProgressInfo ProgressInfo; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsGetFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsGetFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } ProgressInfo = (PProgressInfo) g_malloc(sizeof(TProgressInfo)); g_strlcpy(ProgressInfo->SourceName, globs->RemotePath, MAX_PATH); g_strlcpy(ProgressInfo->TargetName, LocalName, MAX_PATH); g_print ("(II) FsGetFile: '%s' --> '%s'\n", ProgressInfo->SourceName, ProgressInfo->TargetName); src = g_file_resolve_relative_path (globs->file, ProgressInfo->SourceName); if (src == NULL) { g_print ("(EE) FsGetFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } dst = g_file_new_for_path (ProgressInfo->TargetName); if (dst == NULL) { g_print ("(EE) FsGetFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } ProgressInfo->cancellable = g_cancellable_new (); res = FS_FILE_OK; error = NULL; g_file_copy (src, dst, TUXCMD_DEFAULT_COPY_FLAGS, ProgressInfo->cancellable, vfs_copy_progress_callback, ProgressInfo, &error); if (error) { g_print ("(EE) FsGetFile: g_file_copy() error: %s\n", error->message); // res = g_error_to_TVFSResult (error); if (error->code == G_IO_ERROR_CANCELLED) res = FS_FILE_USERABORT; else res = FS_FILE_READERROR; g_error_free (error); } g_object_unref (ProgressInfo->cancellable); g_free(ProgressInfo); g_object_unref (src); g_object_unref (dst); return res; } int DCPCALL FsPutFile(char* LocalName,char* RemoteName,int CopyFlags) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; PProgressInfo ProgressInfo; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsPutFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsPutFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } ProgressInfo = (PProgressInfo) g_malloc(sizeof(TProgressInfo)); g_strlcpy(ProgressInfo->SourceName, LocalName, MAX_PATH); g_strlcpy(ProgressInfo->TargetName, globs->RemotePath, MAX_PATH); g_print ("(II) FsPutFile: '%s' --> '%s'\n", ProgressInfo->SourceName, ProgressInfo->TargetName); src = g_file_new_for_path (ProgressInfo->SourceName); if (src == NULL) { g_print ("(EE) FsPutFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } dst = g_file_resolve_relative_path (globs->file, ProgressInfo->TargetName); if (dst == NULL) { g_print ("(EE) FsPutFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } ProgressInfo->cancellable = g_cancellable_new (); res = FS_FILE_OK; error = NULL; /* FIXME: Appending not supported */ g_file_copy (src, dst, TUXCMD_DEFAULT_COPY_FLAGS, ProgressInfo->cancellable, vfs_copy_progress_callback, ProgressInfo, &error); if (error) { g_print ("(EE) FsPutFile: g_file_copy() error: %s\n", error->message); // res = g_error_to_TVFSResult (error); if (error->code == G_IO_ERROR_CANCELLED) res = FS_FILE_USERABORT; else res = FS_FILE_WRITEERROR; g_error_free (error); } g_object_unref (ProgressInfo->cancellable); g_free(ProgressInfo); g_object_unref (src); g_object_unref (dst); return res; } int DCPCALL FsExecuteFile(HWND MainWin,char* RemoteName,char* Verb) { g_print("FsExecuteFile: Item = %s, Verb = %s\n", RemoteName + 1, Verb); if (strcmp(Verb,"open") == 0) { if (strrchr(RemoteName, 0x2f) == RemoteName) // root path { if (strchr(RemoteName, 0x3c) == NULL) // connection { struct TVFSGlobs *globs = NetworkConnect(RemoteName + 1); if (globs != NULL) { // go to Connection->Path g_strlcat(RemoteName, globs->Connection->Path, MAX_PATH); return FS_EXEC_SYMLINK; } return FS_EXEC_ERROR; } else // special item { if (strcmp(RemoteName + 1, cAddConnection) == 0) { AddConnection(); } else if (strcmp(RemoteName + 1, cQuickConnection) == 0) { if (QuickConnection()) return FS_EXEC_SYMLINK; else return FS_EXEC_ERROR; } } } // root path return FS_EXEC_OK; } else if (strcmp(Verb,"properties") == 0) { return FS_EXEC_OK; } else if (strstr(Verb, "chmod ") != NULL) { struct TVFSGlobs *globs; uint Mode = (uint) strtol(strchr(Verb, 0x20) + 1, NULL, 8); globs = GetConnectionByPath(RemoteName); if (VFSChmod(globs, globs->RemotePath, Mode) != FS_FILE_OK) { return FS_EXEC_ERROR; } } return FS_EXEC_OK; } BOOL DCPCALL FsDeleteFile(char* RemoteName) { if (strrchr(RemoteName, 0x2f) == RemoteName) // root path { if (strchr(RemoteName, 0x3c) == NULL) // connection { // find in exists connection list PConnection Connection = (PConnection) g_list_lookup(ConnectionList, RemoteName + 1); if (Connection != NULL) { ConnectionList = g_list_remove(ConnectionList, Connection); WriteConnectionList(); return TRUE; } } return FALSE; } struct TVFSGlobs *globs = GetConnectionByPath(RemoteName); return (VFSRemove(globs, globs->RemotePath) == FS_FILE_OK); } BOOL DCPCALL FsSetTime(char* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime) { struct TVFSGlobs *globs; GFile *f; GError *error; long mtime; long atime; long ctime; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsSetTime: globs == NULL !\n"); return FALSE; } if (globs->file == NULL) { g_print ("(EE) FsSetTime: globs->file == NULL !\n"); return FALSE; } f = g_file_resolve_relative_path (globs->file, globs->RemotePath); if (f == NULL) { g_print ("(EE) FsSetTime: g_file_resolve_relative_path() failed.\n"); return FALSE; } ctime = FileTimeToUnixTime(CreationTime); atime = FileTimeToUnixTime(LastAccessTime); mtime = FileTimeToUnixTime(LastWriteTime); error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_MODIFIED, mtime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); g_object_unref (f); return FALSE; } error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_ACCESS, atime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); /* Silently drop the error, atime is not commonly supported on most systems */ } error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_CREATED, ctime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); /* Silently drop the error, ctime is not commonly supported on most systems */ } g_object_unref (f); return TRUE; } BOOL DCPCALL FsDisconnect(char *DisconnectRoot) { struct TVFSGlobs *globs; g_print("FsDisconnect: DisconnectRoot == %s\n", DisconnectRoot); globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, DisconnectRoot); if (globs != NULL) { if (globs->file) g_object_unref (globs->file); globs->file = NULL; ActiveConnectionList = g_list_remove(ActiveConnectionList, globs); free (globs); return TRUE; } return FALSE; } void DCPCALL FsSetDefaultParams(FsDefaultParamStruct* dps) { // use default location, but our own ini file name g_strlcpy(gDefaultIniName, dps->DefaultIniName, MAX_PATH - 1); gchar* tmp = strrchr(gDefaultIniName, 0x2f); if (tmp) { tmp[1] = 0; g_strlcat(gDefaultIniName, cDefaultIniName, sizeof(gDefaultIniName) - 1); } g_print ("gDefaultIniName: %s\n", gDefaultIniName); ReadConnectionList(); } void DCPCALL FsGetDefRootName(char* DefRootName,int maxlen) { g_strlcpy(DefRootName, "Network", maxlen); } //-------------------------------------------------- ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/src/Makefile�������������������������������������������������������0000644�0001750�0000144�00000001043�11610507422�020203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# compiler options CC = gcc CFLAGS =-I. -I/usr/include -I../../../../sdk \ -Wall -fPIC -O2 -g \ -DG_DISABLE_DEPRECATED -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE LIB_SUFFIX=`if test \`uname -m\` = x86_64; then echo 64; fi` VFS_OBJECTS=gvfs.o .SUFFIXES: .c .c.o: $(CC) $(CFLAGS) `pkg-config glib-2.0 gio-2.0 --cflags` -c $< all shared static: gvfs.wfx gvfs.wfx: $(VFS_OBJECTS) $(CC) -shared -o ../lib/gvfs.wfx $(VFS_OBJECTS) $(CFLAGS) `pkg-config glib-2.0 gio-2.0 --libs` clean: rm -f *.o *.d *.gch rm -f ../lib/gvfs.wfx ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/lib/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016525� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/README.txt���������������������������������������������������������0000644�0001750�0000144�00000002100�12014201074�017436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Double Commander -------------------------------------------------------------------------------- WFX plugin for working with GVFS Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) Based on: GVFS plugin for Tux Commander Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net> http://tuxcmd.sourceforge.net Requirements: - glib2 library at least version 2.16.0 - gvfs daemon and backends available in the system (check your distribution for gvfs packages) This is the GVFS plugin for Double Commander file manager. It's built on top of the GVFS daemon, which is an integral part of Gnome Desktop since version 2.22. It provides access to many type of resources such as network shares (FTP, SSH/SFTP, SMB, WebDAV), bluetooth devices (ObexFTP), cameras and portable players (gphoto2) and others. Feature highlights: * read/write access to network resources (FTP, SSH/SFTP, SMB, WebDAV) For successful compilation you will need working gcc compiler and glib2 library installed with development files. Compilation has been tested with gcc compiler v4.3.1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/gvfs/COPYING.txt��������������������������������������������������������0000644�0001750�0000144�00000043103�12014201074�017621� 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-0.9.8/plugins/wfx/ftp/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015603� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017265� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/synsock.pas�������������������������������������������������0000644�0001750�0000144�00000007571�12014201074�021465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 005.002.001 | |==============================================================================| | Content: Socket Independent Platform Layer | |==============================================================================| | 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)2001-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | 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} {$I ssfpc.inc} {$ELSE} {$I sslinux.inc} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} end. ���������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/synautil.pas������������������������������������������������0000644�0001750�0000144�00000154000�12014201074�021632� 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-0.9.8/plugins/wfx/ftp/synapse/synaip.pas��������������������������������������������������0000644�0001750�0000144�00000027177�12014201074�021303� 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-0.9.8/plugins/wfx/ftp/synapse/synafpc.pas�������������������������������������������������0000644�0001750�0000144�00000012153�12014201074�021427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.002.000 | |==============================================================================| | Content: Utils for FreePascal compatibility | |==============================================================================| | 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)2003-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | 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} type {$IFDEF CIL} TLibHandle = Integer; PtrInt = Integer; {$ELSE} TLibHandle = HModule; {$IFNDEF WIN64} 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 Result := dynlibs.GetProcedureAddress(Module, Proc); 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-0.9.8/plugins/wfx/ftp/synapse/synacode.pas������������������������������������������������0000644�0001750�0000144�00000142656�12014201074�021605� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 002.002.001 | |==============================================================================| | Content: Coding and decoding support | |==============================================================================| | 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)2000-2012. | | 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 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 CIL} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) > ((High(ArLong) + 1) * 4) then Exit; {$IFDEF CIL} 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 CIL} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) < ((High(ArLong) + 1) * 4) then Exit; {$IFDEF CIL} 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 CIL} 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 CIL} 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 CIL} 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 CIL} 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-0.9.8/plugins/wfx/ftp/synapse/sswin32.inc�������������������������������������������������0000644�0001750�0000144�00000152163�12014201074�021270� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 002.003.000 | |==============================================================================| | Content: Socket Independent Platform Layer - Win32/64 definition include | |==============================================================================| | 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)2003-2011. | | 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' *) {$ENDIF} {$IFDEF FPC} {$IFDEF WIN32} {$ALIGN OFF} {$ELSE} {$PACKRECORDS C} {$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; SockEnhancedApi := 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-0.9.8/plugins/wfx/ftp/synapse/ssl_winssl_lib.pas������������������������������������������0000644�0001750�0000144�00000064156�12677674165�023062� 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-0.9.8/plugins/wfx/ftp/synapse/ssl_winssl_lib.inc������������������������������������������0000644�0001750�0000144�00000000505�12561613237�023015� 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-0.9.8/plugins/wfx/ftp/synapse/ssl_openssl_ver.pas�����������������������������������������0000755�0001750�0000144�00000011461�13150510204�023210� 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, ssl_openssl_lib; const LibSSLName = 'libssl'; LibUtilName = 'libcrypto'; { ADD NEW ONES WHEN THEY APPEAR! Always make .so/dylib first, then versions, in descending order! Add "." .before the version, first is always just "" } LibVersions: array[1..13] of String = ('', '.1.1', '.1.0.2', '.1.0.1','.1.0.0', '.0.9.8', '.0.9.7', '.0.9.6', '.0.9.5', '.0.9.4', '.0.9.3', '.0.9.2', '.0.9.1'); 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 begin SSLImplementation:= TSSLOpenSSL; Break; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/ssl_openssl_lib.pas�����������������������������������������0000644�0001750�0000144�00000234746�13150506105�023201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 003.008.000 | |==============================================================================| | 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. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Tomas Hajny (OS2 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} 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} {$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; // 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; 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; // 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; // 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(x,b) 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 InitSSLInterface: Boolean; var s: string; x: 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} SSLUtilHandle := LoadLib(DLLUtilName); SSLLibHandle := LoadLib(DLLSSLName); {$IFDEF MSWINDOWS} if (SSLLibHandle = 0) then SSLLibHandle := LoadLib(DLLSSLName2); {$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'); _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} SetLength(s, 1024); x := GetModuleFilename(SSLLibHandle,PChar(s),Length(s)); SetLength(s, x); SSLLibFile := s; SetLength(s, 1024); x := GetModuleFilename(SSLUtilHandle,PChar(s),Length(s)); SetLength(s, x); SSLUtilFile := s; //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; _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-0.9.8/plugins/wfx/ftp/synapse/ssl_openssl.pas���������������������������������������������0000644�0001750�0000144�00000056546�13150506105�022353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.003.000 | |==============================================================================| | 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. | | 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} 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) protected FSsl: PSSL; Fctx: PSSL_CTX; function SSLCheck: Boolean; function SetSslKeys: boolean; function Init(server:Boolean): Boolean; function DeInit: Boolean; function Prepare(server:Boolean): Boolean; function LoadPFX(pfxdata: ansistring): Boolean; function CreateSelfSignedCert(Host: string): Boolean; override; 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: string; 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); 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(1024, $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.Init(server:Boolean): 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 (FCertificateFile = '') and (FCertificate = '') and (FPFXfile = '') and (FPFX = '') 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 (Fssl) then sslfree(Fssl); Fssl := nil; if assigned (Fctx) then begin SslCtxFree(Fctx); Fctx := nil; ErrRemoveState(0); end; FSSLEnabled := False; end; function TSSLOpenSSL.Prepare(server:Boolean): Boolean; begin Result := false; DeInit; if Init(server) 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; if Prepare(False) 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; if SNIHost<>'' then SSLCtrl(Fssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, PAnsiChar(AnsiString(SNIHost))); 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; end; function TSSLOpenSSL.Accept: boolean; var x: integer; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; if Prepare(True) 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: string; 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-0.9.8/plugins/wfx/ftp/synapse/ssl_gnutls_lib.pas������������������������������������������0000644�0001750�0000144�00000044601�12677673233�023043� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ GnuTLS to OpenSSL wrapper (based on GNUTLS-EXTRA) Copyright (c) 2013-2015 Alexander Koblov <alexx2000@mail.ru> Copyright (c) 2004, 2005, 2006 Free Software Foundation Copyright (c) 2002 Andrew McDonald <andrew@mcdonald.org.uk> GNUTLS-EXTRA 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. GNUTLS-EXTRA is distributed in the hope that 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 GNUTLS-EXTRA; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. } unit ssl_gnutls_lib; {$mode delphi} interface uses CTypes; type gnutls_protocol_t = ( GNUTLS_SSL3 = 1, GNUTLS_TLS1_0, GNUTLS_TLS1_1, GNUTLS_TLS1_2, 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_connection_end_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, GNUTLS_X509_FMT_PEM ); gnutls_close_request_t = ( GNUTLS_SHUT_RDWR = 0, GNUTLS_SHUT_WR = 1 ); type gnutls_session_t = type Pointer; gnutls_transport_ptr_t = type Pointer; gnutls_certificate_credentials_t = type Pointer; PSSL_METHOD = ^SSL_METHOD; SSL_METHOD = record connend: gnutls_connection_end_t; priorities: array[0..High(Byte)] of AnsiChar; end; PSSL_CIPHER = ^SSL_CIPHER; SSL_CIPHER = record version: gnutls_protocol_t; cipher: gnutls_cipher_algorithm_t; kx: gnutls_kx_algorithm_t; mac: gnutls_mac_algorithm_t; compression: gnutls_compression_method_t; cert: gnutls_certificate_type_t; end; PSSL_CTX = ^SSL_CTX; SSL_CTX = record method: PSSL_METHOD; certfile: AnsiString; certfile_type: gnutls_x509_crt_fmt_t; keyfile: AnsiString; keyfile_type: gnutls_x509_crt_fmt_t; verify_callback: Pointer; verify_mode: cint; end; PSSL = ^SSL; SSL = record gnutls_state: gnutls_session_t; gnutls_cred: gnutls_certificate_credentials_t; ctx: PSSL_CTX; ciphersuite: SSL_CIPHER; last_error: cint; shutdown: cint; state: cint; verify_callback: Pointer; verify_mode: cint; end; function SSL_library_init (): cint; cdecl; function SSL_CTX_new (method: PSSL_METHOD): PSSL_CTX; cdecl; procedure SSL_CTX_free (ctx: PSSL_CTX); cdecl; function SSL_CTX_use_certificate_file (ctx: PSSL_CTX; const certfile: PAnsiChar; certtype: gnutls_x509_crt_fmt_t): cint; cdecl; function SSL_CTX_use_PrivateKey_file (ctx: PSSL_CTX; const keyfile: PAnsiChar; keytype: gnutls_x509_crt_fmt_t): cint; cdecl; procedure SSL_CTX_set_verify (ctx: PSSL_CTX; verify_mode: cint; verify_callback: pointer); cdecl; function SSL_new (ctx: PSSL_CTX): PSSL; cdecl; procedure SSL_free (ssl: PSSL); cdecl; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; function SSL_set_fd (ssl: PSSL; fd: cint): cint; cdecl; function SSL_pending (ssl: PSSL): cint; cdecl; function SSL_connect (ssl: PSSL): cint; cdecl; function SSL_shutdown (ssl: PSSL): cint; cdecl; function SSL_read (ssl: PSSL; buf: PByte; len: cint): cint; cdecl; function SSL_write (ssl: PSSL; const buf: PByte; len: cint): 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; function SSL_get_current_cipher (ssl: PSSL): PSSL_CIPHER; cdecl; function SSL_CIPHER_get_name (cipher: PSSL_CIPHER): PAnsiChar; cdecl; function SSL_CIPHER_get_bits (cipher: PSSL_CIPHER; bits: pcint): cint; cdecl; function ERR_get_error (): culong; cdecl; function ERR_error_string (e: culong; buf: PAnsiChar): PAnsiChar; cdecl; implementation uses SysUtils, DynLibs, ssl_openssl_lib, ssl_openssl, blcksock, dl; threadvar last_error: cint; var gnutls_global_init: function(): cint; cdecl; gnutls_init: function(out session: gnutls_session_t; con_end: gnutls_connection_end_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_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_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; (* Library initialisation functions *) function SSL_library_init (): cint; cdecl; begin gnutls_global_init (); (* NB: we haven't got anywhere to call gnutls_global_deinit() *) Result := 1; end; (* SSL_CTX structure handling *) function SSL_CTX_new (method: PSSL_METHOD): PSSL_CTX; cdecl; begin Result := GetMem(SizeOf(SSL_CTX)); if Assigned(Result) then begin FillChar(Result^, SizeOf(SSL_CTX), 0); Result^.method := method; end; end; procedure SSL_CTX_free (ctx: PSSL_CTX); cdecl; begin FreeMem(ctx^.method); FreeMem(ctx); end; function SSL_CTX_use_certificate_file (ctx: PSSL_CTX; const certfile: PAnsiChar; certtype: gnutls_x509_crt_fmt_t): cint; cdecl; begin ctx^.certfile := StrPas(certfile); ctx^.certfile_type := certtype; Result := 1; end; function SSL_CTX_use_PrivateKey_file (ctx: PSSL_CTX; const keyfile: PAnsiChar; keytype: gnutls_x509_crt_fmt_t): cint; cdecl; begin ctx^.keyfile := StrPas(keyfile); ctx^.keyfile_type := keytype; Result := 1; end; procedure SSL_CTX_set_verify (ctx: PSSL_CTX; verify_mode: cint; verify_callback: pointer); cdecl; begin ctx^.verify_mode := verify_mode; ctx^.verify_callback := verify_callback; end; (* SSL structure handling *) function SSL_new (ctx: PSSL_CTX): PSSL; cdecl; var err: cint; begin Result := GetMem(SizeOf(SSL)); if not Assigned(Result) then Exit; FillChar(Result^, SizeOf(SSL), 0); err := gnutls_certificate_allocate_credentials (Result^.gnutls_cred); if (err < 0) then begin last_error := err; FreeMem (Result); Exit(nil); end; gnutls_init (Result^.gnutls_state, ctx^.method^.connend); gnutls_priority_set_direct (Result^.gnutls_state, ctx^.method^.priorities, nil); gnutls_credentials_set (Result^.gnutls_state, GNUTLS_CRD_CERTIFICATE, Result^.gnutls_cred); if Length(ctx^.certfile) > 0 then gnutls_certificate_set_x509_trust_file (Result^.gnutls_cred, PAnsiChar(ctx^.certfile), ctx^.certfile_type); if Length(ctx^.keyfile) > 0 then gnutls_certificate_set_x509_key_file (Result^.gnutls_cred, PAnsiChar(ctx^.certfile), PAnsiChar(ctx^.keyfile), ctx^.keyfile_type); Result^.ctx := ctx; Result^.verify_mode := ctx^.verify_mode; Result^.verify_callback := ctx^.verify_callback; end; procedure SSL_free (ssl: PSSL); cdecl; begin gnutls_certificate_free_credentials (ssl^.gnutls_cred); gnutls_deinit (ssl^.gnutls_state); FreeMem(ssl); 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; function SSL_set_fd (ssl: PSSL; fd: cint): cint; cdecl; begin {$PUSH}{$HINTS OFF}{$WARNINGS OFF} gnutls_transport_set_ptr (ssl^.gnutls_state, Pointer(fd)); {$POP} Result := 1; end; function SSL_pending (ssl: PSSL): cint; cdecl; begin Result := gnutls_record_check_pending (ssl^.gnutls_state); end; (* SSL connection open/close/read/write functions *) function SSL_connect (ssl: PSSL): cint; cdecl; var err: cint; begin err := gnutls_handshake (ssl^.gnutls_state); ssl^.last_error := err; if (err < 0) then begin last_error := err; Exit(0); end; Result := 1; end; function SSL_shutdown (ssl: PSSL): cint; cdecl; begin if (ssl^.shutdown <> 0) then begin gnutls_bye (ssl^.gnutls_state, GNUTLS_SHUT_WR); Inc(ssl^.shutdown); end else begin gnutls_bye (ssl^.gnutls_state, GNUTLS_SHUT_RDWR); Inc(ssl^.shutdown); end; (* FIXME *) Result := 1; end; function SSL_read (ssl: PSSL; buf: PByte; len: cint): cint; cdecl; begin Result := gnutls_record_recv (ssl^.gnutls_state, buf, len); ssl^.last_error := Result; if (Result < 0) then begin last_error := Result; Result := 0; end; end; function SSL_write (ssl: PSSL; const buf: PByte; len: cint): cint; cdecl; begin Result := gnutls_record_send (ssl^.gnutls_state, buf, len); ssl^.last_error := Result; if (Result < 0) then begin last_error := Result; Result := 0; end; end; (* SSL_METHOD functions *) function SSLv23_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS-ALL:+VERS-SSL3.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function SSLv2_method(): PSSL_METHOD; cdecl; begin Result := nil; end; function SSLv3_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-SSL3.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_1_method: PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.1:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_2_method: PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.2:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; (* SSL_CIPHER functions *) function SSL_get_current_cipher (ssl: PSSL): PSSL_CIPHER; cdecl; begin if not Assigned(ssl) then Exit(nil); ssl^.ciphersuite.version := gnutls_protocol_get_version (ssl^.gnutls_state); ssl^.ciphersuite.cipher := gnutls_cipher_get (ssl^.gnutls_state); ssl^.ciphersuite.kx := gnutls_kx_get (ssl^.gnutls_state); ssl^.ciphersuite.mac := gnutls_mac_get (ssl^.gnutls_state); ssl^.ciphersuite.compression := gnutls_compression_get (ssl^.gnutls_state); ssl^.ciphersuite.cert := gnutls_certificate_type_get (ssl^.gnutls_state); Result := @ssl^.ciphersuite; end; function SSL_CIPHER_get_name (cipher: PSSL_CIPHER): PAnsiChar; cdecl; begin if not Assigned(cipher) then Exit('NONE'); Result := gnutls_cipher_suite_get_name (cipher^.kx, cipher^.cipher, cipher^.mac); end; function SSL_CIPHER_get_bits (cipher: PSSL_CIPHER; bits: pcint): cint; cdecl; begin if not Assigned(cipher) then Exit(0); Result := (8 * gnutls_cipher_get_key_size (cipher^.cipher)); if Assigned(bits) then bits^ := Result; end; (* error handling *) function ERR_get_error (): culong; cdecl; begin Result := -1 * last_error; last_error := 0; end; function ERR_error_string (e: culong; buf: PAnsiChar): PAnsiChar; cdecl; begin Result := gnutls_strerror (-1 * cint(e)); end; function SafeGetProcAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer; begin Result:= GetProcedureAddress(Lib, ProcName); if (Result = nil) then raise Exception.Create(EmptyStr); end; const libgnutls: array[0..2] of String = ('30', '28', '26'); var index: Integer; dlinfo: dl_info; gnutls: TLibHandle = NilHandle; begin if (IsSSLloaded = False) then begin for index:= Low(libgnutls) to High(libgnutls) do begin gnutls:= LoadLibrary('libgnutls.so.' + libgnutls[index]); if gnutls <> NilHandle then Break; end; if (gnutls <> NilHandle) 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_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_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'); FillChar(dlinfo, SizeOf(dlinfo), 0); if dladdr(@dlinfo, @dlinfo) <> 0 then begin DLLSSLName:= dlinfo.dli_fname; DLLUtilName:= DLLSSLName; if InitSSLInterface then SSLImplementation:= TSSLOpenSSL; end; except FreeLibrary(gnutls); end; end; end. �������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/ssl_gnutls_lib.inc������������������������������������������0000644�0001750�0000144�00000000737�12561610546�023021� 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_CTX_use_certificate_file, SSL_CTX_use_PrivateKey_file, SSL_get_error, SSL_get_current_cipher, SSL_CIPHER_get_name, SSL_CIPHER_get_bits, ERR_get_error, ERR_error_string; ���������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/ssfpc.inc���������������������������������������������������0000644�0001750�0000144�00000067023�13276001420�021102� 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} 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; FIOASYNC = termio.FIOASYNC; 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; IPV6_UNICAST_HOPS = sockets.IPV6_UNICAST_HOPS; IPV6_MULTICAST_IF = sockets.IPV6_MULTICAST_IF; IPV6_MULTICAST_HOPS = sockets.IPV6_MULTICAST_HOPS; IPV6_MULTICAST_LOOP = sockets.IPV6_MULTICAST_LOOP; IPV6_JOIN_GROUP = sockets.IPV6_JOIN_GROUP; IPV6_LEAVE_GROUP = sockets.IPV6_LEAVE_GROUP; 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 = 10; { 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. {$ifdef DARWIN} MSG_NOSIGNAL = $20000; // Do not generate SIGPIPE. // Works under MAC OS X, but is undocumented, // So FPC doesn't include it {$else} MSG_NOSIGNAL = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE. {$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 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-0.9.8/plugins/wfx/ftp/synapse/license.txt�������������������������������������������������0000644�0001750�0000144�00000004154�12166066407�021465� 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-0.9.8/plugins/wfx/ftp/synapse/ftpsend.pas�������������������������������������������������0000644�0001750�0000144�00000154013�12014201074�021431� 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); 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-0.9.8/plugins/wfx/ftp/synapse/doublecmd.diff����������������������������������������������0000644�0001750�0000144�00000001612�13276001420�022051� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: ssfpc.inc =================================================================== --- ssfpc.inc (revision 207) +++ ssfpc.inc (working copy) @@ -755,7 +755,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 +858,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 +865,7 @@ GetProtocolByNumber(SockProtocol, ProtoEnt); ServEnt.port := 0; GetServiceByName(Port, ProtoEnt.Name, ServEnt); - Result := ServEnt.port; + Result := ntohs(ServEnt.port); end; end; ����������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/synapse/blcksock.pas������������������������������������������������0000644�0001750�0000144�00000375546�12560221450�021607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 009.009.001 | |==============================================================================| | Content: Library base | |==============================================================================| | 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)1999-2013. | | 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} unit blcksock; interface uses SysUtils, Classes, synafpc, synsock, synautil, synacode, synaip {$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_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; {:@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: TList; FInterPacketTimeout: Boolean; {$IFNDEF CIL} FFDSet: TFDSet; {$ENDIF} FRecvCounter: Integer; FSendCounter: Integer; 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; 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(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(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: Integer); {: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(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: TList; Timeout: Integer; const CanReadList: TList): 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: Integer read FRecvCounter; {:Return count of sended bytes on this socket from begin of current connection.} property SendCounter: Integer 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(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(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(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 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.} function GetPeerFingerprint: string; 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; 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 := TList.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(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 + 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(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 FLastError = 0 then WriteStrToStream(Stream, s); until FLastError <> 0; end; procedure TBlockSocket.RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: Integer); var s: AnsiString; n: integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin for n := 1 to (Size div FSendMaxChunk) 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} end; n := Size mod 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.CanWrite(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} 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(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: TList; Timeout: Integer; const CanReadList: TList): 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(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(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.u6_addr8[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.u6_addr8[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(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: string; 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-0.9.8/plugins/wfx/ftp/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016372� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/src/sftp/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017346� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/src/sftp/sftpsend.pas�����������������������������������������������0000644�0001750�0000144�00000034137�13362625434�021722� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2013-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 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 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; end; implementation uses LazUTF8, DCBasicTypes, DCDateTimeUtils, DCStrUtils, DCOSUtils, FtpFunc, CTypes, DCClassesUtf8, DCFileAttributes; 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; begin Result:= Connect; if Result and FAuto then DetectEncoding; 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 SendStream := TFileStreamEx.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite); TargetName:= PWideChar(ServerToClient(FileName)); SourceName:= PWideChar(UTF8Decode(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 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(UTF8Decode(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((FileSize - 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 RetrStream.Free; FreeMem(FBuffer); Result:= FileClose(SourceHandle) and Result; end; finally 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 Assigned(Result) then 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-0.9.8/plugins/wfx/ftp/src/sftp/scpsend.pas������������������������������������������������0000644�0001750�0000144�00000060420�13611062650�021515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2013-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 ScpSend; {$mode delphi} {$pointermath on} interface uses Classes, SysUtils, WfxPlugin, FtpAdv, libssh; type { TScpSend } TScpSend = class(TFTPSendEx) private FAutoDetect: Boolean; FListCommand: String; FChannel: PLIBSSH2_CHANNEL; private function OpenChannel: Boolean; function CloseChannel(Channel: PLIBSSH2_CHANNEL): Boolean; function SendCommand(const Command: String): Boolean; overload; function SendCommand(const Command: String; out Answer: String): Boolean; overload; private FAnswer: String; protected FCurrentDir: String; FLastError: Integer; FSavedPassword: Boolean; FFingerprint: AnsiString; FSession: PLIBSSH2_SESSION; SourceName, TargetName: PWideChar; procedure DoProgress(Percent: Int64); protected procedure DetectEncoding; function AuthKey: Boolean; function Connect: Boolean; override; public constructor Create(const Encoding: String); override; function Login: Boolean; override; function Logout: Boolean; override; function GetCurrentDir: String; 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 ExecuteCommand(const Command: 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 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 Fingerprint: AnsiString read FFingerprint write FFingerprint; end; implementation uses CTypes, LazUTF8, FtpFunc, DCStrUtils, DCClassesUtf8, DCOSUtils, DCDateTimeUtils, DCBasicTypes, DCConvertEncoding, FileUtil, Base64, LConvEncoding, SynaCode, StrUtils; const 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 Exit(False); 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; 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): Boolean; const BUFFER_SIZE = 4096; var Ret: cint; begin Result:= OpenChannel; if Result then begin Result:= SendCommand(Command); if Result then begin SetLength(Answer, BUFFER_SIZE + 1); while libssh2_channel_eof(FChannel) = 0 do begin if libssh2_channel_read_stderr(FChannel, Pointer(Answer), BUFFER_SIZE) > 0 then Result:= False; Ret:= libssh2_channel_read(FChannel, Pointer(Answer), BUFFER_SIZE); if (Ret > 0) then begin SetLength(Answer, Ret); Answer:= TrimRightLineEnding(Answer, tlbsLF); end; end; Result:= Result and (libssh2_channel_get_exit_status(FChannel) = 0); 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.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: Boolean; const Alphabet = ['a'..'z','A'..'Z','0'..'9','+','/','=', #10, #13]; var 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 Passphrase:= DecodeStringBase64(Memory); Index:= Pos('bcrypt', Passphrase); Encrypted:= (Index > 0) and (Index <= 64); end; end; end; // Private key encrypted, request pass phrase if Encrypted then begin SetLength(Password, MAX_PATH + 1); Message:= 'Private key pass phrase:'; Title:= 'ssh://' + UTF8ToUTF16(FUserName + '@' + FTargetHost); if RequestProc(PluginNumber, RT_Password, PWideChar(Title), PWideChar(Message), PWideChar(Password), MAX_PATH) then begin Passphrase:= ClientToServer(Password); end; end; Result:= libssh2_userauth_publickey_fromfile(FSession, PAnsiChar(FUserName), PAnsiChar(CeUtf8ToSys(FPublicKey)), PAnsiChar(CeUtf8ToSys(FPrivateKey)), PAnsiChar(Passphrase)) = 0; 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 = ''; 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); if libssh2_session_handshake(FSession, FSock.Socket) <> 0 then begin DoStatus(False, 'Cannot establishing SSH session'); 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)); if (strpos(userauthlist, 'publickey') <> nil) and (FPublicKey <> '') and (FPrivateKey <> '') then begin DoStatus(False, 'Auth via public key for user: ' + FUserName); if not AuthKey then begin LogProc(PluginNumber, msgtype_importanterror, 'Authentication by publickey failed'); Exit(False); end; end else if (strpos(userauthlist, 'password') <> nil) then begin I:= libssh2_userauth_password(FSession, PAnsiChar(FUserName), PAnsiChar(FPassword)); if I <> 0 then begin LogProc(PluginNumber, msgtype_importanterror, 'Authentication by password failed'); Exit(False); end; end else if (strpos(userauthlist, 'keyboard-interactive') <> nil) then begin FSavedPassword:= False; libssh2_session_set_timeout(FSession, 0); I:= libssh2_userauth_keyboard_interactive(FSession, PAnsiChar(FUserName), @userauth_kbdint); if I <> 0 then begin LogProc(PluginNumber, msgtype_importanterror, 'Authentication by keyboard-interactive failed'); Exit(False); end; libssh2_session_set_timeout(FSession, FTimeout); 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 FCurrentDir:= '/'; inherited Create(Encoding); FTargetPort:= '22'; FListCommand:= 'ls -la'; end; function TScpSend.Login: Boolean; var ACommand: String; begin Result:= Connect; if Result then begin 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) 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) then begin FListCommand:= ACommand end; end; end; if FAuto then DetectEncoding; 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; procedure TScpSend.CloneTo(AValue: TFTPSendEx); begin inherited CloneTo(AValue); 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); 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: String): Boolean; var Index: Integer; Answer: TStringList; begin FDataStream.Clear; Result:= OpenChannel; if Result then begin DoStatus(False, Command); Result:= SendCommand('cd ' + EscapeNoQuotes(FCurrentDir) + ' && ' + Command); if Result then begin Result:= DataRead(FDataStream); if Result 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.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(UTF8Decode(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(UTF8Decode(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((FileSize - 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 RetrStream.Free; FreeMem(FBuffer); Result:= CloseChannel(SourceHandle) and Result; end; finally libssh2_session_set_blocking(FSession, 1); end; end; function TScpSend.DataRead(const DestStream: TStream): Boolean; var Ret, ERet: cint; ABuffer: array[Byte] of AnsiChar; AEBuffer: array[Byte] of AnsiChar; begin repeat if libssh2_channel_eof(FChannel) <> 0 then Break; Ret:= libssh2_channel_read(FChannel, ABuffer, 256); ERet:= libssh2_channel_read_stderr(FChannel, AEBuffer, 256); if (ERet > 0) then begin LogProc(PluginNumber, msgtype_importanterror, PWideChar(ServerToClient(AEBuffer))); end; if Ret > 0 then DestStream.Write(ABuffer, Ret); until not ((Ret > 0) or (Ret = LIBSSH2_ERROR_EAGAIN)); 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-0.9.8/plugins/wfx/ftp/src/sftp/libssh.pas�������������������������������������������������0000644�0001750�0000144�00000067455�13611062650�021361� 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; //* 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; //* 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_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; //* Userauth API */ 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; //* 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_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_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_keyboard_interactive_ex:= SafeGetProcAddress(libssh2, 'libssh2_userauth_keyboard_interactive_ex'); libssh2_userauth_publickey_fromfile_ex:= SafeGetProcAddress(libssh2, 'libssh2_userauth_publickey_fromfile_ex'); //* 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-0.9.8/plugins/wfx/ftp/src/ftputils.pas����������������������������������������������������0000644�0001750�0000144�00000014170�13276343463�020770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-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 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 {$IFDEF MSWINDOWS} , Windows {$ELSE} , UnixUtil {$ENDIF} ; 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 I: Integer; begin I:= Pos('://', Connection); if I > 0 then Delete(Connection, 1, I + 2); I:= Pos(':', Connection); if I > 0 then Result:= Copy(Connection, 1, I - 1) else Result:= Connection; end; function ExtractConnectionPort(Connection: AnsiString): AnsiString; var I, J: Integer; begin Result:= EmptyStr; I:= Pos('://', Connection); if I > 0 then Delete(Connection, 1, I + 2); I:= Pos(':', Connection); if I > 0 then begin J:= Pos('/', Connection); if J = 0 then J:= MaxInt; Result:= Trim(Copy(Connection, I + 1, J - I - 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-0.9.8/plugins/wfx/ftp/src/ftpproxy.pas����������������������������������������������������0000644�0001750�0000144�00000013727�13275617560�021021� 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-0.9.8/plugins/wfx/ftp/src/ftpfunc.pas�����������������������������������������������������0000644�0001750�0000144�00000110545�13611062650�020553� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-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 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; OnlySCP: Boolean; AutoTLS: Boolean; FullSSL: Boolean; OpenSSH: 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; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; function FsFindNextW(Hdl: THandle; var FindData: TWin32FindDataW): BOOL; dcpcall; function FsFindClose(Hdl: THandle): Integer; dcpcall; function FsExecuteFileW(MainWin: THandle; RemoteName, Verb: PWideChar): Integer; dcpcall; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; function FsGetFileW(RemoteName, LocalName: PWideChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; dcpcall; function FsPutFileW(LocalName, RemoteName: PWideChar; CopyFlags: Integer) : Integer; dcpcall; function FsDeleteFileW(RemoteName: PWideChar): BOOL; dcpcall; function FsMkDirW(RemoteDir: PWideChar): BOOL; dcpcall; function FsRemoveDirW(RemoteName: PWideChar): BOOL; dcpcall; function FsSetTimeW(RemoteName: PWideChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; dcpcall; function FsDisconnectW(DisconnectRoot: PWideChar): BOOL; dcpcall; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; procedure FsStatusInfoW(RemoteDir: PWideChar; InfoStartEnd, InfoOperation: Integer); dcpcall; function FsGetBackgroundFlags: Integer; dcpcall; { Network API } { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; function FsNetworkManageConnection(MainWin: HWND; Connection: PAnsiChar; Action: LongInt; MaxLen: LongInt): LongBool; dcpcall; function FsNetworkOpenConnection(Connection: PAnsiChar; RootDir, RemotePath: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; } { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; 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, SftpSend, ScpSend, FtpProxy; 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.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 + '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); IniFile.UpdateFile; 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:= UTF8Decode(Password); AConnection:= UTF8Decode(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(UTF8Decode(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) end; FtpSend.PublicKey:= Connection.PublicKey; FtpSend.PrivateKey:= Connection.PrivateKey; 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 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 + UTF8Decode(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: Boolean; var Index: Integer; FtpSend: TFTPSendEx; Connection: TConnection; begin Result:= ActiveConnectionList.IndexOf(cQuickConnection) >= 0; if not Result then 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; sConnName := ExtractConnectionName(UTF16ToUTF8(sPath)); if Assigned(ThreadCon) then begin Result:= True; FtpSend:= ThreadCon; end else begin 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, UTF8Decode(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, UTF8Decode(Connection.ConnectionName)); FindData.dwFileAttributes := FILE_ATTRIBUTE_NORMAL; Inc(ListRec^.Index); Result := True; end; end; function FsInitW(PluginNr: Integer; pProgressProc: TProgressProcW; pLogProc: TLogProcW; pRequestProc: TRequestProcW): Integer; dcpcall; begin ProgressProc := pProgressProc; LogProc := pLogProc; RequestProc := pRequestProc; PluginNumber := PluginNr; Result := 0; end; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; 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; 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; 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; var FtpSend: TFTPSendEx; 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 wsFileName := FtpSend.ServerToClient(FtpSend.GetCurrentDir); wsFileName := SetDirSeparators(RemoteName + wsFileName); StrPLCopy(RemoteName, wsFileName, MAX_PATH); 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 QuickConnection then Result := FS_EXEC_SYMLINK else Result := FS_EXEC_OK; end; 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, asFileName) then begin asFileName:= FtpSend.ClientToServer(Verb); if FtpSend.ExecuteCommand(Copy(asFileName, 7, MaxInt)) 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; Result:= FS_EXEC_OK; end; end; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; var I: Integer; FtpSend: TFTPSendEx; sOldName: AnsiString; sNewName: AnsiString; begin Result := FS_FILE_NOTSUPPORTED; if not Move then Exit; if (ExtractFileDir(OldName) = PathDelim) and (WideChar(OldName[1]) <> '<') then begin I:= ConnectionList.IndexOf(OldName + 1); if I < 0 then Result:= FS_FILE_NOTFOUND else begin ConnectionList[I]:= RepairConnectionName(UTF16ToUTF8(UnicodeString(NewName + 1))); TConnection(ConnectionList.Objects[I]).ConnectionName:= ConnectionList[I]; 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; 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; 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; 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; 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; 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; 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; var Index: Integer; asTemp: AnsiString; wsTemp: UnicodeString; FtpSend: TFTPSendEx; begin Result := False; wsTemp := ExcludeLeadingPathDelimiter(DisconnectRoot); if GetConnectionByPath(wsTemp, FtpSend, asTemp) then begin Result := FtpSend.Logout; Index:= ConnectionList.IndexOf(ExtractConnectionName(UTF16ToUTF8(wsTemp))); if Index >= 0 then begin ZeroPassword(TConnection(ConnectionList.Objects[Index]).CachedPassword); end; LogProc(PluginNumber, MSGTYPE_DISCONNECT, PWideChar('DISCONNECT ' + DisconnectRoot)); ActiveConnectionList.Delete(ActiveConnectionList.IndexOfObject(FtpSend)); FreeAndNil(FtpSend); end; end; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; begin CryptProc:= pCryptProc; CryptoNumber:= CryptoNr; end; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DefRootName, 'FTP', MaxLen); end; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; begin ConnectionList := TStringList.Create; ActiveConnectionList := TStringList.Create; DefaultIniName:= ExtractFileName(dps.DefaultIniName); end; procedure FsStatusInfoW(RemoteDir: PWideChar; InfoStartEnd, InfoOperation: Integer); dcpcall; 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; begin Result:= BG_DOWNLOAD or BG_UPLOAD or BG_ASK_USER; end; { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; begin StrPLCopy(Protocols, ftpProtocol, MaxLen); end; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; 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; 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; 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; 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; 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; OnlySCP:= Connection.OnlySCP; 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-0.9.8/plugins/wfx/ftp/src/ftpadv.pas������������������������������������������������������0000644�0001750�0000144�00000061264�13611062650�020375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-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 FtpAdv; {$mode delphi} interface uses Classes, SysUtils, WfxPlugin, FtpSend, LazUTF8Classes, LConvEncoding, DCConvertEncoding, DCFileAttributes, DCBasicTypes, blcksock; 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(TFileStreamUTF8) 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 ExecuteCommand(const Command: 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 RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; virtual; overload; function NetworkError(): Boolean; 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, LazFileUtils, 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} 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 = EncodingCPKOI8 then begin ConvertToUtf8:= @KOI8ToUTF8; ConvertFromUtf8:= @UTF8ToKOI8; 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; 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; FDataStream.Position := 0; FFTPList.Lines.LoadFromStream(FDataStream); for x:= 0 to FFTPList.Lines.Count - 1 do begin s:= 1; flr := TFTPListRecEx.Create; v:= FFTPList.Lines[x]; flr.OriginalLine:= v; // DoStatus(True, v); for y:= 1 to Length(v) do begin if v[y] = '=' then begin option:= LowerCase(Copy(v, s, y - s)); 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:= pcdir or (value = 'dir'); 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:= 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; 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); begin if (Reason in [HR_Error]) and (Length(Value) > 0) then LogProc(PluginNumber, msgtype_importanterror, PWideChar(ServerToClient(Value))); 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; begin Result:= inherited Login; if Result then begin if (FTPCommand('FEAT') div 100) = 2 then begin for Index:= 0 to FFullResult.Count - 1 do begin 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; 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: String): Boolean; begin Result:= (FTPCommand(Command) div 100) = 2; 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; 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(UTF8Decode(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 FileExistsUTF8(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(UTF8Decode(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-0.9.8/plugins/wfx/ftp/src/ftp.lpi���������������������������������������������������������0000644�0001750�0000144�00000012432�13615104272�017675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> <SaveOnlyProjectUnits Value="True"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <UseAppBundle Value="False"/> <Icon Value="0"/> </General> <i18n> <EnableI18N Value="True"/> <OutDir Value="..\language"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="3"/> <RevisionNr Value="4"/> <StringTable FileDescription="FTP WFX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2020 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;"/> <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"/> <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> <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;"/> <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> </CompilerOptions> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/src/ftp.ico���������������������������������������������������������0000644�0001750�0000144�00000474106�13444250470�017677� 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-0.9.8/plugins/wfx/ftp/src/ftp.dpr���������������������������������������������������������0000644�0001750�0000144�00000001647�13615104272�017704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library ftp; {$IFDEF FPC} {$mode delphi}{$H+} {$ENDIF} uses {$IFDEF UNIX} cthreads, {$ENDIF} DCConvertEncoding, FPCAdds, Classes, FtpFunc, FtpUtils, FtpConfDlg , ssl_openssl {$IF DEFINED(UNIX)} , ssl_openssl_ver {$ENDIF} {$IF DEFINED(LINUX)} , ssl_gnutls_lib {$ELSEIF DEFINED(MSWINDOWS)} , ssl_winssl_lib {$ENDIF} ; {$IF DEFINED(LINUX)} {$I ssl_gnutls_lib.inc} {$ELSEIF DEFINED(MSWINDOWS)} {$I ssl_winssl_lib.inc} {$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-0.9.8/plugins/wfx/ftp/src/FtpConfDlg.pas��������������������������������������������������0000644�0001750�0000144�00000042304�13313731260�021070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-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 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, ssl_openssl_lib, libssh, FtpProxy, TypInfo; var 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 SendDlgMsg(pDlg, 'chkOnlySCP', DM_SETCHECK, 0, 0) else begin SendDlgMsg(pDlg, 'chkShowHidden', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkPassiveMode', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkKeepAliveTransfer', DM_SETCHECK, 0, 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.FullSSL then Text:= 'ftps://' + Text; if gConnection.Port <> EmptyStr then Text:= Text + ':' + gConnection.Port; 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.AutoTLS); SendDlgMsg(pDlg, 'chkAutoTLS', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.OpenSSH); SendDlgMsg(pDlg, 'chkOpenSSH', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.OnlySCP); SendDlgMsg(pDlg, 'chkOnlySCP', 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 = 'chkAutoTLS' then begin Data:= SendDlgMsg(pDlg, 'chkAutoTLS', DM_GETCHECK, 0, 0); gConnection.AutoTLS:= Boolean(Data); if gConnection.AutoTLS then begin gConnection.OpenSSH:= False; if not InitSSLInterface then begin ShowWarningSSL; gConnection.AutoTLS:= False; Data:= PtrInt(gConnection.AutoTLS); SendDlgMsg(pDlg, 'chkAutoTLS', DM_SETCHECK, Data, 0); end; SendDlgMsg(pDlg, 'chkOpenSSH', DM_SETCHECK, 0, 0); end; EnableControls(pDlg); end else if DlgItemName = 'chkOpenSSH' then begin Data:= SendDlgMsg(pDlg, 'chkOpenSSH', DM_GETCHECK, 0, 0); gConnection.OpenSSH:= Boolean(Data); if gConnection.OpenSSH then begin if libssh2 = NilHandle then begin ShowWarningSSH; gConnection.OpenSSH:= False; Data:= PtrInt(gConnection.OpenSSH); SendDlgMsg(pDlg, 'chkOpenSSH', DM_SETCHECK, Data, 0); end; SendDlgMsg(pDlg, 'chkAutoTLS', DM_SETCHECK, 0, 0); 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, 'chkAutoTLS', DM_GETCHECK, 0, 0); gConnection.AutoTLS:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkOnlySCP', DM_GETCHECK, 0, 0); gConnection.OnlySCP:= 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.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-0.9.8/plugins/wfx/ftp/src/FtpConfDlg.lfm��������������������������������������������������0000644�0001750�0000144�00000047744�13375626014�021110� 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 = '1.8.4.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 OnClick = ButtonClick TabOrder = 2 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' OnClick = ButtonClick TabOrder = 1 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 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 = 5 end object btnAnonymous: TButton AnchorSideLeft.Control = edtHost AnchorSideTop.Control = edtHost 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' OnClick = ButtonClick TabOrder = 4 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 = 10 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 = 6 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' OnChange = CheckBoxChange TabOrder = 8 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...' OnClick = ButtonClick TabOrder = 7 Visible = False 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 = 11 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 chkAutoTLS: TCheckBox AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = btnAnonymous AnchorSideTop.Side = asrCenter Left = 12 Height = 24 Top = 76 Width = 47 BorderSpacing.Left = 12 Caption = 'TLS' OnChange = CheckBoxChange TabOrder = 2 end object chkOpenSSH: TCheckBox AnchorSideLeft.Control = chkAutoTLS AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkAutoTLS AnchorSideTop.Side = asrCenter Left = 63 Height = 24 Top = 76 Width = 52 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 Caption = 'SSH' OnChange = CheckBoxChange TabOrder = 3 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' 'KOI-8' 'ISO-8859-1' 'ISO-8859-2' 'ISO-8859-15' ) Style = csDropDownList TabOrder = 9 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 = 166 Top = 101 Width = 400 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'SSH' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 139 ClientWidth = 394 TabOrder = 1 object chkOnlySCP: TCheckBox AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = gbSSH Left = 6 Height = 19 Top = 6 Width = 194 Caption = 'Use SSH+SCP protocol (no SFTP)' TabOrder = 0 end object DividerBevel: TDividerBevel AnchorSideTop.Control = chkOnlySCP AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSSH AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 31 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 = 52 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 = 71 Width = 384 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 1 end object lblPrivateKey: TLabel AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = fnePublicKey AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 98 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 = 117 Width = 384 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 2 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 OnChange = ComboBoxChange Style = csDropDownList TabOrder = 0 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-0.9.8/plugins/wfx/ftp/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016351� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/language/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017366� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/language/ftp.ru.po��������������������������������������������������0000644�0001750�0000144�00000007432�13300576322�021154� 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.chkautotls.caption msgid "TLS" msgstr "TLS" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "Поддерживать соединение во время передачи" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Использовать &главный пароль для защиты пароля" #: tdialogbox.chkonlyscp.caption msgid "Use SSH+SCP protocol (no SFTP)" msgstr "Использовать протокол SSH+SCP (нет SFTP)" #: tdialogbox.chkopenssh.caption msgctxt "tdialogbox.chkopenssh.caption" msgid "SSH" msgstr "SSH" #: 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.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 "Прокси" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/language/ftp.po�����������������������������������������������������0000644�0001750�0000144�00000005362�13300576322�020527� 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.chkautotls.caption msgid "TLS" msgstr "" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "" #: tdialogbox.chkonlyscp.caption msgid "Use SSH+SCP protocol (no SFTP)" msgstr "" #: tdialogbox.chkopenssh.caption msgctxt "tdialogbox.chkopenssh.caption" msgid "SSH" 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.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 "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/language/ftp.be.po��������������������������������������������������0000644�0001750�0000144�00000007232�13546360050�021113� 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.chkautotls.caption msgid "TLS" msgstr "TLS" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "Падтрымліваць злучэнне ў час перадачы" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Выкарыcтоўваць &галоўны пароль для абароны пароля" #: tdialogbox.chkonlyscp.caption msgid "Use SSH+SCP protocol (no SFTP)" msgstr "Выкарыcтоўваць пратакол SSH+SCP (няма SFTP)" #: tdialogbox.chkopenssh.caption msgctxt "tdialogbox.chkopenssh.caption" msgid "SSH" msgstr "SSH" #: 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 "Выкары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.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 "Проксі" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wfx/ftp/COPYING.LESSER.txt��������������������������������������������������0000644�0001750�0000144�00000063642�12521100560�020454� 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-0.9.8/plugins/wfx/ftp/COPYING.GPL.txt�����������������������������������������������������0000644�0001750�0000144�00000043254�12521100560�020076� 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-0.9.8/plugins/wdx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015010� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016472� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017261� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/xpi_wdx_intf.pas��������������������������������������������0000644�0001750�0000144�00000014620�12014201074�022463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (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 3 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 program. If not, see <http://www.gnu.org/licenses/>. } unit xpi_wdx_intf; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WdxPlugin; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; implementation uses xpi_def, xpi_io; const IDX_ID = 0; IDX_NAME = 1; IDX_VERSION = 2; IDX_TYPE = 3; IDX_DESCRIPTION = 4; IDX_CREATOR = 5; IDX_DEVELOPER = 6; IDX_CONTRIBUTOR = 7; IDX_TRANSLATOR = 8; IDX_HOMEPAGEURL = 9; IDX_UPDATEURL = 10; IDX_PLATFORM = 11; IDX_COMPATIBILITY = 12; IDX_FIREFOX = 13; IDX_MOZILLA = 14; IDX_SEAMONKEY = 15; IDX_THUNDERBIRD = 16; IDX_FLOCK = 17; IDX_SUNBIRD = 18; IDX_FENNEC = 19; FIELD_COUNT = 20; var CurrentFileName: AnsiString; // Current *.xpi file InstallManifest: TInstallManifest; // Cache for current file function EnsureLength(S: AnsiString; MaxLen: Integer): AnsiString; begin Result := S; if Length(Result) >= MaxLen then begin Result := Copy(Result, 1, MaxLen - 4); Result := Result + '...'; end; end; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DetectString, 'EXT="XPI"', MaxLen) end; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var Field: AnsiString; begin StrPCopy(Units, EmptyStr); if FieldIndex >= FIELD_COUNT then begin Result := FT_NOMOREFIELDS; Exit; end; Result := FT_STRING; case FieldIndex of IDX_ID: Field := 'ID'; IDX_NAME: Field := 'Name'; IDX_VERSION: Field := 'Version'; IDX_TYPE: Field := 'Type'; IDX_DESCRIPTION: Field := 'Description'; IDX_CREATOR: Field := 'Creator'; IDX_DEVELOPER: Field := 'Developer(s)'; IDX_CONTRIBUTOR: Field := 'Contributor(s)'; IDX_TRANSLATOR: Field := 'Translator(s)'; IDX_HOMEPAGEURL: Field := 'Home page'; IDX_UPDATEURL: Field := 'Update URL'; IDX_PLATFORM: Field := 'Platform(s)'; IDX_COMPATIBILITY: Field := 'Compatibility'; IDX_FIREFOX: Field := 'Firefox'; IDX_MOZILLA: Field := 'Mozilla Suite'; IDX_SEAMONKEY: Field := 'SeaMonkey'; IDX_THUNDERBIRD: Field := 'Mozilla Thunderbird'; IDX_FLOCK: Field := 'Flock'; IDX_SUNBIRD: Field := 'Sunbird'; IDX_FENNEC: Field := 'Fennec'; end; StrPLCopy(FieldName, Field, MaxLen); end; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; var Value : AnsiString; begin Result := FT_FILEERROR; if not FileExists(FileName) then Exit; if CurrentFileName <> FileName then begin if not ParseInsatallManifest(FileName, InstallManifest) then Exit; CurrentFileName := FileName; end; if (FieldIndex >= FIELD_COUNT) then begin Result := FT_NOSUCHFIELD; Exit; end; Result := FT_STRING; case FieldIndex of IDX_ID: Value := InstallManifest.ID; IDX_NAME: Value := InstallManifest.Name; IDX_VERSION: Value := InstallManifest.Version; IDX_TYPE: Value := InstallManifest.AddonType; IDX_DESCRIPTION: Value := InstallManifest.Description; IDX_CREATOR: Value := InstallManifest.Creator; IDX_DEVELOPER: Value := InstallManifest.Developer; IDX_CONTRIBUTOR: Value := InstallManifest.Contributor; IDX_TRANSLATOR: Value := InstallManifest.Translator; IDX_HOMEPAGEURL: Value := InstallManifest.HomePageURL; IDX_UPDATEURL: Value := InstallManifest.UpdateURL; IDX_PLATFORM: Value := InstallManifest.TargetPlatform; IDX_COMPATIBILITY: Value := InstallManifest.Compatibility; IDX_FIREFOX: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[0]]; IDX_MOZILLA: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[1]]; IDX_SEAMONKEY: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[2]]; IDX_THUNDERBIRD: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[3]]; IDX_FLOCK: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[4]]; IDX_SUNBIRD: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[5]]; IDX_FENNEC: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[6]]; else Result := FT_FIELDEMPTY; Exit; end; StrPLCopy(PAnsiChar(FieldValue), EnsureLength(Value, MaxLen), MaxLen); end; initialization CurrentFileName := EmptyStr; InstallManifest := TInstallManifest.Create; finalization FreeAndNil(InstallManifest); end. ����������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/xpi_wdx.lpr�������������������������������������������������0000644�0001750�0000144�00000002262�12014201074�021454� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (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 3 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 program. If not, see <http://www.gnu.org/licenses/>. } library xpi_wdx; {$mode objfpc}{$H+} uses Classes, xpi_wdx_intf, xpi_def, xpi_io { you can add units after this }; exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/xpi_wdx.lpi�������������������������������������������������0000644�0001750�0000144�00000011121�13022776142�021452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <SaveOnlyProjectUnits Value="True"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="XPI WDX 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"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\xpi_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> <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"/> <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"/> <HostApplicationFilename Value="D:\totalcmd\totalcmd.exe"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="4"> <Unit0> <Filename Value="xpi_wdx.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="xpi_wdx_intf.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="xpi_def.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="xpi_io.pas"/> <IsPartOfProject Value="True"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\xpi_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;"/> <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> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/xpi_io.pas��������������������������������������������������0000644�0001750�0000144�00000014703�12014201074�021252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (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 3 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 program. If not, see <http://www.gnu.org/licenses/>. } unit xpi_io; {$mode objfpc}{$H+} interface uses Classes, SysUtils, xpi_def; function ParseInsatallManifest(FileName: PAnsiChar; out InstallManifest: TInstallManifest): Boolean; implementation uses Unzip, ZipUtils, DOM, XMLRead; function ExtractInstallManifest(FileName: PAnsiChar; out MemoryStream: TMemoryStream): Boolean; var xpiFile: unzFile = nil; rdfInfo: unz_file_info; iError: LongInt; FileBuffer: Pointer = nil; begin Result:= False; xpiFile:= unzOpen(FileName); if Assigned(xpiFile) then try iError:= unzLocateFile(xpiFile, 'install.rdf', 0); if iError <> UNZ_OK then Exit; iError:= unzGetCurrentFileInfo(xpiFile, @rdfInfo, nil, 0, nil, 0, nil, 0); if iError <> UNZ_OK then Exit; FileBuffer:= AllocMem(rdfInfo.uncompressed_size); if FileBuffer = nil then Exit; iError := unzOpenCurrentFile(xpiFile); if iError <> UNZ_OK then Exit; iError := unzReadCurrentFile(xpiFile, FileBuffer, rdfInfo.uncompressed_size); if iError < 0 then Exit; if MemoryStream.Write(FileBuffer^, iError) = iError then Result:= True; iError := unzCloseCurrentFile(xpiFile); finally iError := unzClose(xpiFile); if Assigned(FileBuffer) then FreeMem(FileBuffer); end; end; function AddonType(const sType: AnsiString): AnsiString; var iType: Integer; begin iType:= StrToIntDef(sType, 0); case iType of 2: Result:= 'Extension'; 4: Result:= 'Theme'; 8: Result:= 'Locale'; 16: Result:= 'Plugin'; 32: Result:= 'Multiple Item Package'; else Result:= 'Unknown'; end; end; function AddString(const TargetStr, SourceStr: AnsiString): AnsiString; begin if Length(TargetStr) = 0 then Result:= SourceStr else Result:= TargetStr + ', ' + SourceStr; end; procedure AddApplication(const InstallManifest: TInstallManifest; Node: TDOMNode); var I: LongWord; Application: AnsiString; ID, MinVersion, MaxVersion: AnsiString; begin Node:= Node.FindNode('Description'); if Assigned(Node) then begin for I:= 0 to Node.ChildNodes.Count - 1 do with Node.ChildNodes.Item[I] do begin if nodeName = 'em:id' then ID:= FirstChild.NodeValue else if nodeName = 'em:minVersion' then MinVersion:= FirstChild.NodeValue else if nodeName = 'em:maxVersion' then MaxVersion:= FirstChild.NodeValue end; if InstallManifest.TargetApplication.IndexOfName(ID) < 0 then begin InstallManifest.TargetApplication.Add(ID + '=' + MinVersion + '-' + MaxVersion); Application:= ApplicationList.Values[ID]; if Length(Application) <> 0 then begin InstallManifest.Compatibility:= AddString(InstallManifest.Compatibility, Application); end; end; end; end; function ParseInsatallManifest(FileName: PAnsiChar; out InstallManifest: TInstallManifest): Boolean; var I: LongWord; MemoryStream: TMemoryStream = nil; Doc: TXMLDocument = nil; mainNode: TDOMNode = nil; childNode: TDOMNode = nil; begin Result:= False; MemoryStream:= TMemoryStream.Create; try if ExtractInstallManifest(FileName, MemoryStream) then; begin MemoryStream.Position:= 0; ReadXMLFile(Doc, MemoryStream); if Assigned(Doc.documentElement) then mainNode:= Doc.documentElement.FindNode('Description'); { if not Assigned(mainNode) then mainNode:= Doc.documentElement.FindNode('RDF:Description'); } if Assigned(mainNode) then begin InstallManifest.Clear; for I:= 0 to mainNode.ChildNodes.Count - 1 do begin childNode := mainNode.ChildNodes.Item[I]; if Assigned(childNode) then with childNode do begin if nodeName = 'em:id' then InstallManifest.ID:= FirstChild.NodeValue else if nodeName = 'em:name' then InstallManifest.Name:= FirstChild.NodeValue else if nodeName = 'em:version' then InstallManifest.Version:= FirstChild.NodeValue else if nodeName = 'em:type' then InstallManifest.AddonType:= AddonType(FirstChild.NodeValue) else if nodeName = 'em:description' then InstallManifest.Description:= FirstChild.NodeValue else if nodeName = 'em:creator' then InstallManifest.Creator:= FirstChild.NodeValue else if nodeName = 'em:contributor' then InstallManifest.Contributor:= AddString(InstallManifest.Contributor, FirstChild.NodeValue) else if nodeName = 'em:developer' then InstallManifest.Developer:= AddString(InstallManifest.Developer, FirstChild.NodeValue) else if nodeName = 'em:translator' then InstallManifest.Translator:= AddString(InstallManifest.Translator, FirstChild.NodeValue) else if nodeName = 'em:homepageURL' then InstallManifest.HomePageURL:= FirstChild.NodeValue else if nodeName = 'em:updateURL' then InstallManifest.UpdateURL:= FirstChild.NodeValue else if nodeName = 'em:targetPlatform' then InstallManifest.TargetPlatform:= AddString(InstallManifest.TargetPlatform, FirstChild.NodeValue) else if nodeName = 'em:targetApplication' then AddApplication(InstallManifest, childNode) end; end; Result:= True; end; FreeAndNil(Doc); end; finally FreeAndNil(MemoryStream); end; end; end. �������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/src/xpi_def.pas�������������������������������������������������0000644�0001750�0000144�00000005472�12014201074�021404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (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 3 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 program. If not, see <http://www.gnu.org/licenses/>. } unit xpi_def; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type { TInstallManifest } TInstallManifest = class public ID, Name, Version, Description, Creator, Developer, Contributor, Translator, HomePageURL, UpdateURL, TargetPlatform, Compatibility, AddonType: AnsiString; TargetApplication: TStringList; public constructor Create; destructor Destroy; override; procedure Clear; end; var ApplicationList: TStringList; implementation { TInstallManifest } procedure TInstallManifest.Clear; begin ID := EmptyStr; Name := EmptyStr; Version := EmptyStr; Description := EmptyStr; Creator := EmptyStr; Developer := EmptyStr; Contributor := EmptyStr; Translator := EmptyStr; HomePageURL := EmptyStr; UpdateURL := EmptyStr; TargetPlatform := EmptyStr; Compatibility := EmptyStr; TargetApplication.Clear; end; constructor TInstallManifest.Create; begin TargetApplication:= TStringList.Create; end; destructor TInstallManifest.Destroy; begin FreeAndNil(TargetApplication); inherited Destroy; end; initialization ApplicationList:= TStringList.Create; ApplicationList.Add('{ec8030f7-c20a-464f-9b0e-13a3a9e97384}=fx'); // Firefox ApplicationList.Add('{86c18b42-e466-45a9-ae7a-9b95ba6f5640}=mz'); // Mozilla Suite ApplicationList.Add('{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}=sm'); // SeaMonkey ApplicationList.Add('{3550f703-e582-4d05-9a08-453d09bdfdc6}=mt'); // Mozilla Thunderbird ApplicationList.Add('{a463f10c-3994-11da-9945-000d60ca027b}=fl'); // Flock ApplicationList.Add('{718e30fb-e89b-41dd-9da7-e25a45638b28}=sb'); // Sunbird ApplicationList.Add('{a23983c0-fd0e-11dc-95ff-0800200c9a66}=fc'); // Fennec //ApplicationList.Add(''); finalization FreeAndNil(ApplicationList); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/lib/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017240� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/xpi_wdx/COPYING.txt�����������������������������������������������������0000644�0001750�0000144�00000016743�12014201074�020346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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-0.9.8/plugins/wdx/textline/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016644� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/textline/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017433� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/textline/src/TextLine.lpr�����������������������������������������������0000644�0001750�0000144�00000010425�13212321772�021711� 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-0.9.8/plugins/wdx/textline/src/TextLine.lpi�����������������������������������������������0000644�0001750�0000144�00000007531�13022776142�021710� 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="TextLine"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <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> <local> <FormatVersion Value="1"/> </local> </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> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/textline/lib/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017412� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/textline/README.txt�����������������������������������������������������0000644�0001750�0000144�00000001130�12704652050�020337� 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-0.9.8/plugins/wdx/textline/COPYING.LESSER.txt���������������������������������������������0000644�0001750�0000144�00000063642�12704574561�021540� 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-0.9.8/plugins/wdx/textline/COPYING.GPL.txt������������������������������������������������0000644�0001750�0000144�00000043254�12704574561�021162� 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-0.9.8/plugins/wdx/scripts/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016477� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/scripts/textlinewdx.lua�������������������������������������������������0000644�0001750�0000144�00000001532�13007707643�021572� 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-0.9.8/plugins/wdx/scripts/simplewdx.lua���������������������������������������������������0000644�0001750�0000144�00000002022�13007707404�021215� 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-0.9.8/plugins/wdx/scripts/fulltextodtwdx.lua����������������������������������������������0000644�0001750�0000144�00000001213�13040462353�022301� 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-0.9.8/plugins/wdx/scripts/descriptionwdx.lua����������������������������������������������0000644�0001750�0000144�00000002126�13007710522�022247� 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-0.9.8/plugins/wdx/rpm_wdx/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016470� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/rpm_wdx/src/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017257� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/rpm_wdx/src/rpm_wdx_intf.pas��������������������������������������������0000644�0001750�0000144�00000012567�12014201074�022467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit rpm_wdx_intf; {$mode delphi} {$include calling.inc} interface procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); dcpcall; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; 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-0.9.8/plugins/wdx/rpm_wdx/src/rpm_wdx.lpi�������������������������������������������������0000644�0001750�0000144�00000010557�13022776142�021462� 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"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="RPM WDX 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"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\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"/> <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="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="..\lib\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> </CompilerOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/rpm_wdx/src/rpm_wdx.dpr�������������������������������������������������0000644�0001750�0000144�00000001556�12014201074�021445� 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-0.9.8/plugins/wdx/rpm_wdx/src/rpm_io.pas��������������������������������������������������0000644�0001750�0000144�00000017247�11172641244�021267� 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-0.9.8/plugins/wdx/rpm_wdx/src/rpm_def.pas�������������������������������������������������0000644�0001750�0000144�00000005724�11172641244�021413� 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-0.9.8/plugins/wdx/rpm_wdx/lib/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017236� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016424� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017213� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/untar.pas���������������������������������������������������0000644�0001750�0000144�00000022506�12014201074�021046� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UnTar; {$mode delphi}{$H+} interface uses SysUtils, Classes, {$IFDEF ABOUTDLG}DsgnIntf, {$ENDIF}tarfile; CONST BUFSIZE = 512 * 128; // 512 = SECSIZE in unit tarfile type TZeroHundred = 0..100; TOverwriteMode = ( omSkip, omRename, omReplace ); TNextFile = record name : string; size : longint; timestamp : TDateTime end; {$IFDEF ABOUTDLG} TAboutProperty = class(TPropertyEditor) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; end; {$ENDIF} TUnTar = class(TComponent) private { Private declarations } {$IFDEF ABOUTDLG} FAbout : TAboutProperty; {$ENDIF} FOnNextFile : TNotifyEvent; FNextFile : TNextFile; FCreateEmptyDir: boolean; FOnExtractOverwrite : TNotifyEvent; FOnProgress : TNotifyEvent; FProgress : integer; FProgressStep : TZeroHundred; FOverwriteMode : TOverwriteMode; FOverwriteThisTime : TOverwriteMode; FOverwriteFilename : String; FFileSource : string; FUnpackPath : string; FNewFileName : string; procedure DoProgress( tarfile : TTarFile); procedure CreateNextFile( tarfile: TTarfile); function TranslateDate(dt: TDateTimeRec): longint; protected { Protected declarations } procedure DoOnNextFile; virtual; procedure DoOnExtractOverwrite; virtual; procedure DoOnProgress; virtual; public { Public declarations } constructor Create( AOwner: TComponent); override; // destructor Free; procedure UnTar; procedure UnTarSelected( list: TStringList); procedure GetInfo; property Progress : integer read FProgress; property NextFile : TNextfile read FNextFile; property OverwriteThisTime : TOverwriteMode read FOverwriteThisTime write FOverwriteThisTime; property OverwriteFilename : String read FOverwriteFilename write FOverwriteFilename; published { Published declarations } {$IFDEF ABOUTDLG} property About: TAboutProperty read FAbout write FAbout; {$ENDIF} property FileSource : String read FFileSource write FFileSource; property UnpackPath : String read FUnpackPath write FUnpackPath; property ProgressStep : TZeroHundred read FProgressStep write FProgressStep; property OnProgress : TNotifyEvent read FOnProgress write FOnProgress; Property OverwriteMode : TOverwriteMode read FOverwriteMode write FOverwriteMode; Property CreateEmptyDir: boolean read FCreateEmptyDir write FCreateEmptyDir; Property OnExtractOverwrite : TNotifyEvent read FOnExtractOverwrite write FOnExtractOverwrite; Property OnNextFile : TNotifyEvent read FOnNextFile write FOnNextFile; end; procedure Register; implementation {$IFDEF ABOUTDLG}uses utils;{$ENDIF} {$IFDEF ABOUTDLG} procedure TAboutProperty.Edit; var utils : TUtils; begin ShowMessage(utils.CreateAboutMsg('DelphiUnTar')) end; function TAboutProperty.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paDialog, paReadOnly]; end; function TAboutProperty.GetValue: string; begin Result := 'DelphiUnTar'; end; {$ENDIF} constructor TUnTar.Create( AOwner: TComponent); begin inherited Create( AOwner); FFileSource := ''; FUnpackPath := ''; FProgressStep := 0; FCreateEmptyDir := false; //FOverwriteMode := omRename FOverwriteMode := omReplace; end; procedure TUnTar.DoOnNextFile; begin if Assigned (FOnNextFile) then FOnNextFile (self) end; procedure TUnTar.DoOnExtractOverwrite; begin if Assigned (FOnExtractOverwrite) then FOnExtractOverwrite (self) end; procedure TUnTar.DoOnProgress; begin if Assigned (FOnProgress) then FOnProgress (self) end; procedure TUnTar.DoProgress( tarfile : TTarFile); var dummy : integer; begin if FProgressStep > 0 then begin dummy := tarfile.Progress; if (dummy >= FProgress + FProgressStep) or (dummy = 100) then begin FProgress := dummy - (dummy mod FProgressStep); if dummy = 100 then FProgress := dummy; DoOnProgress end end end; function TUnTar.TranslateDate( dt : TDateTimeRec) : longint; begin Result := DateTimeToFileDate( EncodeDate( dt.year, dt.month, dt.day) + EncodeTime( dt.hour, dt.min, dt.sec, 0)) end; procedure TUnTar.CreateNextFile( tarfile: TTarfile); type TBuffer = Array [0..Pred(BUFSIZE)] Of byte; var outfiledir: string; outf: TFileStream; iread: longint; buffer: TBuffer; begin outfileDir := ExtractFileDir(FNextFile.name); // Check if sub-dir exists, if not create if not(DirectoryExists(outfileDir)) and (outfileDir<>'') then begin outfileDir := ExpandFileName(outfileDir); ForceDirectories(outfileDir); end; if outfileDir <> '' then outfileDir := outfileDir + PathDelim; FNewFilename := outfileDir+ExtractFileName(FNextFile.name); FOverwriteThisTime := omRename; while (FileExists( FNewFilename)) and (FOverwriteMode = omRename)and (FOverwriteThisTime = omRename) do begin FOverwriteFilename := ''; // Raise event to ask what should be done DoOnExtractOverwrite; if (FOverwriteThisTime = omRename) and (FOverwriteFilename <> '') then FNewFilename := FOverwriteFilename end; if (not FileExists( FNewFilename)) or (FOverwriteMode = omReplace) or (FOverwriteThisTime = omReplace) then begin outf := TFileStream.Create(FNewFilename, fmCreate or fmShareDenyWrite); while FNextFile.size > 0 do begin iread := tarfile.ReadFile( buffer, BUFSIZE); outf.Write( buffer, iread); FNextFile.size := FNextFile.size - iread; DoProgress(tarfile) end; FileSetDate(outf.Handle, DateTimeToFileDate(FNextFile.timestamp)); outf.Free end else begin tarfile.SkipFile; // We do not need the file DoProgress(tarfile) end end; procedure TUnTar.UnTar; var oldDir, outfileDir : string; tarfile : TTarFile; begin FProgress := 0; oldDir := getCurrentDir; // check if destination-path exists if FUnpackPath <> '' then begin if not(DirectoryExists(FUnpackPath)) then ForceDirectories(FUnpackPath); setCurrentDir(FUnpackPath); end; tarfile := TTarFile.Create( FFileSource); DoProgress(tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; DoProgress( tarfile); outfileDir := ExtractFileDir(FNextFile.name); if FCreateEmptyDir then // Check if sub-dir exists, if not create if not(DirectoryExists(outfileDir)) and (outfileDir<>'') then begin outfileDir := ExpandFileName(outfileDir); ForceDirectories(outfileDir); end; FNextFile.size := tarfile.GetNextSize; if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); DoOnNextFile; // raise event that we start with new file // Info is now read and in FNextFile // Create the file CreateNextFile(tarfile) end end; DoProgress( tarfile); tarfile.Free; setCurrentDir(oldDir) end; procedure TUnTar.UnTarSelected( list: TStringList); var oldDir, outfileDir : string; tarfile : TTarFile; begin FProgress := 0; oldDir := getCurrentDir; // check if destination-path exists if FUnpackPath <> '' then begin if not(DirectoryExists(FUnpackPath)) then ForceDirectories(FUnpackPath); setCurrentDir(FUnpackPath); end; tarfile := TTarFile.Create( FFileSource); DoProgress(tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; DoProgress( tarfile); outfileDir := ExtractFileDir(FNextFile.name); FNextFile.size := tarfile.GetNextSize; if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); if list.IndexOf(FNextFile.Name) > -1 then begin DoOnNextFile; // raise event that we start with new file // Info is now read and in FNextFile // Create the file CreateNextFile(tarfile) end else tarFile.SkipFile end end; DoProgress( tarfile); tarfile.Free; setCurrentDir(oldDir) end; procedure TUnTar.GetInfo; var tarfile : TTarFile; begin FProgress := 0; tarfile := TTarFile.Create( FFileSource); DoProgress( tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; FNextFile.size := tarfile.GetNextSize; DoProgress( tarfile); if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); tarfile.SkipFile; DoOnNextFile; DoProgress( tarfile) end end; DoProgress( tarfile); tarfile.Free; end; procedure Register; begin RegisterComponents('Samples', [TUnTar]); {$IFDEF ABOUTDLG} RegisterPropertyEditor(TypeInfo(TAboutProperty), TUnTar, 'ABOUT', TAboutProperty); {$ENDIF} end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/tarfile.pas�������������������������������������������������0000644�0001750�0000144�00000013540�12014201074�021341� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit tarfile; interface uses classes, sysutils, math; const EXP_FILENAME = 0; EXP_SIZE = 1; EXP_DATE = 2; EXP_BODY = 3; EXP_ERROR = 4; EXP_EOF = 5; SECSIZE = 512; // SECSPERBLOCK = 120; BUFSIZE = SECSIZE; // * SECSPERBLOCK; type TBuffer = Array [0..Pred(BUFSIZE)] Of byte; TDateTimeRec = record sec : integer; min : integer; hour : integer; day : integer; month : integer; year : integer; end; TTarFile = class private FTarF : TFileStream; FExpecting : byte; FName : string; FBuffer : TBuffer; FLen : longint; FUnreadSec : integer; function CrackUnixDateTime( UnixDate : longint) : TDateTimeRec; procedure AdjustFilename( var filename : string); public constructor Create( filename : string); destructor Free; function EOF : boolean; function Progress : integer; function GetNextFilename : string; function GetNextSize : longint; function GetNextDate : TDateTimeRec; function ReadFile( var buffer; maximum : longint) : longint; Procedure SkipFile; protected end; implementation // ************************************************** // Private part // ************************************************** {$WRITEABLECONST ON} function TTarFile.CrackUnixDateTime( UnixDate : longint) : TDateTimeRec; Const monlen : Array [1..12] Of byte = (31,28,31,30,31,30,31,31,30,31,30,31); var dt : TDateTimeRec; begin dt.sec := UnixDate mod 60; UnixDate := UnixDate div 60; dt.min := UnixDate mod 60; UnixDate := UnixDate div 60; dt.hour := UnixDate mod 24; UnixDate := UnixDate div 24; dt.year := 1970; while ((UnixDate>=365) and (dt.year mod 4 <> 0)) or ((UnixDate>=366) and (dt.year mod 4 = 0 )) do begin if dt.year mod 4 = 0 then UnixDate := UnixDate - 1; UnixDate := UnixDate - 365; Inc(dt.year) end; dt.month := 1; if dt.year mod 4 = 0 then Inc(monlen[2]); while UnixDate>=monlen[dt.month] do begin UnixDate := UnixDate - monlen[dt.month]; Inc(dt.month) end; if dt.year mod 4 = 0 then Dec(monlen[2]); dt.day := UnixDate + 1; Result := dt end; Procedure TTarFile.AdjustFilename(Var filename : string); Const badletter : Set Of char = ['+',' ',':','<','>','|']; Var i : byte; Begin { openfile } For i := Length(filename) DownTo 1 Do Begin If filename[i] = '/' Then filename[i] := '\'; If filename[i] In badletter Then filename[i] := '_'; End end; // ************************************************** // Public part // ************************************************** constructor TTarFile.Create( filename : string); begin FTarF := TFileStream.Create( filename, fmOpenRead or fmShareDenyWrite); end; destructor TTarFile.Free; begin FTarF.Free; end; function TTarFile.EOF : boolean; begin EOF := FTarF.Size = FTarF.Position; end; function TTarFile.Progress : integer; begin Progress := Floor((FTarF.Position / FTarF.Size) * 100) end; function TTarFile.GetNextFilename : string; var iread : integer; i : integer; begin FName := ''; if (not(EOF) and (FExpecting = EXP_FILENAME)) then begin iread := FTarF.Read( FBuffer, SECSIZE); If iread <> SECSIZE Then FExpecting := EXP_ERROR else begin i := 0; While (FBuffer[i] <> 0) And (i < 254) Do begin FName := FName + char(FBuffer[i]); Inc(i); end; if i > 0 then begin FExpecting := EXP_SIZE; AdjustFilename( FName) end else begin i := 0; // Lazy evaluation needed to prvent reading from FBuffer[SECSIZE] while (i < SECSIZE) and (FBuffer[i]=0) do Inc(i); if i < SECSIZE then FExpecting := EXP_FILENAME else begin FExpecting := EXP_EOF; FTarF.Position := FTarF.Size end end end end; Result := FName; end; function TTarFile.GetNextSize : longint; var i : byte; begin FLen := 0; GetNextSize := 0; if (not(EOF) and (FExpecting = EXP_SIZE)) then begin For i := $7C To $86 Do If (FBuffer[i] >= 48) And (FBuffer[i] <= 55) Then FLen := 8*FLen + FBuffer[i] - 48; if FLen > 0 then FExpecting := EXP_DATE else FExpecting := EXP_FILENAME; GetNextSize := FLen end; FUnreadSec := (SECSIZE - (FLen mod SECSIZE)) mod SECSIZE end; function TTarFile.GetNextDate : TDateTimeRec; var UnixDate : longint; i : byte; begin UnixDate := 0; if FExpecting = EXP_DATE then begin For i := $88 To $92 Do If (FBuffer[i] >= 48) And (FBuffer[i] <= 55) Then UnixDate := 8*UnixDate + FBuffer[i] - 48; FExpecting := EXP_BODY end; Result := CrackUnixDateTime( UnixDate) end; function TTarFile.ReadFile( var buffer; maximum : longint) : longint; var iread : longint; buff : TBuffer; begin iread := 0; if (FLen > FTarF.Size - FTarF.Position) or (FExpecting <> EXP_BODY) then FExpecting := EXP_ERROR else begin iread := FTarF.Read( buffer, min(maximum,FLen)); FLen := FLen - iread; if FLen = 0 then begin FExpecting := EXP_FILENAME; if FUnreadSec > 0 then FTarF.Read( buff, FUnreadSec) end end; ReadFile := iread end; procedure TTarFile.SkipFile; begin if (FLen > FTarF.Size - FTarF.Position) or (FExpecting <> EXP_BODY) then FExpecting := EXP_ERROR else begin FTarF.Position := FTarF.Position + FLen + FUnreadSec; FExpecting := EXP_FILENAME end end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/minigzip.pas������������������������������������������������0000644�0001750�0000144�00000011444�12014201074�021542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ minigzip.c -- simulate gzip using the zlib compression library Copyright (C) 1995-1998 Jean-loup Gailly. minigzip is a minimal implementation of the gzip utility. This is only an example of using zlib and isn't meant to replace the full-featured gzip. No attempt is made to deal with file systems limiting names to 14 or 8+3 characters, etc... Error checking is very limited. So use minigzip only for testing; use gzip for the real thing. On MSDOS, use only on file names without extension or in pipe mode. Pascal tranlastion based on code contributed by Francisco Javier Crespo Copyright (C) 1998 by Jacques Nomssi Nzali For conditions of distribution and use, see copyright notice in readme.txt } unit minigzip; {$mode fpc}{$H+} interface uses gzio; procedure gz_compress (var infile:file; outfile:gzFile); procedure gz_uncompress (infile:gzFile; var outfile:file); procedure file_compress (filename:string; mode:string); procedure file_uncompress (filename:string); implementation const BUFLEN = 16384 ; GZ_SUFFIX = '.gz' ; {$DEFINE MAXSEF_64K} var buf : packed array [0..BUFLEN-1] of byte; { Global uses BSS instead of stack } prog : string; { ERROR ===================================================================== Display error message and exit ============================================================================} procedure error (msg:string); begin writeln (prog,': ',msg); halt(1); end; { GZ_COMPRESS =============================================================== Compress input to output then close both files ============================================================================} procedure gz_compress (var infile:file; outfile:gzFile); var len : cardinal; ioerr : integer; err : integer; begin while true do begin {$I-} blockread (infile, buf, BUFLEN, len); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('read error: ',ioerr); halt(1); end; if (len = 0) then break; if (gzwrite (outfile, @buf, len) <> len) then error (gzerror (outfile, err)); end; {WHILE} close (infile); if (gzclose (outfile) <> 0{Z_OK}) then error ('gzclose error'); end; { GZ_UNCOMPRESS ============================================================= Uncompress input to output then close both files ============================================================================} procedure gz_uncompress (infile:gzFile; var outfile:file); var len : integer; written : cardinal; ioerr : integer; err : integer; begin while true do begin len := gzread (infile, @buf, BUFLEN); if (len < 0) then error (gzerror (infile, err)); if (len = 0) then break; {$I-} blockwrite (outfile, buf, len, written); {$I+} if (written <> len) then error ('write error'); end; {WHILE} {$I-} close (outfile); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('close error: ',ioerr); halt(1); end; if (gzclose (infile) <> 0{Z_OK}) then error ('gzclose error'); end; { FILE_COMPRESS ============================================================= Compress the given file: create a corresponding .gz file and remove the original ============================================================================} procedure file_compress (filename:string; mode:string); var infile : file; outfile : gzFile; ioerr : integer; outname : string; begin Assign (infile, filename); {$I-} Reset (infile,1); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('open error: ',ioerr); halt(1); end; outname := filename + GZ_SUFFIX; outfile := gzopen (outname, mode); if (outfile = NIL) then begin writeln (prog,': can''t gzopen ',outname); halt(1); end; gz_compress(infile, outfile); erase (infile); end; { FILE_UNCOMPRESS =========================================================== Uncompress the given file and remove the original ============================================================================} procedure file_uncompress (filename:string); var inname : string; outname : string; infile : gzFile; outfile : file; ioerr : integer; len : integer; begin len := Length(filename); if (copy(filename,len-2,3) = GZ_SUFFIX) then begin inname := filename; outname := copy(filename,0,len-3); end else begin inname := filename + GZ_SUFFIX; outname := filename; end; infile := gzopen (inname, 'r'); if (infile = NIL) then begin writeln (prog,': can''t gzopen ',inname); halt(1); end; Assign (outfile, outname); {$I-} Rewrite (outfile,1); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('open error: ',ioerr); halt(1); end; gz_uncompress (infile, outfile); { erase (infile); } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/dpkg_deb.pas������������������������������������������������0000644�0001750�0000144�00000024763�12014201074�021463� 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-0.9.8/plugins/wdx/deb_wdx/src/debunpak.pas������������������������������������������������0000644�0001750�0000144�00000012447�12014201074�021511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit debunpak; {$mode delphi}{$H+} interface uses SysUtils {$IFDEF GDEBUG} , dbugintf {$ENDIF}; //extract `control' in control.tar.gz function Deb_ExtractCtrlInfoFile(debfile: string; var descfile: string): boolean; //list out files int data.tar.gz function Deb_ListFileInDataMember(debfile: string; var FileList: string): integer; implementation uses dpkg_deb, minigzip, tarfile, {$IFDEF USE_LIBTAR}libtar{$ELSE}untar, classes{$ENDIF}; var DebPkg: TDebianPackage; //dpkg_deb // TarArch: TTarArchive; //libtar TempDir: array[0..MAX_PATH] of char; //member: 1: control.tar.gz, 2: data.tar.gz //return: full path of extracted file (${TEMP}\debXXXX\foo.tar.gz, function UnpackDebFile(DebFile: string; memberidx: integer): string; var TempFile: array[0..MAX_PATH] of char; FileSource, FileDestination: String; begin {$IFDEF GDEBUG} SendMethodEnter('UnpackDebFile: memberidx='+IntToStr(memberidx)); {$ENDIF} Result := ''; if (memberidx<>MEMBER_CONTROL) and (memberidx<>MEMBER_DATA) then exit; //error repeat GetTempFileName(TempDir, 'deb', random(1000), TempFile); StrLCopy(TempFile, PChar(ChangeFileExt(StrPas(TempFile), '.tar.gz')), MAX_PATH); until not FileExists(StrPas(TempFile)); {$IFDEF GDEBUG} SendDebug('TempFile=' + TempFile); {$ENDIF} DebPkg := TDebianPackage.Create; if DebPkg.ReadFromFile(DebFile) < 2 then exit; //a debian package must have control.tar.gz and data.tar.gz //extract 'control.tar.gz' if not DebPkg.ExtractMemberToFile(memberidx, StrPas(TempFile)) then exit; FileSource := StrPas(TempFile); // X:\some\where\foo.tar.gz FileDestination := StrPas(TempDir) + ChangeFileExt(ExtractFileName(FileSource), ''); // ${TempDir}\foo.tar file_uncompress(FileSource); if not FileExists(FileDestination) then begin DeleteFile(TempFile); //foo.tar.gz Exit; end; Result := FileDestination; DeleteFile(PChar(FileSource)); {$IFDEF GDEBUG} SendMethodExit('UnpackDebFile'); {$ENDIF} end; //function Deb_ExtractDataFileList(debfile: string; var FileList: string): integer; function Deb_ListFileInDataMember; var tarfilename: string; fname : string; fsize : integer; TarFile: TTarFile; begin tarfilename := UnpackDebFile(debfile, MEMBER_DATA); {$IFDEF GDEBUG} SendDebug('tarfilename=' + tarfilename); {$ENDIF} FileList:=''; Result := 0; if not FileExists(tarfilename) then exit; TarFile := TTarFile.Create(tarfilename); try while not TarFile.Eof do begin fname := TarFile.GetNextFilename; fsize := TarFile.GetNextSize; if fsize>0 then begin TarFile.GetNextDate; TarFile.SkipFile; end; if FileList='' then FileList := fname else FileList := FileList + #13#10 + fname; Inc(Result); end; finally TarFile.Free; DeleteFile(PChar(tarfilename)); end; end; //function ExtractDebInfoFile(debfile: string; var descfile: string): boolean; //debfile: full path of .deb file to extract member from //descfile: [out] full path of extracted control file (${TEMP}\debXXXX\control) // you should remove this file (and the temp folder ${TEMP}\debXXXX after use. //return: succeed or not function Deb_ExtractCtrlInfoFile; var tarfilename: string; {$IFDEF USE_LIBTAR} TA: TTarArchive; DirRec: TTarDirRec; {$ELSE USE_TARFILE} Untar1: TUntar; strlst: TStringList; {$ENDIF} begin Result := false; {$IFDEF GDEBUG} SendMethodEnter('ExtractDebInfoFile'); {$ENDIF} tarfilename := UnpackDebFile(debfile, MEMBER_CONTROL); {$IFDEF GDEBUG} SendDebug('tarfilename=' + tarfilename); {$ENDIF} if not FileExists(tarfilename) then exit; {$IFDEF USE_LIBTAR} //libtar seems to be bad descfile := StrPas(TempDir) + 'control.txt'; {$IFDEF GDEBUG} SendDebug('descfile=' + descfile); {$ENDIF} TA := TTarArchive.Create(tarfilename); TA.Reset; while TA.FindNext(DirRec) do begin {$IFDEF GDEBUG} SendDebug('DirRec.Name=' + DirRec.Name); {$ENDIF} if (DirRec.Name = './control') or (DirRec.Name = '.\control') or (DirRec.Name = 'control') then begin TA.ReadFile(descfile); break; end; end; TA.Free; {$ELSE} Untar1 := TUntar.Create(nil); Untar1.FileSource := tarfilename; //Untar1.UnpackPath := TempDir + 'deb4wii'; Untar1.UnpackPath := TempDir + ChangeFileExt(ExtractFileName(Untar1.FileSource), ''); // ${TempDir}\foo {$IFDEF GDEBUG} SendDebug('UnpackPath=' + Untar1.UnpackPath); {$ENDIF} strlst := TStringList.Create; strlst.Add('control'); strlst.Add('./control'); strlst.Add('.\control'); Untar1.OverwriteMode := omReplace; //shit! Untar1.UntarSelected(strlst); //Untar1.Untar; //untar all descfile := IncludeTrailingBackSlash(Untar1.UnpackPath) + 'control'; strlst.Free; Untar1.Free; {$ENDIF} DeleteFile(PChar(tarfilename)); //foo.tar Result := true; {$IFDEF GDEBUG} SendMethodExit('ExtractDebInfoFile'); {$ENDIF} (* filelist := ''; TA := TarArchive.Create('data.tar.gz'); WHILE TA.FindNext(DirRec) DO BEGIN filelist := filelist + DirRec.Name + #13#10; end; TA.Free; *) end; initialization DebPkg := TDebianPackage.Create; TempDir:= GetTempDir; Randomize; finalization DebPkg.Free; // TarArc.Free; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/deb_wdx_intf.pas��������������������������������������������0000644�0001750�0000144�00000013575�12014201074�022357� 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; function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; implementation uses SysUtils{$IFDEF GDEBUG}, DbugIntf{$ENDIF}, 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 FileExists(DescTmpFile) then begin DeleteFile(DescTmpFile); RemoveDir(ExtractFileDir(DescTmpFile)); end; if not Deb_ExtractCtrlInfoFile(FileName, DescTmpFile) then exit; if not FileExists(DescTmpFile) then exit; FileInfo.Clear; FileInfo.LoadFromFile(DescTmpFile); CurrentPackageFile := FileName; end {$IFDEF GDEBUG} else SendDebug('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 := 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 FileInfo := TStringList.Create; FileInfo.NameValueSeparator := ':'; CurrentPackageFile := ''; 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-0.9.8/plugins/wdx/deb_wdx/src/deb_wdx.lpi�������������������������������������������������0000644�0001750�0000144�00000010266�13022776142�021347� 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"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="DEB WDX 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"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\deb_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"/> <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"/> <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="1"> <Unit0> <Filename Value="deb_wdx.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\deb_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"/> <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> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/src/deb_wdx.dpr�������������������������������������������������0000644�0001750�0000144�00000001260�12014201074�021325� 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-0.9.8/plugins/wdx/deb_wdx/src/DbugIntf.pas������������������������������������������������0000644�0001750�0000144�00000011321�12014201074�021410� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit DbugIntf; interface uses Windows, Dialogs; // We need "Dialogs" for TMsgDlgType procedure SendBoolean(const Identifier: string; const Value: Boolean); procedure SendDateTime(const Identifier: string; const Value: TDateTime); procedure SendDebugEx(const Msg: string; MType: TMsgDlgType); procedure SendDebug(const Msg: string); procedure SendDebugClear; procedure SendInteger(const Identifier: string; const Value: Integer); procedure SendMethodEnter(const MethodName: string); procedure SendMethodExit(const MethodName: string); procedure SendSeparator; procedure SendDebugFmt(const Msg: string; const Args: array of const); procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TMsgDlgType); function StartDebugWin: hWnd; implementation uses Messages, SysUtils, Registry, Forms; // We need "Forms" for the Application object threadvar MsgPrefix: AnsiString; const chrClearCommand = #3; var PastFailedAttemptToStartDebugWin: Boolean = False; function StartDebugWin: hWnd; var DebugFilename: string; Buf: array[0..MAX_PATH + 1] of Char; si: TStartupInfo; pi: TProcessInformation; begin MsgPrefix := ''; Result := 0; if PastFailedAttemptToStartDebugWin then Exit; with TRegIniFile.Create('\Software\GExperts') do try DebugFilename := ReadString('Debug', 'FilePath', ''); finally Free; end; if Trim(DebugFileName) = '' then begin GetModuleFileName(HINSTANCE, Buf, SizeOf(Buf)-1); DebugFileName := ExtractFilePath(StrPas(Buf))+'GDebug.exe'; end; if (Trim(DebugFilename) = '') or not FileExists(DebugFilename) then begin PastFailedAttemptToStartDebugWin := True; Exit; end; FillChar(si, SizeOf(si), #0); si.cb := SizeOf(si); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOW; if not CreateProcess(PChar(DebugFilename), nil, nil, nil, False, 0, nil, nil, si, pi) then begin PastFailedAttemptToStartDebugWin := True; Exit; end; try WaitForInputIdle(pi.hProcess, 3 * 1000); // wait for 3 seconds to get idle finally CloseHandle(pi.hThread); CloseHandle(pi.hProcess); end; Result := FindWindow('TfmDebug', nil); end; procedure SendDebugEx(const Msg: string; MType: TMsgDlgType); var CDS: TCopyDataStruct; DebugWin: hWnd; MessageString: string; {$IFDEF LINUX} const MTypeStr: array[TMsgDlgType] of string = ('Waring: ', 'Error: ', 'Information: ', 'Confirmation: ', 'Custom: '); {$ENDIF LINUX} begin {$IFDEF LINUX} Writeln('GX: ' + MTypeStr[MType] + Msg); {$ENDIF LINUX} {$IFNDEF LINUX} DebugWin := FindWindow('TfmDebug', nil); if DebugWin = 0 then DebugWin := StartDebugWin; if DebugWin <> 0 then begin MessageString := MsgPrefix + Msg; CDS.cbData := Length(MessageString) + 4; CDS.dwData := 0; if Msg = chrClearCommand then CDS.lpData := PChar(chrClearCommand+Char(Ord(MType) + 1)+ MessageString +#0) else CDS.lpData := PChar(#1+Char(Ord(MType) + 1)+ MessageString +#0); SendMessage(DebugWin, WM_COPYDATA, WParam(Application.Handle), LParam(@CDS)); end; {$ENDIF not LINUX} end; procedure SendDebug(const Msg: string); begin SendDebugEx(Msg, mtInformation); end; procedure SendDebugFmt(const Msg: string; const Args: array of const); begin SendDebugEx(Format(Msg, Args), mtInformation); end; procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TMsgDlgType); begin SendDebugEx(Format(Msg, Args), MType); end; procedure SendDebugClear; begin SendDebug(chrClearCommand); end; const Indentation = ' '; procedure SendMethodEnter(const MethodName: string); begin MsgPrefix := MsgPrefix + Indentation; SendDebugEx('Entering ' + MethodName, mtInformation); end; procedure SendMethodExit(const MethodName: string); begin SendDebugEx('Exiting ' + MethodName, mtInformation); Delete(MsgPrefix, 1, Length(Indentation)); end; procedure SendSeparator; const SeparatorString = '------------------------------'; begin SendDebugEx(SeparatorString, mtInformation); end; procedure SendBoolean(const Identifier: string; const Value: Boolean); begin // Note: We deliberately leave "True" and "False" as // hard-coded string constants, since these are // technical terminology which should not be localised. if Value then SendDebugEx(Identifier + '= True', mtInformation) else SendDebugEx(Identifier + '= False', mtInformation); end; procedure SendInteger(const Identifier: string; const Value: Integer); begin SendDebugEx(Format('%s = %d', [Identifier, Value]), mtInformation); end; procedure SendDateTime(const Identifier: string; const Value: TDateTime); begin SendDebugEx(Identifier + '=' + DateTimeToStr(Value), mtInformation); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/deb_wdx/lib/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017172� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/audioinfo/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016765� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/audioinfo/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017554� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/audioinfo/src/audiodata.pas���������������������������������������������0000644�0001750�0000144�00000041233�13040626671�022225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This content plugin can show information about audio files 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 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; 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 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; 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 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 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 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; 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 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 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') 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-0.9.8/plugins/wdx/audioinfo/src/atl/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020334� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/audioinfo/src/atl/WMAfile.pas�������������������������������������������0000644�0001750�0000144�00000032557�12706633230�022344� 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-0.9.8/plugins/wdx/audioinfo/src/atl/WAVfile.pas�������������������������������������������0000644�0001750�0000144�00000041173�12705465245�022357� 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-0.9.8/plugins/wdx/audioinfo/src/atl/WAVPackfile.pas���������������������������������������0000644�0001750�0000144�00000033734�12706720323�023152� 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-0.9.8/plugins/wdx/audioinfo/src/atl/TwinVQ.pas��������������������������������������������0000644�0001750�0000144�00000031362�12705761230�022242� 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-0.9.8/plugins/wdx/audioinfo/src/atl/TTA.pas�����������������������������������������������0000644�0001750�0000144�00000016112�12705761747�021513� 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-0.9.8/plugins/wdx/audioinfo/src/atl/README.txt��������������������������������������������0000644�0001750�0000144�00000035330�12704657640�022052� 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-0.9.8/plugins/wdx/audioinfo/src/atl/OptimFROG.pas�����������������������������������������0000644�0001750�0000144�00000023741�12706720323�022621� 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-0.9.8/plugins/wdx/audioinfo/src/atl/OggVorbis.pas�����������������������������������������0000644�0001750�0000144�00000075474�12705465245�022776� 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 { 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; 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 } end; implementation const { Ogg page header ID } OGG_PAGE_ID = 'OggS'; { Vorbis parameter frame ID } VORBIS_PARAMETERS_ID = #1 + 'vorbis'; { Vorbis tag frame ID } VORBIS_TAG_ID = #3 + 'vorbis'; { 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 Char; { 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 Char; { 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; { Vorbis tag data } VorbisTag = record ID: array [1..7] of Char; { Always #3 + "vorbis" } 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 } Parameters: VorbisHeader; { Vorbis parameter header } Tag: VorbisTag; { Vorbis tag data } 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 Char; 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 Char; 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 Char; 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; 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; SourceFile.Seek(Info.ID3v2Size + Info.FPage.Segments + 27, soFromBeginning); { Read Vorbis parameter header } SourceFile.Read(Info.Parameters, SizeOf(Info.Parameters)); if Info.Parameters.ID <> VORBIS_PARAMETERS_ID then exit; Info.SPagePos := SourceFile.Position; SourceFile.Read(Info.SPage, SizeOf(Info.SPage)); SourceFile.Seek(Info.SPagePos + Info.SPage.Segments + 27, soFromBeginning); SourceFile.Read(Info.Tag.ID, SizeOf(Info.Tag.ID)); { Read Vorbis tag } if Info.Tag.ID = VORBIS_TAG_ID then 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 := ''; 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; FChannelModeID := Info.Parameters.ChannelMode; FSampleRate := Info.Parameters.SampleRate; FBitRateNominal := Info.Parameters.BitRateNominal div 1000; 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-0.9.8/plugins/wdx/audioinfo/src/atl/Musepack.pas������������������������������������������0000644�0001750�0000144�00000044027�12705761230�022624� 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-0.9.8/plugins/wdx/audioinfo/src/atl/Monkey.pas��������������������������������������������0000644�0001750�0000144�00000044217�12706521104�022312� 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-0.9.8/plugins/wdx/audioinfo/src/atl/MPEGaudio.pas�����������������������������������������0000644�0001750�0000144�00000106606�12704670501�022627� 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-0.9.8/plugins/wdx/audioinfo/src/atl/MP4file.pas�������������������������������������������0000644�0001750�0000144�00000023070�12707075042�022310� 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-0.9.8/plugins/wdx/audioinfo/src/atl/ID3v2.pas���������������������������������������������0000644�0001750�0000144�00000066133�12706513050�021701� 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; 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; 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] <= UTF16_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 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); 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; var Index: Integer; UnicodeChar: WideChar; WideResult: UnicodeString; FirstByte, SecondByte: Byte; begin { Convert string from unicode if needed and trim spaces } if (Length(Source) > 0) and (Source[1] = UTF16_ID) then begin WideResult := ''; for Index := 1 to ((Length(Source) - 1) div 2) do begin FirstByte := Ord(Source[Index * 2]); SecondByte := Ord(Source[Index * 2 + 1]); UnicodeChar := WideChar(FirstByte or (SecondByte shl 8)); if UnicodeChar = #0 then break; if FirstByte < $FF then WideResult := WideResult + UnicodeChar; end; Result := UTF16ToUTF8(Trim(WideResult)); end 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 = UTF16_ID then Separator := #0#0 else Separator := #0; if LanguageID then Delete(Source, 1, 4) else Delete(Source, 1, 1); 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-0.9.8/plugins/wdx/audioinfo/src/atl/ID3v1.pas���������������������������������������������0000644�0001750�0000144�00000071327�12706634440�021710� 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-0.9.8/plugins/wdx/audioinfo/src/atl/FLACfile.pas������������������������������������������0000644�0001750�0000144�00000071733�12707114531�022423� 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-0.9.8/plugins/wdx/audioinfo/src/atl/DTS.pas�����������������������������������������������0000644�0001750�0000144�00000015623�12706720323�021505� 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-0.9.8/plugins/wdx/audioinfo/src/atl/COPYING.txt�������������������������������������������0000644�0001750�0000144�00000064500�12704657640�022226� 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-0.9.8/plugins/wdx/audioinfo/src/atl/CDAtrack.pas������������������������������������������0000644�0001750�0000144�00000016300�12705465245�022470� 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-0.9.8/plugins/wdx/audioinfo/src/atl/APEtag.pas��������������������������������������������0000644�0001750�0000144�00000044035�12707076077�022166� 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-0.9.8/plugins/wdx/audioinfo/src/atl/AC3.pas�����������������������������������������������0000644�0001750�0000144�00000014215�12706720323�021415� 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-0.9.8/plugins/wdx/audioinfo/src/atl/AACfile.pas�������������������������������������������0000644�0001750�0000144�00000036035�12705465245�022307� 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-0.9.8/plugins/wdx/audioinfo/src/AudioInfo.lpr���������������������������������������������0000644�0001750�0000144�00000012462�13040626336�022161� 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")'; const FIELD_COUNT = 20; FIELD_NAME: array[0..Pred(FIELD_COUNT)] of String = ( 'Channels', 'Duration', 'Duration (H/M/S)', 'Sample rate', 'Bitrate', 'Bitrate type', 'Title', 'Artist', 'Album', 'Track', 'Track (zero-filled)', 'Date', 'Genre', 'Comment', 'Composer', 'Copyright', 'Link', 'Encoder', 'Tags', 'Full text' ); FIELD_TYPE: array[0..Pred(FIELD_COUNT)] of Integer = ( ft_multiplechoice, ft_time, 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_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; Time: ptimeformat 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: begin Time^.wHour:= DataAudio.Duration div 3600; Time^.wMinute:= DataAudio.Duration mod 3600 div 60; Time^.wSecond:= DataAudio.Duration mod 60; end; 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: Value:= Format('%.2d', [DataAudio.Track]); 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: 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 Result:= ft_fieldempty 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-0.9.8/plugins/wdx/audioinfo/src/AudioInfo.lpi���������������������������������������������0000644�0001750�0000144�00000007251�13037726113�022150� 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="AudioInfo"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <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> <local> <FormatVersion Value="1"/> </local> </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> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wdx/audioinfo/lib/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017533� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015007� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015611� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016400� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017343� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/lzma.txt���������������������������������������������������0000644�0001750�0000144�00000051212�12014201074�021040� 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-0.9.8/plugins/wcx/zip/src/lzma/history.txt������������������������������������������������0000644�0001750�0000144�00000001710�12014201074�021574� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/�����������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021704� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/compression/RangeCoder/������������������������������������0000755�0001750�0000144�00000000000�13615241421�023715� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/compression/RangeCoder/URangeEncoder.pas�������������������0000644�0001750�0000144�00000010323�12014201074�027072� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/RangeCoder/URangeDecoder.pas�������������������0000644�0001750�0000144�00000004742�12014201074�027070� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/RangeCoder/UBitTreeEncoder.pas�����������������0000644�0001750�0000144�00000006122�12014201074�027376� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/RangeCoder/UBitTreeDecoder.pas�����������������0000644�0001750�0000144�00000003507�12014201074�027370� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZMA/������������������������������������������0000755�0001750�0000144�00000000000�13615241421�022447� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMAEncoder.pas��������������������������0000644�0001750�0000144�00000152752�12014201074�025350� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMADecoder.pas��������������������������0000644�0001750�0000144�00000034140�12014201074�025324� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMACommon.pas���������������������������0000644�0001750�0000144�00000001152�12014201074�025204� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMABase.pas�����������������������������0000644�0001750�0000144�00000004706�12014201074�024636� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZ/��������������������������������������������0000755�0001750�0000144�00000000000�13615241421�022231� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/zip/src/lzma/compression/LZ/ULZOutWindow.pas����������������������������0000644�0001750�0000144�00000004107�12014201074�025262� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZ/ULZInWindow.pas�����������������������������0000644�0001750�0000144�00000011165�12014201074�025063� 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-0.9.8/plugins/wcx/zip/src/lzma/compression/LZ/ULZBinTree.pas������������������������������0000644�0001750�0000144�00000026616�12014201074�024664� 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-0.9.8/plugins/wcx/zip/src/lzma/ULZMABench.pas���������������������������������������������0000644�0001750�0000144�00000033322�12014201074�021673� 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-0.9.8/plugins/wcx/zip/src/lzma/ULZMAAlone.pas���������������������������������������������0000644�0001750�0000144�00000022213�12014201074�021707� 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-0.9.8/plugins/wcx/zip/src/lzma/UCRC.pas���������������������������������������������������0000644�0001750�0000144�00000002663�12014201074�020603� 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-0.9.8/plugins/wcx/zip/src/lzma/UBufferedFS.pas��������������������������������������������0000644�0001750�0000144�00000011605�12014201074�022143� 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-0.9.8/plugins/wcx/zip/src/lzma/Methods.txt������������������������������������������������0000644�0001750�0000144�00000005162�12014201074�021503� 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-0.9.8/plugins/wcx/zip/src/lzma/LZMAAlone.lpr����������������������������������������������0000644�0001750�0000144�00000001760�12014201074�021600� 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-0.9.8/plugins/wcx/zip/src/lzma/LZMAAlone.lpi����������������������������������������������0000644�0001750�0000144�00000014541�11222206571�021577� 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-0.9.8/plugins/wcx/zip/src/lzma/LZMAAlone.dpr����������������������������������������������0000644�0001750�0000144�00000001760�12014201074�021570� 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-0.9.8/plugins/wcx/zip/src/lzma/LZMAAlone.dof����������������������������������������������0000644�0001750�0000144�00000015015�11222206571�021560� 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-0.9.8/plugins/wcx/zip/src/lzma/LZMAAlone.cfg����������������������������������������������0000644�0001750�0000144�00000000662�11222206571�021551� 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-0.9.8/plugins/wcx/zip/src/lzma/LGPL.txt���������������������������������������������������0000644�0001750�0000144�00000063514�12014201074�020643� 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-0.9.8/plugins/wcx/zip/src/lzma/CPL.html���������������������������������������������������0000644�0001750�0000144�00000035531�11222206571�020655� 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-0.9.8/plugins/wcx/zip/src/lzma/7zFormat.txt0000644000175000001440000001617212014201074021614 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-0.9.8/plugins/wcx/zip/src/lzma/7zC.txt0000644000175000001440000001511412014201074020541 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-0.9.8/plugins/wcx/zip/src/fpc-extra.cfg0000644000175000001440000000015711673054716020770 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/0000755000175000001440000000000013615241421020347 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/zip/src/fparchive/readme.txt0000644000175000001440000000244412014201074022341 0ustar alexxusersAbbrevia Version: 5.0 Revision: 512 Home Page: http://tpabbrevia.sourceforge.net Abbrevia is a compression toolkit for Embarcadero Delphi, C++ Builder, and Kylix and FreePascal. It supports PKZip, Microsoft CAB, tar, gzip, bzip2 and zlib compression formats, and the creation of self-extracting executables. It includes several visual components that simplify displaying zip files. Some modifications done for Double Commander (see doublecmd.diff). 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-0.9.8/plugins/wcx/zip/src/fparchive/license.txt0000644000175000001440000006223312014201074022530 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-0.9.8/plugins/wcx/zip/src/fparchive/doublecmd.diff0000644000175000001440000032462613603447456023171 0ustar alexxusersIndex: AbArcTyp.pas =================================================================== --- AbArcTyp.pas (revision 512) +++ AbArcTyp.pas (working copy) @@ -70,7 +70,14 @@ 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; @@ -126,6 +133,8 @@ write SetLastModFileTime; property NativeFileAttributes : LongInt read GetNativeFileAttributes; + property NativeLastModFileTime : Longint + read GetNativeLastModFileTime; property StoredPath : string read GetStoredPath; property Tagged : Boolean @@ -316,6 +325,10 @@ 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); @@ -323,8 +336,19 @@ 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; - virtual; abstract; + overload; procedure ExtractItemAt(Index : Integer; const UseName : string); virtual; abstract; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); @@ -384,6 +408,7 @@ 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); @@ -565,7 +590,9 @@ AbExcept, AbDfBase, AbConst, - AbResString; + AbResString, + DCOSUtils, + DCClassesUtf8; { TAbArchiveItem implementation ============================================ } @@ -647,6 +674,12 @@ {$ENDIF} end; { -------------------------------------------------------------------------- } +function TAbArchiveItem.GetNativeLastModFileTime : Longint; +begin + LongRec(Result).Hi := LastModFileDate; + LongRec(Result).Lo := LastModFileTime; +end; +{ -------------------------------------------------------------------------- } function TAbArchiveItem.GetStoredPath : string; begin Result := ExtractFilePath(DiskFileName); @@ -973,7 +1006,7 @@ ExtractOptions := []; FStatus := asIdle; FOnProgress := DoProgress; - BaseDirectory := ExtractFilePath(ParamStr(0)); + // BaseDirectory := ExtractFilePath(ParamStr(0)); end; { -------------------------------------------------------------------------- } constructor TAbArchive.Create(const FileName : string; Mode : Word); @@ -980,7 +1013,7 @@ {create an archive by opening a filestream on filename with the given mode} begin FOwnsStream := True; - CreateFromStream(TFileStream.Create(FileName, Mode), FileName); + CreateFromStream(TFileStreamEx.Create(FileName, Mode), FileName); FMode := Mode; end; { -------------------------------------------------------------------------- } @@ -1032,6 +1065,19 @@ 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 @@ -1196,7 +1242,7 @@ UseName := AbAddBackSlash(BaseDirectory) + UseName; Path := ExtractFileDir(UseName); - if (Path <> '') and not DirectoryExists(Path) then + if (Path <> '') and not mbDirectoryExists(Path) then if (eoCreateDirs in ExtractOptions) then AbCreateDirectory(Path) else @@ -1203,7 +1249,7 @@ raise EAbNoSuchDirectory.Create; Result := True; - if not Item.IsDirectory and FileExists(UseName) then + if not Item.IsDirectory and mbFileExists(UseName) then DoConfirmOverwrite(UseName, Result); end; { -------------------------------------------------------------------------- } @@ -1560,11 +1606,12 @@ begin CheckValid; Index := FindItem(aItem); - if Index <> -1 then begin + 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; - FreshenAt(Index); end; end; { -------------------------------------------------------------------------- } @@ -1625,7 +1672,7 @@ { -------------------------------------------------------------------------- } function TAbArchive.FreshenRequired(Item : TAbArchiveItem) : Boolean; var - FS : TFileStream; + FS : TFileStreamEx; DateTime : LongInt; FileTime : Word; FileDate : Word; @@ -1636,8 +1683,8 @@ if BaseDirectory <> '' then ChDir(BaseDirectory); try - FS := TFileStream.Create(Item.DiskFileName, - fmOpenRead or fmShareDenyWrite); + FS := TFileStreamEx.Create(Item.DiskFileName, + fmOpenRead or fmShareDenyWrite); try DateTime := FileGetDate(FS.Handle); FileTime := LongRec(DateTime).Lo; @@ -1761,6 +1808,45 @@ 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; @@ -1807,11 +1893,12 @@ begin CheckValid; Index := FindItem(aItem); - if Index <> -1 then begin + 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; - ReplaceAt(Index); end; end; { -------------------------------------------------------------------------- } @@ -1841,7 +1928,7 @@ begin if Status = asInvalid then Exit; - if (not FIsDirty) and (Count > 0) then + if not FIsDirty then Exit; DoConfirmSave(Confirm); @@ -1865,7 +1952,7 @@ 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 DirectoryExists(Value) then + if (Length(Value) = 0) or mbDirectoryExists(Value) then FBaseDirectory := Value else raise EAbNoSuchDirectory.Create; @@ -1930,6 +2017,13 @@ 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); @@ -1973,7 +2067,7 @@ Len, Offset : Integer; begin Len := SizeOf(TAbExtraSubField) + aSubField.Len; - Offset := PtrInt(aSubField) - PtrInt(Pointer(FBuffer)); + 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); @@ -2001,9 +2095,9 @@ end else begin BytesLeft := Length(FBuffer) - - Integer(PtrInt(aCurField) - PtrInt(Pointer(FBuffer))) - + (Pointer(aCurField) - Pointer(FBuffer)) - SizeOf(TAbExtraSubField) - aCurField.Len; - aCurField := Pointer(PtrInt(aCurField) + aCurField.Len + SizeOf(TAbExtraSubField)); + Inc(Pointer(aCurField), aCurField.Len + SizeOf(TAbExtraSubField)); end; Result := (BytesLeft >= SizeOf(TAbExtraSubField)); if Result and (BytesLeft < SizeOf(TAbExtraSubField) + aCurField.Len) then Index: AbBitBkt.pas =================================================================== --- AbBitBkt.pas (revision 512) +++ AbBitBkt.pas (working copy) @@ -47,7 +47,7 @@ FBufPosn : longint; FPosn : Int64; FSize : Int64; - FTail : longint; + FTail : Int64; protected public constructor Create(aBufSize : cardinal); @@ -108,8 +108,8 @@ {--------} function TAbBitBucketStream.Read(var Buffer; Count : Longint) : Longint; var - Chunk2Size : longint; - Chunk1Size : longint; + Chunk2Size : Int64; + Chunk1Size : Int64; OutBuffer : PByte; begin OutBuffer := @Buffer; @@ -146,7 +146,7 @@ end; if (Chunk2Size > 0) then begin {we've wrapped} - Move(FBuffer[0], PByte(PtrInt(OutBuffer) + PtrInt(Chunk1Size))^, Chunk2Size); + Move(FBuffer[0], (OutBuffer + Chunk1Size)^, Chunk2Size); FBufPosn := Chunk2Size; inc(FPosn, Chunk2Size); end; @@ -155,8 +155,8 @@ {--------} function TAbBitBucketStream.Write(const Buffer; Count : Longint) : Longint; var - Chunk2Size : longint; - Chunk1Size : longint; + Chunk2Size : Int64; + Chunk1Size : Int64; InBuffer : PByte; Overage : longint; begin @@ -186,7 +186,7 @@ {if the second chunk size is not zero, write the second chunk; note that we have wrapped} if (Chunk2Size > 0) then begin - Move(PByte(PtrInt(InBuffer) + PtrInt(Chunk1Size))^, FBuffer[0], Chunk2Size); + Move((InBuffer + Chunk1Size)^, FBuffer[0], Chunk2Size); FTail := Chunk2Size; end; {the stream size and position have changed} Index: AbBrowse.pas =================================================================== --- AbBrowse.pas (revision 512) +++ AbBrowse.pas (working copy) @@ -220,13 +220,17 @@ uses SysUtils, AbExcept, -{$IFDEF MSWINDOWS} +{$IF DEFINED(ExtractCabSupport)} AbCabTyp, {$ENDIF} AbZipTyp, AbTarTyp, AbGzTyp, - AbBzip2Typ; + AbBzip2Typ, + AbLzmaTyp, + AbXzTyp, + DCOSUtils, + DCClassesUtf8; { TAbBaseBrowser implementation ======================================= } @@ -515,66 +519,84 @@ function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; var Ext : string; - FS : TFileStream; + 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') then - Result := atZip; - if (Ext = '.EXE') then - Result := atSelfExtZip; - if (Ext = '.TAR') then - Result := atTar; - if (Ext = '.GZ') then - Result := atGzip; - if (Ext = '.TGZ') then - Result := atGzippedTar; - if (Ext = '.CAB') then - Result := atCab; - if (Ext = '.BZ2') then - Result := atBzip2; - if (Ext = '.TBZ') then - Result := atBzippedTar; + 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; end; - {$IFNDEF MSWINDOWS} + {$IF NOT DEFINED(ExtractCabSupport)} if Result = atCab then Result := atUnknown; {$ENDIF} - if FileExists(FN) and (AbFileGetSize(FN) > 0) then begin + 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 } - FS := TFileStream.Create(FN, fmOpenRead or fmShareDenyNone); - try - if Result = atUnknown then - Result := AbDetermineArcType(FS) - else begin - case Result of - atZip : begin - Result := VerifyZip(FS); + 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; end; - atSelfExtZip : begin - Result := VerifySelfExtracting(FS); - end; - atTar : begin - Result := VerifyTar(FS); - end; - atGzip, atGzippedTar: begin - Result := VerifyGzip(FS); - end; - {$IFDEF MSWINDOWS} - atCab : begin - Result := VerifyCab(FS); - end; - {$ENDIF} - atBzip2, atBzippedTar: begin - Result := VerifyBzip2(FS); - end; end; + if Result = atUnknown then + Result := AbDetermineArcType(FS) + finally + FS.Free; end; - finally - FS.Free; + except + // Skip end; end; end; @@ -583,15 +605,16 @@ 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 := VerifyTar(aStream); - if Result = atUnknown then Result := VerifyGzip(aStream); if Result = atUnknown then Result := VerifyBzip2(aStream); - {$IFDEF MSWINDOWS} + {$IF DEFINED(ExtractCabSupport)} if Result = atUnknown then Result := VerifyCab(aStream); {$ENDIF} Index: AbBzip2.pas =================================================================== --- AbBzip2.pas (revision 512) +++ AbBzip2.pas (working copy) @@ -149,6 +149,8 @@ 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; @@ -391,7 +393,7 @@ {$ENDIF} const - libbz2 = {$IF DEFINED(MSWINDOWS)}'libbz2.dll' + libbz2 = {$IF DEFINED(MSWINDOWS)}'bz2.dll' {$ELSEIF DEFINED(DARWIN)}'libbz2.dylib' {$ELSE}'libbz2.so.1'{$IFEND}; @@ -527,8 +529,7 @@ P := OutBuf; Inc(OutBytes, 256); ReallocMem(OutBuf, OutBytes); - strm.next_out := PByte(PtrInt(OutBuf) - + (PtrInt(strm.next_out) - PtrInt(P))); + strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := 256; end; finally @@ -571,7 +572,7 @@ P := OutBuf; Inc(OutBytes, BufInc); ReallocMem(OutBuf, OutBytes); - strm.next_out := PByte(PtrInt(OutBuf) + (PtrInt(strm.next_out) - PtrInt(P))); + strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := BufInc; end; finally @@ -717,8 +718,13 @@ if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_out > 0) do begin - if FBZRec.avail_in = 0 then + 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 @@ -728,7 +734,7 @@ FBZRec.next_in := @FBuffer[0]; FStrmPos := FStrm.Position; end; - CCheck(BZ2_bzDecompress(FBZRec)); + FReadState := DCheck(BZ2_bzDecompress(FBZRec)); Progress(Self); end; Result := Count; Index: AbBzip2Typ.pas =================================================================== --- AbBzip2Typ.pas (revision 512) +++ AbBzip2Typ.pas (working copy) @@ -86,7 +86,8 @@ protected { Inherited Abstract functions } - function CreateItem(const FileSpec : string): TAbArchiveItem; override; + 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; @@ -118,7 +119,7 @@ Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, - AbBzip2, AbExcept, AbVMStrm, AbBitBkt; + AbBzip2, AbExcept, AbVMStrm, AbBitBkt, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbBzip2Header) : Boolean; @@ -131,8 +132,9 @@ function VerifyBzip2(Strm : TStream) : TAbArchiveType; var Hdr : TAbBzip2Header; - CurPos : int64; + CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; + Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; @@ -148,7 +150,8 @@ try TarStream := TMemoryStream.Create; try - TarStream.CopyFrom(DecompStream, 512 * 2); + DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); + TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atBzippedTar; @@ -193,20 +196,29 @@ FState := gsBzip2; end; { -------------------------------------------------------------------------- } -function TAbBzip2Archive.CreateItem(const FileSpec: string): TAbArchiveItem; +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(FileSpec); + Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToBzip2; - Result := TAbBzip2Item.Create; + Bz2Item := TAbBzip2Item.Create; try - Result.DiskFileName := ExpandFileName(FileSpec); - Result.FileName := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + Bz2Item.FileName := FullArchiveFileName; + Bz2Item.DiskFileName := FullSourceFileName; + + Result := Bz2Item; except - Result.Free; + Result := nil; raise; end; end; @@ -223,7 +235,7 @@ procedure TAbBzip2Archive.ExtractItemAt(Index: Integer; const NewName: string); var - OutStream : TFileStream; + OutStream : TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; @@ -231,7 +243,7 @@ end else begin SwapToBzip2; - OutStream := TFileStream.Create(NewName, fmCreate or fmShareDenyNone); + OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); @@ -242,12 +254,12 @@ except on E : EAbUserAbort do begin FStatus := asInvalid; - if FileExists(NewName) then - DeleteFile(NewName); + if mbFileExists(NewName) then + mbDeleteFile(NewName); raise; end else begin - if FileExists(NewName) then - DeleteFile(NewName); + if mbFileExists(NewName) then + mbDeleteFile(NewName); raise; end; end; @@ -312,6 +324,8 @@ CompStream: TStream; i: Integer; CurItem: TAbBzip2Item; + UpdateArchive: Boolean; + TempFileName: String; InputFileStream: TStream; begin if IsBzippedTar and TarAutoHandle then @@ -318,8 +332,15 @@ begin SwapToTar; inherited SaveArchive; + UpdateArchive := (FBzip2Stream.Size > 0) and (FBzip2Stream is TFileStreamEx); + if UpdateArchive then + begin + FreeAndNil(FBzip2Stream); + TempFileName := GetTempName(FArchiveName + ExtensionSeparator); + { Create new archive with temporary name } + FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); + end; FTarStream.Position := 0; - FBzip2Stream.Size := 0; CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream); try CompStream.CopyFrom(FTarStream, 0); @@ -326,6 +347,15 @@ 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.} @@ -347,7 +377,7 @@ if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FBzip2Stream } else begin - InputFileStream := TFileStream.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); + InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try CompStream.CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } finally Index: AbDefine.inc =================================================================== --- AbDefine.inc (revision 512) +++ AbDefine.inc (working copy) @@ -271,6 +271,7 @@ {$ENDIF} {$IFDEF UnzipZipxSupport} + {$DEFINE UnzipXzSupport} {$DEFINE UnzipBzip2Support} {$DEFINE UnzipLzmaSupport} {$DEFINE UnzipPPMdSupport} @@ -279,7 +280,6 @@ { Linking .obj files isn't currently supported in Kylix or FPC } {$IF DEFINED(FPC) OR NOT DEFINED(MSWINDOWS)} - {$UNDEF UnzipLzmaSupport} {$UNDEF UnzipPPMdSupport} {$UNDEF UnzipWavPackSupport} {$IFEND} Index: AbDfEnc.pas =================================================================== --- AbDfEnc.pas (revision 512) +++ AbDfEnc.pas (working copy) @@ -889,6 +889,7 @@ {$ENDIF} raise EAbDeflateError.Create(E.Message); end; + else raise; end; finally Helper.Free; Index: AbDfInW.pas =================================================================== --- AbDfInW.pas (revision 512) +++ AbDfInW.pas (working copy) @@ -261,8 +261,7 @@ HashInx := ((HashInx shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; - HashChains^[longint(CurPos) and FWinMask] := - HashHeads^[HashInx]; + HashChains^[PtrUInt(CurPos) and FWinMask] := HashHeads^[HashInx]; HashHeads^[HashInx] := CurPos; inc(CurPos); end; @@ -367,7 +366,6 @@ {$ENDIF} {$ENDIF} type - PLongint = ^longint; PWord = ^word; var MaxLen : longint; @@ -406,7 +404,7 @@ {update the chain itself: set the entry for this position equal to the previous string position} - FHashChains^[longint(CurPos) and FWinMask] := PrevStrPos; + FHashChains^[PtrUInt(CurPos) and FWinMask] := PrevStrPos; {calculate the maximum match we could do at this position} MaxMatch := (FLookAheadEnd - CurPos); @@ -602,7 +600,7 @@ Break; {otherwise move onto the next position} - PrevStrPos := FHashChains^[longint(PrevStrPos) and FWinMask]; + PrevStrPos := FHashChains^[PtrUInt(PrevStrPos) and FWinMask]; end; {$ENDIF} @@ -700,13 +698,11 @@ end; {--------} procedure TAbDfInputWindow.iwSlide; -type - PLongint = ^longint; var i : integer; - ByteCount : integer; - Buffer : longint; - ListItem : PLongint; + ByteCount : PtrInt; + Buffer : PAnsiChar; + ListItem : PPointer; begin {move current valid data back to the start of the buffer} ByteCount := FLookAheadEnd - FStart; @@ -719,22 +715,22 @@ dec(FLookAheadEnd, ByteCount); {patch up the hash table: the head pointers} - Buffer := longint(FBuffer); - ListItem := PLongint(@FHashHeads^[0]); + Buffer := FBuffer; + ListItem := @FHashHeads^[0]; for i := 0 to pred(c_HashCount) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then - ListItem^ := 0; - inc(PAnsiChar(ListItem), sizeof(pointer)); + ListItem^ := nil; + inc(ListItem); end; {..the chain pointers} - ListItem := PLongint(@FHashChains^[0]); + ListItem := @FHashChains^[0]; for i := 0 to pred(FWinSize) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then - ListItem^ := 0; - inc(PAnsiChar(ListItem), sizeof(pointer)); + ListItem^ := nil; + inc(ListItem); end; {now read some more data from the stream} Index: AbDfStrm.pas =================================================================== --- AbDfStrm.pas (revision 512) +++ AbDfStrm.pas (working copy) @@ -230,7 +230,8 @@ {save the on progress handler} if Assigned(aOnProgress) and (aStreamSize > 0) then begin FOnProgress := aOnProgress; - FStreamSize := aStreamSize; + //FStreamSize := aStreamSize; + FStreamSize := aStream.Size - aStream.Position; end; end; {--------} Index: AbGzTyp.pas =================================================================== --- AbGzTyp.pas (revision 512) +++ AbGzTyp.pas (working copy) @@ -140,6 +140,7 @@ 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; @@ -242,7 +243,8 @@ procedure SwapToTar; protected - function CreateItem(const FileSpec : string): TAbArchiveItem; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; @@ -291,7 +293,8 @@ Windows, {$ENDIF} SysUtils, - AbBitBkt, AbCharset, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, AbVMStrm; + AbBitBkt, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, + AbVMStrm, DCOSUtils, DCClassesUtf8, DCConvertEncoding; const { Header Signature Values} @@ -399,8 +402,8 @@ PartialTarData := TMemoryStream.Create; GHlp.SeekToItemData; Hlpr := TAbDeflateHelper.Create; - Hlpr.PartialSize := 512; - PartialTarData.SetSize(512 * 2); + Hlpr.PartialSize := AB_TAR_RECORDSIZE * 4; + PartialTarData.SetSize(Hlpr.PartialSize); Inflate(Strm, PartialTarData, Hlpr); {set to beginning of extracted data} @@ -708,6 +711,20 @@ 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; @@ -731,7 +748,7 @@ { Get Filename, if any } if HasFileName then begin FRawFileName := ReadCStringInStream(AStream); - FFileName := AbRawBytesToString(FRawFileName) + FFileName := CeRawToUtf8(FRawFileName) end else FFileName := 'unknown'; @@ -804,7 +821,7 @@ procedure TAbGzipItem.SetFileName(const Value: string); begin FFileName := Value; - FRawFileName := AbStringToUnixBytes(Value); + FRawFileName := CeUtf8ToSys(Value); if Value <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FNAME else @@ -886,25 +903,30 @@ FState := gsGzip; end; -function TAbGzipArchive.CreateItem(const FileSpec: string): TAbArchiveItem; +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(FileSpec); + Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToGzip; GzItem := TAbGzipItem.Create; try - GzItem.CompressedSize := 0; - GzItem.CRC32 := 0; - GzItem.DiskFileName := ExpandFileName(FileSpec); - GzItem.FileName := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + GzItem.FileName := FullArchiveFileName; + GzItem.DiskFileName := FullSourceFileName; + Result := GzItem; except Result := nil; + raise; end; end; end; @@ -921,7 +943,7 @@ procedure TAbGzipArchive.ExtractItemAt(Index: Integer; const UseName: string); var - OutStream : TFileStream; + OutStream : TStream; CurItem : TAbGzipItem; begin if IsGZippedTar and TarAutoHandle then begin @@ -934,7 +956,7 @@ CurItem := TAbGzipItem(ItemList[Index]); - OutStream := TFileStream.Create(UseName, fmCreate or fmShareDenyNone); + OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); @@ -946,12 +968,12 @@ except on E : EAbUserAbort do begin FStatus := asInvalid; - if FileExists(UseName) then - DeleteFile(UseName); + if mbFileExists(UseName) then + mbDeleteFile(UseName); raise; end else begin - if FileExists(UseName) then - DeleteFile(UseName); + if mbFileExists(UseName) then + mbDeleteFile(UseName); raise; end; end; @@ -1089,7 +1111,6 @@ i : Integer; NewStream : TAbVirtualMemoryStream; UncompressedStream : TStream; - SaveDir : string; CurItem : TAbGzipItem; begin {prepare for the try..finally} @@ -1111,19 +1132,22 @@ if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; - if FGZItem.Count = 0 then begin - CurItem := TAbGzipItem.Create; - FGZItem.Add(CurItem); + if FTarStream.Size > 0 then + begin + 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; + OutGzHelp.WriteArchiveItem(FTarStream); + CurItem.CRC32 := OutGzHelp.CRC; + CurItem.UncompressedSize := OutGzHelp.FileSize; + OutGzHelp.WriteArchiveTail; end; - CurItem := FGZItem[0] as TAbGzipItem; - CurItem.Action := aaNone; - CurItem.LastModTimeAsDateTime := Now; - CurItem.SaveGzHeaderToStream(NewStream); - FTarStream.Position := 0; - OutGzHelp.WriteArchiveItem(FTarStream); - CurItem.CRC32 := OutGzHelp.CRC; - CurItem.UncompressedSize := OutGzHelp.FileSize; - OutGzHelp.WriteArchiveTail; end else begin SwapToGzip; @@ -1154,17 +1178,9 @@ OutGzHelp.WriteArchiveTail; end else begin - { it's coming from a file } - GetDir(0, SaveDir); - try {SaveDir} - if (BaseDirectory <> '') then - ChDir(BaseDirectory); - CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); - UncompressedStream := TFileStream.Create(CurItem.DiskFileName, + CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); + UncompressedStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} try CurItem.UncompressedSize := UncompressedStream.Size; @@ -1197,7 +1213,7 @@ { need new stream to write } FreeAndNil(FStream); FGZStream := nil; - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FGZStream := FStream; FStream.CopyFrom(NewStream, NewStream.Size); end; Index: AbSelfEx.pas =================================================================== --- AbSelfEx.pas (revision 512) +++ AbSelfEx.pas (working copy) @@ -49,9 +49,9 @@ FStubExe : string; FZipFile : string; FSelfExe : string; - FStubStream : TFileStream; - FZipStream : TFileStream; - FSelfStream : TFileStream; + FStubStream : TStream; + FZipStream : TStream; + FSelfStream : TStream; FOnGetStubExe : TAbGetFileEvent; FOnGetZipFile : TAbGetFileEvent; @@ -88,7 +88,7 @@ {$IFDEF LibcAPI} Libc, {$ENDIF} - AbExcept, AbZipTyp; + AbExcept, AbZipTyp, DCOSUtils, DCClassesUtf8; { -------------------------------------------------------------------------- } function TAbMakeSelfExe.Execute : Boolean; @@ -100,20 +100,20 @@ DoGetStubExe(Abort); if Abort then raise EAbUserAbort.Create; - if not FileExists(FStubExe) then + if not mbFileExists(FStubExe) then raise EAbFileNotFound.Create; if (FZipFile = '') then DoGetZipFile(Abort); if Abort then raise EAbUserAbort.Create; - if not FileExists(FZipFile) then + if not mbFileExists(FZipFile) then raise EAbFileNotFound.Create; - FStubStream := TFileStream.Create(FStubExe, fmOpenRead or fmShareDenyWrite); - FZipStream := TFileStream.Create(FZipFile, fmOpenRead or fmShareDenyWrite); + FStubStream := TFileStreamEx.Create(FStubExe, fmOpenRead or fmShareDenyWrite); + FZipStream := TFileStreamEx.Create(FZipFile, fmOpenRead or fmShareDenyWrite); if (FSelfExe = '') then FSelfExe := ChangeFileExt(FZipFile, '.exe'); - FSelfStream := TFileStream.Create(FSelfExe, fmCreate or fmShareExclusive); + FSelfStream := TFileStreamEx.Create(FSelfExe, fmCreate or fmShareExclusive); try MakeSelfExtracting(FStubStream, FZipStream, FSelfStream); Result := True; Index: AbSpanSt.pas =================================================================== --- AbSpanSt.pas (revision 512) +++ AbSpanSt.pas (working copy) @@ -142,7 +142,7 @@ {$IFDEF MSWINDOWS} Windows, {$ENDIF} - Math, RTLConsts, SysUtils, AbUtils, AbExcept; + Math, RTLConsts, SysUtils, AbUtils, AbExcept, DCOSUtils, DCClassesUtf8; {============================================================================} @@ -181,7 +181,7 @@ begin inherited Create(ArchiveName); FCurrentImage := CurrentImage; - FIsSplit := FileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); + FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); FLastImage := CurrentImage; FStream := Stream; end; @@ -218,7 +218,7 @@ end else raise EAbUserAbort.Create; - FStream := TFileStream.Create(ImageName, fmOpenRead or fmShareDenyWrite); + FStream := TFileStreamEx.Create(ImageName, fmOpenRead or fmShareDenyWrite); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Read(var Buffer; Count: Longint): Longint; @@ -273,7 +273,7 @@ procedure TAbSpanReadStream.SetOnRequestImage(Value: TAbRequestImageEvent); begin FOnRequestImage := Value; - FIsSplit := FileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); + FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); end; {============================================================================} @@ -302,7 +302,7 @@ FreeAndNil(FStream); Inc(FCurrentImage); if FThreshold > 0 then - RenameFile(FArchiveName, GetImageName(FCurrentImage)) + mbRenameFile(FArchiveName, GetImageName(FCurrentImage)) else begin if Assigned(FOnRequestBlankDisk) then begin Abort := False; @@ -316,7 +316,7 @@ raise EAbUserAbort.Create; AbSetSpanVolumeLabel(AbDrive(FArchiveName), FCurrentImage); end; - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FImageSize := 0; end; {------------------------------------------------------------------------------} Index: AbTarTyp.pas =================================================================== --- AbTarTyp.pas (revision 512) +++ AbTarTyp.pas (working copy) @@ -274,6 +274,7 @@ 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 } @@ -320,6 +321,7 @@ 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 } @@ -418,7 +420,8 @@ FArchReadOnly : Boolean; FArchFormat: TAbTarHeaderFormat; protected - function CreateItem(const FileSpec : string): TAbArchiveItem; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; @@ -448,6 +451,11 @@ 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; @@ -454,10 +462,8 @@ implementation uses - {$IFDEF MSWINDOWS} - Windows, // Fix inline warnings - {$ENDIF MSWINDOWS} - Math, RTLConsts, SysUtils, AbCharset, AbVMStrm, AbExcept; + Math, RTLConsts, SysUtils, AbVMStrm, AbExcept, + DCOSUtils, DCClassesUtf8, DCConvertEncoding, DCStrUtils; { ****************** Helper functions Not from Classes Above ***************** } function OctalToInt(const Oct : PAnsiChar; aLen : integer): Int64; @@ -566,7 +572,58 @@ 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 @@ -632,7 +689,7 @@ function TAbTarItem.GetExternalFileAttributes: LongWord; begin - Result := FTarItem.Mode; + TarAttrsToUnixAttrs(FTarItem.Mode, FTarItem.LinkFlag, Result); end; function TAbTarItem.GetFileName: string; @@ -678,6 +735,19 @@ 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; @@ -734,7 +804,7 @@ { GNU_FORMAT is detected by the presence of GNU extended headers. } { These detections are similar to GNU tar's. } - if (PTarHeader.Magic.value = AB_TAR_MAGIC_VAL) then + 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 @@ -750,7 +820,7 @@ { This can define false positives, Pax headers/ STAR format could be detected as this } FTarItem.ArchiveFormat := USTAR_FORMAT; end - else if (PTarHeader.Magic.gnuOld = AB_TAR_MAGIC_GNUOLD) then + else if CompareByte(PTarHeader.Magic.gnuOld, AB_TAR_MAGIC_GNUOLD, SizeOf(AB_TAR_MAGIC_GNUOLD)) = 0 then begin FTarItem.ArchiveFormat := OLDGNU_FORMAT; end @@ -819,7 +889,7 @@ RawFileName := PTarHeader.Name; end; { End not FoundName } - FTarItem.Name := AbRawBytesToString(RawFileName); + FTarItem.Name := CeRawToUtf8(RawFileName); end; { Extract the file name from the headers } @@ -876,7 +946,7 @@ if not FoundName then RawLinkName := PHeader.LinkName; - FTarItem.LinkName := AbRawBytesToString(RawLinkName); + FTarItem.LinkName := CeRawToUtf8(RawLinkName); end; { Return True if CheckSum passes out. } @@ -935,6 +1005,107 @@ { 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; + + Inc(P, ALength); + end; + else begin + Inc(P); + end; + end; + end; + end; +end; + procedure TAbTarItem.LoadTarHeaderFromStream(AStream: TStream); var NumMHeaders : Integer; @@ -968,7 +1139,7 @@ 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 (PTarHeader.Magic.value = AB_TAR_MAGIC_VAL) then + 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 } @@ -1016,9 +1187,10 @@ if FTarItem.ItemType <> UNKNOWN_ITEM then begin ParseTarHeaders; { Update FTarItem values } + ParsePaxHeaders; { Update FTarItem values } FFileName := FTarItem.Name; {FTarHeader.Name;} - FDiskFileName := FileName; - AbUnfixName(FDiskFileName); +// FDiskFileName := FileName; +// AbUnfixName(FDiskFileName); end; Action := aaNone; Tagged := False; @@ -1142,14 +1314,21 @@ var S : AnsiString; I: Integer; + Permissions: LongWord; + ALinkFlag: AnsiChar; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; - FTarItem.Mode := Value; - S := PadString(IntToOctal(Value), SizeOf(Arr8)); + + 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; @@ -1297,9 +1476,9 @@ { 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], PHeader.Name, AB_TAR_NAMESIZE) + Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else - Move(Value[1], PHeader.LinkName, AB_TAR_NAMESIZE); + Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; procedure TAbTarItem.SetFileName(const Value: string); @@ -1333,7 +1512,7 @@ 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 := AbStringToUnixBytes(Value); + 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. } @@ -1431,8 +1610,8 @@ { Update the inherited file names. } FFileName := FTarItem.Name; - DiskFileName := FFileName; - AbUnfixName(FDiskFileName); +//DiskFileName := FFileName; +//AbUnfixName(FDiskFileName); // Don't override DiskFileName FTarItem.Dirty := True; end; @@ -1527,7 +1706,7 @@ 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 := AbStringToUnixBytes(Value); + 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. } @@ -1838,16 +2017,19 @@ FArchFormat := V7_FORMAT; // Default for new archives end; -function TAbTarArchive.CreateItem(const FileSpec: string): TAbArchiveItem; +function TAbTarArchive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; var Item : TAbTarItem; - S : String; I: Integer; + FullSourceFileName, FullArchiveFileName: String; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Create Item Unsupported in this Archive } - S := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + Item := TAbTarItem.Create; try // HeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); @@ -1863,7 +2045,7 @@ Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end - else if (FArchFormat = V7_FORMAT) and (Length(S) > 100) then + 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; @@ -1882,9 +2064,10 @@ { Most others are initialized in the .Create } Item.CRC32 := 0; + { Note this can raise exceptions for file name lengths. } - Item.FileName := FixName(FileSpec); - Item.DiskFileName := ExpandFileName(FileSpec); + Item.FileName := FullArchiveFileName; + Item.DiskFileName := FullSourceFileName; Item.Action := aaNone; finally Result := Item; @@ -1894,12 +2077,13 @@ procedure TAbTarArchive.ExtractItemAt(Index: Integer; const UseName: string); var - OutStream : TFileStream; + AFileName: String; + OutStream : TStream; CurItem : TAbTarItem; begin { Check the index is not out of range. } if(Index >= ItemList.Count) then - raise EListError.CreateFmt(SListIndexError, [Index]); + raise EListError.CreateFmt(SListIndexError, [Index]); CurItem := TAbTarItem(ItemList[Index]); @@ -1911,21 +2095,50 @@ raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { We will allow extractions if the file name/Link name are strickly less than 100 chars } + { 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 - OutStream := TFileStream.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; - DeleteFile(UseName); - raise; + case (CurItem.Mode and $F000) of + AB_FMODE_FILE, AB_FMODE_FILE2: begin + 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 + if not CreateSymLink(CurItem.LinkName, UseName) then + raise EOSError.Create(mbSysErrorMessage(GetLastOSError)); + end; end; end; AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); @@ -2060,7 +2273,7 @@ AbStripDrive( lValue ); { check for a leading slash } - if lValue[1] = AbPathDelim then + if (Length(lValue) > 0) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then @@ -2097,7 +2310,6 @@ i : Integer; NewStream : TAbVirtualMemoryStream; TempStream : TStream; - SaveDir : string; CurItem : TAbTarItem; AttrEx : TAbAttrExRec; begin @@ -2145,24 +2357,27 @@ aaAdd, aaFreshen, aaReplace: begin try - { it's coming from a file } - GetDir(0, SaveDir); - try {SaveDir} - if (BaseDirectory <> '') then - ChDir(BaseDirectory); - { update metadata } - AbFileGetAttrEx(CurItem.DiskFileName, AttrEx); - 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 } - if (AttrEx.Mode and AB_FMODE_DIR) <> 0 then begin - CurItem.LinkFlag := AB_TAR_LF_DIR; + { 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 - else begin - TempStream := TFileStream.Create(CurItem.DiskFileName, + 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; @@ -2173,9 +2388,13 @@ TempStream.Free; end; { TempStream } end; - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} + + else begin + CurItem.UncompressedSize := AttrEx.Size; + CurItem.SaveTarHeaderToStream(NewStream); + end; + end; + except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); @@ -2200,7 +2419,7 @@ else begin { need new stream to write } FreeAndNil(FStream); - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FStream.CopyFrom(NewStream, NewStream.Size); end; Index: AbUnzPrc.pas =================================================================== --- AbUnzPrc.pas (revision 512) +++ AbUnzPrc.pas (working copy) @@ -136,7 +136,7 @@ AbBzip2, {$ENDIF} {$IFDEF UnzipLzmaSupport} - AbLzma, + ULZMADecoder, {$ENDIF} {$IFDEF UnzipPPMdSupport} AbPPMd, @@ -144,6 +144,9 @@ {$IFDEF UnzipWavPackSupport} AbWavPack, {$ENDIF} + {$IFDEF UnzipXzSupport} + AbXz, + {$ENDIF} AbBitBkt, AbConst, AbDfBase, @@ -153,7 +156,9 @@ AbSpanSt, AbSWStm, AbUnzOutStm, - AbUtils; + AbUtils, + AbWinZipAes, + DCClassesUtf8; { -------------------------------------------------------------------------- } procedure AbReverseBits(var W : Word); @@ -944,11 +949,30 @@ InStream.ReadBuffer(Header, SizeOf(Header)); SetLength(Properties, Header.PropSize); InStream.ReadBuffer(Properties[0], Header.PropSize); - LzmaDecodeStream(PByte(Properties), Header.PropSize, InStream, OutStream, - Item.UncompressedSize); + 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 + LzmaDecompression: TLzmaDecompression; +begin + LzmaDecompression := TLzmaDecompression.Create(InStream, OutStream); + try + LzmaDecompression.Code(Item.UncompressedSize); + finally + LzmaDecompression.Free; + end; +end; +{$ENDIF} +{ -------------------------------------------------------------------------- } function ExtractPrep(ZipArchive: TAbZipArchive; Item: TAbZipItem): TStream; var LFH : TAbZipLocalFileHeader; @@ -956,6 +980,9 @@ Tries : Integer; CheckValue : LongInt; DecryptStream: TAbDfDecryptStream; + FieldSize: Word; + WinZipAesField: PWinZipAesRec = nil; + AesDecryptStream: TAbWinZipAesDecryptStream; begin { validate } if (Lo(Item.VersionNeededToExtract) > Ab_ZipVersion) then @@ -990,6 +1017,12 @@ { 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; @@ -998,14 +1031,27 @@ if Abort then raise EAbUserAbort.Create; { check for valid password } - DecryptStream := TAbDfDecryptStream.Create(Result, - CheckValue, ZipArchive.Password); - if DecryptStream.IsValid then begin - DecryptStream.OwnsStream := True; - Result := DecryptStream; - Break; + 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; - FreeAndNil(DecryptStream); { prompt again } Inc(Tries); if (Tries > ZipArchive.PasswordRetries) then @@ -1022,6 +1068,7 @@ procedure DoExtract(aZipArchive: TAbZipArchive; aItem: TAbZipItem; aInStream, aOutStream: TStream); var + Wrong: Boolean; OutStream : TAbUnzipOutputStream; begin if aItem.UncompressedSize = 0 then @@ -1062,6 +1109,11 @@ DecompressWavPack(aInStream, OutStream); end; {$ENDIF} + {$IFDEF UnzipXzSupport} + cmXz: begin + DoExtractXz(aZipArchive, aItem, aInStream, OutStream); + end; + {$ENDIF} cmShrunk..cmImploded: begin DoLegacyUnzip(aZipArchive, aItem, aInStream, OutStream); end; @@ -1070,12 +1122,21 @@ end; { check CRC } - if OutStream.CRC32 <> aItem.CRC32 then + 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; @@ -1111,7 +1172,7 @@ else begin InStream := ExtractPrep(ZipArchive, Item); try - OutStream := TFileStream.Create(UseName, fmCreate or fmShareDenyWrite); + OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyWrite); try try {OutStream} DoExtract(ZipArchive, Item, InStream, OutStream); @@ -1141,6 +1202,7 @@ LFH : TAbZipLocalFileHeader; Zip64Field : PZip64LocalHeaderRec; ZipArchive : TAbZipArchive; + DD : TAbZipDataDescriptor = nil; begin ZipArchive := TAbZipArchive(Sender); @@ -1162,6 +1224,12 @@ {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} @@ -1173,8 +1241,15 @@ raise EAbZipInvalidLFH.Create; if (LFH.LastModFileDate <> Item.LastModFileDate) then raise EAbZipInvalidLFH.Create; - if (LFH.CRC32 <> Item.CRC32) 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; @@ -1181,6 +1256,13 @@ 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; @@ -1195,6 +1277,7 @@ finally BitBucket.Free; LFH.Free; + DD.Free; end; end; Index: AbUtils.pas =================================================================== --- AbUtils.pas (revision 512) +++ AbUtils.pas (working copy) @@ -59,11 +59,11 @@ Posix.SysTypes, {$ENDIF} {$IFDEF UNIX} + DCClassesUtf8, +{$ENDIF} DateUtils, -{$ENDIF} SysUtils, - Classes, - AbCharset; + Classes; type @@ -94,7 +94,8 @@ type TAbArchiveType = (atUnknown, atZip, atSpannedZip, atSelfExtZip, - atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar); + atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar, + atXz, atXzippedTar, atLzma, atLzmaTar); {$IF NOT DECLARED(DWORD)} @@ -114,6 +115,12 @@ {$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}; @@ -294,7 +301,7 @@ Mode: {$IFDEF UNIX}mode_t{$ELSE}Cardinal{$ENDIF}; end; - function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec) : Boolean; + function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; function AbSwapLongEndianness(Value : LongInt): LongInt; @@ -363,9 +370,14 @@ uses StrUtils, + LazUTF8, AbConst, - AbExcept; + AbExcept, + DCOSUtils, + DCStrUtils, + DCDateTimeUtils; +(* {$IF DEFINED(FPCUnixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external clib name 'mktemp'; @@ -387,6 +399,7 @@ 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; @@ -410,16 +423,16 @@ function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; {$IFDEF UNIX} var - DesStream, SrcStream: TFileStream; + DesStream, SrcStream: TFileStreamEx; {$ENDIF} begin {$IFDEF UNIX} Result := False; - if not FailIfExists or not FileExists(Destination) then + if not FailIfExists or not mbFileExists(Destination) then try - SrcStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyWrite); + SrcStream := TFileStreamEx.Create(Source, fmOpenRead or fmShareDenyWrite); try - DesStream := TFileStream.Create(Destination, fmCreate); + DesStream := TFileStreamEx.Create(Destination, fmCreate); try DesStream.CopyFrom(SrcStream, 0); Result := True; @@ -434,7 +447,7 @@ end; {$ENDIF UNIX} {$IFDEF MSWINDOWS} - Result := CopyFile(PChar(Source), PChar(Destination), FailIfExists); + Result := CopyFileW(PWideChar(UTF8Decode(Source)), PWideChar(UTF8Decode(Destination)), FailIfExists); {$ENDIF MSWINDOWS} end; { -------------------------------------------------------------------------- } @@ -447,7 +460,7 @@ i : Integer; TempPath : string; begin - if DirectoryExists( Path ) then + if mbDirectoryExists( Path ) then Exit; {see how much of the path currently exists} if Pos( '\\', Path ) > 0 then @@ -463,8 +476,9 @@ {get a temp path to try: drive:\path1} TempPath := Copy( Path, 1, i ); {if it doesn't exist, create it} - if not DirectoryExists( TempPath ) then - MkDir( TempPath ); + if not mbDirectoryExists( TempPath ) then + if mbCreateDir( TempPath ) = False then + Exit; inc( iStartSlash ); until ( Length( TempPath ) = Length( Path ) ); end; @@ -476,44 +490,26 @@ { -------------------------------------------------------------------------- } function AbGetTempDirectory : string; begin -{$IFDEF MSWiNDOWS} - SetLength(Result, MAX_PATH); - SetLength(Result, GetTempPath(Length(Result), PChar(Result))); -{$ENDIF} -{$IFDEF UNIX} - Result := '/tmp/'; -{$ENDIF} + Result:= SysToUTF8(GetTempDir); end; { -------------------------------------------------------------------------- } function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; var - TempPath : string; -{$IFDEF MSWINDOWS} - FileNameZ : array [0..259] of char; -{$ENDIF} -{$IFDEF UNIX} - hFile: Integer; - FileName: AbSysString; -{$ENDIF} + hFile: System.THandle; + TempPath : String; begin - if DirectoryExists(Dir) then - TempPath := Dir + if mbDirectoryExists(Dir) then + TempPath := IncludeTrailingPathDelimiter(Dir) else TempPath := AbGetTempDirectory; -{$IFDEF MSWINDOWS} - GetTempFileName(PChar(TempPath), 'VMS', Word(not CreateIt), FileNameZ); - Result := string(FileNameZ); -{$ENDIF} -{$IFDEF UNIX} - FileName := AbSysString(TempPath) + 'VMSXXXXXX'; - mktemp(PAnsiChar(AbSysString(FileName))); - Result := string(FileName); + + Result := GetTempName(TempPath + 'VMS'); + if CreateIt then begin - hFile := FileCreate(Result); - if hFile <> -1 then + hFile := mbFileCreate(Result); + if hFile <> feInvalidHandle then FileClose(hFile); end; -{$ENDIF} end; { -------------------------------------------------------------------------- } function AbDrive(const ArchiveName : string) : Char; @@ -560,8 +556,8 @@ var FreeAvailable, TotalSpace: Int64; begin - if GetDiskFreeSpaceEx(PChar(ExtractFilePath(ExpandFileName(ArchiveName))), - FreeAvailable, TotalSpace, nil) then + if GetDiskFreeSpaceExW(PWideChar(UTF8Decode(ExtractFilePath(ExpandFileName(ArchiveName)))), + FreeAvailable, TotalSpace, nil) then Result := FreeAvailable else Result := -1; @@ -574,7 +570,7 @@ if statfs(PAnsiChar(ExtractFilePath(ArchiveName)), FStats) = 0 then Result := Int64(FStats.f_bAvail) * Int64(FStats.f_bsize) {$ELSEIF DEFINED(FPCUnixAPI)} - if fpStatFS(PAnsiChar(ExtractFilePath(ArchiveName)), @FStats) = 0 then + 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 @@ -591,8 +587,8 @@ DirMatch : Boolean; MaskDir : string; begin - FileName := UpperCase( FileName ); - FileMask := UpperCase( FileMask ); +//FileName := UpperCase( FileName ); +//FileMask := UpperCase( FileMask ); MaskDir := ExtractFilePath( FileMask ); if MaskDir = '' then DirMatch := True @@ -614,12 +610,12 @@ Found := FindFirst( FileMask, SearchAttr, SR ); if Found = 0 then begin try - NameMask := UpperCase(ExtractFileName(FileMask)); + NameMask := ExtractFileName(FileMask); while Found = 0 do begin NewFile := ExtractFilePath( FileMask ) + SR.Name; if (SR.Name <> AbThisDir) and (SR.Name <> AbParentDir) and - AbPatternMatch(UpperCase(SR.Name), 1, NameMask, 1) then + AbPatternMatch(SR.Name, 1, NameMask, 1) then if (SR.Attr and faDirectory) <> 0 then FileList.Add( NewFile + PathDelim ) else @@ -1002,18 +998,18 @@ function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; var - Temp : string; - Vol : array[0..11] of Char; - Root : array[0..3] of Char; + Temp : WideString; + Vol : array[0..11] of WideChar; + Root : array[0..3] of WideChar; begin - Temp := VolName; - StrCopy(Root, '%:' + AbPathDelim); + Temp := UTF8Decode(VolName); + StrPCopyW(Root, '%:' + AbPathDelim); Root[0] := Drive; if Length(Temp) > 11 then SetLength(Temp, 11); - StrPCopy(Vol, Temp); + StrPCopyW(Vol, Temp); {$IFDEF MSWINDOWS} - if Windows.SetVolumeLabel(Root, Vol) then + if Windows.SetVolumeLabelW(Root, Vol) then Result := 0 else Result := GetLastError; {$ENDIF MSWINDOWS} @@ -1095,16 +1091,7 @@ end; { -------------------------------------------------------------------------- } function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime; -{$IFDEF MSWINDOWS} var - Temp : LongInt; -begin - LongRec(Temp).Lo := FileTime; - LongRec(Temp).Hi := FileDate; - Result := FileDateToDateTime(Temp); -{$ENDIF MSWINDOWS} -{$IFDEF UNIX} -var Yr, Mo, Dy : Word; Hr, Mn, S : Word; begin @@ -1131,7 +1118,6 @@ Result := EncodeDate(Yr, Mo, Dy) + EncodeTime(Hr, Mn, S, 0); -{$ENDIF UNIX} end; function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt; @@ -1166,12 +1152,7 @@ function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; begin - {$IFDEF MSWINDOWS} - Result := FileSetDate(aFileName, AbDateTimeToDosFileDate(aValue)) = 0; - {$ENDIF} - {$IFDEF UNIX} - Result := FileSetDate(aFileName, AbLocalDateTimeToUnixTime(aValue)) = 0; - {$ENDIF} + Result:= mbFileSetTime(aFileName, DateTimeToFileTime(aValue)); end; { -------------------------------------------------------------------------- } @@ -1188,7 +1169,8 @@ { -------------------------------------------------------------------------- } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; begin - {$WARN SYMBOL_PLATFORM OFF} + {$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 @@ -1201,12 +1183,14 @@ Result := Result or AB_FMODE_DIR or AB_FPERMISSION_OWNEREXECUTE else Result := Result or AB_FMODE_FILE; - {$WARN SYMBOL_PLATFORM ON} + {$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 - {$WARN SYMBOL_PLATFORM OFF} + {$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 } @@ -1225,21 +1209,20 @@ if (Attr and AB_FPERMISSION_OWNERWRITE) <> AB_FPERMISSION_OWNERWRITE then Result := Result or faReadOnly; - {$WARN SYMBOL_PLATFORM ON} + {$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 - {$WARN SYMBOL_PLATFORM OFF} {$IFDEF MSWINDOWS} - FileSetAttr(aFileName, aAttr); + mbFileSetAttr(aFileName, aAttr); {$ENDIF} {$IF DEFINED(LibcAPI) OR DEFINED(PosixAPI)} chmod(PAnsiChar(AbSysString(aFileName)), aAttr); {$ELSEIF DEFINED(FPCUnixAPI)} - fpchmod(aFileName, aAttr); + mbFileSetAttr(aFileName, aAttr); {$IFEND} - {$WARN SYMBOL_PLATFORM ON} end; { -------------------------------------------------------------------------- } function AbFileGetSize(const aFileName : string) : Int64; @@ -1252,12 +1235,12 @@ Result := -1; end; { -------------------------------------------------------------------------- } -function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec) : Boolean; +function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; var {$IFDEF MSWINDOWS} FileDate: LongRec; - FindData: TWin32FindData; - LocalFileTime: TFileTime; + FindData: TWin32FindDataW; + LocalFileTime: Windows.TFileTime; {$ENDIF} {$IFDEF FPCUnixAPI} StatBuf: stat; @@ -1274,9 +1257,9 @@ aAttr.Attr := -1; aAttr.Mode := 0; {$IFDEF MSWINDOWS} - Result := GetFileAttributesEx(PChar(aFileName), GetFileExInfoStandard, @FindData); + Result := GetFileAttributesExW(PWideChar(UTF8Decode(aFileName)), GetFileExInfoStandard, @FindData); if Result then begin - if FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and + if Windows.FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and FileTimeToDosDateTime(LocalFileTime, FileDate.Hi, FileDate.Lo) then aAttr.Time := FileDateToDateTime(Integer(FileDate)); LARGE_INTEGER(aAttr.Size).LowPart := FindData.nFileSizeLow; @@ -1287,7 +1270,10 @@ {$ENDIF} {$IFDEF UNIX} {$IFDEF FPCUnixAPI} - Result := (FpStat(aFileName, StatBuf) = 0); + 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 @@ -1313,10 +1299,10 @@ {-Get the volume label for the specified drive.} {$IFDEF MSWINDOWS} var - Root : string; + Root : WideString; Flags, MaxLength : DWORD; NameSize : Integer; - VolName : string; + VolName : WideString; {$ENDIF} begin {$IFDEF MSWINDOWS} @@ -1326,10 +1312,10 @@ Result := ''; - if GetVolumeInformation(PChar(Root), PChar(VolName), Length(VolName), + if GetVolumeInformationW(PWideChar(Root), PWideChar(VolName), Length(VolName), nil, MaxLength, Flags, nil, NameSize) then - Result := VolName; + Result := Utf16ToUtf8(VolName); {$ELSE} Result := ''; //Stop Gap, spanning support needs to be rethought for Unix {$ENDIF} Index: AbVMStrm.pas =================================================================== --- AbVMStrm.pas (revision 512) +++ AbVMStrm.pas (working copy) @@ -40,7 +40,7 @@ const AB_VMSPageSize = 4096; {must be a power of two} - AB_VMSMaxPages = 2048; {makes 8MB with the above value} + AB_VMSMaxPages = 16384; {makes 64MB with the above value} type PvmsPage = ^TvmsPage; @@ -109,7 +109,8 @@ {$ENDIF} SysUtils, AbExcept, - AbUtils; + AbUtils, + DCOSUtils; const LastLRUValue = $7FFFFFFF; @@ -417,6 +418,7 @@ except if CreatedNewPage then Dispose(Page); + raise; end;{try..except} end; {--------} @@ -429,10 +431,10 @@ begin if (vmsSwapHandle = 0) then begin vmsSwapFileName := AbCreateTempFile(vmsSwapFileDir); - vmsSwapHandle := FileOpen(vmsSwapFileName, fmOpenReadWrite); + vmsSwapHandle := mbFileOpen(vmsSwapFileName, fmOpenReadWrite); if (vmsSwapHandle <= 0) then begin vmsSwapHandle := 0; - DeleteFile(vmsSwapFileName); + mbDeleteFile(vmsSwapFileName); raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName ); end; vmsSwapFileSize := 0; @@ -443,7 +445,7 @@ begin if (vmsSwapHandle <> 0) then begin FileClose(vmsSwapHandle); - DeleteFile(vmsSwapFileName); + mbDeleteFile(vmsSwapFileName); vmsSwapHandle := 0; end; end; Index: AbZBrows.pas =================================================================== --- AbZBrows.pas (revision 512) +++ AbZBrows.pas (working copy) @@ -129,7 +129,7 @@ implementation uses - SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils; + SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils, DCOSUtils; { TAbCustomZipBrowser implementation ======================================= } @@ -205,7 +205,7 @@ FArchive := nil; if FileName <> '' then begin - if FileExists(FileName) then begin { open it } + if mbFileExists(FileName) then begin { open it } ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); Index: AbZipper.pas =================================================================== --- AbZipper.pas (revision 512) +++ AbZipper.pas (working copy) @@ -173,7 +173,8 @@ implementation uses - SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc; + SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc, + AbXzTyp, AbLzmaTyp, DCOSUtils; { -------------------------------------------------------------------------- } constructor TAbCustomZipper.Create( AOwner : TComponent ); @@ -399,7 +400,7 @@ ArcType := ArchiveType; if (FileName <> '') then - if FileExists(FileName) then begin { open it } + if mbFileExists(FileName) then begin { open it } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); @@ -411,12 +412,12 @@ end; atTar : begin - FArchive := TAbTarArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin - FArchive := TAbGzipArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; @@ -423,7 +424,7 @@ end; atGZippedTar : begin - FArchive := TAbGzipArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; @@ -430,7 +431,7 @@ end; atBzip2 : begin - FArchive := TAbBzip2Archive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; @@ -437,12 +438,26 @@ end; atBzippedTar : begin - FArchive := TAbBzip2Archive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + 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; + else raise EAbUnhandledType.Create; end {case}; @@ -455,17 +470,17 @@ case ArcType of atZip : begin - FArchive := TAbZipArchive.Create(FileName, fmCreate); + FArchive := TAbZipArchive.Create(FileName, fmCreate or fmShareDenyWrite); InitArchive; end; atTar : begin - FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyWrite); inherited InitArchive; end; atGZip : begin - FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; @@ -472,7 +487,7 @@ end; atGZippedTar : begin - FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; @@ -479,7 +494,7 @@ end; atBzip2 : begin - FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; @@ -486,12 +501,26 @@ end; atBzippedTar : begin - FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyNone); + 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; + else raise EAbUnhandledType.Create; end {case}; Index: AbZipPrc.pas =================================================================== --- AbZipPrc.pas (revision 512) +++ AbZipPrc.pas (working copy) @@ -67,7 +67,9 @@ AbVMStrm, AbDfBase, AbDfEnc, - AbSpanSt; + AbSpanSt, + AbXzPrc, + DCClassesUtf8; { ========================================================================== } @@ -209,6 +211,9 @@ try if InStream.Size > 0 then begin + if SameText(ExtractFileExt(Sender.ArchiveName), '.zipx') then + DoCompressXz(ZipArchive, Item, DestStrm, InStream) + else { determine how to store Item based on specified CompressionMethodToUse } case ZipArchive.CompressionMethodToUse of smDeflated : begin @@ -294,22 +299,14 @@ OutStream : TStream ); var UncompressedStream : TStream; - SaveDir : string; AttrEx : TAbAttrExRec; begin - GetDir(0, SaveDir); - try {SaveDir} - if (Sender.BaseDirectory <> '') then - ChDir(Sender.BaseDirectory); - AbFileGetAttrEx(Item.DiskFileName, AttrEx); - if ((AttrEx.Attr and faDirectory) <> 0) then - UncompressedStream := TMemoryStream.Create - else - UncompressedStream := - TFileStream.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} + 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); Index: AbZipTyp.pas =================================================================== --- AbZipTyp.pas (revision 512) +++ AbZipTyp.pas (working copy) @@ -169,7 +169,7 @@ (cmStored, cmShrunk, cmReduced1, cmReduced2, cmReduced3, cmReduced4, cmImploded, cmTokenized, cmDeflated, cmEnhancedDeflated, cmDCLImploded, cmBzip2 = 12, cmLZMA = 14, - cmIBMTerse = 18, cmLZ77, cmJPEG = 96, cmWavPack = 97, cmPPMd); + cmIBMTerse = 18, cmLZ77, cmXz = 95, cmJPEG = 96, cmWavPack = 97, cmPPMd); TAbZipSupportedMethod = (smStored, smDeflated, smBestMethod); @@ -206,6 +206,7 @@ FCompressedSize : Int64; FUncompressedSize : Int64; public {methods} + procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); public {properties} property CRC32 : Longint @@ -407,6 +408,7 @@ function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetNativeFileAttributes : LongInt; override; + function GetNativeLastModFileTime: Longint; override; procedure SetCompressedSize( const Value : Int64 ); override; procedure SetCRC32( const Value : Longint ); override; procedure SetExternalFileAttributes( Value : LongWord ); override; @@ -530,8 +532,8 @@ override; destructor Destroy; override; - function CreateItem(const FileName : string): TAbArchiveItem; - override; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; public {properties} property CompressionMethodToUse : TAbZipSupportedMethod @@ -620,11 +622,14 @@ {$ENDIF} {$ENDIF} Math, - AbCharset, AbResString, AbExcept, AbVMStrm, - SysUtils; + SysUtils, + LazUTF8, + DCOSUtils, + DCClassesUtf8, + DCConvertEncoding; function VerifyZip(Strm : TStream) : TAbArchiveType; { determine if stream appears to be in PkZip format } @@ -638,20 +643,31 @@ Result := atUnknown; try Strm.Position := 0; - Strm.Read(Sig, SizeOf(Sig)); - 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 } - Strm.ReadBuffer(Footer, SizeOf(Footer)); - if Footer.Signature = Ab_ZipEndCentralDirectorySignature then - if Footer.DiskNumber = 0 then - Result := atZip - else - Result := atSpannedZip; + 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 + { 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; + end; + end; end; end; except @@ -733,8 +749,7 @@ leaves stream positioned at start of structure or at original position if not found } const - StartBufSize = 512; - MaxBufSize = 64 * 1024; + MaxBufSize = 256 * 1024; var StartPos : Int64; TailRec : TAbZipEndOfCentralDirectoryRecord; @@ -741,7 +756,6 @@ Buffer : PAnsiChar; Offset : Int64; TestPos : PAnsiChar; - Done : boolean; BytesRead : Int64; BufSize : Int64; CommentLen: integer; @@ -767,7 +781,7 @@ stream; we need to search for the tail signature} {get a buffer} - BufSize := StartBufSize; + BufSize := Min(MaxBufSize, aStream.Size); GetMem(Buffer, BufSize); try @@ -774,57 +788,41 @@ {start out searching backwards} Offset := -BufSize; - {while there is still data to search ...} - Done := false; - while not Done do begin + {seek to the search position} + Result := aStream.Seek(Offset, soEnd); + if (Result < 0) then begin + Result := aStream.Seek(0, soBeginning); + end; - {seek to the search position} - Result := aStream.Seek(Offset, soEnd); - if (Result <= 0) then begin - Result := aStream.Seek(0, soBeginning); - Done := true; - end; + {read a buffer full} + BytesRead := aStream.Read(Buffer^, BufSize); - {read a buffer full} - BytesRead := aStream.Read(Buffer^, BufSize); + if BytesRead < sizeOf(TailRec) then begin + Result := -1; + Exit; + end; - 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); - {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 - {if we found the signature...} - if (PLongint(TestPos)^ = Ab_ZipEndCentralDirectorySignature) then begin + {get the tail record at this position} + Move(TestPos^, TailRec, sizeof(TailRec)); - {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 - {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; + {calculate its position and exit} + Result := Result + (TestPos - Buffer); + aStream.Seek(Result, soBeginning); + Exit; end; - - {otherwise move back one step, doubling the buffer} - if (BufSize < MaxBufSize) then begin - FreeMem(Buffer); - BufSize := BufSize * 2; - if BufSize > MaxBufSize then - BufSize := MaxBufSize; - GetMem(Buffer, BufSize); - end; - dec(Offset, BufSize - SizeOf(TailRec)); end; {if we reach this point, the CD tail is not present} @@ -914,6 +912,17 @@ 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 ) ); @@ -1195,12 +1204,13 @@ { TAbZipDirectoryFileFooter implementation ================================= } function TAbZipDirectoryFileFooter.GetIsZip64: Boolean; begin - Result := (DiskNumber >= $FFFF) or - (StartDiskNumber >= $FFFF) or - (EntriesOnDisk >= $FFFF) or - (TotalEntries >= $FFFF) or - (DirectorySize >= $FFFFFFFF) or - (DirectoryOffset >= $FFFFFFFF); + 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 ); @@ -1395,10 +1405,17 @@ Result := Byte(ExternalFileAttributes); {$ENDIF} {$IFDEF UNIX} - if HostOS in [hosDOS, hosNTFS, hosWinNT] then + if HostOS in [hosDOS, hosOS2, hosNTFS, hosWinNT, hosVFAT] then Result := AbDOS2UnixFileAttributes(ExternalFileAttributes) - else + 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; { -------------------------------------------------------------------------- } @@ -1407,6 +1424,22 @@ Result := FItemInfo.FileName; end; { -------------------------------------------------------------------------- } +function TAbZipItem.GetNativeLastModFileTime: Longint; +{$IFDEF UNIX} +var + DateTime: TDateTime; +{$ENDIF} +begin + // Zip stores MS-DOS date/time. +{$IFDEF UNIX} + DateTime := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); + Result := AbLocalDateTimeToUnixTime(DateTime); +{$ELSE} + LongRec(Result).Hi := LastModFileDate; + LongRec(Result).Lo := LastModFileTime; +{$ENDIF} +end; +{ -------------------------------------------------------------------------- } function TAbZipItem.GetShannonFanoTreeCount : Byte; begin Result := FItemInfo.ShannonFanoTreeCount; @@ -1430,12 +1463,13 @@ UnicodeName: UnicodeString; UTF8Name: AnsiString; XceedField: PXceedUnicodePathRec; + SystemCode: TAbZipHostOs; begin FItemInfo.LoadFromStream( Stream ); { decode filename (ANSI/OEM/UTF-8) } - if FItemInfo.IsUTF8 or (AbDetectCharSet(FItemInfo.FileName) = csUTF8) then - FFileName := UTF8ToString(FItemInfo.FileName) + if FItemInfo.IsUTF8 then + FFileName := FItemInfo.FileName else if FItemInfo.ExtraField.Get(Ab_InfoZipUnicodePathSubfieldID, Pointer(InfoZipField), FieldSize) and (FieldSize > SizeOf(TInfoZipUnicodePathRec)) and (InfoZipField.Version = 1) and @@ -1442,7 +1476,7 @@ (InfoZipField.NameCRC32 = AbCRC32Of(FItemInfo.FileName)) then begin SetString(UTF8Name, InfoZipField.UnicodeName, FieldSize - SizeOf(TInfoZipUnicodePathRec) + 1); - FFileName := UTF8ToString(UTF8Name); + FFileName := UTF8Name; end else if FItemInfo.ExtraField.Get(Ab_XceedUnicodePathSubfieldID, Pointer(XceedField), FieldSize) and (FieldSize > SizeOf(TXceedUnicodePathRec)) and @@ -1449,16 +1483,28 @@ (XceedField.Signature = Ab_XceedUnicodePathSignature) and (XceedField.Length * SizeOf(WideChar) = FieldSize - SizeOf(TXceedUnicodePathRec) + SizeOf(WideChar)) then begin SetString(UnicodeName, XceedField.UnicodeName, XceedField.Length); - FFileName := string(UnicodeName); + FFileName := Utf16ToUtf8(UnicodeName); end - {$IFDEF MSWINDOWS} - else if (GetACP <> GetOEMCP) and ((HostOS = hosDOS) or AbIsOEM(FItemInfo.FileName)) then begin - SetLength(FFileName, Length(FItemInfo.FileName)); - OemToCharBuff(PAnsiChar(FItemInfo.FileName), PChar(FFileName), Length(FFileName)); - end - {$ENDIF} else - FFileName := string(FItemInfo.FileName); + begin + SystemCode := HostOS; + {$IF DEFINED(MSWINDOWS)} + if (GetACP <> GetOEMCP) and (SystemCode = hosDOS) then + FFileName := CeOemToUtf8(FItemInfo.FileName) + else if (GetACP <> GetOEMCP) and CeTryDecode(FItemInfo.FileName, CP_OEMCP, UnicodeName) then + FFileName := Utf16ToUtf8(UnicodeName) + else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then + FFileName := CeAnsiToUtf8(FItemInfo.FileName) + else + {$ELSEIF DEFINED(UNIX)} + if (SystemCode = hosDOS) then + FFileName := CeOemToUtf8(FItemInfo.FileName) + else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then + FFileName := CeAnsiToUtf8(FItemInfo.FileName) + else + {$ENDIF} + FFileName := FItemInfo.FileName; + end; { read ZIP64 extended header } FUncompressedSize := FItemInfo.UncompressedSize; @@ -1596,24 +1642,20 @@ {$IFDEF MSWINDOWS} FItemInfo.IsUTF8 := False; HostOS := hosDOS; - if AbTryEncode(Value, CP_OEMCP, False, AnsiName) then + if CeTryEncode(UTF8Decode(Value), CP_OEMCP, False, AnsiName) then {no-op} - else if (GetACP <> GetOEMCP) and AbTryEncode(Value, CP_ACP, False, AnsiName) then + else if (GetACP <> GetOEMCP) and CeTryEncode(UTF8Decode(Value), CP_ACP, False, AnsiName) then HostOS := hosWinNT - else if AbTryEncode(Value, CP_OEMCP, True, AnsiName) then - {no-op} - else if (GetACP <> GetOEMCP) and AbTryEncode(Value, CP_ACP, True, AnsiName) then - HostOS := hosWinNT else FItemInfo.IsUTF8 := True; if FItemInfo.IsUTF8 then - FItemInfo.FileName := Utf8Encode(Value) + FItemInfo.FileName := Value else FItemInfo.FileName := AnsiName; {$ENDIF} {$IFDEF UNIX} - FItemInfo.FileName := AnsiString(Value); - FItemInfo.IsUTF8 := AbSysCharSetIsUTF8; + FItemInfo.FileName := Value; + FItemInfo.IsUTF8 := SystemEncodingUtf8; {$ENDIF} UseExtraField := False; @@ -1626,7 +1668,7 @@ end; if UseExtraField then begin - UTF8Name := AnsiToUTF8(Value); + UTF8Name := Value; FieldSize := SizeOf(TInfoZipUnicodePathRec) + Length(UTF8Name) - 1; GetMem(InfoZipField, FieldSize); try @@ -1762,11 +1804,11 @@ inherited Destroy; end; { -------------------------------------------------------------------------- } -function TAbZipArchive.CreateItem( const FileName : string ): TAbArchiveItem; +function TAbZipArchive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; var - FileSpec : string; + FullSourceFileName, FullArchiveFileName: string; begin - FileSpec := FileName; Result := TAbZipItem.Create; with TAbZipItem( Result ) do begin CompressionMethod := cmDeflated; @@ -1773,9 +1815,17 @@ GeneralPurposeBitFlag := 0; CompressedSize := 0; CRC32 := 0; - DiskFileName := ExpandFileName(FileSpec); - FileName := FixName(FileSpec); RelativeOffset := 0; + + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + if mbDirectoryExists(FullSourceFileName) then begin + FullSourceFileName := IncludeTrailingPathDelimiter(FullSourceFileName); + end; + + Result.FileName := FullArchiveFileName; + Result.DiskFileName := FullSourceFileName; end; end; { -------------------------------------------------------------------------- } @@ -1930,8 +1980,8 @@ AbStripDots( lValue ); for i := 1 to Length( lValue ) do - if lValue[i] = '\' then - lValue[i] := '/'; + if lValue[i] = AbDosPathDelim then + lValue[i] := AbUnixPathDelim; Result := lValue; end; { -------------------------------------------------------------------------- } @@ -1983,7 +2033,7 @@ FStatus := asInvalid; //TODO: Status updates are extremely inconsistent raise EAbUserAbort.Create; end; - FStream := TFileStream.Create( ArchiveName, Mode ); + FStream := TFileStreamEx.Create( ArchiveName, Mode ); TailPosition := FindCentralDirectoryTail( FStream ); end; end; @@ -2302,7 +2352,7 @@ if FOwnsStream then begin {need new stream to write} FreeAndNil(FStream); - FStream := TFileStream.Create(FArchiveName, + FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite); end; FStream.Size := 0; doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abziptyp.pas0000644000175000001440000025271113107124127022725 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_InfoZipUnicodePathSubfieldID : Word = $7075; Ab_XceedUnicodePathSubfieldID : Word = $554E; Ab_XceedUnicodePathSignature : LongWord= $5843554E; 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, 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; 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; 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; 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; 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, DCClassesUtf8, DCConvertEncoding; function VerifyZip(Strm : TStream) : TAbArchiveType; { determine if stream appears to be in PkZip format } var 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 { 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; 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} DateTime := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); Result := AbLocalDateTimeToUnixTime(DateTime); {$ELSE} LongRec(Result).Hi := LastModFileDate; LongRec(Result).Lo := LastModFileTime; {$ENDIF} 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 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 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 DEFINED(MSWINDOWS)} if (GetACP <> GetOEMCP) and (SystemCode = hosDOS) then FFileName := CeOemToUtf8(FItemInfo.FileName) else if (GetACP <> GetOEMCP) and CeTryDecode(FItemInfo.FileName, CP_OEMCP, UnicodeName) then FFileName := Utf16ToUtf8(UnicodeName) else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then FFileName := CeAnsiToUtf8(FItemInfo.FileName) else {$ELSEIF DEFINED(UNIX)} if (SystemCode = hosDOS) then FFileName := CeOemToUtf8(FItemInfo.FileName) else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then FFileName := CeAnsiToUtf8(FItemInfo.FileName) else {$ENDIF} FFileName := 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; 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); { 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; 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 ); 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; {$ENDIF} UTF8Name : AnsiString; FieldSize : Word; I : Integer; InfoZipField : PInfoZipUnicodePathRec; UseExtraField: Boolean; begin inherited SetFileName(Value); {$IFDEF MSWINDOWS} FItemInfo.IsUTF8 := False; HostOS := hosDOS; if CeTryEncode(UTF8Decode(Value), CP_OEMCP, False, AnsiName) then {no-op} else if (GetACP <> GetOEMCP) and CeTryEncode(UTF8Decode(Value), 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} 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.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; end; { -------------------------------------------------------------------------- } destructor TAbZipArchive.Destroy; begin FInfo.Free; FInfo := nil; inherited Destroy; 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 Abort : Boolean; MemStream : TMemoryStream; HasDataDescriptor : Boolean; i : LongWord; LFH : TAbZipLocalFileHeader; NewStream : TStream; WorkingStream : TAbVirtualMemoryStream; CurrItem : TAbZipItem; Progress : Byte; 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 NewStream := TAbVirtualMemoryStream.Create; TAbVirtualMemoryStream(NewStream).SwapFileDirectory := FTempDir; 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 WorkingStream := TAbVirtualMemoryStream.Create; try {WorkingStream} WorkingStream.SwapFileDirectory := FTempDir; {compress the file} if (CurrItem.Action = aaStreamAdd) then DoInsertFromStreamHelper(i, WorkingStream) else DoInsertHelper(i, WorkingStream); {write local header} if NewStream is TAbSpanWriteStream then begin 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; end else begin CurrItem.DiskNumberStart := 0; CurrItem.RelativeOffset := NewStream.Position; CurrItem.SaveLFHToStream(NewStream); end; {copy compressed data} NewStream.CopyFrom(WorkingStream, 0); if CurrItem.IsEncrypted then CurrItem.SaveDDToStream(NewStream); finally WorkingStream.Free; end; 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} FreeAndNil(FStream); FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite); end; FStream.Size := 0; FStream.Position := 0; FStream.CopyFrom(NewStream, 0) 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} 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-0.9.8/plugins/wcx/zip/src/fparchive/abzipprc.pas0000644000175000001440000002370712751400322022674 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); procedure DeflateStream( UncompressedStream, CompressedStream : TStream ); {-Deflates everything in UncompressedStream to CompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills! } implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} SysUtils, AbArcTyp, AbExcept, AbUtils, AbDfCryS, AbVMStrm, AbDfBase, AbDfEnc, AbSpanSt, AbXzPrc, 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 : LongInt; Percent : LongInt; LastPercent : LongInt; InSize : Int64; DataRead : Int64; Total : Int64; Abort : Boolean; Buffer : array [0..8191] of byte; begin { setup } Item.CompressionMethod := cmStored; Abort := False; CRC32 := -1; 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} AbUpdateCRCBuffer(CRC32, Buffer, DataRead); { write data (encrypting if needed) } OutStream.WriteBuffer(Buffer, DataRead); { get next bufferful } DataRead := InStream.Read(Buffer, SizeOf(Buffer)); end; { finish CRC calculation } Item.CRC32 := not 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 : LongInt; TempOut : TAbVirtualMemoryStream; DestStrm : TStream; begin ZipArchive := TAbZipArchive(Sender); { 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 DoCompressXz(ZipArchive, Item, DestStrm, InStream) 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.Size; 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; { -------------------------------------------------------------------------- } procedure DeflateStream( UncompressedStream, CompressedStream : TStream ); {-Deflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole Uncompressedstream - no Progress events - no Frills! } begin Deflate(UncompressedStream, CompressedStream, nil); end; { -------------------------------------------------------------------------- } end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abzipper.pas0000644000175000001440000005141412423755012022677 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, 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; 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; 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-0.9.8/plugins/wcx/zip/src/fparchive/abzipkit.pas0000644000175000001440000002304712014201074022667 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-0.9.8/plugins/wcx/zip/src/fparchive/abzbrows.pas0000644000175000001440000002660712014201074022710 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-0.9.8/plugins/wcx/zip/src/fparchive/abxztyp.pas0000644000175000001440000003463512613112750022567 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, AbXz, AbExcept, AbVMStrm, AbBitBkt, 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 : Int64; TarStream: TStream; DecompStream: TLzmaDecompression; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soFromBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atXz; { Check for embedded TAR } Strm.Seek(0, soFromBeginning); TarStream := TMemoryStream.Create; try DecompStream := TLzmaDecompression.Create(Strm, TarStream); try DecompStream.Code(AB_TAR_RECORDSIZE * 4); TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atXzippedTar; finally DecompStream.Free; end; finally TarStream.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; InputFileStream: TStream; LzmaCompression: TLzmaCompression; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; UpdateArchive := (FXzStream.Size > 0) and (FXzStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FXzStream); TempFileName := GetTempName(FArchiveName + ExtensionSeparator); { Create new archive with temporary name } FXzStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; LzmaCompression := TLzmaCompression.Create(FTarStream, FXzStream); try LzmaCompression.Code(); finally LzmaCompression.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; if CurItem.Action = aaStreamAdd then begin LzmaCompression := TLzmaCompression.Create(InStream, FXzStream); try LzmaCompression.Code(); { Copy/compress entire Instream to FXzStream } finally LzmaCompression.Free; end; end else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try LzmaCompression := TLzmaCompression.Create(InputFileStream, FXzStream); try LzmaCompression.Code(); { Copy/compress entire Instream to FXzStream } finally LzmaCompression.Free; end; 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 TAbXzArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToXz; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.DecompressToStream(aStream: TStream); var LzmaDecompression: TLzmaDecompression; begin LzmaDecompression := TLzmaDecompression.Create(FXzStream, aStream); try LzmaDecompression.Code finally LzmaDecompression.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-0.9.8/plugins/wcx/zip/src/fparchive/abxzprc.pas0000644000175000001440000000650012751400322022523 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Compress item to .zipx archive * * Copyright (C) 2015-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. * * ***** END LICENSE BLOCK ***** *) {**********************************************************} {* ABBREVIA: AbXzPrc.pas *} {**********************************************************} {* ABBREVIA: TZipHashStream class *} {**********************************************************} unit AbXzPrc; {$mode delphi} interface uses Classes, SysUtils, BufStream, AbZipTyp, AbArcTyp; type { TZipHashStream } TZipHashStream = class(TReadBufStream) private FSize: Int64; FHash: LongInt; 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: LongInt read FHash; end; procedure DoCompressXz(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); implementation uses AbXz, AbDfBase, AbExcept; procedure DoCompressXz(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var ASource: TZipHashStream; LzmaCompression: TLzmaCompression; begin Item.CompressionMethod := cmXz; ASource := TZipHashStream.Create(InStream); try ASource.OnProgress := Archive.OnProgress; LzmaCompression := TLzmaCompression.Create(ASource, OutStream); try LzmaCompression.Code(Item.UncompressedSize); finally LzmaCompression.Free; end; Item.CRC32 := not ASource.Hash; finally ASource.Free; end; end; { TZipHashStream } constructor TZipHashStream.Create(ASource: TStream); begin FHash := -1; 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); AbUpdateCRCBuffer(FHash, ABuffer, Result); if Assigned(FOnProgress) then begin FOnProgress(GetPosition * 100 div FSize, Abort); if Abort then raise EAbUserAbort.Create; end; end; end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abxz.pas0000644000175000001440000002210613407531005022020 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Simple interface to lzma library * * Copyright (C) 2014-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. * * ***** END LICENSE BLOCK ***** *) {**********************************************************} {* ABBREVIA: AbXz.pas *} {**********************************************************} {* ABBREVIA: TLzmaCompression, TLzmaDecompression 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 { TLzmaBase } TLzmaBase = class private FLzmaRec: TLzmaStreamRec; FSource, FTarget: TStream; FInput: array[Word] of Byte; FOutput: array[Word] of Byte; protected function Check(Return: cint): cint; virtual; abstract; public constructor Create(ASource, ATarget: TStream); virtual; destructor Destroy; override; function Code(Count: cuint64 = High(cuint64)): Boolean; end; { TLzmaCompression } TLzmaCompression = class(TLzmaBase) protected function Check(Return: cint): cint; override; public constructor Create(ASource, ATarget: TStream); override; end; { TLzmaDecompression } TLzmaDecompression = class(TLzmaBase) protected function Check(Return: cint): cint; override; public constructor Create(ASource, ATarget: TStream); override; end; ELzmaError = class(Exception); ELzmaCompressionError = class(ELzmaError); ELzmaDecompressionError = class(ELzmaError); implementation uses DynLibs; 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; { TLzmaBase } function TLzmaBase.Code(Count: cuint64): Boolean; var State: cint; Size: csize_t; Action: cint = LZMA_RUN; begin FLzmaRec.next_out := @FOutput; FLzmaRec.avail_out := SizeOf(FOutput); while True do begin if (FLzmaRec.avail_in = 0) then begin FLzmaRec.next_in := FInput; FLzmaRec.avail_in := FSource.Read(FInput, SizeOf(FInput)); if FLzmaRec.avail_in = 0 then Action:= LZMA_FINISH; end; State:= Check(lzma_code(FLzmaRec, Action)); if (FLzmaRec.total_out > Count) then begin State:= LZMA_STREAM_END; FLzmaRec.avail_out:= SizeOf(FOutput) - (Count - FTarget.Position); end; if (FLzmaRec.avail_out = 0) or (State = LZMA_STREAM_END) then begin Size:= SizeOf(FOutput) - FLzmaRec.avail_out; if FTarget.Write(FOutput, Size) <> Size then begin RaiseLastOSError; end; FLzmaRec.next_out := FOutput; FLzmaRec.avail_out := SizeOf(FOutput); end; if State = LZMA_STREAM_END then Exit(True); end; end; constructor TLzmaBase.Create(ASource, ATarget: TStream); begin LzmaLoadLibrary; FSource:= ASource; FTarget:= ATarget; FillChar(FLzmaRec, SizeOf(TLzmaStreamRec), 0); end; destructor TLzmaBase.Destroy; begin if (@lzma_end <> nil) then lzma_end(FLzmaRec); inherited Destroy; end; { TLzmaCompression } function TLzmaCompression.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 TLzmaCompression.Create(ASource, ATarget: TStream); begin inherited Create(ASource, ATarget); Check(lzma_easy_encoder(FLzmaRec, 6, LZMA_CHECK_CRC64)); end; { TLzmaDecompression } function TLzmaDecompression.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 TLzmaDecompression.Create(ASource, ATarget: TStream); const flags = LZMA_TELL_UNSUPPORTED_CHECK or LZMA_CONCATENATED; var memory_limit: cuint64 = High(cuint64); begin inherited Create(ASource, ATarget); Check(lzma_stream_decoder(FLzmaRec, memory_limit, flags)); end; end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abwinzipaes.pas0000644000175000001440000001351113177141321023372 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-0.9.8/plugins/wcx/zip/src/fparchive/abvmstrm.pas0000644000175000001440000004162313517262030022715 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-0.9.8/plugins/wcx/zip/src/fparchive/abutils.pas0000644000175000001440000012144113175036165022532 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, {$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); {$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 : LongInt) : 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 : LongInt) : TDateTime; function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt; 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, 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(UTF8Decode(Source)), PWideChar(UTF8Decode(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(UTF8Decode(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 (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 : LongInt) : Byte; { Returns the ratio of V1 to V2 * 100 } begin if V2 > 16384000 then begin {Possible LongInt overflow} V1 := (V1 + $80) shr 8; {scale down (div 256)} V2 := (V2 + $80) shr 8; {scale down (div 256)} end; 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; var Temp : WideString; Vol : array[0..11] of WideChar; Root : array[0..3] of WideChar; begin Temp := UTF8Decode(VolName); StrPCopyW(Root, '%:' + AbPathDelim); Root[0] := Drive; if Length(Temp) > 11 then SetLength(Temp, 11); StrPCopyW(Vol, Temp); {$IFDEF MSWINDOWS} 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 : LongInt) : 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 := FileDateToDateTime(UnixTime); {$ENDIF} end; { -------------------------------------------------------------------------- } function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt; { 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 := DateTimeToFileDate(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 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_FIFO, AB_FMODE_CHARSPECFILE, AB_FMODE_BLOCKSPECFILE, AB_FMODE_FILELINK, 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(UTF8Decode(aFileName)), GetFileExInfoStandard, @FindData); if Result then begin if Windows.FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and FileTimeToDosDateTime(LocalFileTime, FileDate.Hi, FileDate.Lo) then aAttr.Time := FileDateToDateTime(Integer(FileDate)); 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-0.9.8/plugins/wcx/zip/src/fparchive/abunzprc.pas0000644000175000001440000011336013210040316022673 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 {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, {$IFDEF UnzipBzip2Support} AbBzip2, {$ENDIF} {$IFDEF UnzipLzmaSupport} ULZMADecoder, {$ENDIF} {$IFDEF UnzipPPMdSupport} AbPPMd, {$ENDIF} {$IFDEF UnzipWavPackSupport} AbWavPack, {$ENDIF} {$IFDEF UnzipXzSupport} AbXz, {$ENDIF} AbBitBkt, AbConst, AbDfBase, AbDfCryS, AbDfDec, AbExcept, AbSpanSt, AbSWStm, AbUnzOutStm, AbUtils, AbWinZipAes, DCClassesUtf8; { -------------------------------------------------------------------------- } 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 if Item.CompressionMethod = cmEnhancedDeflated then Hlpr.Options := Hlpr.Options or dfc_UseDeflate64; Hlpr.StreamSize := Item.CompressedSize; Inflate(InStream, OutStream, Hlpr); finally Hlpr.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 LzmaDecompression: TLzmaDecompression; begin LzmaDecompression := TLzmaDecompression.Create(InStream, OutStream); try LzmaDecompression.Code(Item.UncompressedSize); finally LzmaDecompression.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, cmEnhancedDeflated: begin { inflate aItem } DoInflate(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} 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 InStream, OutStream : TStream; ZipArchive : TAbZipArchive; begin ZipArchive := TAbZipArchive(Sender); if Item.IsDirectory then AbCreateDirectory(UseName) else begin InStream := ExtractPrep(ZipArchive, Item); try 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; finally InStream.Free end; end; AbSetFileTime(UseName, Item.LastModTimeAsDateTime); AbSetFileAttr(UseName, Item.NativeFileAttributes); 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-0.9.8/plugins/wcx/zip/src/fparchive/abunzoutstm.pas0000644000175000001440000001364512014201074023450 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 : LongInt; 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; { 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; FCRC32 := -1; 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); AbUpdateCRC( FCRC32, Buffer, Count ); 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 := not FCRC32; end; end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abtartyp.pas0000644000175000001440000026555213603447456022736 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 FTarHeader : TAbTarHeaderRec; { Speed-up Buffer only } FCurrItemSize : Int64; { Current Item size } FCurrItemPreHdrs: Integer; { Number of Meta-data Headers before the Item } public 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; Size: Int64); procedure WriteArchiveTail; override; function GetItemCount : Integer; override; end; TAbTarArchive = class(TAbArchive) private FArchReadOnly : Boolean; FArchFormat: TAbTarHeaderFormat; 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; 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, DCOSUtils, DCClassesUtf8, DCConvertEncoding, DCStrUtils; { ****************** Helper functions Not from Classes Above ***************** } function OctalToInt(const Oct : PAnsiChar; aLen : integer): Int64; var i : integer; begin Result := 0; 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; 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), soFromCurrent); { 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), soFromCurrent); 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, soFromCurrent); { 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), soFromCurrent); Result := FoundItem; end; { Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindFirstItem: Boolean; begin FStream.Seek(0, soFromBeginning); 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)), soFromCurrent); 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; Size: Int64); var PadBuff : PAnsiChar; PadSize : Integer; begin if Size = 0 then Exit; { transfer actual item data } FStream.CopyFrom(AStream, Size); { Pad to Next block } PadSize := RoundToTarBlock(Size) - Size; 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 := V7_FORMAT; // Default for new archives 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; OutStream : TStream; 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 } if (CurItem.ItemType = UNSUPPORTED_ITEM) and ((Length(CurItem.FileName) >= AB_TAR_NAMESIZE) or (Length(CurItem.LinkName) >= AB_TAR_NAMESIZE)) then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { We will allow extractions if the file name/Link name are strickly less than 100 chars } { 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 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 if not CreateSymLink(CurItem.LinkName, UseName) then raise EOSError.Create(mbSysErrorMessage(GetLastOSError)); end; end; end; AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); AbSetFileAttr(UseName, CurItem.NativeFileAttributes); 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 } if (CurItem.ItemType = UNSUPPORTED_ITEM) and ((Length(CurItem.FileName) >= AB_TAR_NAMESIZE) or (Length(CurItem.LinkName) >= AB_TAR_NAMESIZE)) then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { We will allow extractions if the file name is strictly less than 100 chars } 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; i : Integer; Progress : Byte; begin { create helper } TarHelp := TAbTarStreamHelper.Create(FStream); try {TarHelp} {build Items list from tar header records} { reset Tar } 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; FItemList.Add(Item); 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 : TAbVirtualMemoryStream; TempStream : TStream; CurItem : TAbTarItem; AttrEx : TAbAttrExRec; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Archive is read only } {init new archive stream} NewStream := TAbVirtualMemoryStream.Create; OutTarHelp := TAbTarStreamHelper.Create(NewStream); try {NewStream/OutTarHelp} { create helper } NewStream.SwapFileDirectory := AbGetTempDirectory; {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.Size <> 0 then OutTarHelp.WriteArchiveTail; { Terminate the TAR } { Size of NewStream is still 0, and max of the stream will also be 0 } {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 { need new stream to write } FreeAndNil(FStream); FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FStream.CopyFrom(NewStream, NewStream.Size); 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; 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-0.9.8/plugins/wcx/zip/src/fparchive/abswstm.pas0000644000175000001440000003346112014201074022533 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-0.9.8/plugins/wcx/zip/src/fparchive/abspanst.pas0000644000175000001440000003072312014201074022664 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-0.9.8/plugins/wcx/zip/src/fparchive/abselfex.pas0000644000175000001440000000752112014201074022642 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-0.9.8/plugins/wcx/zip/src/fparchive/abresstring.pas0000644000175000001440000002330112014201074023366 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'; 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-0.9.8/plugins/wcx/zip/src/fparchive/ablzmatyp.pas0000644000175000001440000003530412613112750023063 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, soFromBeginning); 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, soFromBeginning); 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 + ExtensionSeparator); { 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, soFromBeginning); 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-0.9.8/plugins/wcx/zip/src/fparchive/abgztyp.pas0000644000175000001440000010775312434110142022542 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; public constructor Create(AStream : TStream); 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 {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, AbBitBkt, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, 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, soFromBeginning); {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; 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, soFromCurrent); 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, soFromBeginning); FItem.LoadGzHeaderFromStream(FStream); end; procedure TAbGzipStreamHelper.ExtractItemData(AStream: TStream); var Helper : TAbDeflateHelper; begin Helper := TAbDeflateHelper.Create; try SeekToItemData; if (AStream is TAbBitBucketStream) then Helper.Options := Helper.Options or dfc_TestOnly; FItem.CRC32 := Inflate(FStream, AStream, Helper); FItem.UncompressedSize := AStream.Size{Helper.NormalSize}; finally Helper.Free; end; end; function TAbGzipStreamHelper.FindFirstItem: Boolean; var GZH : TAbGzHeader; DataRead : Integer; begin Result := False; FStream.Seek(0, soFromBeginning); DataRead := FStream.Read(GZH, SizeOf(TAbGzHeader)); if (DataRead = SizeOf(TAbGzHeader)) and VerifyHeader(GZH) then begin FItem.FGZHeader := GZH; Result := True; end; FStream.Seek(0, soFromBeginning); 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 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 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; 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 } GZHelp := TAbGzipStreamHelper.Create(FGzStream); try { read GZip Header } GzHelp.ReadHeader; { 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} finally GzHelp.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), soFromEnd); 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 } GzHelp.SeekToItemData; GzHelp.ExtractItemData(FTarStream); 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; Abort : Boolean; i : Integer; NewStream : TAbVirtualMemoryStream; UncompressedStream : TStream; CurItem : TAbGzipItem; begin {prepare for the try..finally} OutGzHelp := nil; NewStream := nil; try InGzHelp := TAbGzipStreamHelper.Create(FGzStream); try {init new archive stream} NewStream := TAbVirtualMemoryStream.Create; OutGzHelp := TAbGzipStreamHelper.Create(NewStream); { create helper } NewStream.SwapFileDirectory := ExtractFilePath(AbGetTempFile(FTempDir, False)); { save the Tar data } if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; if FTarStream.Size > 0 then begin 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; OutGzHelp.WriteArchiveItem(FTarStream); CurItem.CRC32 := OutGzHelp.CRC; CurItem.UncompressedSize := OutGzHelp.FileSize; OutGzHelp.WriteArchiveTail; end; 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); OutGzHelp.WriteArchiveItem(UncompressedStream); OutGzHelp.WriteArchiveTail; 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 } FreeAndNil(FStream); FGZStream := nil; FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FGZStream := FStream; FStream.CopyFrom(NewStream, NewStream.Size); 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; 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); GZHelp.ExtractItemData(BitBucket); GZHelp.ReadTail; { 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; 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-0.9.8/plugins/wcx/zip/src/fparchive/abexcept.pas0000644000175000001440000004232712014201074022647 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-0.9.8/plugins/wcx/zip/src/fparchive/abdfxlat.pas0000644000175000001440000001303212014201074022630 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: AbDfXlat.pas *} {*********************************************************} {* Deflate length/dist to symbol translator *} {*********************************************************} unit AbDfXlat; {$I AbDefine.inc} interface uses SysUtils; type TAbDfTranslator = class private FBuffer : PAnsiChar; FLenSymbols : PByteArray; {for lengths 3..258} FLongDistSymbols : PByteArray; {for distances 32769..65536 (deflate64)} FMediumDistSymbols : PByteArray; {for distances 257..32768} FShortDistSymbols : PByteArray; {for distances 1..256} protected procedure trBuild; public constructor Create; destructor Destroy; override; function TranslateLength(aLen : integer): integer; function TranslateDistance(aDist : integer) : integer; property LenSymbols : PByteArray read FLenSymbols; property LongDistSymbols : PByteArray read FLongDistSymbols; property MediumDistSymbols : PByteArray read FMediumDistSymbols; property ShortDistSymbols : PByteArray read FShortDistSymbols; end; var AbSymbolTranslator : TAbDfTranslator; implementation uses AbDfBase; {====================================================================} constructor TAbDfTranslator.Create; begin {create the ancestor} inherited Create; {allocate the translation arrays (the buffer *must* be zeroed)} FBuffer := AllocMem(256 + 2 + 256 + 256); FLenSymbols := PByteArray(FBuffer); FLongDistSymbols := PByteArray(FBuffer + 256); FMediumDistSymbols := PByteArray(FBuffer + 256 + 2); FShortDistSymbols := PByteArray(FBuffer + 256 + 2 + 256); {build the translation arrays} trBuild; end; {--------} destructor TAbDfTranslator.Destroy; begin if (FBuffer <> nil) then FreeMem(FBuffer); inherited Destroy; end; {--------} function TAbDfTranslator.TranslateDistance(aDist : integer) : integer; begin {save against dumb programming mistakes} Assert((1 <= aDist) and (aDist <= 65536), 'TAbDfTranslator.Translate: distance should be 1..65536'); {translate the distance} if (aDist <= 256) then Result := FShortDistSymbols[aDist - 1] else if (aDist <= 32768) then Result := FMediumDistSymbols[((aDist - 1) div 128) - 2] else Result := FLongDistSymbols[((aDist - 1) div 16384) - 2]; end; {--------} function TAbDfTranslator.TranslateLength(aLen : integer): integer; begin {save against dumb programming mistakes} Assert((3 <= aLen) and (aLen <= 65536), 'TAbDfTranslator.Translate: length should be 3..65536'); {translate the length} dec(aLen, 3); if (0 <= aLen) and (aLen <= 255) then Result := FLenSymbols[aLen] + 257 else Result := 285; end; {--------} procedure TAbDfTranslator.trBuild; var i : integer; Len : integer; Dist : integer; Value : integer; begin {initialize the length translation array; elements will contain (Symbol - 257) for a given (length - 3)} for i := low(dfc_LengthBase) to pred(high(dfc_LengthBase)) do begin Len := dfc_LengthBase[i] - 3; FLenSymbols[Len] := i; end; FLenSymbols[255] := 285 - 257; Value := -1; for i := 0 to 255 do begin if (Value < FLenSymbols[i]) then Value := FLenSymbols[i] else FLenSymbols[i] := Value; end; {initialize the short distance translation array: it will contain the Symbol for a given (distance - 1) where distance <= 256} for i := 0 to 15 do begin Dist := dfc_DistanceBase[i] - 1; FShortDistSymbols[Dist] := i; end; Value := -1; for i := 0 to 255 do begin if (Value < FShortDistSymbols[i]) then Value := FShortDistSymbols[i] else FShortDistSymbols[i] := Value; end; {initialize the medium distance translation array: it will contain the Symbol for a given (((distance - 1) div 128) - 2) where distance is in the range 256..32768} for i := 16 to 29 do begin Dist := ((dfc_DistanceBase[i] - 1) div 128) - 2; FMediumDistSymbols[Dist] := i; end; Value := -1; for i := 0 to 255 do begin if (Value < FMediumDistSymbols[i]) then Value := FMediumDistSymbols[i] else FMediumDistSymbols[i] := Value; end; {initialize the long distance translation array: it will contain the Symbol for a given ((distance - 1) div 16384) - 2) for distances over 32768 in deflate64} FLongDistSymbols[0] := 30; FLongDistSymbols[1] := 31; end; {====================================================================} initialization AbSymbolTranslator := TAbDfTranslator.Create; finalization AbSymbolTranslator.Free; end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfstrm.pas0000644000175000001440000013232012014201074022647 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: AbDfStrm.pas *} {*********************************************************} {* Deflate streams unit for various streams *} {*********************************************************} unit AbDfStrm; {$I AbDefine.inc} interface uses Classes, AbDfBase, AbDfInW, AbDfHufD; type TAb32bit = longint; { a 32-bit type} PAbDfLitBuckets = ^TAbDfLitBuckets; TAbDfLitBuckets = array [0..285] of integer; PAbDfDistBuckets = ^TAbDfDistBuckets; TAbDfDistBuckets = array [0..31] of integer; PAbDfCodeLenBuckets = ^TAbDfCodeLenBuckets; TAbDfCodeLenBuckets = array [0..18] of integer; const AbExtractMask : array [1..31] of TAb32bit = ($00000001, $00000003, $00000007, $0000000F, $0000001F, $0000003F, $0000007F, $000000FF, $000001FF, $000003FF, $000007FF, $00000FFF, $00001FFF, $00003FFF, $00007FFF, $0000FFFF, $0001FFFF, $0003FFFF, $0007FFFF, $000FFFFF, $001FFFFF, $003FFFFF, $007FFFFF, $00FFFFFF, $01FFFFFF, $03FFFFFF, $07FFFFFF, $0FFFFFFF, $1FFFFFFF, $3FFFFFFF, $7FFFFFFF); type TAbDfInBitStream = class { input bit stream} private FBitBuffer : TAb32bit; FBitsLeft : integer; FBufEnd : PAnsiChar; FBuffer : PAnsiChar; FBufPos : PAnsiChar; FByteCount : longint; FFakeCount : integer; FOnProgress: TAbProgressStep; {$IFOPT C+} FPeekCount : integer; {$ENDIF} FStream : TStream; FStreamSize: longint; protected function ibsFillBuffer : boolean; public constructor Create(aStream : TStream; aOnProgress : TAbProgressStep; aStreamSize : longint); destructor Destroy; override; procedure AlignToByte; procedure DiscardBits(aCount : integer); procedure DiscardMoreBits(aCount : integer); function PeekBits(aCount : integer) : integer; function PeekMoreBits(aCount : integer) : integer; function ReadBit : boolean; function ReadBits(aCount : integer) : integer; procedure ReadBuffer(var aBuffer; aCount : integer); property BitBuffer : TAb32bit read FBitBuffer write FBitBuffer; property BitsLeft : integer read FBitsLeft write FBitsLeft; end; type TAbDfOutBitStream = class { output bit stream} private FBitBuffer : TAb32bit; FBitsUsed : integer; FBufEnd : PAnsiChar; FBuffer : PAnsiChar; FBufPos : PAnsiChar; FStream : TStream; protected procedure obsEmptyBuffer; public constructor Create(aStream : TStream); destructor Destroy; override; procedure AlignToByte; function Position : longint; procedure WriteBit(aBit : boolean); procedure WriteBits(aBits : integer; aCount : integer); procedure WriteBuffer(var aBuffer; aCount : integer); procedure WriteMoreBits(aBits : integer; aCount : integer); property BitBuffer : TAb32bit read FBitBuffer write FBitBuffer; property BitsUsed : integer read FBitsUsed write FBitsUsed; end; type TAbDfLZStream = class { LZ77 token stream} private FCurPos : PAnsiChar; FDistBuckets : PAbDfDistBuckets; FDistCount : integer; FLitBuckets : PAbDfLitBuckets; FLitCount : integer; FLog : TAbLogger; FSlideWin : TAbDfInputWindow; FStartOfs : Int64; FStoredSize : LongWord; FStream : PAnsiChar; FStrmEnd : PAnsiChar; {$IFDEF UseLogging} FSWPos : longint; {$ENDIF} FUseDeflate64: boolean; protected function lzsGetApproxSize : LongWord; function lzsGetStaticSize : integer; function lzsGetStoredSize : integer; function lzsIsFull : boolean; public constructor Create(aSlideWin : TAbDfInputWindow; aUseDeflate64 : boolean; aLog : TAbLogger); destructor Destroy; override; function AddLenDist(aLen : integer; aDist : integer) : boolean; { returns true if the stream is "full"} function AddLiteral(aCh : AnsiChar) : boolean; { returns true if the stream is "full"} procedure Clear; procedure Encode(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree; aDistTree : TAbDfDecodeHuffmanTree; aUseDeflate64 : boolean); procedure Rewind; procedure ReadStoredBuffer(var aBuffer; aCount : integer); property LenDistCount : integer read FDistCount; property LiteralCount : integer read FLitCount; property DistBuckets : PAbDfDistBuckets read FDistBuckets; property LitBuckets : PAbDfLitBuckets read FLitBuckets; property StaticSize : integer read lzsGetStaticSize;{ in bits} property StoredSize : integer read lzsGetStoredSize;{ in bytes} end; type TAbDfCodeLenStream = class { codelength token stream} private FBuckets : PAbDfCodeLenBuckets; FPosition : PAnsiChar; FStream : PAnsiChar; {array [0..285+32*2] of byte;} FStrmEnd : PAnsiChar; protected public constructor Create(aLog : TAbLogger); destructor Destroy; override; procedure Build(const aCodeLens : array of integer; aCount : integer); procedure Encode(aBitStrm : TAbDfOutBitStream; aTree : TAbDfDecodeHuffmanTree); property Buckets : PAbDfCodeLenBuckets read FBuckets; end; implementation uses SysUtils, AbDfXlat; type PAb32bit = ^TAb32bit; const BitStreamBufferSize = 16*1024; {===TAbDfInBitStream=================================================} constructor TAbDfInBitStream.Create(aStream : TStream; aOnProgress : TAbProgressStep; aStreamSize : longint); begin {protect against dumb programming mistakes} Assert(aStream <> nil, 'TAbDfInBitStream.Create: Cannot create a bit stream wrapping a nil stream'); {create the ancestor} inherited Create; {save the stream instance, allocate the buffer} FStream := aStream; GetMem(FBuffer, BitStreamBufferSize); {save the on progress handler} if Assigned(aOnProgress) and (aStreamSize > 0) then begin FOnProgress := aOnProgress; //FStreamSize := aStreamSize; FStreamSize := aStream.Size - aStream.Position; end; end; {--------} destructor TAbDfInBitStream.Destroy; begin {if we did some work...} if (FBuffer <> nil) then begin {reposition the underlying stream to the point where we stopped; this position is equal to... the position of the underlying stream, PLUS the number of fake bytes we added, LESS the number of bytes in the buffer, PLUS the position in the buffer, PLUS the number of complete bytes in the bit buffer} FStream.Seek(FStream.Position + FFakeCount - (FBufEnd - FBuffer) + (FBufPos - FBuffer) - (FBitsLeft div 8), soFromBeginning); {free the buffer} FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfInBitStream.AlignToByte; begin {get rid of the odd bits by shifting them out of the bit cache} FBitBuffer := FBitBuffer shr (FBitsLeft mod 8); dec(FBitsLeft, FBitsLeft mod 8); end; {--------} procedure TAbDfInBitStream.DiscardBits(aCount : integer); var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..32} if (aCount <= 0) or (aCount > 32) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 32 inclusive [TAbDfInBitStream.DiscardBits]'); {$IFOPT C+} {verify that the count of bits to discard is less than or equal to the recent count from PeekBits--a programming error} Assert((aCount <= FPeekCount), 'TAbDfInBitStream.DiscardBits: discarding more bits than peeked'); {since we're discarding bits already peeked, reset the peek count} FPeekCount := 0; {$ENDIF} {if we have more than enough bits in our bit buffer, update the bitbuffer and the number of bits left} if (aCount <= FBitsLeft) then begin FBitBuffer := FBitBuffer shr aCount; dec(FBitsLeft, aCount); end {otherwise we shall have to read another integer out of the buffer to satisfy the request} else begin {check that there is data in the buffer, if not it's indicates a corrupted stream: PeekBits should have filled it} if (FBufPos = FBufEnd) then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.DiscardBits]'); {refill the bit buffer} BitsToGo := aCount - FBitsLeft; FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; end; {--------} procedure TAbDfInBitStream.DiscardMoreBits(aCount : integer); var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..32} if (aCount <= 0) or (aCount > 32) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 32 inclusive [TAbDfInBitStream.DiscardMoreBits]'); {$IFOPT C+} {verify that the count of bits to discard is less than or equal to the recent count from PeekBits--a programming error} Assert((aCount <= FPeekCount), 'TAbDfInBitStream.DiscardBits: discarding more bits than peeked'); {since we're discarding bits already peeked, reset the peek count} FPeekCount := 0; {$ENDIF} {check that there is data in the buffer, if not it's indicates a corrupted stream: PeekBits/PeekMoreBits should have filled it} if (FBufPos = FBufEnd) then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.DiscardBits]'); {refill the bit buffer} BitsToGo := aCount - FBitsLeft; FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; {--------} function TAbDfInBitStream.ibsFillBuffer : boolean; var BytesRead : longint; BytesToRead : longint; i : integer; Percent : integer; Buffer : PAnsiChar; BufferCount : integer; begin {check for dumb programming mistakes: this routine should only be called if there are less than 4 bytes unused in the buffer} Assert((FBufEnd - FBufPos) < sizeof(longint), 'TAbDfInBitStream.ibsFillBuffer: the buffer should be almost empty'); {if there are still 1, 2, or three bytes unused, move them to the front of the buffer} Buffer := FBuffer; while (FBufPos <> FBufEnd) do begin Buffer^ := FBufPos^; inc(FBufPos); inc(Buffer); end; {fill the buffer} BytesToRead := BitStreamBufferSize - (Buffer - FBuffer); BytesRead := FStream.Read(Buffer^, BytesToRead); {reset the internal pointers} FBufPos := FBuffer; FBufEnd := Buffer + BytesRead; BufferCount := FBufEnd - FBuffer; {if, as a result of the read, no data is in the buffer, return false; the caller will decide what to do about the problem} if (BufferCount = 0) then Result := false {otherwise there is data to be processed} else begin Result := true; {if we didn't read anything from the stream, we need to make sure that enough buffer is zeroed out so that reading longint values don't produce (dreadfully) bogus values} if (BytesRead = 0) and ((BufferCount mod 4) <> 0) then begin FFakeCount := 4 - (BufferCount mod 4); for i := 0 to pred(FFakeCount) do begin FBufEnd^ := #0; inc(FBufEnd); end; end; {fire the progress event} if Assigned(FOnProgress) then begin inc(FByteCount, BytesRead); Percent := Round((100.0 * FByteCount) / FStreamSize); FOnProgress(Percent); end; end; end; {--------} function TAbDfInBitStream.PeekBits(aCount : integer) : integer; var BitsToGo : integer; TempBuffer : integer; begin {check that aCount is in the correct range 1..32} Assert((0 <= aCount) and (aCount <= 32), 'TAbDfInBitStream.PeekBits: count of bits must be between 1 and 32 inclusive'); {if we have more than enough bits in our bit buffer, return as many as needed} if (aCount <= FBitsLeft) then Result := FBitBuffer and AbExtractMask[aCount] {otherwise we shall have to read another integer out of the buffer to satisfy the request; note that this will fill the stream buffer if required} else begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then TempBuffer := 0 else TempBuffer := PAb32bit(FBufPos)^ else TempBuffer := PAb32bit(FBufPos)^; Result := Result + ((TempBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); end; {$IFOPT C+} {save the number of bits peeked for an assertion check later} FPeekCount := aCount; {$ENDIF} end; {--------} function TAbDfInBitStream.PeekMoreBits(aCount : integer) : integer; var BitsToGo : integer; TempBuffer : integer; begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then TempBuffer := 0 else TempBuffer := PAb32bit(FBufPos)^ else TempBuffer := PAb32bit(FBufPos)^; Result := Result + ((TempBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); end; {--------} function TAbDfInBitStream.ReadBit : boolean; begin if (FBitsLeft = 0) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBit]'); FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitsLeft := 32; end; Result := Odd(FBitBuffer); FBitBuffer := FBitBuffer shr 1; dec(FBitsLeft); end; {--------} function TAbDfInBitStream.ReadBits(aCount : integer) : integer; var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..16} if (aCount <= 0) or (aCount > 16) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 16 inclusive [TAbDfInBitStream.ReadBits]'); {if we have more than enough bits in our bit buffer, return as many as needed, and update the bitbuffer and the number of bits left} if (aCount <= FBitsLeft) then begin Result := FBitBuffer and AbExtractMask[aCount]; FBitBuffer := FBitBuffer shr aCount; dec(FBitsLeft, aCount); end {if we have exactly enough bits in our bit buffer, return them all, and update the bitbuffer and the number of bits left} else if (aCount = FBitsLeft) then begin Result := FBitBuffer; FBitBuffer := 0; FBitsLeft := 0; end {otherwise we shall have to read another integer out of the buffer to satisfy the request} else begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBits]'); FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); Result := Result + ((FBitBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; end; {--------} procedure TAbDfInBitStream.ReadBuffer(var aBuffer; aCount : integer); var i : integer; Buffer : PAnsiChar; BytesToRead : integer; BytesInBuffer : integer; begin {this method is designed to read a set of bytes and this can only be done if the stream has been byte aligned--if it isn't, it's a programming error} Assert((FBitsLeft mod 8) = 0, 'TAbDfInBitStream.ReadBuffer. cannot read a buffer unless the stream is byte-aligned'); {get the address of the user buffer as a PChar: easier arithmetic} Buffer := @aBuffer; {if we have some bits left in the bit buffer, we need to copy those first} if (FBitsLeft > 0) then begin BytesToRead := FBitsLeft div 8; for i := 0 to pred(BytesToRead) do begin Buffer^ := AnsiChar(FBitBuffer and $FF); inc(Buffer); FBitBuffer := FBitBuffer shr 8; end; {calculate the count of bytes still to read} dec(aCount, BytesToRead); end; {calculate the number of bytes to copy} BytesInBuffer := FBufEnd - FBufPos; if (aCount <= BytesInBuffer) then BytesToRead := aCount else BytesToRead := BytesInBuffer; {copy the data from our buffer to the user buffer} Move(FBufPos^, Buffer^, BytesToRead); {update variables} dec(aCount, BytesToRead); inc(FBufPos, BytesToRead); {while there is still data to copy, keep on filling our internal buffer and copy it to the user buffer} while (aCount <> 0) do begin {increment the user buffer pointer past the data just copied} inc(Buffer, BytesToRead); {fill our buffer} if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBuffer]'); {calculate the number of bytes to copy} BytesInBuffer := FBufEnd - FBufPos; if (aCount <= BytesInBuffer) then BytesToRead := aCount else BytesToRead := BytesInBuffer; {copy the data from our buffer to the user buffer} Move(FBufPos^, Buffer^, BytesToRead); {update variables} dec(aCount, BytesToRead); inc(FBufPos, BytesToRead); end; {now we've copied everything over, reset the bit variables: they're empty and need refilling} FBitBuffer := 0; FBitsLeft := 0; end; {====================================================================} {===TAbDfOutBitStream================================================} constructor TAbDfOutBitStream.Create(aStream : TStream); begin {protect against dumb programming mistakes} Assert(aStream <> nil, 'TAbDfOutBitStream.Create: Cannot create a bit stream wrapping a nil stream'); {create the ancestor} inherited Create; {save the stream instance, allocate the buffer} FStream := aStream; GetMem(FBuffer, BitStreamBufferSize); FBufEnd := FBuffer + BitStreamBufferSize; FBufPos := FBuffer; end; {--------} destructor TAbDfOutBitStream.Destroy; var i : integer; begin {if the buffer was allocated...} if (FBuffer <> nil) then begin {if there are still some bits in the bit buffer...} if (FBitsUsed <> 0) then begin {pad the bit buffer to a byte boundary} AlignToByte; {empty the main buffer if there isn't enough room to copy over the 1 to 4 bytes in the bit buffer} if ((FBufEnd - FBufPos) < FBitsUsed div 8) then obsEmptyBuffer; {flush the bit buffer} for i := 1 to (FBitsUsed div 8) do begin FBufPos^ := AnsiChar(FBitBuffer); FBitBuffer := FBitBuffer shr 8; inc(FBufPos); end; end; {if there is some data in the main buffer, empty it} if (FBufPos <> FBuffer) then obsEmptyBuffer; {free the buffer} FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfOutBitStream.AlignToByte; begin {round up the number of bits used to the nearest 8} FBitsUsed := (FBitsUsed + 7) and $F8; {if the bit buffer is now full, flush it to the main buffer} if (FBitsUsed = 32) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := 0; FBitsUsed := 0; end; end; {--------} procedure TAbDfOutBitStream.obsEmptyBuffer; var ByteCount : integer; BytesWritten : longint; begin {empty the buffer} ByteCount := FBufPos - FBuffer; BytesWritten := FStream.Write(FBuffer^, ByteCount); {if we couldn't write the correct number of bytes, it's an error} if (BytesWritten <> ByteCount) then raise EAbInternalDeflateError.Create( 'could not write to the output stream [TAbDfInBitStream.obsEmptyBuffer]'); {reset the pointers} FBufPos := FBuffer; end; {--------} function TAbDfOutBitStream.Position : longint; begin Assert(false, 'TAbDfOutBitStream.Position: not implemented yet!'); Result := -1; end; {--------} procedure TAbDfOutBitStream.WriteBit(aBit : boolean); begin {only set the corresponding bit in the bit buffer if the passed bit is set (the bit buffer is set to zero when emptied, so we don't actually have to record clear bits)} if aBit then FBitBuffer := FBitBuffer or (1 shl FBitsUsed); {we've now got one more bit} inc(FBitsUsed); {if the bit buffer is now full, flush it to the main buffer} if (FBitsUsed = 32) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := 0; FBitsUsed := 0; end; end; {--------} procedure TAbDfOutBitStream.WriteBits(aBits : integer; aCount : integer); begin {protect against programming mistakes...} {..the count should be in the range 1 to 16 (BTW, the latter is only used once: Deflate64 with length symbol 258)} Assert((0 < aCount) and (aCount <= 16), 'TAbDfOutBitStream.WriteBits: aCount should be from 1 to 16'); {..there shouldn't be more than aCount bits} Assert((aBits shr aCount) = 0, 'TAbDfOutBitStream.WriteBits: aBits has more than aCount bits'); {copy as many bits as we can to the bit buffer} FBitBuffer := FBitBuffer or (aBits shl FBitsUsed); {increment the number of bits used} inc(FBitsUsed, aCount); {if we've overshot...} if (FBitsUsed >= 32) then begin {the bit buffer is now full, so flush it} if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); {patch up the bit buffer and the number of bits used} dec(FBitsUsed, 32); FBitBuffer := aBits shr (aCount - FBitsUsed); end; end; {--------} procedure TAbDfOutBitStream.WriteBuffer(var aBuffer; aCount : integer); var Buffer : PAnsiChar; BytesToCopy : integer; begin {guard against dumb programming errors: we must be byte aligned} Assert((FBitsUsed and $7) = 0, 'TAbDfOutBitStream.WriteBuffer: must be byte aligned'); {use the user buffer as a PChar} Buffer := @aBuffer; {flush the bit buffer to the underlying stream} while (FBitsUsed <> 0) do begin if (FBufEnd = FBufPos) then obsEmptyBuffer; FBufPos^ := AnsiChar(FBitBuffer and $FF); inc(FBufPos); FBitBuffer := FBitBuffer shr 8; dec(FBitsUsed, 8); end; {copy over the data to the underlying stream} BytesToCopy := FBufEnd - FBufPos; if (BytesToCopy > aCount) then BytesToCopy := aCount; Move(Buffer^, FBufPos^, BytesToCopy); inc(FBufPos, BytesToCopy); dec(aCount, BytesToCopy); while (aCount <> 0) do begin inc(Buffer, BytesToCopy); obsEmptyBuffer; BytesToCopy := FBufEnd - FBufPos; if (BytesToCopy > aCount) then BytesToCopy := aCount; Move(Buffer^, FBufPos^, BytesToCopy); inc(FBufPos, BytesToCopy); dec(aCount, BytesToCopy); end; {finish with a flushed buffer} obsEmptyBuffer; end; {--------} procedure TAbDfOutBitStream.WriteMoreBits(aBits : integer; aCount : integer); begin {the bit buffer is now full, so flush it} if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); {patch up the bit buffer and the number of bits used} dec(FBitsUsed, 32); FBitBuffer := aBits shr (aCount - FBitsUsed); end; {====================================================================} {===TAbDfLZStream====================================================} const {Implementation note: this stream size has been chosen so that if the data must be stored, a block size of about 64K will result} StreamSize = 160 * 1024; type PWord = ^word; {--------} constructor TAbDfLZStream.Create(aSlideWin : TAbDfInputWindow; aUseDeflate64 : boolean; aLog : TAbLogger); begin {create the ancestor} inherited Create; {save the sliding window and the logger} FSlideWin := aSlideWin; FUseDeflate64 := aUseDeflate64; FLog := aLog; {create the buckets} New(FDistBuckets); New(FLitBuckets); {create the memory stream, allocate its buffer, position at start} GetMem(FStream, StreamSize); Clear; end; {--------} destructor TAbDfLZStream.Destroy; begin {free the buckets} if (FDistBuckets <> nil) then Dispose(FDistBuckets); if (FLitBuckets <> nil) then Dispose(FLitBuckets); {free the memory stream} if (FStream <> nil) then FreeMem(FStream); {destroy the ancestor} inherited Destroy; end; {--------} {$IFDEF UseLogging} procedure AddLenDistToLog(aLog : TAbLogger; aPosn : longint; aLen : integer; aDist : integer; aOverLap : boolean); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if aOverLap then aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d **overlap**', [aPosn, aLen, aDist])) else aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d', [aPosn, aLen, aDist])); end; {$ENDIF} {--------} function TAbDfLZStream.AddLenDist(aLen : integer; aDist : integer) : boolean; var LenSymbol : integer; DistSymbol : integer; CurPos : PAnsiChar; begin {$IFDEF UseLogging} {log it} if (FLog <> nil) then begin if (aLen > aDist) then AddLenDistToLog(FLog, FSWPos, aLen, aDist, true) else AddLenDistToLog(FLog, FSWPos, aLen, aDist, false); inc(FSWPos, aLen); end; {$ENDIF} {write a length/distance record to the stream} CurPos := FCurPos; CurPos^ := AnsiChar(false); inc(CurPos); PWord(CurPos)^ := word(aLen - 1); inc(CurPos, sizeof(word)); PWord(CurPos)^ := word(aDist - 1); inc(CurPos, sizeof(word)); FCurPos := CurPos; {increment the various counters} inc(FDistCount); inc(FStoredSize, aLen); {convert the length and distance to their symbols} {$IFOPT C+} {if Assertions are on} LenSymbol := AbSymbolTranslator.TranslateLength(aLen); DistSymbol := AbSymbolTranslator.TranslateDistance(aDist); {$ELSE} if (3 <= aLen) and (aLen <= 258) then LenSymbol := AbSymbolTranslator.LenSymbols[aLen-3] + 257 else LenSymbol := 285; if (aDist <= 256) then DistSymbol := AbSymbolTranslator.ShortDistSymbols[aDist - 1] else if (aDist <= 32768) then DistSymbol := AbSymbolTranslator.MediumDistSymbols[((aDist - 1) div 128) - 2] else DistSymbol := AbSymbolTranslator.LongDistSymbols[((aDist - 1) div 16384) - 2]; {$ENDIF} {increment the buckets} inc(FLitBuckets^[LenSymbol]); inc(FDistBuckets^[DistSymbol]); {return whether the stream is full and needs encoding} Result := lzsIsFull; end; {--------} {$IFDEF UseLogging} procedure AddLiteralToLog(aLog : TAbLogger; aPosn : longint; aCh : AnsiChar); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if (' ' < aCh) and (aCh <= '~') then aLog.WriteLine(Format('%8x Char: %3d $%2x [%s]', [aPosn, ord(aCh), ord(aCh), aCh])) else aLog.WriteLine(Format('%8x Char: %3d $%2x', [aPosn, ord(aCh), ord(aCh)])); end; {$ENDIF} {--------} function TAbDfLZStream.AddLiteral(aCh : AnsiChar) : boolean; var CurPos : PAnsiChar; begin {$IFDEF UseLogging} {log it} if (FLog <> nil) then begin AddLiteralToLog(FLog, FSWPos, aCh); inc(FSWPos); end; {$ENDIF} {write a literal to the internal stream} CurPos := FCurPos; CurPos^ := AnsiChar(true); inc(CurPos); CurPos^ := aCh; inc(CurPos); FCurPos := CurPos; {increment the various counters} inc(FLitCount); inc(FLitBuckets^[byte(aCh)]); inc(FStoredSize); {return whether the stream is full and needs encoding} Result := lzsIsFull; end; {--------} procedure TAbDfLZStream.Clear; begin {position the stream at the start} Rewind; {reset all variables} FStrmEnd := nil; FLitCount := 0; FDistCount := 0; FStartOfs := FSlideWin.Position; FStoredSize := 0; {$IFDEF UseLogging} FSWPos := FStartOfs; {$ENDIF} {reset the buckets} FillChar(FLitBuckets^, sizeof(FLitBuckets^), 0); FLitBuckets^[256] := 1; { end-of-block marker: it's always there...} FillChar(FDistBuckets^, sizeof(FDistBuckets^), 0); end; {--------} procedure TAbDfLZStream.Encode(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree; aDistTree : TAbDfDecodeHuffmanTree; aUseDeflate64 : boolean); var Len : integer; Dist : integer; Symbol : integer; CurPos : PAnsiChar; StrmEnd : PAnsiChar; Code : longint; ExtraBits : longint; begin {rewind the LZ77 stream} Rewind; {for speed use local variables} CurPos := FCurPos; StrmEnd := FStrmEnd; {while there are still items in the stream...} while (CurPos < StrmEnd) do begin {if the next item is a literal...} if boolean(CurPos^) then begin {encode the literal character as a symbol} inc(CurPos); {$IFOPT C+} {if Assertions are on} Code := aLitTree.Encode(byte(CurPos^)); {$ELSE} Code := aLitTree.Encodes^[byte(CurPos^)]; {$ENDIF} inc(CurPos); {write the code out to the bit stream} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} end {otherwise it's a length/distance pair} else begin {DO THE LENGTH FIRST-------------------------------------------} {get the length from the stream} inc(CurPos); Len := integer(PWord(CurPos)^) + 1; inc(CurPos, sizeof(word)); {translate it to a symbol and convert that to a code using the literal/length huffman tree} {$IFOPT C+} {if Assertions are on} Symbol := AbSymbolTranslator.TranslateLength(Len); Code := aLitTree.Encode(Symbol); {$ELSE} if (3 <= Len) and (Len <= 258) then Symbol := AbSymbolTranslator.LenSymbols[Len-3] + 257 else Symbol := 285; Code := aLitTree.Encodes^[Symbol]; {$ENDIF} {output the length code} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} {if the length symbol were 285, its definition changes from Deflate to Deflate64, so make it a special case: for Deflate there are no extra bits, for Deflate64 output the (length - 3) as 16 bits} if (Symbol = 285) then begin if aUseDeflate64 then begin {$IFOPT C+} aBitStrm.WriteBits(Len - 3, 16); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Len - 3) shl BitsUsed); BitsUsed := BitsUsed + 16; if (BitsUsed >= 32) then WriteMoreBits(Len - 3, 16); end; {$ENDIF} end; end {otherwise if there are extra bits to be output for this length, calculate them and output them} else begin ExtraBits := Code shr 24; if (ExtraBits <> 0) then begin {$IFOPT C+} aBitStrm.WriteBits((Len - dfc_LengthBase[Symbol - 257]), ExtraBits); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Len - dfc_LengthBase[Symbol - 257]) shl BitsUsed); BitsUsed := BitsUsed + ExtraBits; if (BitsUsed >= 32) then WriteMoreBits((Len - dfc_LengthBase[Symbol - 257]), ExtraBits); end; {$ENDIF} end; end; {DO THE DISTANCE NEXT------------------------------------------} {get the distance from the stream} Dist := integer(PWord(CurPos)^) + 1; inc(CurPos, sizeof(word)); {translate it to a symbol and convert that to a code using the distance huffman tree} {$IFOPT C+} {if Assertions are on} Symbol := AbSymbolTranslator.TranslateDistance(Dist); Assert(aUseDeflate64 or (Symbol < 30), 'TAbDfLZStream.Encode: a Deflate64 distance symbol has been generated for Deflate'); Code := aDistTree.Encode(Symbol); {$ELSE} if (Dist <= 256) then Symbol := AbSymbolTranslator.ShortDistSymbols[Dist - 1] else if (Dist <= 32768) then Symbol := AbSymbolTranslator.MediumDistSymbols[((Dist - 1) div 128) - 2] else Symbol := AbSymbolTranslator.LongDistSymbols[((Dist - 1) div 16384) - 2]; Code := aDistTree.Encodes^[Symbol]; {$ENDIF} {output the distance code} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} {if there are extra bits to be output for this distance, calculate them and output them} ExtraBits := Code shr 24; if (ExtraBits <> 0) then begin {$IFOPT C+} aBitStrm.WriteBits((Dist - dfc_DistanceBase[Symbol]), ExtraBits); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Dist - dfc_DistanceBase[Symbol]) shl BitsUsed); BitsUsed := BitsUsed + ExtraBits; if (BitsUsed >= 32) then WriteMoreBits((Dist - dfc_DistanceBase[Symbol]), ExtraBits); end; {$ENDIF} end; end; end; {clear the stream; ready for some more items} { Clear;} end; {--------} function TAbDfLZStream.lzsGetApproxSize : LongWord; var i : integer; begin {note: calculates an approximate compressed size without taking too long about it. The average encoded bit length for literals and lengths is assumed to be 8. Distances are assumed to follow the static tree definition (ie, 5 bits per distance, plus any extra bits). There are FLitCount literals, FDistCount lengths, and FDistCount distances} Result := (13 * FDistCount) + (8 * FLitCount); for i := 4 to 31 do inc(Result, FDistBuckets^[i] * dfc_DistExtraBits[i]); Result := Result div 8; end; {--------} function TAbDfLZStream.lzsGetStaticSize : integer; var i : integer; begin Result := 0; for i := 0 to 143 do inc(Result, FLitBuckets^[i] * 8); for i := 144 to 255 do inc(Result, FLitBuckets^[i] * 9); inc(Result, FLitBuckets^[256] * 7); for i := 257 to 279 do inc(Result, FLitBuckets^[i] * (7 + dfc_LitExtraBits[i - dfc_LitExtraOffset])); for i := 280 to 284 do inc(Result, FLitBuckets^[i] * (8 + dfc_LitExtraBits[i - dfc_LitExtraOffset])); if FUseDeflate64 then inc(Result, FLitBuckets^[285] * (8 + 16)) else inc(Result, FLitBuckets^[285] * 8); for i := 0 to 31 do inc(Result, FDistBuckets^[i] * (5 + dfc_DistExtraBits[i])); end; {--------} function TAbDfLZStream.lzsGetStoredSize : integer; begin Result := FStoredSize; {Result := FSlideWin.Position - FStartOfs;} end; {--------} function TAbDfLZStream.lzsIsFull : boolean; begin {if the number of hits on the (eventual) literal tree is a multiple of 8192, the stream is full if the majority were straight literals and we're getting approx 50% compression} if (((FLitCount + FDistCount) and $1FFF) = 0) then begin Result := (FDistCount < FLitCount) and (lzsGetApproxSize < (FStoredSize div 2)); if Result then Exit; end; {otherwise the stream is full if the number of hits on the literal tree or on the distance tree is 32768} { Result := (FCurPos - FStream) > (StreamSIze - 100);} Result := (FDistCount >= 32768) or ((FLitCount + FDistCount) >= 32768); end; {--------} procedure TAbDfLZStream.ReadStoredBuffer(var aBuffer; aCount : integer); begin FSlideWin.ReadBuffer(aBuffer, aCount, FStartOfs); inc(FStartOfs, aCount); end; {--------} procedure TAbDfLZStream.Rewind; begin {position the stream at the beginning} FStrmEnd := FCurPos; FCurPos := FStream; end; {====================================================================} {===TAbDfCodeLenStream===============================================} constructor TAbDfCodeLenStream.Create(aLog : TAbLogger); begin {create the ancestor} inherited Create; {allocate the stream (to contain all literals and distances and possible extra data} GetMem(FStream, (285 + 32) * 2); FPosition := FStream; {allocate the buckets} FBuckets := AllocMem(sizeof(TAbDfCodeLenBuckets)); end; {--------} destructor TAbDfCodeLenStream.Destroy; begin {free the stream} if (FStream <> nil) then FreeMem(FStream); {free the buckets} if (FBuckets <> nil) then Dispose(FBuckets); {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfCodeLenStream.Build(const aCodeLens : array of integer; aCount : integer); var i : integer; State : (ScanStart, ScanNormal, Got2nd, Got3rd); Count : integer; ThisCount : integer; CodeLen : integer; PrevCodeLen : integer; CurPos : PAnsiChar; Buckets : PAbDfCodeLenBuckets; begin {start the automaton} State := ScanStart; CurPos := FStream; Buckets := FBuckets; Count := 0; PrevCodeLen := 0; {for all the codelengths in the array (plus a fake one at the end to ensure all codeslengths are counted)...} for i := 0 to aCount do begin {get the current codelength} if (i = aCount) then CodeLen := -1 else CodeLen := aCodeLens[i]; {switch based on the state...} case State of ScanStart : begin PrevCodeLen := CodeLen; State := ScanNormal; end; ScanNormal : begin {if the current code is the same as the previous, move to the next state} if (CodeLen = PrevCodeLen) then State := Got2nd {otherwise output the previous code} else begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); PrevCodeLen := CodeLen; end; end; Got2nd : begin {if the current code is the same as the previous, move to the next state; we now have three similar codes in a row} if (CodeLen = PrevCodeLen) then begin State := Got3rd; Count := 3; end {otherwise output the previous two similar codes, move back to the initial state} else begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen], 2); PrevCodeLen := CodeLen; State := ScanNormal; end; end; Got3rd: begin {if the current code is the same as the previous, increment the count of similar codes} if (CodeLen = PrevCodeLen) then inc(Count) {otherwise we need to output the repeat values...} else begin {if the previous code were a zero code...} if (PrevCodeLen = 0) then begin {while there are zero codes to be output...} while (Count <> 0) do begin {if there are less than three zero codes, output them individually} if (Count < 3) then begin while (Count <> 0) do begin CurPos^ := #0; inc(CurPos); inc(Buckets^[0]); dec(Count); end; end {if there are less than 11 successive zero codes, output a 17 code and the count of zeros} else if (Count < 11) then begin CurPos^ := #17; inc(CurPos); inc(Buckets^[17]); CurPos^ := AnsiChar(Count - 3); inc(CurPos); Count := 0; end {otherwise output an 18 code and the count of zeros} else begin ThisCount := Count; if (ThisCount > 138) then ThisCount := 138; CurPos^ := #18; inc(CurPos); inc(Buckets^[18]); CurPos^ := AnsiChar(ThisCount - 11); inc(CurPos); dec(Count, ThisCount); end; end; end {otherwise the previous code was a non-zero code...} else begin {output the first code} CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); dec(Count); {while there are more codes to be output...} while (Count <> 0) do begin {if there are less than three codes, output them individually} if (Count < 3) then begin while (Count <> 0) do begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); dec(Count); end; end {otherwise output an 16 code and the count} else begin ThisCount := Count; if (ThisCount > 6) then ThisCount := 6; CurPos^ := #16; inc(CurPos); inc(Buckets^[16]); CurPos^ := AnsiChar(ThisCount - 3); inc(CurPos); dec(Count, ThisCount); end; end; end; {move back to the initial state} PrevCodeLen := CodeLen; State := ScanNormal; end; end; end; end; {set the read position} FStrmEnd := CurPos; FPosition := FStream; end; {--------} procedure TAbDfCodeLenStream.Encode(aBitStrm : TAbDfOutBitStream; aTree : TAbDfDecodeHuffmanTree); var Symbol : integer; ExtraData : integer; Code : longint; CurPos : PAnsiChar; StrmEnd : PAnsiChar; begin {prepare for the loop} CurPos := FPosition; StrmEnd := FStrmEnd; {while there are tokens in the stream...} while (CurPos <> StrmEnd) do begin {get the next symbol} Symbol := ord(CurPos^); inc(CurPos); {if the symbol is 0..15, get the code and output it} if (Symbol <= 15) then begin {$IFOPT C+} {if Assertions are on} Code := aTree.Encode(Symbol); {$ELSE} Code:= aTree.Encodes^[Symbol]; {$ENDIF} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); end {otherwise the symbol is 16, 17, or 18} else begin {get the extra data} ExtraData := ord(CurPos^); inc(CurPos); {get the code and output it} {$IFOPT C+} {if Assertions are on} Code := aTree.Encode(Symbol); {$ELSE} Code:= aTree.Encodes^[Symbol]; {$ENDIF} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); if (Symbol = 16) then aBitStrm.WriteBits(ExtraData, 2) else if (Symbol = 17) then aBitStrm.WriteBits(ExtraData, 3) else {Symbol = 18} aBitStrm.WriteBits(ExtraData, 7); end; end; end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfpkmg.pas0000644000175000001440000002174012014201074022623 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: AbDfPkMg.pas *} {*********************************************************} {* Deflate package-merge algorithm *} {*********************************************************} unit AbDfPkMg; {$I AbDefine.inc} interface uses AbDfBase; procedure GenerateCodeLengths(aMaxCodeLen : integer; const aWeights : array of integer; var aCodeLengths : array of integer; aStartInx : integer; aLog : TAbLogger); implementation type PPkgNode = ^TPkgNode; TPkgNode = packed record pnWeight : integer; pnCount : integer; pnLeft : PPkgNode; pnRight : PPkgNode; end; PPkgNodeList = ^TPkgNodeList; TPkgNodeList = array [0..pred(286 * 2)] of PPkgNode; {Note: the "286" is the number of literal/length symbols, the maximum number of weights we'll be calculating the optimal code lengths for} {===helper routines==================================================} function IsCalcFeasible(aCount : integer; aMaxCodeLen : integer) : boolean; begin {works out if length-limited codes can be calculated for a given number of symbols and the maximum code length} {return whether 2^aMaxCodeLen > aCount} Result := (1 shl aMaxCodeLen) > aCount; end; {--------} procedure QSS(aList : PPkgNodeList; aFirst : integer; aLast : integer); var L, R : integer; Pivot : integer; Temp : pointer; begin {while there are at least two items to sort} while (aFirst < aLast) do begin {the pivot is the middle item} Pivot := aList^[(aFirst+aLast) div 2]^.pnWeight; {set indexes and partition} L := pred(aFirst); R := succ(aLast); while true do begin repeat dec(R); until (aList^[R]^.pnWeight <= Pivot); repeat inc(L); until (aList^[L]^.pnWeight >= Pivot); if (L >= R) then Break; Temp := aList^[L]; aList^[L] := aList^[R]; aList^[R] := Temp; end; {quicksort the first subfile} if (aFirst < R) then QSS(aList, aFirst, R); {quicksort the second subfile - recursion removal} aFirst := succ(R); end; end; {--------} procedure SortList(aList : PPkgNodeList; aCount : integer); begin QSS(aList, 0, pred(aCount)); end; {--------} procedure Accumulate(aNode : PPkgNode); begin while (aNode^.pnLeft <> nil) do begin Accumulate(aNode^.pnLeft); aNode := aNode^.pnRight; end; inc(aNode^.pnCount); end; {====================================================================} {===Interfaced routine===============================================} procedure GenerateCodeLengths(aMaxCodeLen : integer; const aWeights : array of integer; var aCodeLengths : array of integer; aStartInx : integer; aLog : TAbLogger); var i : integer; Bit : integer; WeightCount : integer; OrigList : PPkgNodeList; OrigListCount : integer; MergeList : PPkgNodeList; MergeListCount : integer; PkgList : PPkgNodeList; PkgListCount : integer; OrigInx : integer; PkgInx : integer; Node : PPkgNode; NodeMgr : TAbNodeManager; begin {calculate the number of weights} WeightCount := succ(high(aWeights)); {check for dumb programming errors} Assert((0 < aMaxCodeLen) and (aMaxCodeLen <= 15), 'GenerateCodeLengths: the maximum code length should be in the range 1..15'); Assert((1 <= WeightCount) and (WeightCount <= 286), 'GenerateCodeLengths: the weight array must have 1..286 elements'); Assert(IsCalcFeasible(WeightCount, aMaxCodeLen), 'GenerateCodeLengths: the package-merge algorithm should always be feasible'); {clear the code lengths array} FillChar(aCodeLengths[aStartInx], WeightCount * sizeof(integer), 0); {prepare for the try..finally} OrigList := nil; MergeList := nil; PkgList := nil; NodeMgr := nil; try {create the node manager} NodeMgr := TAbNodeManager.Create(sizeof(TPkgNode)); {create the original list of nodes} GetMem(OrigList, WeightCount * sizeof(PPkgNode)); OrigListCount := 0; for i := 0 to pred(WeightCount) do if (aWeights[i] <> 0) then begin Node := NodeMgr.AllocNode; Node^.pnLeft := nil; { this will indicate a leaf} Node^.pnRight := pointer(i); { the index of the weight} Node^.pnWeight := aWeights[i]; { the weight itself} Node^.pnCount := 1; { how many times used} OrigList^[OrigListCount] := Node; inc(OrigListCount); end; {we need at least 2 items, so make anything less a special case} if (OrigListCount <= 1) then begin {if there are no items at all in the original list, we need to pretend that there is one, since we shall eventually need to calculate a Count-1 value that cannot be negative} if (OrigListCount = 0) then begin aCodeLengths[aStartInx] := 1; Exit; end; {otherwise there is only one item: set its code length directly} for i := 0 to pred(WeightCount) do if (aWeights[i] <> 0) then begin aCodeLengths[aStartInx + i] := 1; Exit; end; end; {there are at least 2 items in the list; so sort the list} SortList(OrigList, OrigListCount); {create the merge and package lists} GetMem(MergeList, OrigListCount * 2 * sizeof(PPkgNode)); GetMem(PkgList, OrigListCount * 2 * sizeof(PPkgNode)); {initialize the merge list to have the same items as the original list} Move(OrigList^, MergeList^, OrigListCount * sizeof(PPkgNode)); MergeListCount := OrigListCount; {do aMaxCodeLen - 2 times...} for Bit := 1 to pred(aMaxCodeLen) do begin {generate the package list from the merge list by grouping pairs from the merge list and adding them to the package list} PkgListCount := 0; for i := 0 to pred(MergeListCount div 2) do begin Node := NodeMgr.AllocNode; Node^.pnLeft := MergeList^[i * 2]; Node^.pnRight := MergeList^[i * 2 + 1]; Node^.pnWeight := Node^.pnLeft^.pnWeight + Node^.pnRight^.pnWeight; {$IFOPT C+} Node^.pnCount := 0; {$ENDIF} PkgList^[PkgListCount] := Node; inc(PkgListCount); end; {merge the original list and the package list} MergeListCount := 0; OrigInx := 0; PkgInx := 0; {note the optimization here: the package list will *always* be last to empty in the merge process since it will have at least one item whose accumulated weight is greater than all of the items in the original list} while (OrigInx < OrigListCount) and (PkgInx < PkgListCount) do begin if (OrigList^[OrigInx]^.pnWeight <= PkgList^[PkgInx]^.pnWeight) then begin MergeList^[MergeListCount] := OrigList^[OrigInx]; inc(OrigInx); end else begin MergeList^[MergeListCount] := PkgList^[PkgInx]; inc(PkgInx); end; inc(MergeListCount); end; if (OrigInx < OrigListCount) then begin Move(OrigList^[OrigInx], MergeList^[MergeListCount], (OrigListCount - OrigInx) * sizeof(PPkgNode)); inc(MergeListCount, (OrigListCount - OrigInx)); end else begin Move(PkgList^[PkgInx], MergeList^[MergeListCount], (PkgListCount - PkgInx) * sizeof(PPkgNode)); inc(MergeListCount, (PkgListCount - PkgInx)); end; end; {calculate the code lengths} for i := 0 to (OrigListCount * 2) - 3 do begin Node := MergeList^[i]; if (Node^.pnLeft <> nil) then Accumulate(Node); end; for i := 0 to pred(OrigListCount) do aCodeLengths[aStartInx + integer(OrigList^[i].pnRight)] := OrigList^[i].pnCount; finally FreeMem(OrigList); FreeMem(MergeList); FreeMem(PkgList); NodeMgr.Free; end; end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfoutw.pas0000644000175000001440000002640512014201074022666 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: AbDfOutW.pas *} {*********************************************************} {* Deflate output sliding window *} {*********************************************************} unit AbDfOutW; {$I AbDefine.inc} interface uses Classes, AbDfBase; {Notes: TAbDfOutputWindow implements a sliding window on previously written data for the LZ77 dictionary decoding. AddLiteral will add a literal character at the current position and advance by one. AddLenDist will copy the required number of characters from the given position to the current position, and advance the stream on by the length. The class will periodically update the stream from the internal buffer. For normal Deflate, the internal buffer is 48K + 512 bytes in size. Once there is 48Kb worth of data, 16KB is written to file, and the buffer is shifted left by 16KB. We need to keep the last decoded 32KB in memory at all times. For Deflate64, the internal buffer is 96K + 512 bytes in size. Once there is 96Kb worth of data, 32KB is written to file, and the buffer is shifted left by 32KB. We need to keep the last decoded 64KB in memory at all times. } type TAbDfOutputWindow = class private FBuffer : PAnsiChar; FChecksum : longint; FCurrent : PAnsiChar; FLog : TAbLogger; FPartSize : longint; FSlideCount : integer; FStream : TStream; FStreamPos : longint; FTestOnly : boolean; FUseCRC32 : boolean; FWritePoint : PAnsiChar; protected function swGetChecksum : longint; procedure swWriteToStream(aFlush : boolean); public constructor Create(aStream : TStream; aUseDeflate64 : boolean; aUseCRC32 : boolean; aPartSize : longint; aTestOnly : boolean; aLog : TAbLogger); destructor Destroy; override; procedure AddBuffer(var aBuffer; aCount : integer); procedure AddLiteral(aCh : AnsiChar); procedure AddLenDist(aLen : integer; aDist : integer); function Position : longint; property Checksum : longint read swGetChecksum; property Log : TAbLogger read FLog; end; implementation uses SysUtils; {Notes: Meaning of the internal pointers: |==============================+------------------------+----| | | | FBuffer FCurrent FWritePoint Once FCurrent reaches or exceeds FWritePoint, FSlideCount bytes of data from FBuffer are written to the stream and the remaining data is moved back FSlideCount bytes, moving FCurrent along with it as well. } {===TAbDfOutputWindow==================================================} constructor TAbDfOutputWindow.Create(aStream : TStream; aUseDeflate64 : boolean; aUseCRC32 : boolean; aPartSize : longint; aTestOnly : boolean; aLog : TAbLogger); var Size : integer; LookAheadSize : integer; begin {allow the ancestor to initialize} inherited Create; {save parameters} FLog := aLog; FStream := aStream; FTestOnly := aTestOnly; if (aPartSize <= 0) then FPartSize := 0 else FPartSize := aPartSize; FUseCRC32 := aUseCRC32; if aUseCRC32 then FChecksum := -1 { CRC32 starts off with all bits set} else FCheckSum := 1; { Adler32 starts off with a value of 1} {set capacity of sliding window} if aUseDeflate64 then begin Size := 96 * 1024; FSlideCount := 32 * 1024; LookAheadSize := 64 * 1024; end else begin Size := 64 * 1024; FSlideCount := 32 * 1024; LookAheadSize := 258; end; GetMem(FBuffer, Size + LookAheadSize); {set the other internal pointers} FCurrent := FBuffer; FWritePoint := FBuffer + Size; if (FPartSize > Size) then FPartSize := Size; end; {--------} destructor TAbDfOutputWindow.Destroy; begin {write remaining data and free the buffer} if (FBuffer <> nil) then begin if (FCurrent <> FBuffer) then swWriteToStream(true); FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfOutputWindow.AddBuffer(var aBuffer; aCount : integer); var Buffer : PAnsiChar; BytesToWrite : integer; begin {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); {cast the user buffer to a PChar, it's easier to use} Buffer := @aBuffer; {calculate the number of bytes to copy} BytesToWrite := FWritePoint - FCurrent; if (BytesToWrite > aCount) then BytesToWrite := aCount; {move this block of bytes} Move(Buffer^, FCurrent^, BytesToWrite); {advance pointers and counters} inc(FCurrent, BytesToWrite); dec(aCount, BytesToWrite); {while there is still data to copy...} while (aCount > 0) do begin {advance the user buffer pointer} inc(Buffer, BytesToWrite); {write the sliding window chunk to the stream} swWriteToStream(false); {calculate the number of bytes to copy} BytesToWrite := FWritePoint - FCurrent; if (BytesToWrite > aCount) then BytesToWrite := aCount; {move this block of bytes} Move(Buffer^, FCurrent^, BytesToWrite); {advance pointers and counters} inc(FCurrent, BytesToWrite); dec(aCount, BytesToWrite); end; end; {--------} procedure AddLenDistToLog(aLog : TAbLogger; aPosn : longint; aLen : integer; aDist : integer; aOverLap : boolean); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if aOverLap then aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d **overlap**', [aPosn, aLen, aDist])) else aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d', [aPosn, aLen, aDist])); end; {--------} procedure TAbDfOutputWindow.AddLenDist(aLen : integer; aDist : integer); var i : integer; ToChar : PAnsiChar; FromChar : PAnsiChar; begin {log it} {$IFDEF UseLogging} if (FLog <> nil) then AddLenDistToLog(FLog, Position, aLen, aDist, (aLen > aDist)); {$ENDIF} {if the length to copy is less than the distance, just do a move} if (aLen <= aDist) then begin Move((FCurrent - aDist)^ , FCurrent^, aLen); end {otherwise we have to use a byte-by-byte copy} else begin FromChar := FCurrent - aDist; ToChar := FCurrent; for i := 1 to aLen do begin ToChar^ := FromChar^; inc(FromChar); inc(ToChar); end; end; {increment the current pointer} inc(FCurrent, aLen); {if we've reached the point requested, abort} if (FPartSize > 0) and ((FCurrent - FBuffer) >= FPartSize) then raise EAbPartSizedInflate.Create(''); {NOTE: This exception is expected during detection of .GZ and .TGZ files. (VerifyGZip)} {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); end; {--------} procedure AddLiteralToLog(aLog : TAbLogger; aPosn : longint; aCh : AnsiChar); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if (' ' < aCh) and (aCh <= '~') then aLog.WriteLine(Format('%8x Char: %3d $%2x [%s]', [aPosn, ord(aCh), ord(aCh), aCh])) else aLog.WriteLine(Format('%8x Char: %3d $%2x', [aPosn, ord(aCh), ord(aCh)])); end; {--------} procedure TAbDfOutputWindow.AddLiteral(aCh : AnsiChar); begin {log it} {$IFDEF UseLogging} if (FLog <> nil) then AddLiteralToLog(FLog, Position, aCh); {$ENDIF} {add the literal to the buffer} FCurrent^ := aCh; {increment the current pointer} inc(FCurrent); {if we've reached the point requested, abort} if (FPartSize > 0) and ((FCurrent - FBuffer) >= FPartSize) then raise EAbPartSizedInflate.Create(''); {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); end; {--------} function TAbDfOutputWindow.Position : longint; begin if FTestOnly then Result := FStreamPos + (FCurrent - FBuffer) else Result := FStream.Position + (FCurrent - FBuffer); end; {--------} function TAbDfOutputWindow.swGetChecksum : longint; begin {since the checksum is calculated by the method that flushes to the stream, make sure any buffered data is written out first} if (FCurrent <> FBuffer) then swWriteToStream(true); {the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if FUseCRC32 then Result := not FChecksum else Result := FChecksum; end; {--------} procedure TAbDfOutputWindow.swWriteToStream(aFlush : boolean); var FromPtr : PAnsiChar; begin {if the request was to flush, write all remaining data after updating the checksum} if aFlush then begin if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FBuffer^, FCurrent - FBuffer) else AbUpdateAdlerBuffer(FChecksum, FBuffer^, FCurrent - FBuffer); if FTestOnly then inc(FStreamPos, FCurrent - FBuffer) else FStream.WriteBuffer(FBuffer^, FCurrent - FBuffer); FCurrent := FBuffer; end {otherwise, update the checksum with the data in the sliding window chunk, write it out to the stream, and move the rest of the buffer back} else begin if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FBuffer^, FSlideCount) else AbUpdateAdlerBuffer(FChecksum, FBuffer^, FSlideCount); if FTestOnly then inc(FStreamPos, FSlideCount) else FStream.WriteBuffer(FBuffer^, FSlideCount); FromPtr := FBuffer + FSlideCount; Move(FromPtr^, FBuffer^, FCurrent - FromPtr); FCurrent := FCurrent - FSlideCount; end; end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfinw.pas0000644000175000001440000005374112014201074022470 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: AbDfInW.pas *} {*********************************************************} {* Deflate input sliding window unit *} {*********************************************************} unit AbDfInW; {$I AbDefine.inc} interface uses Classes, AbDfBase; {Notes: TdfInputWindow implements a sliding window on data for the LZ77 dictionary encoding. The stream passed to the class is automatically read when required to keep the internal buffer fully loaded. } type TAbDfMatch = record maLen : integer; maDist : integer; maLit : AnsiChar; end; type PAbPointerList = ^TAbPointerList; TAbPointerList = array[0..MaxInt div SizeOf(Pointer) - 1] of Pointer; TAbDfInputWindow = class private FAdvanceStart : boolean; FBuffer : PAnsiChar; FBufferEnd : PAnsiChar; FBytesUsed : longint; FChainLen : integer; FHashChains : PAbPointerList; FHashHeads : PAbPointerList; FHashIndex : integer; FChecksum : longint; FCurrent : PAnsiChar; FLookAheadEnd : PAnsiChar; FMaxMatchLen : integer; FMustSlide : boolean; FOnProgress : TAbProgressStep; FSlidePoint : PAnsiChar; FStart : PAnsiChar; FStartOffset : longint; FStream : TStream; FStreamSize : longint; FUseCRC32 : boolean; FUseDeflate64 : boolean; FWinMask : integer; FWinSize : integer; protected function iwGetChecksum : longint; procedure iwReadFromStream; procedure iwSetCapacity(aValue : longint); procedure iwSlide; public constructor Create(aStream : TStream; aStreamSize : longint; aWinSize : integer; aChainLength : integer; aUseDeflate64 : boolean; aUseCRC32 : boolean); destructor Destroy; override; procedure Advance(aCount : integer; aHashCount : integer); procedure AdvanceByOne; function FindLongestMatch(aAmpleLength : integer; var aMatch : TAbDfMatch; const aPrevMatch : TAbDfMatch) : boolean; function GetNextChar : AnsiChar; function GetNextKeyLength : integer; function Position : longint; procedure ReadBuffer(var aBuffer; aCount : longint; aOffset : Int64); property ChainLen : integer read FChainLen write FChainLen; property Checksum : longint read iwGetChecksum; property OnProgress : TAbProgressStep read FOnProgress write FOnProgress; end; implementation uses SysUtils; {Notes: Meaning of the internal pointers: |----------+===================+==+--------------------------| | | | | | FBuffer FStart FCurrent FLookAheadEnd FBufferEnd FCurrent is the current match position. The valid data that can be matched is between FStart and FLookAheadEnd, The data between FStart and FCurrent has already been seen; the data between FCurrent and FLookAheadEnd can be used for matching. The buffer size depends on the requested window size (a multiple of 1KB, up to 32KB for deflate, up to 64KB for deflate64) and the lookahead size (up to 258 bytes for deflate and 64KB for deflate64.) The window of data continuously slides to the right, and is slid back to FBuffer whenever FStart reaches a point 16KB away, this point being given by FSlidePoint. The hash table: This is a chained hash table with some peculiarities. First the table itself, FHashHeads. It contains pointers to strings in the window buffer, not to chains. The chains are held is a separate structure, FHashChains. The hash function on the three-character keys is a Rabin-Karp function: ((((Ch1 shl 5) xor Ch2) shl 5) xor Ch3) and $3FFF designed so that a running hash value can be kept and calculated per character. The hash table is $4000 elements long (obviously, given the hash function). On insertion, the previous pointer in the hash table at the calculated index is saved and replaced by the new pointer. The old pointer is saved in the chains array. This has the same number of elements as the sliding window has characters. The pointer is placed at (Ptr and (WindowsSize-1)) overwriting the value that's already there. In this fashion the individual chains in the standard hash table are interwoven with each other in this hash table, like a skein of threads. } const c_HashCount = $4000; {the number of hash entries} c_HashMask = c_HashCount - 1; {a mask for the hash function} c_HashShift = 5; {shift value for the hash function} {===TAbDfInputWindow=================================================} constructor TAbDfInputWindow.Create(aStream : TStream; aStreamSize : longint; aWinSize : integer; aChainLength : integer; aUseDeflate64 : boolean; aUseCRC32 : boolean); begin {create the ancestor} inherited Create; {save parameters} FStreamSize := aStreamSize; FWinSize := aWinSize; FWinMask := aWinSize - 1; FStream := aStream; FChainLen := aChainLength; FUseDeflate64 := aUseDeflate64; FUseCRC32 := aUseCRC32; if aUseCRC32 then FChecksum := -1 { CRC32 starts off with all bits set } else FCheckSum := 1; { Adler32 starts off with a value of 1 } {set capacity of sliding window} iwSetCapacity(aWinSize); {create the hash table, first the hash table itself (and set all entries to nil)} FHashHeads := AllocMem(c_HashCount * sizeof(pointer)); {..now the chains (there's no need to set the entries to nil, since the chain entries get fed from the head entries before searching)} GetMem(FHashChains, aWinSize * sizeof(pointer)); {read the first chunk of data from the stream} FMustSlide := true; iwReadFromStream; {if there are at least two bytes, prime the hash index} if ((FLookAheadEnd - FBuffer) >= 2) then FHashIndex := ((longint(FBuffer[0]) shl c_HashShift) xor longint(FBuffer[1])) and c_HashMask; end; {--------} destructor TAbDfInputWindow.Destroy; begin {free the hash table} FreeMem(FHashHeads); FreeMem(FHashChains); {free the buffer} FreeMem(FBuffer); {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfInputWindow.Advance(aCount : integer; aHashCount : integer); var i : integer; ByteCount : integer; Percent : integer; HashChains: PAbPointerList; HashHeads : PAbPointerList; HashInx : integer; CurPos : PAnsiChar; begin Assert((FLookAheadEnd - FCurrent) >= aCount, 'TAbDfInputWindow.Advance: seem to be advancing into the unknown'); Assert((aHashCount = aCount) or (aHashCount = pred(aCount)), 'TAbDfInputWindow.Advance: the parameters are plain wrong'); {use local var for speed} CurPos := FCurrent; {advance the current pointer if needed} if (aCount > aHashCount) then inc(CurPos); {make sure we update the hash table; remember that the string[3] at the current position has already been added to the hash table (for notes on updating the hash table, see FindLongestMatch} {use local vars for speed} HashChains := FHashChains; HashHeads := FHashHeads; HashInx := FHashIndex; {update the hash table} for i := 0 to pred(aHashCount) do begin HashInx := ((HashInx shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; HashChains^[PtrUInt(CurPos) and FWinMask] := HashHeads^[HashInx]; HashHeads^[HashInx] := CurPos; inc(CurPos); end; {replace old values} FHashChains := HashChains; FHashHeads := HashHeads; FHashIndex := HashInx; FCurrent := CurPos; {if we've seen at least FWinSize bytes...} if FAdvanceStart then begin {advance the start of the sliding window} inc(FStart, aCount); inc(FStartOffset, aCount); {check to see if we have advanced into the slide zone} if FMustSlide and (FStart >= FSlidePoint) then iwSlide; end {otherwise check to see if we've seen at least FWinSize bytes} else if ((CurPos - FStart) >= FWinSize) then begin FAdvanceStart := true; {note: we can't advance automatically aCount bytes here, we need to calculate the actual count} ByteCount := (CurPos - FWinSize) - FStart; inc(FStart, ByteCount); inc(FStartOffset, ByteCount); end; {show progress} if Assigned(FOnProgress) then begin inc(FBytesUsed, aCount); if ((FBytesUsed and $FFF) = 0) then begin Percent := Round((100.0 * FBytesUsed) / FStreamSize); FOnProgress(Percent); end; end; {check to see if we have advanced into the slide zone} if (FStart >= FSlidePoint) then iwSlide; end; {--------} procedure TAbDfInputWindow.AdvanceByOne; var Percent : integer; begin {advance the current pointer} inc(FCurrent); {if we've seen at least FWinSize bytes...} if FAdvanceStart then begin {advance the start of the sliding window} inc(FStart, 1); inc(FStartOffset, 1); {check to see if we have advanced into the slide zone} if FMustSlide and (FStart >= FSlidePoint) then iwSlide; end {otherwise check to see if we've seen FWinSize bytes} else if ((FCurrent - FStart) = FWinSize) then FAdvanceStart := true; {show progress} if Assigned(FOnProgress) then begin inc(FBytesUsed, 1); if ((FBytesUsed and $FFF) = 0) then begin Percent := Round((100.0 * FBytesUsed) / FStreamSize); FOnProgress(Percent); end; end; end; {--------} function TAbDfInputWindow.FindLongestMatch(aAmpleLength : integer; var aMatch : TAbDfMatch; const aPrevMatch : TAbDfMatch) : boolean; {Note: this routine implements a greedy algorithm and is by far the time sink for compression. There are two versions, one written in Pascal for understanding, one in assembler for speed. Activate one and only one of the following compiler defines.} {$IFDEF CPU386} {$DEFINE UseGreedyAsm} {$ELSE} {$DEFINE UseGreedyPascal} {$ENDIF} {Check to see that all is correct} {$IFDEF UseGreedyAsm} {$IFDEF UseGreedyPascal} !! Compile Error: only one of the greedy compiler defines can be used {$ENDIF} {$ELSE} {$IFNDEF UseGreedyPascal} !! Compile Error: one of the greedy compiler defines must be used {$ENDIF} {$ENDIF} type PWord = ^word; var MaxLen : longint; MaxDist : longint; MaxMatch : integer; ChainLen : integer; PrevStrPos : PAnsiChar; CurPos : PAnsiChar; {$IFDEF UseGreedyAsm} CurWord : word; MaxWord : word; {$ENDIF} {$IFDEF UseGreedyPascal} Len : longint; MatchStr : PAnsiChar; CurrentCh : PAnsiChar; CurCh : AnsiChar; MaxCh : AnsiChar; {$ENDIF} begin {calculate the hash index for the current position; using the Rabin-Karp algorithm this is equal to the previous index less the effect of the character just lost plus the effect of the character just gained} CurPos := FCurrent; FHashIndex := ((FHashIndex shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; {get the head of the hash chain: this is the position in the sliding window of the previous 3-character string with this hash value} PrevStrPos := FHashHeads^[FHashIndex]; {set the head of the hash chain equal to our current position} FHashHeads^[FHashIndex] := CurPos; {update the chain itself: set the entry for this position equal to the previous string position} FHashChains^[PtrUInt(CurPos) and FWinMask] := PrevStrPos; {calculate the maximum match we could do at this position} MaxMatch := (FLookAheadEnd - CurPos); if (MaxMatch > FMaxMatchLen) then MaxMatch := FMaxMatchLen; if (aAmpleLength > MaxMatch) then aAmpleLength := MaxMatch; {calculate the current match length} if (aPrevMatch.maLen = 0) then MaxLen := 2 else begin if (MaxMatch < aPrevMatch.maLen) then begin Result := false; aMatch.maLen := 0; aMatch.maLit := CurPos^; Exit; end; MaxLen := aPrevMatch.maLen; end; {get the bytes at the current position and at the end of the maximum match we have to better} {$IFDEF UseGreedyAsm} CurWord := PWord(CurPos)^; MaxWord := PWord(CurPos + pred(MaxLen))^; {$ENDIF} {$IFDEF UseGreedyPascal} CurCh := CurPos^; MaxCh := (CurPos + pred(MaxLen))^; {$ENDIF} {set the chain length to search based on the current maximum match (basically: if we've already satisfied the ample length requirement, don't search as far)} if (MaxLen >= aAmpleLength) then ChainLen := FChainLen div 4 else ChainLen := FChainLen; {get ready for the loop} {$IFDEF DefeatWarnings} MaxDist := 0; {$ENDIF} {$IFDEF UseGreedyAsm} { slip into assembler for speed...} asm push ebx { save those registers we should} push esi push edi mov ebx, Self { ebx will store the Self pointer} mov edi, PrevStrPos { edi => previous string} mov esi, CurPos { esi => current string} @@TestThisPosition: { check previous string is in range} or edi, edi je @@Exit cmp edi, [ebx].TAbDfInputWindow.FStart jb @@Exit cmp edi, CurPos jae @@Exit mov ax, [edi] { check previous string starts with same} cmp CurWord, ax { two bytes as current} jne @@GetNextPosition { ..nope, they don't match} mov edx, edi { check previous string ends with same} add edi, MaxLen { two bytes as current (by "ends" we} dec edi { mean the last two bytes at the} mov ax, [edi] { current match length)} cmp MaxWord, ax mov edi, edx jne @@GetNextPosition { ..nope, they don't match} push edi { compare the previous string with the} push esi { current string} mov eax, MaxMatch add edi, 2 { (we've already checked that the first} sub eax, 2 { two characters are the same)} add esi, 2 mov ecx, eax @@CmpQuads: cmp ecx, 4 jb @@CmpSingles mov edx, [esi] cmp edx, [edi] jne @@CmpSingles add esi, 4 add edi, 4 sub ecx, 4 jnz @@CmpQuads jmp @@MatchCheck @@CmpSingles: or ecx, ecx jb @@MatchCheck mov dl, [esi] cmp dl, [edi] jne @@MatchCheck inc esi inc edi dec ecx jnz @@CmpSingles @@MatchCheck: sub eax, ecx add eax, 2 pop esi pop edi cmp eax, MaxLen { have we found a longer match?} jbe @@GetNextPosition { ..no} mov MaxLen, eax { ..yes, so save it} mov eax, esi { calculate the dist for this new match} sub eax, edi mov MaxDist, eax cmp eax, aAmpleLength { if this match is ample enough, exit} jae @@Exit mov eax, esi { calculate the two bytes at the end of} add eax, MaxLen { this new match} dec eax mov ax, [eax] mov MaxWord, ax @@GetNextPosition: mov eax, ChainLen { we've visited one more link on the} dec eax { chain, if that's the last one we} je @@Exit { should visit, exit} mov ChainLen, eax { advance along the chain} mov edx, [ebx].TAbDfInputWindow.FHashChains mov eax, [ebx].TAbDfInputWindow.FWinMask and edi, eax shl edi, 2 mov edi, [edx+edi] jmp @@TestThisPosition @@Exit: pop edi pop esi pop ebx end; {$ENDIF} {$IFDEF UseGreedyPascal} {for all possible hash nodes in the chain...} while (FStart <= PrevStrPos) and (PrevStrPos < CurPos) do begin {if the initial and maximal characters match...} if (PrevStrPos[0] = CurCh) and (PrevStrPos[pred(MaxLen)] = MaxCh) then begin {compare more characters} Len := 1; CurrentCh := CurPos + 1; MatchStr := PrevStrPos + 1; {compare away, but don't go above the maximum length} while (Len < MaxMatch) and (MatchStr^ = CurrentCh^) do begin inc(CurrentCh); inc(MatchStr); inc(Len); end; {have we reached another maximum for the length?} if (Len > MaxLen) then begin MaxLen := Len; {calculate the distance} MaxDist := CurPos - PrevStrPos; MaxCh := CurPos[pred(MaxLen)]; {is the new best length ample enough?} if MaxLen >= aAmpleLength then Break; end; end; {have we reached the end of this chain?} dec(ChainLen); if (ChainLen = 0) then Break; {otherwise move onto the next position} PrevStrPos := FHashChains^[PtrUInt(PrevStrPos) and FWinMask]; end; {$ENDIF} {based on the results of our investigation, return the match values} if (MaxLen < 3) or (MaxLen <= aPrevMatch.maLen) then begin Result := false; aMatch.maLen := 0; aMatch.maLit := CurPos^; end else begin Result := true; aMatch.maLen := MaxLen; aMatch.maDist := MaxDist; aMatch.maLit := CurPos^; { just in case...} end; end; {--------} function TAbDfInputWindow.GetNextChar : AnsiChar; begin Result := FCurrent^; inc(FCurrent); end; {--------} function TAbDfInputWindow.GetNextKeyLength : integer; begin Result := FLookAheadEnd - FCurrent; if (Result > 3) then Result := 3; end; {--------} function TAbDfInputWindow.iwGetChecksum : longint; begin {the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if FUseCRC32 then Result := not FChecksum else Result := FChecksum; end; {--------} procedure TAbDfInputWindow.iwReadFromStream; var BytesRead : longint; BytesToRead : longint; begin {read some more data into the look ahead zone} BytesToRead := FBufferEnd - FLookAheadEnd; BytesRead := FStream.Read(FLookAheadEnd^, BytesToRead); {if nothing was read, we reached the end of the stream; hence there's no more need to slide the window since we have all the data} if (BytesRead = 0) then FMustSlide := false {otherwise something was actually read...} else begin {update the checksum} if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FLookAheadEnd^, BytesRead) else AbUpdateAdlerBuffer(FChecksum, FLookAheadEnd^, BytesRead); {reposition the pointer for the end of the lookahead area} inc(FLookAheadEnd, BytesRead); end; end; {--------} procedure TAbDfInputWindow.iwSetCapacity(aValue : longint); var ActualSize : integer; begin {calculate the actual size; this will be the value passed in, plus the correct look ahead size, plus 16KB} ActualSize := aValue + (16 * 1024); if FUseDeflate64 then begin inc(ActualSize, dfc_MaxMatchLen64); FMaxMatchLen := dfc_MaxMatchLen64; end else begin inc(ActualSize, dfc_MaxMatchLen); FMaxMatchLen := dfc_MaxMatchLen; end; {get the new buffer} GetMem(FBuffer, ActualSize); {set the other buffer pointers} FStart := FBuffer; FCurrent := FBuffer; FLookAheadEnd := FBuffer; FBufferEnd := FBuffer + ActualSize; FSlidePoint := FBuffer + (16 * 1024); end; {--------} procedure TAbDfInputWindow.iwSlide; var i : integer; ByteCount : PtrInt; Buffer : PAnsiChar; ListItem : PPointer; begin {move current valid data back to the start of the buffer} ByteCount := FLookAheadEnd - FStart; Move(FStart^, FBuffer^, ByteCount); {reset the various pointers} ByteCount := FStart - FBuffer; FStart := FBuffer; dec(FCurrent, ByteCount); dec(FLookAheadEnd, ByteCount); {patch up the hash table: the head pointers} Buffer := FBuffer; ListItem := @FHashHeads^[0]; for i := 0 to pred(c_HashCount) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then ListItem^ := nil; inc(ListItem); end; {..the chain pointers} ListItem := @FHashChains^[0]; for i := 0 to pred(FWinSize) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then ListItem^ := nil; inc(ListItem); end; {now read some more data from the stream} iwReadFromStream; end; {--------} function TAbDfInputWindow.Position : longint; begin Result := (FCurrent - FStart) + FStartOffset; end; {--------} procedure TAbDfInputWindow.ReadBuffer(var aBuffer; aCount : longint; aOffset : Int64); var CurPos : Int64; begin CurPos := FStream.Seek(0, soCurrent); FStream.Seek(aOffSet, soBeginning); FStream.ReadBuffer(aBuffer, aCount); FStream.Seek(CurPos, soBeginning); end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfhufd.pas0000644000175000001440000004415612014201074022621 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: AbDfHufD.pas *} {*********************************************************} {* Deflate Huffman tree for decoder *} {*********************************************************} unit AbDfHufD; {$I AbDefine.inc} {Activate this compiler define and rebuild if you want the complete huffman tree output to print to the current log. The output is voluminous to say the least...} {$IFDEF UseLogging} {.$DEFINE EnableMegaLog} {$ENDIF} {Notes: The object of this class is to build a decoder array, not to build a Huffman tree particularly. We don't want to decode huffman strings bit by bit. moving down the Huffman tree sometimes left, sometimes right. Instead we want to grab a set of bits and look them up in an array. Sometimes we'll grab too many bits, sure, but we can deal with that later. So, the object of the exercise is to calculate the code for a symbol, reverse it ('cos that's how the input bit stream will present it to us) and set that element of the array to the decoded symbol value (plus some extra information: bit lengths). If the alphabet size were 19 (the codelengths huffman tree) and the maximum code length 5, for example, the decoder array would be 2^5 elements long, much larger than the alphabet size. The user of this class will be presenting sets of 5 bits for us to decode. We would like to look up these 5 bits in the array (as an index) and have the symbol returned. Now, since the alphabet size is much less than the number of elements in the decoder array, we must set the other elements in the array as well. Consider a symbol that has a code of 110 in this scenario. The reversed code is 011, or 3, so we'd be setting element 3. However we should also be setting elements 01011, 10011, and 11011 to this symbol information as well, since the lookup will be 5 bits long. Because the code is a huffman code from a prefix tree, we won't get any index clashes between actual codes by this "filling in" process. For the codelength Huffman tree, the maximum code length is at most 7. This equates to a 128 element array. For the literal and distance trees, the max code length is at most 15. This equates to a 32768 element array. For a given lookup value the decoder will return a 32-bit value. The lower 16 bits is the decoded symbol, the next 8 bits is the code length for that symbol, the last 8 bits (the most significant) are the number of extra bits that must be extracted from the input bit stream. } interface uses AbDfBase; type TAbDfHuffmanUsage = ( {usage of a huffman decoder..} huEncoding, {..encoding} huDecoding, {..decoding} huBoth); {..both (used for static trees)} TAbDfDecodeHuffmanTree = class private FAlphaSize : integer; FDecodes : PAbDfLongintList; FDefMaxCodeLen : integer; FEncodes : PAbDfLongintList; {$IFOPT C+} FMask : integer; {$ENDIF} FMaxCodeLen : integer; FUsage : TAbDfHuffmanUsage; protected public constructor Create(aAlphabetSize : integer; aDefMaxCodeLen: integer; aUsage : TAbDfHuffmanUsage); destructor Destroy; override; procedure Build(const aCodeLengths : array of integer; aStartInx : integer; aCount : integer; const aExtraBits : array of byte; aExtraOffset : integer); function Decode(aLookupBits : integer) : longint; function Encode(aSymbol : integer) : longint; {$IFDEF UseLogging} procedure DebugPrint(aLog : TAbLogger); {$ENDIF} property LookupBitLength : integer read FMaxCodeLen; property Decodes : PAbDfLongintList read FDecodes; property Encodes : PAbDfLongintList read FEncodes; end; var AbStaticLiteralTree : TAbDfDecodeHuffmanTree; AbStaticDistanceTree : TAbDfDecodeHuffmanTree; implementation uses SysUtils; const PowerOfTwo : array [0..dfc_MaxCodeLength] of integer = (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768); {===Debug helper routine=============================================} {$IFDEF EnableMegaLog} function CodeToStr(aCode : longint; aLen : integer) : string; var i : integer; begin if (aLen = 0) then Result := 'no code' else begin SetLength(Result, 32); FillChar(Result[1], 32, ' '); for i := 32 downto (33-aLen) do begin if Odd(aCode) then Result[i] := '1' else Result[i] := '0'; aCode := aCode shr 1; end; end; end; {$ENDIF} {====================================================================} {===TAbDfDecodeHuffmanTree===========================================} constructor TAbDfDecodeHuffmanTree.Create( aAlphabetSize : integer; aDefMaxCodeLen: integer; aUsage : TAbDfHuffmanUsage); begin {protect against dumb programming mistakes} Assert(aAlphabetSize >= 2, 'TAbDfDecodeHuffmanTree.Create: a huffman tree must be for at least two symbols'); {let the ancestor initialize} inherited Create; {save the alphabet size, etc} FAlphaSize := aAlphabetSize; FDefMaxCodeLen := aDefMaxCodeLen; FUsage := aUsage; {allocate the encoder array (needs to be initialized to zeros)} if (aUsage <> huDecoding) then FEncodes := AllocMem(FAlphaSize * sizeof(longint)); end; {--------} destructor TAbDfDecodeHuffmanTree.Destroy; begin {destroy the codes arrays} if (FDecodes <> nil) then FreeMem(FDecodes); if (FEncodes <> nil) then FreeMem(FEncodes); {let the ancestor die} inherited Destroy; end; {--------} procedure TAbDfDecodeHuffmanTree.Build( const aCodeLengths : array of integer; aStartInx : integer; aCount : integer; const aExtraBits : array of byte; aExtraOffset : integer); const ByteRevTable : 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); var i : integer; Symbol : integer; LengthCount : array [0..dfc_MaxCodeLength] of integer; NextCode : array [0..dfc_MaxCodeLength] of integer; Code : longint; CodeLen : integer; CodeData : longint; DecoderLen : integer; CodeIncr : integer; Decodes : PAbDfLongintList; Encodes : PAbDfLongintList; {$IFDEF CPU386} DecodesEnd : pointer; {$ENDIF} TablePtr : pointer; begin {count the number of instances of each code length and calculate the maximum code length at the same time} FillChar(LengthCount, sizeof(LengthCount), 0); FMaxCodeLen := 0; for i := 0 to pred(aCount) do begin CodeLen := aCodeLengths[i + aStartInx]; Assert((CodeLen <= FDefMaxCodeLen), Format('TAbDfDecodeHuffmanTree.Build: a code length is greater than %d', [FDefMaxCodeLen])); if (CodeLen > FMaxCodeLen) then FMaxCodeLen := CodeLen; inc(LengthCount[CodeLen]); end; {now we know the maximum code length we can allocate our decoder array} {$IFNDEF CPU386} DecoderLen := 0; {$ENDIF} if (FUsage <> huEncoding) then begin DecoderLen := PowerOfTwo[FMaxCodeLen]; GetMem(FDecodes, DecoderLen * sizeof(longint)); {$IFDEF CPU386} DecodesEnd := PAnsiChar(FDecodes) + (DecoderLen * sizeof(longint)); {$ENDIF} {$IFOPT C+} FillChar(FDecodes^, DecoderLen * sizeof(longint), $FF); FMask := not (DecoderLen - 1); {$ENDIF} end; {calculate the start codes for each code length} Code := 0; LengthCount[0] := 0; for i := 1 to FDefMaxCodeLen do begin Code := (Code + LengthCount[i-1]) shl 1; NextCode[i] := Code; end; {for speed and convenience} Decodes := FDecodes; Encodes := FEncodes; TablePtr := @ByteRevTable; {for each symbol...} for Symbol := 0 to pred(aCount) do begin {calculate the code length} CodeLen := aCodeLengths[Symbol + aStartInx]; {if the code length were zero, just set the relevant entry in the encoder array; the decoder array doesn't need anything} if (CodeLen = 0) then begin if (FUsage <> huDecoding) then Encodes^[Symbol] := -1 end {otherwise we need to fill elements in both the encoder and decoder arrays} else begin {calculate *reversed* code} Code := NextCode[CodeLen]; {$IFDEF CPU386} asm push esi mov eax, Code mov esi, TablePtr xor ecx, ecx xor edx, edx mov cl, ah mov dl, al mov al, [esi+ecx] mov ah, [esi+edx] mov ecx, 16 pop esi sub ecx, CodeLen shr eax, cl mov Code, eax end; {$ELSE} CodeData:= Code; LongRec(Code).Bytes[1]:= ByteRevTable[LongRec(CodeData).Bytes[0]]; LongRec(Code).Bytes[0]:= ByteRevTable[LongRec(CodeData).Bytes[1]]; Code:= Code shr (16-CodeLen); {$ENDIF} {set the code data (bit count, extra bits required, symbol), everywhere the reversed code would appear in the decoder array; set the code data in the encoder array as well} if (Symbol >= aExtraOffset) then begin if (FUsage <> huEncoding) then CodeData := Symbol + { symbol} (CodeLen shl 16) + { code length} (aExtraBits[Symbol-aExtraOffset] shl 24); { extra bits required} if (FUsage <> huDecoding) then Encodes^[Symbol] := Code + { code} (CodeLen shl 16) + { code length} (aExtraBits[Symbol-aExtraOffset] shl 24) { extra bits required} end else begin if (FUsage <> huEncoding) then CodeData := Symbol + { symbol} (CodeLen shl 16); { code length} if (FUsage <> huDecoding) then Encodes^[Symbol] := Code + { code} (CodeLen shl 16); { code length} end; {OPTIMIZATION NOTE: the following code CodeIncr := PowerOfTwo[CodeLen]; while Code < DecoderLen do begin Decodes^[Code] := CodeData; inc(Code, CodeIncr); end; was replaced by the asm code below to improve the speed. The code in the loop is the big time sink in this routine so it was best to replace it.} if (FUsage <> huEncoding) then begin {$IFDEF CPU386} CodeIncr := PowerOfTwo[CodeLen] * sizeof(longint); asm push edi { save edi} mov eax, Decodes { get the Decodes array} mov edi, DecodesEnd { get the end of the Decodes array} mov edx, Code { get Code and..} shl edx, 1 { ..multiply by 4} shl edx, 1 add eax, edx { eax => first element to be set} mov edx, CodeData { get the CodeData} mov ecx, CodeIncr { get the increment per loop} @@1: mov [eax], edx { set the element} add eax, ecx { move to the next element} cmp eax, edi { if we haven't gone past the end..} jl @@1 { ..go back for the next one} pop edi { retrieve edi} end; {$ELSE} CodeIncr := PowerOfTwo[CodeLen]; while Code < DecoderLen do begin Decodes^[Code] := CodeData; inc(Code, CodeIncr); end; {$ENDIF} end; {we've used this code up for this symbol, so increment for the next symbol at this code length} inc(NextCode[CodeLen]); end; end; end; {--------} {$IFDEF UseLogging} procedure TAbDfDecodeHuffmanTree.DebugPrint(aLog : TAbLogger); {$IFDEF EnableMegaLog} var i : integer; Code : longint; {$ENDIF} begin {to print the huffman tree, we must have a logger...} Assert(aLog <> nil, 'TAbDfDecodeHuffmanTree.DebugPrint needs a logger object to which to print'); if (FUsage <> huEncoding) then begin aLog.WriteLine('Huffman decoder array'); aLog.WriteLine(Format('Alphabet size: %d', [FAlphaSize])); aLog.WriteLine(Format('Max codelength: %d', [FMaxCodeLen])); {$IFDEF EnableMegaLog} aLog.WriteLine('Index Len Xtra Symbol Reversed Code'); for i := 0 to pred(PowerOfTwo[FMaxCodeLen]) do begin Code := FDecodes^[i]; if (Code = -1) then aLog.WriteLine(Format('%5d%49s', [i, 'no code'])) else aLog.WriteLine(Format('%5d%4d%5d%7d%33s', [i, ((Code shr 16) and $FF), ((Code shr 24) and $FF), (Code and $FFFF), CodeToStr(i, ((Code shr 16) and $FF))])); end; aLog.WriteLine('---end decoder array---'); {$ENDIF} end; if (FUsage <> huDecoding) then begin aLog.WriteLine('Huffman encoder array'); aLog.WriteLine(Format('Alphabet size: %d', [FAlphaSize])); {$IFDEF EnableMegaLog} aLog.WriteLine('Symbol Len Xtra Reversed Code'); for i := 0 to pred(FAlphaSize) do begin Code := FEncodes^[i]; if (Code = -1) then aLog.WriteLine(Format('%6d%42s', [i, 'no code'])) else aLog.WriteLine(Format('%6d%4d%5d%33s', [i, ((Code shr 16) and $FF), ((Code shr 24) and $FF), CodeToStr((Code and $FFFF), ((Code shr 16) and $FF))])); end; aLog.WriteLine('---end encoder array---'); {$ENDIF} end; end; {$ENDIF} {--------} function TAbDfDecodeHuffmanTree.Decode(aLookupBits : integer) : longint; begin {protect against dumb programming mistakes (note: FMask only exists if assertions are on)} {$IFOPT C+} Assert((aLookupBits and FMask) = 0, 'TAbDfDecodeHuffmanTree.Decode: trying to decode too many bits, use LookupBitLength property'); {$ENDIF} {return the code data} Result := FDecodes^[aLookupBits]; end; {--------} function TAbDfDecodeHuffmanTree.Encode(aSymbol : integer) : longint; begin {protect against dumb programming mistakes} Assert((0 <= aSymbol) and (aSymbol < FAlphaSize), 'TAbDfDecodeHuffmanTree.Encode: trying to encode a symbol that is not in the alphabet'); {return the code data} Result := FEncodes^[aSymbol]; {if the result is -1, it's another programming mistake: the user is attempting to get a code for a symbol that wasn't being used} Assert(Result <> -1, 'TAbDfDecodeHuffmanTree.Encode: trying to encode a symbol that was not used'); end; {====================================================================} {===BuildStaticTrees=================================================} procedure BuildStaticTrees; var i : integer; CodeLens : array [0..287] of integer; begin {this routine builds the static huffman trees, those whose code lengths are determined by the deflate spec} {the static literal tree first} for i := 0 to 143 do CodeLens[i] := 8; for i := 144 to 255 do CodeLens[i] := 9; for i := 256 to 279 do CodeLens[i] := 7; for i := 280 to 287 do CodeLens[i] := 8; AbStaticLiteralTree := TAbDfDecodeHuffmanTree.Create(288, 15, huBoth); AbStaticLiteralTree.Build(CodeLens, 0, 288, dfc_LitExtraBits, dfc_LitExtraOffset); {the static distance tree afterwards} for i := 0 to 31 do CodeLens[i] := 5; AbStaticDistanceTree := TAbDfDecodeHuffmanTree.Create(32, 15, huBoth); AbStaticDistanceTree.Build(CodeLens, 0, 32, dfc_DistExtraBits, dfc_DistExtraOffset); end; {====================================================================} initialization BuildStaticTrees; finalization AbStaticLiteralTree.Free; AbStaticDistanceTree.Free; end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfenc.pas0000644000175000001440000007371712411334107022452 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: AbDfEnc.pas *} {*********************************************************} {* Deflate encoding unit *} {*********************************************************} unit AbDfEnc; {$I AbDefine.inc} interface uses Classes, AbDfBase; function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; implementation uses AbDfInW, AbDfHufD, AbDfStrm, AbDfCryS, AbDfPkMg; {====================================================================} function CalcDynamicBitCount(aUseDeflate64: boolean; aLitBuckets : PAbDfLitBuckets; aDistBuckets : PAbDfDistBuckets; aCodeBuckets : PAbDfCodeLenBuckets; const aCodeLens : array of integer; const aCLCodeLens : array of integer; aLitCount : integer; aDistCount : integer; aCodeCount : integer) : longint; var Symbol : integer; LastSymbol : integer; Inx : integer; begin {note: this routine calculates the number of bits required to compress a given block} {a dynamic block starts off with 5 bits of literal symbol count, 5 bits of distance symbol count, 4 bits of codelength symbol count, and then 3 bits for every codelength symbol used} Result := 5 + 5 + 4 + (aCodeCount * 3); {add in the bits needed to compress the literal and distance trees} inc(Result, aCodeBuckets^[16] * (aCLCodeLens[16] + 2)); inc(Result, aCodeBuckets^[17] * (aCLCodeLens[16] + 3)); inc(Result, aCodeBuckets^[18] * (aCLCodeLens[16] + 7)); for Symbol := 3 to pred(aCodeCount) do begin Inx := dfc_CodeLengthIndex[Symbol]; Assert(Inx <=15, 'CalcDynamicBitCount: the index array of codelengths is corrupted'); inc(Result, aCodeBuckets^[Inx] * aCLCodeLens[Inx]) end; {make the literal symbol 285 a special case} LastSymbol := pred(aLitCount); if (LastSymbol = 285) then LastSymbol := 284; {add in all the bits needed to compress the literals (except 285)} for Symbol := 0 to LastSymbol do if (Symbol < dfc_LitExtraOffset) then inc(Result, aLitBuckets^[Symbol] * aCodeLens[Symbol]) else inc(Result, aLitBuckets^[Symbol] * (aCodeLens[Symbol] + dfc_LitExtraBits[Symbol - dfc_LitExtraOffset])); {add in all the bits needed to compress the literal symbol 285} if (pred(aLitCount) = 285) then if (not aUseDeflate64) then inc(Result, aLitBuckets^[285] * aCodeLens[285]) else inc(Result, aLitBuckets^[285] * (aCodeLens[285] + 16)); {add in all the bits needed to compress the distances} for Symbol := 0 to pred(aDistCount) do inc(Result, aDistBuckets^[Symbol] * (aCodeLens[aLitCount + Symbol] + dfc_DistExtraBits[Symbol])); end; {====================================================================} {====================================================================} procedure OutputEndOfBlock(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree); var Code : longint; begin {note: this routine encodes the end-of-block character (symbol 256) and then writes out the code to the bit stream} {encode the end-of-block character as a symbol} {$IFOPT C+} {if Assertions are on } Code := aLitTree.Encode(256); {$ELSE} Code := aLitTree.Encodes^[256]; {$ENDIF} {write the code out to the bit stream} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); end; {--------} procedure EncodeLZStreamStored(aFinalBlock : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aDataSize : integer; aLog : TAbLogger); var BlockHeader : packed record bhSize : word; bhNotSize : word; end; Buffer : pointer; Code : integer; BlockSize : integer; begin {note: this routine writes out an incompressible block to the bit stream (the store algorithm)} {allocate the maximum buffer we can write at once} GetMem(Buffer, 64 * 1024); try {while there's more incompressible data to store...} while (aDataSize <> 0) do begin {calculate the block size to write this time} if (aDataSize > $FFFF) then begin BlockSize := $FFFF; dec(aDataSize, $FFFF); end else begin BlockSize := aDataSize; aDataSize := 0; end; {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 0'); aLog.WriteLine(Format('..block size: %d', [BlockSize])); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (0 shl 1) else Code := 0 + (0 shl 1); aBitStrm.WriteBits(Code, 3); {align the bit stream to the nearest byte} aBitStrm.AlignToByte; {write the stored block header} BlockHeader.bhSize := BlockSize; BlockHeader.bhNotSize := not BlockHeader.bhSize; aBitStrm.WriteBuffer(BlockHeader, sizeof(BlockHeader)); {get and write this block} aStream.ReadStoredBuffer(Buffer^, BlockSize); aBitStrm.WriteBuffer(Buffer^, BlockSize); end; finally FreeMem(Buffer); end; {clear the stream, ready for the next block} aStream.Clear; end; {--------} procedure EncodeLZStreamStatic(aFinalBlock : boolean; aUseDeflate64 : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aLog : TAbLogger); var Code : integer; begin {note: this routine writes out the stream of LZ77 tokens for the current block to the bit stream, using the static huffman trees to encode the token symbols} {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 1'); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (1 shl 1) else Code := 0 + (1 shl 1); aBitStrm.WriteBits(Code, 3); {encode the LZ77 stream} aStream.Encode(aBitStrm, AbStaticLiteralTree, AbStaticDistanceTree, aUseDeflate64); {output the end-of-block marker to the bit stream} OutputEndOfBlock(aBitStrm, AbStaticLiteralTree); {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('Char: end-of-block marker (#256)'); {$ENDIF} end; {--------} procedure EncodeLZStreamDynamic(aFinalBlock : boolean; aUseDeflate64 : boolean; aUseBest : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aLog : TAbLogger); var i : integer; LitTree : TAbDfDecodeHuffmanTree; DistTree : TAbDfDecodeHuffmanTree; CodeLenTree : TAbDfDecodeHuffmanTree; CodeLenStream : TAbDfCodeLenStream; CodeLens : array [0..285+32] of integer; CLCodeLens : array [0..18] of integer; LitCodeCount : integer; DistCodeCount : integer; LenCodeCount : integer; BitCount : integer; Code : integer; StaticSize : integer; StoredSize : integer; begin {note: this routine writes out the stream of LZ77 tokens for the current block to the bit stream, using the dynamic huffman trees to encode the token symbols; if the routine determines that the data can better be compressed using the static huffman trees or should be stored as is, it'll switch algorithms} {prepare for the try..finally} LitTree := nil; DistTree := nil; CodeLenTree := nil; CodeLenStream := nil; try {calculate the code lengths for the literal symbols} GenerateCodeLengths(15, aStream.LitBuckets^, CodeLens, 0, aLog); {calculate the number of the used codelengths for the literals} LitCodeCount := 286; repeat dec(LitCodeCount); until (CodeLens[LitCodeCount] <> 0); inc(LitCodeCount); {calculate the code lengths for the distance symbols} GenerateCodeLengths(15, aStream.DistBuckets^, CodeLens, LitCodeCount, aLog); {calculate the number of the used codelengths for the distances} DistCodeCount := 32; repeat dec(DistCodeCount); until (CodeLens[DistCodeCount + LitCodeCount] <> 0); inc(DistCodeCount); {calculate the code lengths array as a stream of items} CodeLenStream := TAbDfCodeLenStream.Create(aLog); CodeLenStream.Build(CodeLens, LitCodeCount + DistCodeCount); {calculate the codelengths for the code lengths} GenerateCodeLengths(7, CodeLenStream.Buckets^, CLCodeLens, 0, nil); {calculate the number of the used codelengths for the code lengths} LenCodeCount := 19; repeat dec(LenCodeCount); until (CLCodeLens[dfc_CodeLengthIndex[LenCodeCount]] <> 0); inc(LenCodeCount); {..there's a minimum of four, though} if (LenCodeCount < 4) then LenCodeCount := 4; {if we have to work out and use the best method...} if aUseBest then begin {calculate the number of bits required for the compressed data using dynamic huffman trees} BitCount := CalcDynamicBitCount(aUseDeflate64, aStream.LitBuckets, aStream.DistBuckets, CodeLenStream.Buckets, CodeLens, CLCodeLens, LitCodeCount, DistCodeCount, LenCodeCount); {choose the algorithm with the smallest size} StaticSize := aStream.StaticSize; StoredSize := (aStream.StoredSize + 4) * 8; if (StaticSize < BitCount) then begin if (StoredSize < StaticSize) then EncodeLZStreamStored(aFinalBlock, aStream, aBitStrm, (StoredSize div 8) - 4, aLog) else EncodeLZStreamStatic(aFinalBlock, aUseDeflate64, aStream, aBitStrm, aLog); Exit; end else if (StoredSize < BitCount) then begin EncodeLZStreamStored(aFinalBlock, aStream, aBitStrm, (StoredSize div 8) - 4, aLog); Exit; end; end; {create the code lengths tree} CodeLenTree := TAbDfDecodeHuffmanTree.Create(19, 7, huEncoding); CodeLenTree.Build(CLCodeLens, 0, 19, [0], $FFFF); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Code lengths tree'); CodeLenTree.DebugPrint(aLog); end; {$ENDIF} {calculate the literal encoding tree} LitTree := TAbDfDecodeHuffmanTree.Create(286, 15, huEncoding); LitTree.Build(CodeLens, 0, LitCodeCount, dfc_LitExtraBits, dfc_LitExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Literal/length tree'); LitTree.DebugPrint(aLog); end; {$ENDIF} {calculate the distance tree} if aUseDeflate64 then DistTree := TAbDfDecodeHuffmanTree.Create(32, 15, huEncoding) else DistTree := TAbDfDecodeHuffmanTree.Create(30, 15, huEncoding); DistTree.Build(CodeLens, LitCodeCount, DistCodeCount, dfc_DistExtraBits, dfc_DistExtraOffset); {$IFDEF UseLogging} if (aLog <> nil) then begin {log the tree} aLog.WriteLine('Distance tree'); DistTree.DebugPrint(aLog); {log the new block} aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 2'); aLog.WriteLine(Format('Count of literals: %d', [LitCodeCount])); aLog.WriteLine(Format('Count of distances: %d', [DistCodeCount])); aLog.WriteLine(Format('Count of code lengths: %d', [LenCodeCount])); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (2 shl 1) else Code := 0 + (2 shl 1); aBitStrm.WriteBits(Code, 3); {output the various counts to the bit stream} Code := (LitCodeCount - 257) + ((DistCodeCount - 1) shl 5) + ((LenCodeCount - 4) shl 10); aBitStrm.WriteBits(Code, 14); {output the code length codelengths to the bit stream} for i := 0 to pred(LenCodeCount) do aBitStrm.WriteBits(CLCodeLens[dfc_CodeLengthIndex[i]], 3); {encode and write the codelength stream to the bit stream} CodeLenStream.Encode(aBitStrm, CodeLenTree); {encode and write the LZ77 stream to the bit stream} aStream.Encode(aBitStrm, LitTree, DistTree, aUseDeflate64); {output the end-of-block marker to the bit stream} OutputEndOfBlock(aBitStrm, LitTree); {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('Char: end-of-block marker (#256)'); {$ENDIF} finally LitTree.Free; DistTree.Free; CodeLenTree.Free; CodeLenStream.Free; end; end; {====================================================================} {===Single algorithm Static/Dynamic Huffman tree deflate=============} function DeflateStaticDynamic(aStatic : boolean; aUseBest: boolean; aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper; aLog : TAbLogger) : longint; var i : integer; SlideWin : TAbDfInputWindow; BitStrm : TAbDfOutBitStream; LZ77Stream : TAbDfLZStream; KeyLen : integer; Match : TAbDfMatch; PrevMatch : TAbDfMatch; UseDeflate64 : boolean; UseCRC32 : boolean; GotMatch : boolean; LZStrmIsFull : boolean; TestForBinary: boolean; begin {note: turn on the following define to see when and how the lazy matching algorithm works} {$IFDEF UseLogging} {$DEFINE UseLazyMatchLogging} {$ENDIF} {$IFDEF UseLogging} if (aLog <> nil) then if aStatic then aLog.WriteLine('..compressing source data with static huffman trees') else aLog.WriteLine('..compressing source data with dynamic huffman trees'); {$ENDIF} {prepare for the try..finally} SlideWin := nil; BitStrm := nil; LZ77Stream := nil; try {create the sliding window} UseDeflate64 := (aHelper.Options and dfc_UseDeflate64) <> 0; UseCRC32 := (aHelper.Options and dfc_UseAdler32) = 0; SlideWin := TAbDfInputWindow.Create(aSource, aHelper.StreamSize, aHelper.WindowSize, aHelper.ChainLength, UseDeflate64, UseCRC32); SlideWin.OnProgress := aHelper.OnProgressStep; {create the bit stream} BitStrm := TAbDfOutBitStream.Create(aDest); {create the LZ77 stream} LZ77Stream := TAbDfLZStream.Create(SlideWin, UseDeflate64, aLog); LZStrmIsFull := false; TestForBinary := true; {set the previous match to be a literal character: this will ensure that no lazy matching goes on with the first key read} PrevMatch.maLen := 0; {get the first key length} KeyLen := SlideWin.GetNextKeyLength; {while the current key is three characters long...} while (KeyLen = 3) do begin {tweak for binary/text} {note: the test for whether a stream is binary or not is to check whether there are any #0 characters in the first 1024 bytes: if there are the stream is binary. this test and tweaking is based on experimentation compression ratios for binary and text files based on the PKZIP 'n' option.} if TestForBinary and (LZ77Stream.StoredSize = 1024) then begin if (aHelper.PKZipOption = 'n') then if (LZ77Stream.LitBuckets^[0] = 0) then begin aHelper.AmpleLength := aHelper.AmpleLength * 2; aHelper.MaxLazyLength := aHelper.MaxLazyLength * 2; aHelper.ChainLength := aHelper.ChainLength * 2; SlideWin.ChainLen := aHelper.ChainLength; end; TestForBinary := false; end; {if the LZ77 stream is full, empty it} if LZStrmIsFull then begin if aStatic then EncodeLZStreamStatic(false, UseDeflate64, LZ77Stream, BitStrm, aLog) else EncodeLZStreamDynamic(false, UseDeflate64, aUseBest, LZ77Stream, BitStrm, aLog); LZ77Stream.Clear; LZStrmIsFull := false; end; {try and find a match of three or more characters (note: this has the side effect of adding the current key to the internal hash table); this routine will only return true if it finds a match greater than the previous match} GotMatch := SlideWin.FindLongestMatch(aHelper.AmpleLength, Match, PrevMatch); {if the maximum match length were three and the distance exceeds 4096 bytes, it's most likely that we'll get better compression by outputting the three literal bytes rather than by outputting a length symbol, a distance symbol, and at least ten extra bits for the extra distance value} if (Match.maLen = 3) and (Match.maDist > 4096) then GotMatch := false; {if we found a match...} if GotMatch then begin {if there were no previous match, we can't do any lazy match processing now, so save the current match details ready for lazy matching the next time through, and advance the sliding window} if (PrevMatch.maLen = 0) then begin PrevMatch.maLen := Match.maLen; PrevMatch.maDist := Match.maDist; PrevMatch.maLit := Match.maLit; SlideWin.AdvanceByOne; end {otherwise the previous match is smaller than this one, so we're going to accept this match in preference; throw away the previous match, output the previous literal character instead and save these match details} else begin {$IFDEF UseLazyMatchLogging} if (aLog <> nil) then aLog.WriteLine( Format( '..this match longer, rejecting previous one (%d,%d)', [PrevMatch.maLen, PrevMatch.maDist])); {$ENDIF} LZStrmIsFull := LZ77Stream.AddLiteral(PrevMatch.maLit); PrevMatch.maLen := Match.maLen; PrevMatch.maDist := Match.maDist; PrevMatch.maLit := Match.maLit; SlideWin.AdvanceByOne; end; {if, by this point, we're storing up a match, check to see if it equals or exceeds the maximum lazy match length; if it does then output the match right now and avoid checking for a lazy match} if (PrevMatch.maLen >= aHelper.MaxLazyLength) then begin {$IFDEF UseLazyMatchLogging} if (aLog <> nil) then if ((aHelper.Options and dfc_UseLazyMatch) <> 0) then aLog.WriteLine('..match longer than max lazy match, using it'); {$ENDIF} LZStrmIsFull := LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); SlideWin.Advance(PrevMatch.maLen - 1, PrevMatch.maLen - 1); PrevMatch.maLen := 0; end; end {otherwise, we don't have a match at all: so we possibly just need to output a literal character} else begin {if there was a previous match, output it and discard the results of this match} if (PrevMatch.maLen <> 0) then begin LZStrmIsFull := LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); SlideWin.Advance(PrevMatch.maLen - 1, PrevMatch.maLen - 2); PrevMatch.maLen := 0; end {otherwise there was no previous match or it's already been output, so output this literal} else begin LZStrmIsFull := LZ77Stream.AddLiteral(Match.maLit); SlideWin.AdvanceByOne; PrevMatch.maLen := 0; end; end; {get the next key} KeyLen := SlideWin.GetNextKeyLength; end; {if the last key read were one or two characters in length, save them as literal character encodings} if (KeyLen > 0) then begin {if there's a match pending, it'll be of length 3: output it} if (PrevMatch.maLen <> 0) then begin Assert(PrevMatch.maLen = 3, 'DeflateStaticDynamic: previous match should be length 3'); LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); end {otherwise, output the one or two final literals} else for i := 1 to KeyLen do LZ77Stream.AddLiteral(SlideWin.GetNextChar); end; {empty the LZ77 stream} if aStatic then EncodeLZStreamStatic(true, UseDeflate64, LZ77Stream, BitStrm, aLog) else EncodeLZStreamDynamic(true, UseDeflate64, aUseBest, LZ77Stream, BitStrm, aLog); {calculate the checksum of the input stream} Result := SlideWin.Checksum; finally {free the objects} SlideWin.Free; BitStrm.Free; LZ77Stream.Free; end;{try..finally} {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..checksum: %8x', [Result])) {$ENDIF} end; {====================================================================} {===Simple storing===================================================} function DeflateStored(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper; aLog : TAbLogger) : longint; const StoredBlockSize = $FFFF; var Buffer : PAnsiChar; BytesRead : LongWord; ByteCount : Int64; BytesToGo : Int64; CurPos : Int64; Size : Int64; Percent : longint; CheckSum : longint; UseCRC32 : boolean; BlockHeader : packed record bhInfo : byte; bhSize : word; bhNotSize : word; end; begin {note: this routine merely stores the aSource stream data, no compression is attempted or done} {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('..storing source data to destination, no compression'); {$ENDIF} {initialize} ByteCount := 0; UseCRC32 := (aHelper.Options and dfc_UseAdler32) = 0; if UseCRC32 then Checksum := -1 { CRC32 starts off with all bits set} else CheckSum := 1; { Adler32 starts off with a value of 1} if (aHelper.StreamSize > 0) then BytesToGo := aHelper.StreamSize else begin CurPos := aSource.Seek(0, soCurrent); Size := aSource.Seek(0, soEnd); aSource.Seek(CurPos, soBeginning); BytesToGo := Size - CurPos; end; {get a buffer} GetMem(Buffer, StoredBlockSize); try {while there is still data to be stored...} while (BytesToGo <> 0) do begin {read the next block} BytesRead := aSource.Read(Buffer^, StoredBlockSize); {fire the progress event} if Assigned(aHelper.OnProgressStep) then begin inc(ByteCount, BytesRead); Percent := Round((100.0 * ByteCount) / aHelper.StreamSize); aHelper.OnProgressStep(Percent); end; {update the checksum} if UseCRC32 then AbUpdateCRCBuffer(Checksum, Buffer^, BytesRead) else AbUpdateAdlerBuffer(Checksum, Buffer^, BytesRead); {write the block header} if (BytesRead = BytesToGo) then BlockHeader.bhInfo := 1 {ie, final block, stored} else BlockHeader.bhInfo := 0; {ie, not final block, stored} BlockHeader.bhSize := BytesRead; BlockHeader.bhNotSize := not BlockHeader.bhSize; aDest.WriteBuffer(BlockHeader, sizeof(BlockHeader)); {write the block of data} aDest.WriteBuffer(Buffer^, BytesRead); {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin if (BlockHeader.bhInfo = 0) then aLog.WriteLine(Format('..block size: %d', [BytesRead])) else aLog.WriteLine(Format('..block size: %d (final block)', [BytesRead])); end; {$ENDIF} {decrement the number of bytes to go} dec(BytesToGo, BytesRead); end; finally FreeMem(Buffer); end; {return the checksum} {note: the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if UseCRC32 then Result := not Checksum else Result := Checksum; {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..checksum: %8x', [Result])) {$ENDIF} end; {====================================================================} {===Interfaced routine===============================================} function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; var Helper : TAbDeflateHelper; Log : TAbLogger; SourceStartPos : longint; DestStartPos : longint; begin {pre-conditions: streams are allocated, options enable some kind of archiving} Assert(aSource <> nil, 'Deflate: aSource stream cannot be nil'); Assert(aDest <> nil, 'Deflate: aDest stream cannot be nil'); Assert((aHelper = nil) or ((aHelper.Options and $07) <> 0), 'Deflate: aHelper.Options must enable some kind of archiving'); {$IFDEF DefeatWarnings} Result := 0; {$ENDIF} {prepare for the try..finally} Helper := nil; Log := nil; try {finally} try {except} {create our helper; assign the passed one to it} Helper := TAbDeflateHelper.Create; if (aHelper <> nil) then Helper.Assign(aHelper); {save the current positions of both streams} SourceStartPos := aSource.Position; DestStartPos := aDest.Position; {if the helper's stream size is -1, and it has a progress event handler, calculate the stream size from the stream itself} if Assigned(Helper.OnProgressStep) then begin if (Helper.StreamSize = -1) then Helper.StreamSize := aSource.Size; end {otherwise we certainly can't do any progress reporting} else begin Helper.OnProgressStep := nil; Helper.StreamSize := 0; end; {if lazy matching is not requested, ensure the maximum lazy match length is zero: this make the LZ77 code a little easier to understand} if ((Helper.Options and dfc_UseLazyMatch) = 0) then Helper.MaxLazyLength := 0; {patch up the various lengths in the helper if they specify the maximum (that is, are equal to -1)} if (Helper.AmpleLength = -1) then Helper.AmpleLength := MaxLongInt; if (Helper.MaxLazyLength = -1) then Helper.MaxLazyLength := MaxLongInt; if (Helper.ChainLength = -1) then Helper.ChainLength := MaxLongInt; {create the logger, if requested} if (Helper.LogFile <> '') then begin Log := TAbLogger.Create(Helper.LogFile); Log.WriteLine('DEFLATING STREAM...'); {$IFNDEF UseLogging} Log.WriteLine('Need to recompile the app with UseLogging turned on'); {$ENDIF} end; {use the helper's options property to decide what to do} case (Helper.Options and $07) of dfc_CanUseStored : Result := DeflateStored(aSource, aDest, Helper, Log); dfc_CanUseStatic : Result := DeflateStaticDynamic(true, false, aSource, aDest, Helper, Log); dfc_CanUseDynamic : Result := DeflateStaticDynamic(false, false, aSource, aDest, Helper, Log); else Result := DeflateStaticDynamic(false, true, aSource, aDest, Helper, Log); end; {save the uncompressed and compressed sizes} if (aHelper <> nil) then begin aHelper.NormalSize := aSource.Position - SourceStartPos; aHelper.CompressedSize := aDest.Position - DestStartPos; end; except on E : EAbInternalDeflateError do begin {$IFDEF UseLogging} if (Log <> nil) then Log.WriteLine(Format('Internal exception raised: %s', [E.Message])); {$ENDIF} raise EAbDeflateError.Create(E.Message); end; else raise; end; finally Helper.Free; Log.Free; end; {WARNING NOTE: the compiler will warn that the return value of this function might be undefined. However, it is wrong: it has been fooled by the code. If you don't want to see this warning again, enable the DefeatWarnings compiler define in AbDefine.inc.} end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfdec.pas0000644000175000001440000006435212014201074022426 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: AbDfDec.pas *} {*********************************************************} {* Deflate decoding unit *} {*********************************************************} unit AbDfDec; {$I AbDefine.inc} interface uses Classes, AbDfBase; function Inflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; implementation uses SysUtils, AbDfStrm, AbDfHufD, AbDfOutW, AbDfCryS; {===Helper routines==================================================} procedure ReadLitDistCodeLengths(aInStrm : TAbDfInBitStream; aCodeLenTree : TAbDfDecodeHuffmanTree; var aCodeLens : array of integer; aCount : integer; var aTotalBits : integer); var i : integer; SymbolCount : integer; LookupValue : integer; EncodedSymbol : longint; Symbol : integer; SymbolCodeLen : integer; RepeatCount : integer; BitBuffer : TAb32bit; BitCount : integer; begin {$IFDEF UseLogging} {we need to calculate the total number of bits in the code lengths for reporting purposes, so zero the count} aTotalBits := 0; {$ENDIF} {clear the code lengths array} FillChar(aCodeLens, sizeof(aCodeLens), 0); {read all the Symbols required in the bit stream} SymbolCount := 0; while (SymbolCount < aCount) do begin {grab the lookup set of bits} BitCount := aCodeLenTree.LookupBitLength + 7; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aCodeLenTree.LookupBitLength]; {get the encoded Symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aCodeLenTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aCodeLenTree.Decodes^[LookupValue]; {$ENDIF} {extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; {$IFDEF UseLogging} {keep count of the total number of bits read} inc(aTotalBits, SymbolCodeLen); {$ENDIF} {check that the symbol is between 0 and 18} if not ((0 <= Symbol) and (Symbol <= 18)) then raise EAbInternalInflateError.Create( 'decoded a symbol not between 0 and 18 {ReadLitDistCodeLengths}'); {check that the codelength is in range} if not ((0 < SymbolCodeLen) and (SymbolCodeLen <= aCodeLenTree.LookupBitLength)) then raise EAbInternalInflateError.Create( 'decoded a code length out of range {ReadLitDistCodeLengths}'); {for a Symbol of 0..15, just save the value} if (Symbol <= 15) then begin aCodeLens[SymbolCount] := Symbol; inc(SymbolCount); {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end {for a Symbol of 16, get two more bits and copy the previous code length that many times + 3} else if (Symbol = 16) then begin RepeatCount := 3 + ((BitBuffer shr SymbolCodeLen) and $3); Symbol := aCodeLens[SymbolCount-1]; for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := Symbol; inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 2; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 2); {$ENDIF} end {for a Symbol of 17, get three more bits and copy a zero code length that many times + 3} else if (Symbol = 17) then begin RepeatCount := 3 + ((BitBuffer shr SymbolCodeLen) and $7); {note: the codelengths array was aet to zeros at the start so the following two lines are not needed for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := 0;} inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 3; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 3); {$ENDIF} end {for a Symbol of 18, get seven more bits and copy a zero code length that many times + 11} else if (Symbol = 18) then begin RepeatCount := 11 + ((BitBuffer shr SymbolCodeLen) and $7F); {note: the codelengths array was aet to zeros at the start so the following two lines are not needed for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := 0;} inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 7; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 7); {$ENDIF} end; end; end; {--------} procedure DecodeData(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLiteralTree : TAbDfDecodeHuffmanTree; aDistanceTree : TAbDfDecodeHuffmanTree; aDeflate64 : boolean); var LookupValue : integer; EncodedSymbol : longint; Symbol : integer; SymbolCodeLen : integer; ExtraBitCount : integer; Length : integer; Distance : integer; BitBuffer : TAb32bit; BitCount : integer; begin {extract the first symbol (it's got to be a literal/length symbol)} {..grab the lookup set of bits} if aDeflate64 then BitCount := aLiteralTree.LookupBitLength + 16 else BitCount := aLiteralTree.LookupBitLength + 5; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aLiteralTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aLiteralTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aLiteralTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; // ExtraBitCount := EncodedSymbol shr 24; {repeat until we get the end-of-block symbol} while ((Symbol <> 256) {and (ExtraBitCount <> 15)}) do begin {for a literal, just output it to the sliding window} if (Symbol < 256) then begin aOutWindow.AddLiteral(AnsiChar(Symbol)); {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end {for a length value, we need to get any extra bits, and then the distance (plus any extra bits for that), and then add the duplicated characters to the sliding window} else begin {check that the length symbol is less than or equal to 285} if (Symbol > 285) then raise EAbInternalInflateError.Create( 'decoded an invalid length symbol: greater than 285 [DecodeData]'); {calculate the length (if need be, by calculating the number of extra bits that encode the length)} if (not aDeflate64) and (Symbol = 285) then begin Length := 258; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin ExtraBitCount := EncodedSymbol shr 24; if (ExtraBitCount = 0) then begin Length := dfc_LengthBase[Symbol - 257]; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin Length := dfc_LengthBase[Symbol - 257] + ((BitBuffer shr SymbolCodeLen) and AbExtractMask[ExtraBitCount]); BitCount := SymbolCodeLen + ExtraBitCount; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} end; end; {extract the distance} {..grab the lookup set of bits} BitCount := aDistanceTree.LookupBitLength + 14; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aDistanceTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aDistanceTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aDistanceTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; {check that the distance symbol is less than or equal to 29} if (not aDeflate64) and (Symbol > 29) then raise EAbInternalInflateError.Create( 'decoded an invalid distance symbol: greater than 29 [DecodeData]'); {..calculate the extra bits for the distance} ExtraBitCount := EncodedSymbol shr 24; {..calculate the distance} if (ExtraBitCount = 0) then begin Distance := dfc_DistanceBase[Symbol]; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin Distance := dfc_DistanceBase[Symbol] + ((BitBuffer shr SymbolCodeLen) and AbExtractMask[ExtraBitCount]); BitCount := SymbolCodeLen + ExtraBitCount; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} end; {duplicate the characters in the sliding window} aOutWindow.AddLenDist(Length, Distance); end; {extract the next symbol} {..grab the lookup set of bits} if aDeflate64 then BitCount := aLiteralTree.LookupBitLength + 16 else BitCount := aLiteralTree.LookupBitLength + 5; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aLiteralTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aLiteralTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aLiteralTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; end; {discard the bits for the end-of-block marker} {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end; {--------} procedure InflateStoredBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger); const BufferSize = 16 * 1024; var LenNotLen : packed record Len : word; NotLen : word; end; BytesToGo : integer; BytesToWrite : integer; Buffer : pointer; begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a stored block'); {$ENDIF} {align the input bit stream to the nearest byte boundary} aInStrm.AlignToByte; {read the length of the stored data and the notted length} aInStrm.ReadBuffer(LenNotLen, sizeof(LenNotLen)); {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..block length: %d (%-4x, NOT %-4x)', [LenNotLen.Len, LenNotLen.Len, LenNotLen.NotLen])); {$ENDIF} {check that NOT of the length equals the notted length} if ((not LenNotLen.Len) <> LenNotLen.NotLen) then raise EAbInternalInflateError.Create( 'invalid stored block (length and NOT length do not match) [InflateStoredBlock]'); {calculate the number of bytes to copy from the stored block} BytesToGo := LenNotLen.Len; {allocate a large buffer} GetMem(Buffer, BufferSize); {copy all the data in the stored block to the output window} try {while there are still some bytes to copy...} while (BytesToGo <> 0) do begin {calculate the number of bytes this time} if (BytesToGo > BufferSize) then BytesToWrite := BufferSize else BytesToWrite := BytesToGo; {read that many bytes and write them to the output window} aInStrm.ReadBuffer(Buffer^, BytesToWrite); aOutWindow.AddBuffer(Buffer^, BytesToWrite); {calculate the number of bytes still to copy} dec(BytesToGo, BytesToWrite); end; finally FreeMem(Buffer); end; end; {--------} procedure InflateStaticBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger; aDeflate64 : boolean); begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a static huffman tree block'); {$ENDIF} {decode the data with the static trees} DecodeData(aInStrm, aOutWindow, AbStaticLiteralTree, AbStaticDistanceTree, aDeflate64); end; {--------} procedure InflateDynamicBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger; aDeflate64 : boolean); var i : integer; LitCount : integer; DistCount : integer; CodeLenCount : integer; CodeLens : array [0..285+32] of integer; CodeLenTree : TAbDfDecodeHuffmanTree; LiteralTree : TAbDfDecodeHuffmanTree; DistanceTree : TAbDfDecodeHuffmanTree; TotalBits : integer; begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a dynamic huffman tree block'); {$ENDIF} {prepare for the try..finally} CodeLenTree := nil; LiteralTree := nil; DistanceTree := nil; try {decode the number of literal, distance and codelength codes} LitCount := aInStrm.ReadBits(5) + 257; DistCount := aInStrm.ReadBits(5) + 1; CodeLenCount := aInStrm.ReadBits(4) + 4; {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine(Format('Count of literals: %d', [LitCount])); aLog.WriteLine(Format('Count of distances: %d', [DistCount])); aLog.WriteLine(Format('Count of code lengths: %d', [CodeLenCount])); end; {$ENDIF} {verify that the counts are valid} if (LitCount > 286) then raise EAbInternalInflateError.Create( 'count of literal codes in dynamic block is greater than 286 [InflateDynamicBlock]'); if (not aDeflate64) and (DistCount > 30) then raise EAbInternalInflateError.Create( 'count of distance codes in dynamic block is greater than 30 [InflateDynamicBlock]'); {read the codelengths} FillChar(CodeLens, 19 * sizeof(integer), 0); for i := 0 to pred(CodeLenCount) do CodeLens[dfc_CodeLengthIndex[i]] := aInStrm.ReadBits(3); {$IFDEF UseLogging} {log them} if (aLog <> nil) then begin aLog.WriteLine('CodeLength Huffman tree: code lengths'); for i := 0 to 18 do aLog.WriteStr(Format('%-3d', [CodeLens[i]])); aLog.WriteLine(''); aLog.WriteLine(Format('..total bits: %d', [CodeLenCount * 3])); end; {$ENDIF} {create the codelength huffman tree} CodeLenTree := TAbDfDecodeHuffmanTree.Create(19, 7, huDecoding); CodeLenTree.Build(CodeLens, 0, 19, [0], $FFFF); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Code lengths tree'); CodeLenTree.DebugPrint(aLog); end; {$ENDIF} {read the codelengths for both the literal/length and distance huffman trees} ReadLitDistCodeLengths(aInStrm, CodeLenTree, CodeLens, LitCount + DistCount, TotalBits); {$IFDEF UseLoggingx} {log them} if (aLog <> nil) then begin aLog.WriteLine('Literal/length & Dist Huffman trees: code lengths'); for i := 0 to pred(LitCount + DistCount) do aLog.WriteLine(Format('%3d: %3d', [i, CodeLens[i]])); aLog.WriteLine(''); aLog.WriteLine(Format('..total bits: %d', [TotalBits])); end; {$ENDIF} {create the literal huffman tree} LiteralTree := TAbDfDecodeHuffmanTree.Create(286, 15, huDecoding); LiteralTree.Build(CodeLens, 0, LitCount, dfc_LitExtraBits, dfc_LitExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Literal/length tree'); LiteralTree.DebugPrint(aLog); end; {$ENDIF} {create the distance huffman tree} if aDeflate64 then DistanceTree := TAbDfDecodeHuffmanTree.Create(32, 15, huDecoding) else DistanceTree := TAbDfDecodeHuffmanTree.Create(30, 15, huDecoding); DistanceTree.Build(CodeLens, LitCount, DistCount, dfc_DistExtraBits, dfc_DistExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Distance tree'); DistanceTree.DebugPrint(aLog); end; {$ENDIF} {using the literal and distance trees, decode the bit stream} DecodeData(aInStrm, aOutWindow, LiteralTree, DistanceTree, aDeflate64); finally CodeLenTree.Free; LiteralTree.Free; DistanceTree.Free; end; end; {====================================================================} {===Interfaced routine===============================================} function Inflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; var Helper : TAbDeflateHelper; InBitStrm : TAbDfInBitStream; OutWindow : TAbDfOutputWindow; Log : TAbLogger; UseDeflate64 : boolean; UseCRC32 : boolean; IsFinalBlock : boolean; BlockType : integer; TestOnly : boolean; SourceStartPos : longint; DestStartPos : longint; {$IFDEF UseLogging} StartPosn : longint; {$ENDIF} begin {$IFDEF DefeatWarnings} Result := 0; SourceStartPos := 0; DestStartPos := 0; TestOnly := False; {$ENDIF} {$IFDEF UseLogging} StartPosn := 0; {$ENDIF} {pre-conditions: streams must be allocated of course} Assert(aSource <> nil, 'Deflate: aSource stream cannot be nil'); Assert(aDest <> nil, 'Deflate: aDest stream cannot be nil'); {prepare for the try..finally} Helper := nil; InBitStrm := nil; OutWindow := nil; Log := nil; try {finally} try {except} {create our helper; assign the passed one to it} Helper := TAbDeflateHelper.Create; if (aHelper <> nil) then Helper.Assign(aHelper); {get the initial start positions of both streams} SourceStartPos := aSource.Position; DestStartPos := aDest.Position; {if the helper's stream size is -1, and it has a progress event handler, calculate the stream size from the stream itself} if Assigned(Helper.OnProgressStep) then begin if (Helper.StreamSize = -1) then Helper.StreamSize := aSource.Size; end {otherwise we certainly can't do any progress reporting} else begin Helper.OnProgressStep := nil; Helper.StreamSize := 0; end; {create the logger, if requested} if (Helper.LogFile <> '') then begin Log := TAbLogger.Create(Helper.LogFile); Log.WriteLine('INFLATING STREAM...'); {$IFNDEF UseLogging} Log.WriteLine('Need to recompile the app with UseLogging turned on'); {$ENDIF} end; InBitStrm := TAbDfInBitStream.Create(aSource, Helper.OnProgressStep, Helper.StreamSize); {create the output sliding window} UseDeflate64 := (Helper.Options and dfc_UseDeflate64) <> 0; UseCRC32 := (Helper.Options and dfc_UseAdler32) = 0; TestOnly := (Helper.Options and dfc_TestOnly) <> 0; OutWindow := TAbDfOutputWindow.Create( aDest, UseDeflate64, UseCRC32, Helper.PartialSize, TestOnly, Log); {start decoding the deflated stream} repeat {read the final block flag and the block type} IsFinalBlock := InBitStrm.ReadBit; BlockType := InBitStrm.ReadBits(2); {$IFDEF UseLogging} {log it} if (Log <> nil) then begin Log.WriteLine(''); Log.WriteLine('Starting new block'); Log.WriteLine(Format('..final block? %d', [ord(IsFinalBlock)])); Log.WriteLine(Format('..block type? %d', [BlockType])); StartPosn := OutWindow.Position; end; {$ENDIF} case BlockType of 0 : InflateStoredBlock(InBitStrm, OutWindow, Log); 1 : InflateStaticBlock(InBitStrm, OutWindow, Log, UseDeflate64); 2 : InflateDynamicBlock(InBitStrm, OutWindow, Log, UseDeflate64); else raise EAbInternalInflateError.Create( 'starting new block, but invalid block type [Inflate]'); end; {$IFDEF UseLogging} {log it} if (Log <> nil) then Log.WriteLine(Format('---block end--- (decoded size %d bytes)', [OutWindow.Position - StartPosn])); {$ENDIF} until IsFinalBlock; {get the uncompressed stream's checksum} Result := OutWindow.Checksum; if TestOnly and (aHelper <> nil) then aHelper.NormalSize := OutWindow.Position; {$IFDEF UseLogging} {log it} if (Log <> nil) then Log.WriteLine(Format('End of compressed stream, checksum %-8x', [Result])); {$ENDIF} except on E : EAbPartSizedInflate do begin {nothing, just swallow the exception} Result := 0; end; on E : EAbAbortProgress do begin {nothing, just swallow the exception} Result := 0; end; on E : EAbInternalInflateError do begin if (Log <> nil) then Log.WriteLine(Format('Internal exception raised: %s', [E.Message])); raise EAbInflateError.Create(E.Message); end; end; finally Helper.Free; OutWindow.Free; InBitStrm.Free; Log.Free; end; {if there's a helper return the compressed and uncompressed sizes} if (aHelper <> nil) then begin if not TestOnly then aHelper.NormalSize := aDest.Position - DestStartPos; aHelper.CompressedSize := aSource.Position - SourceStartPos; end; {WARNING NOTE: the compiler will warn that the return value of this function might be undefined. However, it is wrong: it has been fooled by the code. If you don't want to see this warning again, enable the DefeatWarnings compiler define in AbDefine.inc.} end; {====================================================================} end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abdfcrys.pas0000644000175000001440000004536712014201074022660 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-0.9.8/plugins/wcx/zip/src/fparchive/abdfbase.pas0000644000175000001440000005631512014201074022605 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-0.9.8/plugins/wcx/zip/src/fparchive/abdefine.inc0000644000175000001440000002117312423755012022605 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 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-0.9.8/plugins/wcx/zip/src/fparchive/abconst.pas0000644000175000001440000001747312014201074022511 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-0.9.8/plugins/wcx/zip/src/fparchive/abbzip2typ.pas0000644000175000001440000003551712613112750023154 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, AbBzip2, AbExcept, AbVMStrm, AbBitBkt, 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, soFromBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atBzip2; { Check for embedded TAR } Strm.Seek(0, soFromBeginning); DecompStream := TBZDecompressionStream.Create(Strm); try TarStream := TMemoryStream.Create; try DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soFromBeginning); 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; inherited SaveArchive; UpdateArchive := (FBzip2Stream.Size > 0) and (FBzip2Stream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FBzip2Stream); TempFileName := GetTempName(FArchiveName + ExtensionSeparator); { Create new archive with temporary name } FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream); try CompStream.CopyFrom(FTarStream, 0); 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(bs9, 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 CompStream.CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } 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; Buffer: PByte; N: Integer; begin DecompStream := TBZDecompressionStream.Create(FBzip2Stream); 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; 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-0.9.8/plugins/wcx/zip/src/fparchive/abbzip2.pas0000644000175000001440000006635512367113704022431 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.} TBlockSize100k = (bs1, bs2, bs3, bs4, bs5, bs6, bs7, bs8, bs9); TBZCompressionStream = class(TCustomBZip2Stream) private function GetCompressionRate: Single; public constructor Create(BlockSize100k: TBlockSize100k; 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(BlockSize100k: TBlockSize100k; Dest: TStream); const BlockSizes: array[TBlockSize100k] of ShortInt = (1, 2, 3, 4, 5, 6, 7, 8, 9); begin inherited Create(Dest); LoadBzip2DLL; FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); CCheck(BZ2_bzCompressInit(FBZRec, BlockSizes[BlockSize100k], 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-0.9.8/plugins/wcx/zip/src/fparchive/abbrowse.pas0000644000175000001440000005111412751400322022657 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, 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; 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; 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} end; { -------------------------------------------------------------------------- } end. doublecmd-0.9.8/plugins/wcx/zip/src/fparchive/abbitbkt.pas0000644000175000001440000001560012014201074022630 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-0.9.8/plugins/wcx/zip/src/fparchive/abbase.pas0000644000175000001440000000347012014201074022265 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-0.9.8/plugins/wcx/zip/src/fparchive/abarctyp.pas0000644000175000001440000021131212177772463022702 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 {$IFDEF MSWINDOWS} Windows, {$ENDIF MSWINDOWS} Classes, Types, 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; 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 UnTagItems(const FileMask : string); 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; 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^, 4); 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^, 4); 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; { -------------------------------------------------------------------------- } 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.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-0.9.8/plugins/wcx/zip/src/ZipFunc.pas0000644000175000001440000004376413530175472020511 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.tar, *.tgz archives 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 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 FOperationResult: LongInt; FChangeVolProcW: TChangeVolProcW; FProcessDataProcW : TProcessDataProcW; 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; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; function GetPackerCaps : Integer;dcpcall; procedure ConfigurePacker (Parent: HWND; DllInstance: THandle);dcpcall; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; {Extension API} procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; const IniFileName = 'zip.ini'; var gStartupInfo: TExtensionStartupInfo; gCompressionMethodToUse : TAbZipSupportedMethod; gDeflationOption : TAbZipDeflationOption; gTarAutoHandle : Boolean; implementation uses SysUtils, LazUTF8, ZipConfDlg, AbBrowse, DCConvertEncoding, DCOSUtils; 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; // -- Exported functions ------------------------------------------------------ function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; begin Result := 0; ArchiveData.OpenResult := E_NOT_SUPPORTED; end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; var Arc : TAbZipKitEx; begin Result := 0; Arc := TAbZipKitEx.Create(nil); try Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; 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))); 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; begin Result := E_NOT_SUPPORTED; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; var Arc : TAbZipKitEx; sFileName : String; begin Arc := TAbZipKitEx(Pointer(hArcData)); if Arc.Tag > Arc.Count - 1 then Exit(E_END_ARCHIVE); sFileName := Arc.GetFileName(Arc.Tag); StringToArrayW(UTF8Decode(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; 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; begin Result := E_NOT_SUPPORTED; end; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; var Arc : TAbZipKitEx; DestNameUtf8: String; begin Arc := TAbZipKitEx(Pointer(hArcData)); try Arc.FOperationResult := E_SUCCESS; case Operation of PK_TEST: begin Arc.TestItemAt(Arc.Tag); // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin if Arc.FProcessDataProcW(PWideChar(UTF8Decode(Arc.Items[Arc.Tag].FileName)), Arc.Items[Arc.Tag].UncompressedSize) = 0 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 Arc.BaseDirectory := ExtractFilePath(DestNameUtf8); Arc.ExtractAt(Arc.Tag, DestNameUtf8); // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin if Arc.FProcessDataProcW(PWideChar(UTF8Decode(Arc.Items[Arc.Tag].FileName)), Arc.Items[Arc.Tag].UncompressedSize) = 0 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) and (Arc.FOperationResult = E_UNKNOWN) then begin DestNameUtf8:= E.Message + LineEnding + LineEnding + Arc.Items[Arc.Tag].FileName; if gStartupInfo.MessageBox(PAnsiChar(DestNameUtf8), nil, MB_OKCANCEL or MB_ICONERROR) = ID_OK then Arc.FOperationResult:= E_HANDLED else begin Arc.FOperationResult:= E_EABORTED; end; end; end; end; Result:= Arc.FOperationResult; Arc.Tag := Arc.Tag + 1; end; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; var Arc : TAbZipKitEx; begin Arc := TAbZipKitEx(Pointer(hArcData)); Arc.CloseArchive; FreeAndNil(Arc); Result := E_SUCCESS; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; begin end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; var Arc : TAbZipKitEx absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then begin Arc.FChangeVolProcW := pChangeVolProc; end; end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; begin end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; var Arc : TAbZipKitEx; begin if (hArcData <> wcxInvalidHandle) then // if archive is open begin Arc := TAbZipKitEx(Pointer(hArcData)); Arc.FProcessDataProcW := pProcessDataProc; end else // if archive is close gProcessDataProcW := pProcessDataProc; end; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; var Arc : TAbZipKitEx; FilePath: String; FileName: UnicodeString; sPassword: AnsiString; sPackedFile: String; 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.CompressionMethodToUse:= gCompressionMethodToUse; Arc.DeflationOption:= gDeflationOption; Arc.FProcessDataProcW := gProcessDataProcW; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.StoreOptions := Arc.StoreOptions + [soReplace]; sPackedFile := UTF16ToUTF8(UnicodeString(PackedFile)); try if ((Flags and PK_PACK_ENCRYPT) <> 0) and (LowerCase(ExtractFileExt(sPackedFile)) = '.zip') then // only zip supports encryption begin Arc.AbNeedPasswordEvent(Arc, sPassword); Arc.Password:= sPassword; end; Arc.OpenArchive(sPackedFile); Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; 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; Arc.Save; Arc.CloseArchive; except on E: Exception do Arc.FOperationResult := GetArchiveError(E); end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; var Arc : TAbZipKitEx; pFileName : PWideChar; FileName : UnicodeString; FileNameUTF8 : String; 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))); // 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 Arc.FOperationResult := GetArchiveError(E); end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function GetPackerCaps : Integer;dcpcall; 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; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle);dcpcall; begin CreateZipConfDlg; end; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; begin try Result:= (AbDetermineArcType(UTF16ToUTF8(UnicodeString(FileName)), atUnknown) <> atUnknown); except Result := False; end; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; begin gStartupInfo:= StartupInfo^; // Load configuration from ini file LoadConfig; 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 case ErrorClass of ecFileOpenError: begin ErrorClass:= ecAbbrevia; ErrorCode:= AbFCIFileOpenError; FOperationResult:= E_EOPEN; end; ecFileCreateError: begin ErrorClass:= ecAbbrevia; ErrorCode:= AbFCICreateError; FOperationResult:= E_ECREATE; end; ecAbbrevia: 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 gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_OKCANCEL or MB_ICONERROR) = ID_OK then FOperationResult:= E_HANDLED else begin raise EAbUserAbort.Create; end; 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, UTF8Decode(ImageName)); Abort := (FChangeVolProcW(AVolume, PK_VOL_ASK) = 0); if not Abort then ImageName:= UTF8Encode(UnicodeString(AVolume)); end; end; procedure TAbZipKitEx.AbArchiveItemProgressEvent(Sender: TObject; Item: TAbArchiveItem; Progress: Byte; var Abort: Boolean); begin try if Assigned(FProcessDataProcW) then begin if Assigned(Item) then Abort := (FProcessDataProcW(PWideChar(UTF8Decode(Item.FileName)), -(Progress + 1000)) = 0) else Abort := (FProcessDataProcW(nil, -(Progress + 1000)) = 0); end; except Abort := True; 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 raise EAbUserAbort.Create; end; end. doublecmd-0.9.8/plugins/wcx/zip/src/ZipConfDlg.pas0000644000175000001440000001226412601037351021110 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.bz2, *.tar, *.tgz, *.tbz archives Copyright (C) 2008-2014 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; procedure LoadConfig; procedure SaveConfig; implementation uses ZipFunc, AbZipTyp, DCClassesUtf8; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var iIndex: Integer; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin case gCompressionMethodToUse of smStored: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 0, 0); smDeflated: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 1, 0); smBestMethod: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 2, 0); end; // case case gDeflationOption of doNormal: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 0, 0); doMaximum: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 1, 0); doFast: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 2, 0); doSuperFast: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 3, 0); end; // case SendDlgMsg(pDlg, 'chkTarAutoHandle', DM_SETCHECK, PtrInt(gTarAutoHandle), 0); end; DN_CLICK: if DlgItemName = 'btnOK' then begin iIndex:= SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTGETITEMINDEX, 0, 0); case iIndex of 0: gCompressionMethodToUse:= smStored; 1: gCompressionMethodToUse:= smDeflated; 2: gCompressionMethodToUse:= smBestMethod; end; // case iIndex:= SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTGETITEMINDEX, 0, 0); case iIndex of 0: gDeflationOption:= doNormal; 1: gDeflationOption:= doMaximum; 2: gDeflationOption:= doFast; 3: gDeflationOption:= doSuperFast; end; // case gTarAutoHandle:= Boolean(SendDlgMsg(pDlg, 'chkTarAutoHandle', 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 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; procedure LoadConfig; var gIni: TIniFileEx; begin gIni:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try gCompressionMethodToUse:= TAbZipSupportedMethod(gIni.ReadInteger('Configuration', 'CompressionMethodToUse', Integer(AbDefCompressionMethodToUse))); gDeflationOption:= TAbZipDeflationOption(gIni.ReadInteger('Configuration', 'DeflationOption', Integer(AbDefDeflationOption))); gTarAutoHandle:= gIni.ReadBool('Configuration', 'TarAutoHandle', True); finally gIni.Free; end; end; procedure SaveConfig; var gIni: TIniFileEx; begin gIni:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try gIni.WriteInteger('Configuration', 'CompressionMethodToUse', Integer(gCompressionMethodToUse)); gIni.WriteInteger('Configuration', 'DeflationOption', Integer(gDeflationOption)); gIni.WriteBool('Configuration', 'TarAutoHandle', gTarAutoHandle); gIni.UpdateFile; finally gIni.Free; end; end; end. doublecmd-0.9.8/plugins/wcx/zip/src/ZipConfDlg.lfm0000644000175000001440000001077513200074160021103 0ustar alexxusersobject DialogBox: TDialogBox Left = 526 Height = 299 Top = 165 Width = 424 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Zip plugin configuration' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 299 ClientWidth = 424 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '1.1' object lblAbout: TLabel Left = 6 Height = 115 Top = 6 Width = 412 Align = alClient Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Zip plugin supports PKZIP-compatible, TAR, GZip and BZip2 data compression and archiving.'#13#10#13#10'Copyright (C) 2006-2014 Alexander Koblov (alexx2000@mail.ru)' ParentColor = False WordWrap = True end object gbCompression: TGroupBox Left = 6 Height = 152 Top = 141 Width = 412 Align = alBottom AutoSize = True BorderSpacing.Top = 20 Caption = 'Compression' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 134 ClientWidth = 408 TabOrder = 0 object lblCompressionMethodToUse: TLabel AnchorSideLeft.Control = gbCompression AnchorSideTop.Control = gbCompression Left = 6 Height = 13 Top = 6 Width = 137 Caption = 'Compression method to use:' ParentColor = False end object lblDeflationOption: TLabel AnchorSideLeft.Control = gbCompression AnchorSideTop.Control = lblCompressionMethodToUse AnchorSideTop.Side = asrBottom Left = 6 Height = 13 Top = 37 Width = 80 BorderSpacing.Top = 18 Caption = 'Deflation option:' ParentColor = False end object cbCompressionMethodToUse: TComboBox AnchorSideLeft.Control = lblCompressionMethodToUse AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCompressionMethodToUse AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbCompression AnchorSideRight.Side = asrBottom Left = 155 Height = 21 Top = 2 Width = 247 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Right = 6 ItemHeight = 13 ItemIndex = 2 Items.Strings = ( 'smStored' 'smDeflated' 'smBestMethod' ) OnChange = ComboBoxChange Style = csDropDownList TabOrder = 0 Text = 'smBestMethod' end object cbDeflationOption: TComboBox AnchorSideLeft.Control = cbCompressionMethodToUse AnchorSideTop.Control = lblDeflationOption AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCompressionMethodToUse AnchorSideRight.Side = asrBottom Left = 155 Height = 21 Top = 33 Width = 247 Anchors = [akTop, akLeft, akRight] ItemHeight = 13 ItemIndex = 0 Items.Strings = ( 'doNormal' 'doMaximum' 'doFast' 'doSuperFast' ) OnChange = ComboBoxChange Style = csDropDownList TabOrder = 1 Text = 'doNormal' end object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 296 Height = 23 Top = 105 Width = 40 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 Caption = 'OK' OnClick = ButtonClick TabOrder = 3 end object btnCancel: TButton AnchorSideTop.Control = chkTarAutoHandle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDeflationOption AnchorSideRight.Side = asrBottom Left = 344 Height = 23 Top = 105 Width = 58 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 24 Caption = 'Cancel' OnClick = ButtonClick TabOrder = 4 end object chkTarAutoHandle: TCheckBox AnchorSideLeft.Control = lblDeflationOption AnchorSideTop.Control = cbDeflationOption AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDeflationOption AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 64 Width = 396 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 10 Caption = 'Open *.tar.xyz archives at one step (slowly with big archives)' TabOrder = 2 end end end doublecmd-0.9.8/plugins/wcx/zip/src/ZipApp.pas0000644000175000001440000001350413235564017020322 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); 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).TestItemAt(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-0.9.8/plugins/wcx/zip/src/Zip.lpi0000644000175000001440000001112613177324254017662 0ustar alexxusers doublecmd-0.9.8/plugins/wcx/zip/src/Zip.dpr0000644000175000001440000000106712705513622017661 0ustar alexxuserslibrary Zip; uses {$IFDEF UNIX} cthreads, {$ENDIF} FPCAdds, SysUtils, Classes, ZipFunc in 'ZipFunc.pas'; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } PackFilesW, DeleteFilesW, GetPackerCaps, ConfigurePacker, CanYouHandleThisFileW, { Extension API } ExtensionInitialize; {$R *.res} begin {$IFDEF UNIX} WriteLn('Zip plugin is loaded'); {$ENDIF} end. doublecmd-0.9.8/plugins/wcx/zip/lib/0000755000175000001440000000000013615241421016357 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/zip/COPYING.txt0000644000175000001440000004313112014201074017454 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-0.9.8/plugins/wcx/unrar/0000755000175000001440000000000013615241421016136 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unrar/src/0000755000175000001440000000000013615241421016725 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unrar/src/unrarfunc.pas0000644000175000001440000005566612710112667021463 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for unpacking RAR archives This is simple wrapper for unrar.dll or libunrar.so Copyright (C) 2008-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 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+} {$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; // 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; RARHeaderData = packed record ArcName: packed array[0..259] of Char; FileName: packed array[0..259] of Char; // a zero terminated string of the file name in OEM (DOS) encoding. Flags: LongWord; PackSize: LongWord; UnpSize: LongWord; HostOS: LongWord; FileCRC: LongWord; FileTime: LongWord; UnpVer: LongWord; Method: LongWord; FileAttr: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; end; 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; Reserved: packed array [0..1023] of LongWord; end; RAROpenArchiveData = packed record ArcName: PChar; OpenMode: LongWord; OpenResult: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; end; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} TUnrarChangeVolProc = function(ArcName: PChar; Mode: Integer): Integer; TUnrarProcessDataProc = function(BufAddr: Pointer; BufSize: Integer): Integer; 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; TRAROpenArchive = function(var ArchiveData: RAROpenArchiveData) : TArcHandle; TRAROpenArchiveEx = function(var ArchiveData: RAROpenArchiveDataEx) : TArcHandle; TRARCloseArchive = function(hArcData: TArcHandle) : Integer; TRARReadHeader = function(hArcData: TArcHandle; var HeaderData: RARHeaderData) : Integer; TRARReadHeaderEx = function (hArcData: TArcHandle; var HeaderData: RARHeaderDataEx) : Integer; TRARProcessFile = function(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PAnsiChar) : Integer; TRARProcessFileW = function(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PRarUnicodeChar) : Integer; TRARSetCallback = procedure(hArcData: TArcHandle; UnrarCallback: TUnrarCallback; UserData: PtrInt); TRARSetChangeVolProc = procedure(hArcData: TArcHandle; ChangeVolProc: TUnrarChangeVolProc); TRARSetProcessDataProc = procedure(hArcData: TArcHandle; ProcessDataProc: TUnrarProcessDataProc); TRARSetPassword = procedure(hArcData: TArcHandle; Password: PChar); TRARGetDllVersion = function: Integer; {$CALLING DEFAULT} var RAROpenArchive : TRAROpenArchive = nil; RAROpenArchiveEx : TRAROpenArchiveEx = nil; RARCloseArchive : TRARCloseArchive = nil; RARReadHeader : TRARReadHeader = nil; RARReadHeaderEx : TRARReadHeaderEx = nil; RARProcessFile : TRARProcessFile = nil; RARProcessFileW : TRARProcessFileW = nil; RARSetCallback : TRARSetCallback = nil; RARSetChangeVolProc : TRARSetChangeVolProc = nil; RARSetProcessDataProc : TRARSetProcessDataProc = nil; RARSetPassword : TRARSetPassword = nil; RARGetDllVersion : TRARGetDllVersion = nil; ModuleHandle : TLibHandle = NilHandle; function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle;dcpcall; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW) : TArcHandle;dcpcall; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; function ReadHeaderEx(hArcData: TArcHandle; var HeaderData: THeaderDataEx) : Integer;dcpcall; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PChar) : Integer;dcpcall; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer;dcpcall; function CloseArchive(hArcData: TArcHandle): Integer;dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; function GetPackerCaps : Integer; dcpcall; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; var gStartupInfo: TExtensionStartupInfo; implementation uses DCBasicTypes, DCDateTimeUtils, DCConvertEncoding, DCFileAttributes; 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 ); var ChangeVolProc : TChangeVolProc = nil; ChangeVolProcW : TChangeVolProcW = nil; ProcessDataProc : TProcessDataProc = nil; ProcessDataProcW : TProcessDataProcW = nil; // These variables store currently processed file name. // They cannot be dynamic strings, because if they are created from the // main thread of the calling program and then they're freed from another // thread of the calling program there's a crash. // It is because currently the library can only be statically linked with RTL // and so it doesn't know about the main program's multithreading. ProcessedFileName: array [0..1023] of Char; ProcessedFileNameW: array [0..1023] of WideChar; ProcessedFileHostOS: RarHostSystem; procedure StringToArrayA(src: AnsiString; pDst: PAnsiChar; 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(AnsiChar) * MaxDstLength); pDst[MaxDstLength] := AnsiChar(0); 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 GetSystemSpecificFileName(HostOS: RarHostSystem; FileName: AnsiString) : AnsiString; begin Result:= FileName; if HostOS in [HOST_MSDOS, HOST_WIN32] then begin Result:= CeOemToSys(Result); end; {$IFDEF MSWINDOWS} if HostOS in [HOST_UNIX, HOST_MACOS] then begin Result:= CeUTF8ToAnsi(Result); end; {$ENDIF} end; function SetSystemSpecificFileName(HostOS: RarHostSystem; FileName: AnsiString) : AnsiString; begin Result:= FileName; {$IFDEF MSWINDOWS} if HostOS in [HOST_MSDOS, HOST_WIN32] then begin Result:= CeSysToOem(Result); end; if HostOS in [HOST_UNIX, HOST_MACOS] then begin Result:= CeSysToOem(Result); end; {$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; var VolumeNameA: TRarUnicodeArray; VolumeNameU: TRarUnicodeString; VolumeNameW: array [0..1023] of WideChar; begin Result := 0; case Msg of UCM_CHANGEVOLUME: begin if Assigned(ChangeVolProc) then begin if ChangeVolProc(PAnsiChar(P1), LongInt(P2)) = 0 then Result := -1 else Result := 1; end else begin Result := -1; end; end; UCM_CHANGEVOLUMEW: begin if Assigned(ChangeVolProcW) then begin Move(PRarUnicodeChar(P1)^, VolumeNameA[0], SizeOf(TRarUnicodeArray)); VolumeNameW := RarUnicodeStringToWideString(VolumeNameA); if 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(ProcessDataProcW) then begin if ProcessDataProcW(PWideChar(ProcessedFileNameW), LongInt(P2)) = 0 then Result := -1; end else if Assigned(ProcessDataProc) then begin if ProcessDataProc(PAnsiChar(ProcessedFileName), LongInt(P2)) = 0 then Result := -1; end; end; UCM_NEEDPASSWORD: 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 in single byte encoding. You need to copy a password // here. // P2 - contains the size of password buffer. if not gStartupInfo.InputBox('Unrar', 'Please enter the password:', True, PAnsiChar(P1), P2) then Result := -1 else Result := 1; end; end; end; function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle;dcpcall; var RarArchiveData: RAROpenArchiveData; begin if Assigned(RAROpenArchive) then begin RarArchiveData.ArcName := ArchiveData.ArcName; RarArchiveData.OpenMode := ArchiveData.OpenMode; RarArchiveData.CmtBuf := ArchiveData.CmtBuf; RarArchiveData.CmtBufSize := ArchiveData.CmtBufSize; Result := RAROpenArchive(RarArchiveData); ArchiveData.OpenResult := RarArchiveData.OpenResult; if Result <> 0 then begin ArchiveData.CmtSize := RarArchiveData.CmtSize; ArchiveData.CmtState := RarArchiveData.CmtState; RARSetCallback(Result, @UnrarCallback, 0); end; end else begin ArchiveData.OpenResult := E_EOPEN; Result := 0; end; end; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW) : TArcHandle;dcpcall; var RarArchiveData: RAROpenArchiveDataEx; RarArcName: TRarUnicodeString; begin if Assigned(RAROpenArchiveEx) then begin RarArcName := WideStringToRarUnicodeString(ArchiveData.ArcName); FillChar(RarArchiveData, SizeOf(RAROpenArchiveDataEx), #0); RarArchiveData.ArcNameW := PRarUnicodeChar(RarArcName); RarArchiveData.OpenMode := ArchiveData.OpenMode; RarArchiveData.Callback := @UnrarCallback; Result := RAROpenArchiveEx(RarArchiveData); ArchiveData.OpenResult := RarArchiveData.OpenResult; if Result <> 0 then begin ArchiveData.CmtSize := RarArchiveData.CmtSize; ArchiveData.CmtState := RarArchiveData.CmtState; RARSetCallback(Result, @UnrarCallback, 0); end; end else begin ArchiveData.OpenResult := E_EOPEN; Result := 0; end; end; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; var RarHeader: RARHeaderData; begin if Assigned(RARReadHeader) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeader(hArcData, RarHeader); {$PUSH} {$Q-} {$R-} HeaderData.ArcName := RarHeader.ArcName; StringToArrayA( GetSystemSpecificFileName(RarHostSystem(RarHeader.HostOS), AnsiString(RarHeader.FileName)), @HeaderData.FileName, SizeOf(HeaderData.FileName) ); HeaderData.Flags := RarHeader.Flags; HeaderData.PackSize := RarHeader.PackSize; HeaderData.UnpSize := RarHeader.UnpSize; 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); {$POP} Move(HeaderData.FileName, ProcessedFileName, SizeOf(HeaderData.FileName)); ProcessedFileNameW := ''; ProcessedFileHostOS:= RarHostSystem(HeaderData.HostOS); end else Result := E_EREAD; end; function ReadHeaderEx(hArcData: TArcHandle; var HeaderData: THeaderDataEx) : Integer;dcpcall; var RarHeader: RARHeaderDataEx; begin if Assigned(RARReadHeaderEx) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeaderEx(hArcData, RarHeader); {$PUSH} {$Q-} {$R-} HeaderData.ArcName := RarHeader.ArcName; StringToArrayA( GetSystemSpecificFileName(RarHostSystem(RarHeader.HostOS), AnsiString(RarHeader.FileName)), @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); {$POP} ProcessedFileName := HeaderData.FileName; ProcessedFileNameW := ''; ProcessedFileHostOS:= RarHostSystem(HeaderData.HostOS); end else Result := E_EREAD; end; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; var RarHeader: RARHeaderDataEx; begin if Assigned(RARReadHeaderEx) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeaderEx(hArcData, RarHeader); {$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); {$POP} ProcessedFileName := RarHeader.FileName; ProcessedFileNameW := HeaderData.FileName; end else Result := E_EREAD; end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PChar) : Integer;dcpcall; var pacDestPath: PAnsiChar = nil; pacDestName: PAnsiChar = nil; SysSpecDestPath, SysSpecDestName: AnsiString; begin if Assigned(RARProcessFile) then begin // Both DestPath and DestName must be in OEM encoding // if HostOS is MS DOS or MS Windows and archive is open under MS Windows. if DestPath <> nil then begin SysSpecDestPath:= SetSystemSpecificFileName(ProcessedFileHostOS, DestPath); pacDestPath := PAnsiChar(SysSpecDestPath); end; if DestName <> nil then begin SysSpecDestName:= SetSystemSpecificFileName(ProcessedFileHostOS, DestName); pacDestName := PAnsiChar(SysSpecDestName); end; Result := RARProcessFile(hArcData, Operation, pacDestPath, pacDestName); end else Result := E_EREAD; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer;dcpcall; var pwcDestPath: PRarUnicodeChar = nil; pwcDestName: PRarUnicodeChar = nil; SysSpecDestPath, SysSpecDestName: TRarUnicodeString; begin if Assigned(RARProcessFileW) then 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(hArcData, Operation, pwcDestPath, pwcDestName); end else Result := E_EREAD; end; function CloseArchive(hArcData: TArcHandle) : Integer;dcpcall; begin if Assigned(RARCloseArchive) then Result := RARCloseArchive(hArcData) else Result := E_ECLOSE; end; procedure SetChangeVolProc(hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; begin ChangeVolProc := pChangeVolProc; end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; begin ChangeVolProcW := pChangeVolProc; end; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; begin ProcessDataProc := pProcessDataProc; end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; begin ProcessDataProcW := pProcessDataProc; end; function GetPackerCaps: Integer; dcpcall; begin Result := PK_CAPS_MULTIPLE or PK_CAPS_BY_CONTENT {$IF DEFINED(MSWINDOWS)} or PK_CAPS_NEW or PK_CAPS_MODIFY or PK_CAPS_DELETE or PK_CAPS_OPTIONS or PK_CAPS_ENCRYPT {$ENDIF} ; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; begin gStartupInfo := StartupInfo^; if ModuleHandle = NilHandle then begin gStartupInfo.MessageBox('Cannot load library ' + _unrar + '! Please check your installation.', nil, MB_OK or MB_ICONERROR); end; end; finalization if ModuleHandle <> 0 then UnloadLibrary(ModuleHandle); end. doublecmd-0.9.8/plugins/wcx/unrar/src/unrar.lpi0000644000175000001440000001056113022776142020572 0ustar alexxusers doublecmd-0.9.8/plugins/wcx/unrar/src/unrar.dpr0000644000175000001440000000374113445430215020572 0ustar alexxuserslibrary unrar; uses FPCAdds, SysUtils, DynLibs, UnRARFunc {$IF DEFINED(MSWINDOWS)} , RarFunc {$ENDIF} ; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderEx, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } GetPackerCaps, {$IF DEFINED(MSWINDOWS)} PackFilesW, DeleteFilesW, ConfigurePacker, PackSetDefaultParams, {$ENDIF} { 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 RAROpenArchive := TRAROpenArchive(GetProcAddress(ModuleHandle, 'RAROpenArchive')); RAROpenArchiveEx := TRAROpenArchiveEx(GetProcAddress(ModuleHandle, 'RAROpenArchiveEx')); RARCloseArchive := TRARCloseArchive(GetProcAddress(ModuleHandle, 'RARCloseArchive')); RARReadHeader := TRARReadHeader(GetProcAddress(ModuleHandle, 'RARReadHeader')); RARReadHeaderEx := TRARReadHeaderEx(GetProcAddress(ModuleHandle, 'RARReadHeaderEx')); RARProcessFile := TRARProcessFile(GetProcAddress(ModuleHandle, 'RARProcessFile')); RARProcessFileW := TRARProcessFileW(GetProcAddress(ModuleHandle, 'RARProcessFileW')); RARSetCallback := TRARSetCallback(GetProcAddress(ModuleHandle, 'RARSetCallback')); RARSetChangeVolProc := TRARSetChangeVolProc(GetProcAddress(ModuleHandle, 'RARSetChangeVolProc')); RARSetProcessDataProc := TRARSetProcessDataProc(GetProcAddress(ModuleHandle, 'RARSetProcessDataProc')); RARSetPassword := TRARSetPassword(GetProcAddress(ModuleHandle, 'RARSetPassword')); RARGetDllVersion := TRARGetDllVersion(GetProcAddress(ModuleHandle, 'RARGetDllVersion')); end; end. doublecmd-0.9.8/plugins/wcx/unrar/src/rarfunc.pas0000644000175000001440000001606012631063312021073 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Wcx plugin for packing RAR archives 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., 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; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; dcpcall; var IniFileName: String; implementation uses Process, LazUTF8, DCProcessUtf8, DCOSUtils, UnRARFunc, RarConfDlg; 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 255: Result:= E_EABORTED; // User break end; end; function ExecuteRar(Process: TProcessUtf8; FileList : UnicodeString): Integer; var FileName: String; TempFile: THandle; begin FileName:= GetTempFileName; TempFile:= FileCreate(FileName); if (TempFile = feInvalidHandle) then Exit(E_ECREATE); try FileWrite(TempFile, FileList[1], Length(FileList) * SizeOf(WideChar)); FileClose(TempFile); Process.Parameters.Add('@' + SysToUTF8(FileName)); Process.Execute; Process.WaitOnExit; Result:= RarToWcx(Process.ExitStatus); finally DeleteFile(FileName); end; end; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall; begin IniFileName:= dps^.DefaultIniName; LoadConfig; end; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; begin CreateRarConfDlg; end; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; var FileName : UnicodeString; FolderName: UnicodeString; Process : TProcessUtf8; FileList : UnicodeString; begin Process := TProcessUtf8.Create(nil); try Process.Executable:= mbExpandEnvironmentStrings(WinRar); Process.Parameters.Add('d'); Process.Parameters.Add('-c-'); Process.Parameters.Add('-r-'); Process.Parameters.Add(UTF16ToUTF8(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; var FileName: UnicodeString; FolderName: UnicodeString; Process : TProcessUtf8; FileList: UnicodeString; Password: array[0..MAX_PATH] of AnsiChar; begin Process := TProcessUtf8.Create(nil); try Process.Executable:= mbExpandEnvironmentStrings(WinRar); 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)); // 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', 'Please enter the password:', 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' + UTF16ToUTF8(UnicodeString(SubPath))); end; Process.Parameters.Add(UTF16ToUTF8(UnicodeString(PackedFile))); // Source path if Assigned(SrcPath) then begin Process.CurrentDirectory:= UTF16ToUTF8(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-0.9.8/plugins/wcx/unrar/src/rarconfdlg.pas0000644000175000001440000000720312572532061021561 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; WinRar: String = '%ProgramFiles%\WinRAR\WinRAR.exe'; implementation uses IniFiles, UnRARFunc, Extension, RarFunc; {$R *.lfm} procedure LoadConfig; var gIni: TIniFile; begin try gIni:= TIniFile.Create(IniFileName); 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: TIniFile; begin try gIni:= TIniFile.Create(IniFileName); 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); 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-0.9.8/plugins/wcx/unrar/src/rarconfdlg.lfm0000644000175000001440000001047012555107027021555 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' 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-0.9.8/plugins/wcx/unrar/src/fpc-extra.cfg0000644000175000001440000000015711673054716021315 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-0.9.8/plugins/wcx/unrar/readme.txt0000644000175000001440000000130312014201074020121 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-0.9.8/plugins/wcx/unrar/lib/0000755000175000001440000000000013615241421016704 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unbz2/0000755000175000001440000000000013615241421016047 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unbz2/src/0000755000175000001440000000000013615241421016636 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unbz2/src/unbz2.lpi0000644000175000001440000000775013022776142020422 0ustar alexxusers doublecmd-0.9.8/plugins/wcx/unbz2/src/unbz2.dpr0000644000175000001440000000047012014201074020376 0ustar alexxuserslibrary unbz2; uses bz2func in 'bz2func.pas'; {$E wcx} {$R *.res} exports { Mandatory } OpenArchive, ReadHeader, ProcessFile, CloseArchive, SetChangeVolProc, SetProcessDataProc, { Optional } CanYouHandleThisFile; begin {$IFDEF UNIX} WriteLN('unbz2 plugin is loaded'); {$ENDIF} end. doublecmd-0.9.8/plugins/wcx/unbz2/src/bz2func.pas0000644000175000001440000001275612014201074020717 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for extract *.bz2 archives Copyright (C) 2007-2009 Koblov Alexander (Alexx2000@mail.ru) based on: pasbzip.pas from FPC sources 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 bz2func; {$mode delphi} {$include calling.inc} interface uses WcxPlugin; { Mandatory functions } function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; function ReadHeader (hArcData : TArcHandle; var HeaderData : THeaderData) : Integer;dcpcall; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; { Optional functions } function CanYouHandleThisFile(FileName: PChar): Boolean;dcpcall; implementation uses bzip2, SysUtils, Objects; var sArcName : String; Count : Integer = 0; ProcessDataProc : TProcessDataProc; function ExtractOnlyFileName(const FileName: string): string; var iDotIndex, I: longint; begin (* Find a dot index *) I := Length(FileName); while (I > 0) and not (FileName[I] in ['.', '/', '\', ':']) do Dec(I); if (I > 0) and (FileName[I] = '.') then iDotIndex := I else iDotIndex := MaxInt; (* Find file name index *) I := Length(FileName); while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I); Result := Copy(FileName, I + 1, iDotIndex - I - 1); end; function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle; begin if FileExists(ArchiveData.ArcName) then begin sArcName := ArchiveData.ArcName; Count := 0; Result := 1985; end else Result := E_EOPEN; end; function ReadHeader (hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; var sr : TSearchRec; begin if Count > 0 then begin Result := E_END_ARCHIVE; exit; end; with HeaderData do begin FindFirst(sArcName, faAnyFile, sr); FileName := ExtractOnlyFileName(sArcName); PackSize := sr.Size; UnpSize := sr.Size; // we don't know real file size FileTime := sr.Time; FileAttr := sr.Attr; FindClose(sr); end; Result := 0; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer; var infile,outfile:Tbufstream; decoder:Tbzip2_decode_stream; a:array[1..4096] of byte; i,readsize:cardinal; sOutputFileName : String; iLastPos : LongInt; begin Result := E_SUCCESS; case Operation of PK_TEST: begin Result := E_NOT_SUPPORTED; end; PK_EXTRACT: begin sOutputFileName := DestPath; if sOutputFileName <> '' then sOutputFileName := sOutputFileName + ExtractOnlyFileName(sArcName) else sOutputFileName := DestName; { // Debug assign(output, DestPath + 'unbz2.log'); rewrite(output); } begin infile.init(sArcName,stopenread,4096); outfile.init(sOutputFileName,stcreate,4096); decoder.init(@infile); { // Debug if decoder.status<>stok then writeln(output, 'Fout: ',decoder.status,' ',decoder.errorinfo); } iLastPos := infile.Position; repeat readsize:=4096; decoder.read(a,readsize); dec(readsize,decoder.short); outfile.write(a,readsize); if Assigned(ProcessDataProc) and (infile.Position <> iLastPos) then begin ProcessDataProc(PChar(sOutputFileName), infile.Position - iLastPos); iLastPos := infile.Position; end; until decoder.status<>0; { // Debug if decoder.status<>stok then writeln(output, 'Fout: ',decoder.status,' ',decoder.errorinfo); } decoder.done; infile.done; outfile.done; end; { // Debug close(output); } end; PK_SKIP: begin end; end; {case} Count := Count + 1; end; function CloseArchive (hArcData : TArcHandle) : Integer; begin Result := 0; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : TChangeVolProc); begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); begin if Assigned(pProcessDataProc) then ProcessDataProc := pProcessDataProc else ProcessDataProc := nil; end; function CanYouHandleThisFile(FileName: PChar): Boolean;dcpcall; var bz2bs : TBufStream; Buffer : array[1..5] of Char; begin try bz2bs.Init(FileName, stOpenRead, SizeOf(Buffer)); bz2bs.Read(Buffer, SizeOf(Buffer)); finally bz2bs.Done; end; Result := (Buffer = 'BZh91'); end; end. doublecmd-0.9.8/plugins/wcx/unbz2/lib/0000755000175000001440000000000013615241421016615 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unbz2/bzip2/0000755000175000001440000000000013615241421017075 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/unbz2/bzip2/pasbzip.pas0000644000175000001440000000156312014201074021247 0ustar alexxusersprogram pasbzip; uses objects,bzip2; var infile,outfile:Tbufstream; decoder:Tbzip2_decode_stream; a:array[1..4096] of byte; i,readsize:cardinal; begin assign(output,'pasbzip.out'); rewrite(output); if paramcount<>1 then writeln('Usage: pasbunzip ') else begin infile.init(paramstr(1),stopenread,4096); outfile.init('OUTFILE',stcreate,4096); decoder.init(@infile); if decoder.status<>stok then writeln('Fout: ',decoder.status,' ',decoder.errorinfo); repeat readsize:=4096; decoder.read(a,readsize); dec(readsize,decoder.short); outfile.write(a,readsize); until decoder.status<>0; if decoder.status<>stok then writeln('Fout: ',decoder.status,' ',decoder.errorinfo); decoder.done; infile.done; outfile.done; end; close(output); end. doublecmd-0.9.8/plugins/wcx/unbz2/bzip2/bzip2i386.inc0000644000175000001440000000162012014201074021217 0ustar alexxusers{$ASMMODE intel} {$define HAVE_DETRANSFORM} { procedure Tbzip2_decode_stream.detransform; var a:cardinal; p,q,r:Pcardinal; begin a:=0; p:=@tt^[0]; q:=p+tt_count; while p<>q do begin r:=@tt^[cftab[p^ and $ff]]; inc(cftab[p^ and $ff]); r^:=r^ or a; inc(a,256); inc(p); end; end; } {const c:cardinal=0; procedure mcount;external name 'mcount';} procedure Tbzip2_decode_stream.detransform;assembler; asm { mov edx,offset c call mcount} xor edx,edx lea ebx,[esi+Tbzip2_decode_stream.cftab] mov ecx,[esi+Tbzip2_decode_stream.tt_count] push esi push ebp mov esi,[esi+Tbzip2_decode_stream.tt] mov edi,esi lea ebp,[4*ecx+esi] jmp @a2 @a1: movzx eax,byte [esi] mov ecx,[ebx+4*eax] inc dword [ebx+4*eax] or [edi+4*ecx],edx add edx,$100 add esi,4 @a2: cmp esi,ebp jne @a1 pop ebp pop esi end ['eax','ebx','ecx','edx','edi']; doublecmd-0.9.8/plugins/wcx/unbz2/bzip2/bzip2.pas0000644000175000001440000004236712014201074020634 0ustar alexxusersunit bzip2; {**************************************************************************** BZIP2 decompression unit Copyright (C) 2002 by Daniel Mantione This unit provides a decompression stream to decode .bz2 files. It is inpired by Julian R. Seward's libbzip2 library and therefore you should send credits to him and bug reports to me :) This code is licensed under the same terms as the original libbz2 library, which is decsribed in the file LICENSE. If you don't have this file, look at http://www.freepascal.org for this bzip2 unit, the LICENSE file will be included. In case of problems, contact the author. E-mail addresses: Daniel Mantione Julian R. Seward Please do not contact Julian about this Pascal library, he didn't wrote it. ****************************************************************************} interface {$goto on} {$pointermath on} uses objects; const max_groups=6; max_alpha_size=258; max_code_len=23; group_size=50; iter_count=4; max_selectors=2+(900000 div group_size); const mtfa_size=4096; mtfl_size=16; type Tcardinal_array=array [0..899999] of cardinal; Pcardinal_array=^Tcardinal_array; Pcardinal=^cardinal; Thuffarray=array[0..max_alpha_size] of cardinal; Phuffarray=^Thuffarray; Tbzip2_decode_stream=object(Tstream) short:cardinal; readstream:Pstream; block_randomized:boolean; blocksize:byte; tt:Pcardinal_array; tt_count:cardinal; rle_run_left,rle_run_data:byte; nextrle:Pbyte; decode_available:cardinal; block_origin:cardinal; current_block:cardinal; read_data,bits_available:byte; inuse16:set of 0..15; inuse:set of 0..255; inuse_count:cardinal; seq_to_unseq:array[0..255] of byte; alphasize:cardinal; group_count,group_pos,gsel,gminlen:byte; group_no:cardinal; glimit,gperm,gbase:Phuffarray; selector_count:cardinal; selector,selector_mtf:array[0..max_selectors] of byte; len:array[0..max_groups,0..max_alpha_size] of byte; limit:array[0..max_groups,0..max_alpha_size] of cardinal; base:array[0..max_groups,0..max_alpha_size] of cardinal; perm:array[0..max_groups,0..max_alpha_size] of cardinal; minlens:array[0..max_groups] of byte; cftab:array[0..257] of cardinal; mtfbase:array[0..256 div mtfl_size-1] of cardinal; mtfa:array[0..mtfa_size-1] of byte; constructor init(Areadstream:Pstream); function get_bits(n:byte):byte; function get_boolean:boolean; function get_byte:byte; function get_cardinal24:cardinal; function get_cardinal:cardinal; procedure receive_mapping_table; procedure receive_selectors; procedure undo_mtf_values; procedure receive_coding_tables; procedure make_hufftab; procedure init_mtf; function get_mtf_value:cardinal; procedure move_mtf_block; procedure receive_mtf_values; procedure detransform; function decode_block:boolean; procedure read(var buf;count:Longint);virtual; procedure new_block; procedure consume_rle;inline; procedure rle_read(bufptr:Pbyte;var count:Longint); destructor done;virtual; end; {A bzip2 stream starts with this:} const bzip2_stream_magic='BZh'; {Error codes for stream errorinfo.} const bzip2_bad_header_magic =1; bzip2_bad_block_magic =2; bzip2_endoffile =3; bzip2_data_error =4; implementation {$ifdef i386} {$i bzip2i386.inc} {$endif} procedure hb_create_decode_tables(var limit,base,perm:array of cardinal; var length:array of byte; minlen,maxlen:byte;alphasize:cardinal); var pp,i,j,vec:cardinal; begin pp:=0; for i:=minlen to maxlen do for j:=0 to alphasize-1 do if length[j]=i then begin perm[pp]:=j; inc(pp); end; for i:=0 to max_code_len-1 do begin base[i]:=0; limit[i]:=0; end; for i:=0 to alphasize-1 do inc(base[length[i]+1]); for i:=1 to max_code_len-1 do inc(base[i],base[i-1]); vec:=0; for i:=minlen to maxlen do begin inc(vec,base[i+1]-base[i]); limit[i]:=vec-1; vec:=vec shl 1; end; for i:=minlen+1 to maxlen do base[i]:=((limit[i-1]+1) shl 1)-base[i]; end; {***************************************************************************** Tbzip2_decode_stream *****************************************************************************} constructor Tbzip2_decode_stream.init(Areadstream:Pstream); var magic:array[1..3] of char; c:char; begin readstream:=Areadstream; {Read the magic.} readstream^.read(magic,sizeof(magic)); if magic<>bzip2_stream_magic then begin error(stiniterror,bzip2_bad_header_magic); exit; end; {Read the block size and allocate the working array.} readstream^.read(c,1); blocksize:=byte(c)-byte('0'); getmem(tt,blocksize*100000*sizeof(cardinal)); decode_available:=high(decode_available); end; function Tbzip2_decode_stream.get_bits(n:byte):byte; var data:byte; begin if n>bits_available then begin readstream^.read(data,1); get_bits:=(read_data shr (8-n)) or data shr (8-(n-bits_available)); read_data:=data shl (n-bits_available); inc(bits_available,8); end else begin get_bits:=read_data shr (8-n); read_data:=read_data shl n; end; dec(bits_available,n); end; function Tbzip2_decode_stream.get_boolean:boolean; begin get_boolean:=boolean(get_bits(1)); end; function Tbzip2_decode_stream.get_byte:byte; begin get_byte:=get_bits(8); end; function Tbzip2_decode_stream.get_cardinal24:cardinal; begin get_cardinal24:=get_bits(8) shl 16 or get_bits(8) shl 8 or get_bits(8); end; function Tbzip2_decode_stream.get_cardinal:cardinal; begin get_cardinal:=get_bits(8) shl 24 or get_bits(8) shl 16 or get_bits(8) shl 8 or get_bits(8); end; procedure Tbzip2_decode_stream.receive_mapping_table; {Receive the mapping table. To save space, the inuse set is stored in pieces of 16 bits. First 16 bits are stored which pieces of 16 bits are used, then the pieces follow.} var i,j:byte; begin inuse16:=[]; {Receive the first 16 bits which tell which pieces are stored.} for i:=0 to 15 do if get_boolean then include(inuse16,i); {Receive the used pieces.} inuse:=[]; inuse_count:=0; for i:=0 to 15 do if i in inuse16 then for j:=0 to 15 do if get_boolean then begin include(inuse,16*i+j); seq_to_unseq[inuse_count]:=16*i+j; inc(inuse_count); end; { system.write('Mapping table: '); for i:=0 to 255 do if i in inuse then system.write(i,' '); writeln;} end; procedure Tbzip2_decode_stream.receive_selectors; {Receives the selectors.} var i:cardinal; j:byte; begin group_count:=get_bits(3); selector_count:=get_bits(8) shl 7 or get_bits(7); for i:=0 to selector_count-1 do begin j:=0; while get_boolean do begin inc(j); if j>5 then error(streaderror,bzip2_data_error); end; selector_mtf[i]:=j; end; { system.write('Selector_mtf: '); for i:=0 to selector_count-1 do system.write(selector_mtf[i],' '); writeln;} end; procedure Tbzip2_decode_stream.undo_mtf_values; {Undo the MTF values for the selectors.} var pos:array[0..max_groups] of byte; i:cardinal; v,tmp:byte; begin for v:=0 to group_count-1 do pos[v]:=v; for i:=0 to selector_count-1 do begin v:=selector_mtf[i]; tmp:=pos[v]; while v<>0 do begin pos[v]:=pos[v-1]; dec(v); end; pos[0]:=tmp; selector[i]:=tmp; end; end; procedure Tbzip2_decode_stream.receive_coding_tables; var t,curr:byte; i:cardinal; begin for t:=0 to group_count-1 do begin curr:=get_bits(5); for i:=0 to alphasize-1 do begin repeat if not(curr in [1..20]) then begin error(streaderror,bzip2_data_error); exit; end; if not get_boolean then break; if get_boolean then dec(curr) else inc(curr); until false; len[t,i]:=curr; end; end; { writeln('Coding tables:'); for t:=0 to group_count-1 do begin for i:=0 to alphasize-1 do system.write(len[t,i],' '); writeln; end;} end; procedure Tbzip2_decode_stream.make_hufftab; {Builds the Huffman tables.} var i:cardinal; t,minlen,maxlen:byte; begin for t:=0 to group_count-1 do begin minlen:=32; maxlen:=0; for i:=0 to alphasize-1 do begin if len[t,i]>maxlen then maxlen:=len[t,i]; if len[t,i]glimit^[zn] do begin inc(zn); zvec:=zvec shl 1 or byte(get_boolean); end; get_mtf_value:=gperm^[zvec-gbase^[zn]]; end; procedure Tbzip2_decode_stream.move_mtf_block; var i:byte; j,k:cardinal; begin k:=MTFA_SIZE; for i:=256 div MTFL_SIZE-1 downto 0 do begin j:=mtfbase[i]; Pcardinal(@mtfa[k- 4])^:=Pcardinal(@mtfa[j+12])^; Pcardinal(@mtfa[k- 8])^:=Pcardinal(@mtfa[j+ 8])^; Pcardinal(@mtfa[k-12])^:=Pcardinal(@mtfa[j+ 4])^; dec(k,16); Pcardinal(@mtfa[k ])^:=Pcardinal(@mtfa[j ])^; mtfbase[i]:=k; end; end; procedure Tbzip2_decode_stream.receive_mtf_values; const run_a=0; run_b=1; var t,next_sym:cardinal; es:cardinal; n:byte; nn,i:cardinal; p,q:Pbyte; u,v:Pcardinal; lno,off:cardinal; begin group_no:=high(group_no); group_pos:=0; t:=0; for i:=0 to 257 do cftab[i]:=0; init_mtf; next_sym:=get_mtf_value; while next_sym<>inuse_count+1 do begin { writeln(t,' ',next_sym); if t=22296 then t:=t; } if next_sym<=run_b then begin es:=0; n:=0; repeat inc(es,(next_sym+1) shl n); inc(n); next_sym:=get_mtf_value; until next_sym>run_b; n:=seq_to_unseq[mtfa[mtfbase[0]]]; inc(cftab[n],es); if t+es>100000*blocksize then begin error(streaderror,bzip2_data_error); exit; end; while es>0 do begin tt^[t]:=n; dec(es); inc(t); end; end else begin nn:=next_sym-1; if nnp) do begin q^:=(q-1)^; dec(q); end; u:=@mtfbase; v:=u+lno; repeat mtfa[v^]:=mtfa[(v-1)^+MTFL_SIZE-1]; dec(v); dec(v^); until v=u; mtfa[v^]:=n; if v^=0 then move_mtf_block; end; inc(cftab[seq_to_unseq[n]]); tt^[t]:=cardinal(seq_to_unseq[n]); inc(t); if t>100000*blocksize then begin error(streaderror,bzip2_data_error); exit; end; next_sym:=get_mtf_value; end; end; tt_count:=t; {Setup cftab to facilitate generation of T^(-1).} t:=0; for i:=0 to 256 do begin nn:=cftab[i]; cftab[i]:=t; { writeln(i,' ',t);} inc(t,nn); end; end; {$ifndef HAVE_DETRANSFORM} procedure Tbzip2_decode_stream.detransform; var a:cardinal; p,q,r:Pcardinal; begin a:=0; p:=@tt^[0]; q:=p+tt_count; while p<>q do begin r:=@tt^[cftab[p^ and $ff]]; inc(cftab[p^ and $ff]); r^:=r^ or a; inc(a,256); inc(p); end; end; {$endif} function Tbzip2_decode_stream.decode_block:boolean; {Decode a new compressed block.} var magic:array[1..6] of char; stored_blockcrc:cardinal; i:byte; begin for i:=1 to 6 do magic[i]:=char(get_byte); if magic='1AY&SY' then begin inc(current_block); { writeln('Block ',current_block,': Header ok');} stored_blockcrc:=get_cardinal; block_randomized:=get_boolean; block_origin:=get_cardinal24; {Receive the mapping table.} receive_mapping_table; alphasize:=cardinal(inuse_count)+2; { writeln('Mapping table ok.');} {Receive the selectors.} receive_selectors; if status<>0 then exit; { writeln('Selectors ok.');} {Undo the MTF values for the selectors.} undo_mtf_values; { writeln('Undo mtf ok.');} {Receive the coding tables.} receive_coding_tables; if status<>0 then exit; { writeln('Coding tables ok');} {Build the Huffman tables.} make_hufftab; { writeln('Huffman ok.');} {Receive the MTF values.} receive_mtf_values; { writeln('MTF OK');} {Undo the Burrows Wheeler transformation.} detransform; { writeln('Detransform OK');} decode_available:=tt_count; end else begin if magic<>#$17'rE8P'#$90 then error(streaderror,bzip2_bad_block_magic); decode_block:=false; end; end; procedure Tbzip2_decode_stream.new_block; begin if decode_block then nextrle:=@tt^[tt^[block_origin] shr 8] else begin error(streaderror,bzip2_endoffile); nextrle:=nil; end; end; procedure Tbzip2_decode_stream.consume_rle;inline; {Make nextrle point to the next decoded byte. If nextrle did point to the last byte in the current block, decode the next block.} begin { Pcardinal(nextrle)^:=Pcardinal(nextrle)^ shr 8;} nextrle:=@tt^[Pcardinal(nextrle)^ shr 8]; dec(decode_available); if decode_available=0 then new_block; end; procedure Tbzip2_decode_stream.rle_read(bufptr:Pbyte;var count:Longint); var rle_len:cardinal; data:byte; label rle_write; begin rle_len:=rle_run_left; data:=rle_run_data; if block_randomized then {Not yet implemented.} runerror(212) else begin if rle_len<>0 then {Speed is important. Instead of an if statement within the repeat loop use a goto outside the loop.} goto rle_write; repeat if decode_available=0 then break; rle_len:=1; data:=nextrle^; consume_rle; if (decode_available>0) and (data=nextrle^) then begin inc(rle_len); consume_rle; if (decode_available>0) and (data=nextrle^) then begin inc(rle_len); consume_rle; if (decode_available>0) and (data=nextrle^) then begin consume_rle; inc(rle_len,nextrle^+1); consume_rle; end; end; end; rle_write: repeat bufptr^:=data; inc(bufptr); dec(count); dec(rle_len); until (rle_len=0) or (count=0); until count=0; short:=count; end; rle_run_data:=data; rle_run_left:=rle_len; end; procedure Tbzip2_decode_stream.read(var buf;count:Longint); var bufptr:Pbyte; begin short:=0; bufptr:=@buf; if decode_available=high(decode_available) then begin {Initialize the rle process: - Decode a block - Initialize pointer.} if not decode_block then begin error(streaderror,bzip2_endoffile); nextrle:=nil; end; nextrle:=@tt^[tt^[block_origin] shr 8]; end; rle_read(bufptr,count); end; destructor Tbzip2_decode_stream.done; begin if tt<>nil then freemem(tt,blocksize*100000*sizeof(cardinal)); inherited done; end; end. doublecmd-0.9.8/plugins/wcx/unbz2/bzip2/LICENSE0000644000175000001440000000342410606265634020116 0ustar alexxusersThis Pascal unit "bzip2.pas" is copyright (C) 2002 by Daniel Mantione It is inspired by "bzip2" and associated library "libbzip2", copyright (C) 1996-2002 by Julian R Seward. 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. Daniel Mantione, Delft, the Netherlans daniel.mantione@freepascal.org Pascal bzip2 unit, version 0.0.1 of 10 October 2002 doublecmd-0.9.8/plugins/wcx/unbz2/COPYING.txt0000644000175000001440000004313112014201074017712 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-0.9.8/plugins/wcx/torrent/0000755000175000001440000000000013615241421016504 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/torrent/src/0000755000175000001440000000000013615241421017273 5ustar alexxusersdoublecmd-0.9.8/plugins/wcx/torrent/src/torrent.lpr0000644000175000001440000001004413210632370021504 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; 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 := UTF8Encode(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:= UTF8Decode(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-0.9.8/plugins/wcx/torrent/src/torrent.lpi0000644000175000001440000001003713210633774021506 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-0.9.8/plugins/wcx/torrent/src/TorrentFile.pas���������������������������������������������0000644�0001750�0000144�00000024711�13210633635�022245� 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-0.9.8/plugins/wcx/torrent/src/Hashes.pas��������������������������������������������������0000644�0001750�0000144�00000043304�13210632370�021215� 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-0.9.8/plugins/wcx/torrent/src/BDecode.pas�������������������������������������������������0000644�0001750�0000144�00000007535�13210632370�021275� 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-0.9.8/plugins/wcx/torrent/lib/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017252� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/torrent/COPYING.txt�����������������������������������������������������0000644�0001750�0000144�00000064505�13210632370�020365� 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-0.9.8/plugins/wcx/sevenzip/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016652� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017441� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/jcl/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020211� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/jcl/windows/�����������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021703� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/jcl/windows/sevenzip.pas�����������������������������������0000644�0001750�0000144�00000101264�12512255642�024264� 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; 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-0.9.8/plugins/wcx/sevenzip/src/jcl/doublecmd.diff�����������������������������������������0000644�0001750�0000144�00000027332�13170675231�023016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ jcl/source/common/JclCompression.pas | 139 +++++++++++++++++++++++++++++++---- jcl/source/windows/sevenzip.pas | 8 +- 2 files changed, 130 insertions(+), 17 deletions(-) diff --git a/jcl/source/common/JclCompression.pas b/jcl/source/common/JclCompression.pas index e5e6a2f..a43868a 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; @@ -804,6 +817,9 @@ type 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; @@ -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; @@ -6535,8 +6592,20 @@ function TJclSevenzipUpdateCallback.GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; begin 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: Exit(S_FALSE); + end; + end; + end; + until Result = S_OK; end; function TJclSevenzipUpdateCallback.GetUpdateItemInfo(Index: Cardinal; NewData, @@ -6681,7 +6750,10 @@ end; procedure TJclSevenzipCompressArchive.Compress; var + Value: HRESULT; + Index: Integer; OutStream: IOutStream; + AVolume: TJclCompressionVolume; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin @@ -6692,12 +6764,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 +7514,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 +7555,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 +8913,7 @@ end; procedure TJclSevenzipUpdateArchive.Compress; var + Value: HRESULT; OutStream: IOutStream; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; @@ -8824,7 +8931,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..0853a85 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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/jcl/common/������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021501� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/jcl/common/JclCompression.pas������������������������������0000644�0001750�0000144�00001122537�13170675231�025161� 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; 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 begin SevenZipCheck(PropertySetter.SetProperties(@PropNames[0], @PropValues[0], Length(PropNames))); SetLength(JclArchive.PropNames, 0); SetLength(JclArchive.PropValues, 0); 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: ; // 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: ; // kpidCreatorApp: ; // kpidSectorSize: ; kpidPosixAttrib: begin Value.vt := VT_EMPTY; end; // kpidLink: ; // kpidTotalSize: ; // kpidFreeSpace: ; // kpidClusterSize: ; // kpidVolumeName: ; // kpidLocalName: ; // kpidProvider: ; // kpidUserDefined: ; else Value.vt := VT_EMPTY; Result := S_FALSE; end; end; function TJclSevenzipUpdateCallback.GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; begin FLastStream := Index; 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: Exit(S_FALSE); 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 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; 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-0.9.8/plugins/wcx/sevenzip/src/jcl/DCJclResources.pas�������������������������������������0000644�0001750�0000144�00000016120�12512255642�023535� 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-0.9.8/plugins/wcx/sevenzip/src/jcl/DCJclCompression.pas�����������������������������������0000644�0001750�0000144�00000007110�12603032203�024046� 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, LazUTF8Classes; { TSfxSevenzipOutStream } constructor TSfxSevenzipOutStream.Create(AStream: TStream; const ASfxModule: String); var SfxModule: TFileStreamUTF8; begin inherited Create; FStream := AStream; FSfxModule := ASfxModule; SfxModule:= TFileStreamUTF8.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-0.9.8/plugins/wcx/sevenzip/src/jcl/DCJclAlternative.pas�����������������������������������0000644�0001750�0000144�00000033737�13065522750�024057� 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 DCJclAlternative; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, Windows, LazUTF8Classes; // 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 = HINST; const INVALID_MODULEHANDLE_VALUE = TModuleHandle(0); 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 = TFileStreamUTF8; // 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; 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:= DeleteFileW(PWideChar(UTF8Decode(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(UTF8Decode(OldName)), PWideChar(UTF8Decode(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:= LoadLibraryW(PWideChar(UTF8Decode(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:= FileExistsUTF8(FileName); end; function CreateFile(lpFileName: LPCSTR; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; begin Result:= CreateFileW(PWideChar(UTF8Decode(lpFileName)), dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); end; function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_LEVELS; lpFileInformation: Pointer): BOOL; begin Result:= GetFileAttributesExW(PWideChar(UTF8Decode(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-0.9.8/plugins/wcx/sevenzip/src/SevenZipWcx.lpi��������������������������������������������0000644�0001750�0000144�00000011565�13364423621�022411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="10"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="SevenZipWcx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MajorVersionNr Value="18"/> <MinorVersionNr Value="10"/> <RevisionNr Value="25"/> <CharSet Value="04B0"/> <StringTable FileDescription="SevenZip archiver plugin" InternalName="SevenZip" LegalCopyright="Copyright (C) 2014-2018 Alexander Koblov" ProductVersion=""/> </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"/> <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"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CustomOptions Value="-dUNICODE_CTRLS"/> </Other> </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="D:\doublecmd\doublecmd.exe"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LazUtils"/> </Item1> </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"/> <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> <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-0.9.8/plugins/wcx/sevenzip/src/SevenZipWcx.dpr��������������������������������������������0000644�0001750�0000144�00000003457�13152601563�022411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library SevenZipWcx; uses 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-0.9.8/plugins/wcx/sevenzip/src/SevenZipOpt.pas��������������������������������������������0000644�0001750�0000144�00000037307�13152754214�022413� 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 and (Method <> cmCopy) and (Pos('D=', Parameters) = 0) then begin AddWideStringProperty('D', WideString(IntToStr(PluginConfig[AFormat].Dictionary) + 'B')); 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 Messagebox(0, PAnsiChar(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(UTF8Decode(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 MessageBox(0, PAnsiChar(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 MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; initialization CopyMemory(@PluginConfig[Low(PluginConfig)], @DefaultConfig[Low(DefaultConfig)], SizeOf(PluginConfig)); end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/SevenZipLng.pas��������������������������������������������0000644�0001750�0000144�00000002763�12603033261�022357� 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-0.9.8/plugins/wcx/sevenzip/src/SevenZipFunc.pas�������������������������������������������0000644�0001750�0000144�00000045323�13332117726�022542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin 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 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, 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; 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.ListFiles; 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:= Item.Attributes else begin HeaderData.FileAttr:= FILE_ATTRIBUTE_ARCHIVE; end; 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: Integer; Encrypt: Boolean; AMessage: String; Password: WideString; FilePath: WideString; FileName: WideString; SfxModule: String = ''; FileNameUTF8: String; AProgress: TSevenZipUpdate; Archive: TJclCompressArchive; AFormats: TJclCompressArchiveClassArray; begin if (Flags and PK_PACK_MOVE_FILES) <> 0 then Exit(E_NOT_SUPPORTED); 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; MessageBox(0, PAnsiChar(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; Exit(AProgress.Update); 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) + DefaultIniName; // Get plugin path if GetModulePath(ModulePath) then begin // Use configuration from plugin path if FileExistsUTF8(ModulePath + DefaultIniName) then ConfigFile:= UTF8ToSys(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(UTF8Decode(rsSevenZipLoadError)), 'SevenZip', MB_OK or MB_ICONERROR); end; 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); MessageBox(0, PAnsiChar(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; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/src/SevenZipDlg.res��������������������������������������������0000644�0001750�0000144�00000003320�12422770427�022354� 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-0.9.8/plugins/wcx/sevenzip/src/SevenZipDlg.rc���������������������������������������������0000644�0001750�0000144�00000017074�12422770427�022202� 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-0.9.8/plugins/wcx/sevenzip/src/SevenZipDlg.pas��������������������������������������������0000644�0001750�0000144�00000062350�13152762353�022356� 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 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: WideString; begin Text:= UTF8Decode(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 PasswordData:= PPasswordData(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); 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^.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); 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-0.9.8/plugins/wcx/sevenzip/src/SevenZipCodecs.pas�����������������������������������������0000644�0001750�0000144�00000025740�13152754214�023047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2017 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: HINST; 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: WideString; 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; { 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 if (GetMethodProperty(Index, kDecoder, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_EMPTY) then begin if (Value.vt <> VT_BSTR) or (SysStringByteLen(Value.bstrVal) < SizeOf(CLSID)) then Exit(False); AInfo.Decoder:= PGUID(Value.bstrVal)^; AInfo.DecoderIsAssigned:= True; end; if (GetMethodProperty(Index, kEncoder, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_EMPTY) then begin if (Value.vt <> VT_BSTR) or (SysStringByteLen(Value.bstrVal) < SizeOf(CLSID)) then Exit(False); AInfo.Encoder:= PGUID(Value.bstrVal)^; AInfo.EncoderIsAssigned:= True; end; if (GetMethodProperty(Index, kID, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_EMPTY) then AInfo.ID:= OleVariant(Value); if (GetMethodProperty(Index, kName, Value) <> S_OK) then Exit(False); if (Value.vt = VT_BSTR) then AInfo.Name:= OleVariant(Value); Result:= AInfo.DecoderIsAssigned or AInfo.EncoderIsAssigned; end; var ALibraries: TFPGObjectList<TLibraryInfo> = nil; procedure LoadCodecs; var Handle: HINST; Index, J: Integer; AFiles: TStringList; ACodecCount: Integer; NumMethods: UInt32 = 1; ACodecInfo: TCodecInfo; ALibraryInfo: TLibraryInfo; ACompressInfo: ICompressCodecsInfo; begin AFiles:= FindAllFiles(ExtractFilePath(SevenzipLibraryName) + 'Codecs', '*.dll'); for Index:= 0 to AFiles.Count - 1 do begin Handle:= LoadLibraryW(PWideChar(UTF8ToUTF16(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-0.9.8/plugins/wcx/sevenzip/src/SevenZipAdv.pas��������������������������������������������0000644�0001750�0000144�00000036736�12630666255�022377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin 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., 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; 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 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 PropSize: Cardinal; PropValue: TPropVariant; begin Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BSTR); if Result then try PropSize:= SysStringByteLen(PropValue.bstrVal); SetLength(Value, PropSize div SizeOf(WideChar)); CopyMemory(PWideChar(Value), PropValue.bstrVal, PropSize); finally SysFreeString(PropValue.bstrVal); end; end; function ReadBooleanProp(FormatIndex: Cardinal; PropID: TPropID; out Value: WordBool): LongBool; var PropValue: TPropVariant; begin Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BOOL); if Result then Value:= PropValue.boolVal; end; procedure LoadArchiveFormats(var ArchiveFormats: TArchiveFormats); var J: Integer; Data: PByte; Idx: Integer = 0; 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 // Archive format GUID GetHandlerProperty2(Index, kClassID, PropValue); 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 SysFreeString(PropValue.bstrVal); end; // Archive format signature GetHandlerProperty2(Index, kStartSignature, PropValue); if PropValue.vt = VT_BSTR then try SetLength(ArchiveFormat.StartSignature, SysStringByteLen(PropValue.bstrVal)); Data:= PByte(PropValue.bstrVal); for J:= Low(ArchiveFormat.StartSignature) to High(ArchiveFormat.StartSignature) do ArchiveFormat.StartSignature[J]:= Data[J]; finally SysFreeString(PropValue.bstrVal); 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 // 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; end; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin // 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; end; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin // 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; 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; end. ����������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/release/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020272� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/release/x86_64/������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021230� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/release/i386/��������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020763� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/pluginst.inf���������������������������������������������������0000644�0001750�0000144�00000000200�12512443710�021205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[plugininstall] description=SevenZip archiver plugin type=wcx file=SevenZip.wcx defaultextension=7z defaultdir=SevenZip ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/lib/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017420� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/sevenzip/build.bat������������������������������������������������������0000644�0001750�0000144�00000001602�13364423621�020445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off set VERSION=18.10.25 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-0.9.8/plugins/wcx/sevenzip/README.txt�����������������������������������������������������0000644�0001750�0000144�00000001231�13152605553�020353� 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-0.9.8/plugins/wcx/sevenzip/LICENSE.txt����������������������������������������������������0000644�0001750�0000144�00000064505�12422770427�020517� 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-0.9.8/plugins/wcx/rpm/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015605� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/rpm/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016374� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/rpm/src/rpm_io.pas������������������������������������������������������0000644�0001750�0000144�00000017227�12014201074�020367� 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) : 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;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 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) 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-0.9.8/plugins/wcx/rpm/src/rpm_def.pas�����������������������������������������������������0000644�0001750�0000144�00000005632�12014201074�020513� 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; {$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_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} implementation end. ������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/rpm/src/rpm_archive.pas�������������������������������������������������0000644�0001750�0000144�00000024204�13331422133�021376� 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; datasig : RPM_DataSig; end;{ArchiveRec} function GetPackerCaps : Integer; dcpcall; function GetBackgroundFlags: Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; 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) 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 := 0; UnpSize := 0; 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; 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); 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-0.9.8/plugins/wcx/rpm/src/rpm.lpi���������������������������������������������������������0000644�0001750�0000144�00000010424�13022776142�017706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="RPM WCX 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="../lib/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"/> <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="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="rpm.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/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> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/rpm/src/rpm.dpr���������������������������������������������������������0000644�0001750�0000144�00000001726�13331422133�017703� 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-0.9.8/plugins/wcx/rpm/src/rpm.dof���������������������������������������������������������0000644�0001750�0000144�00000002373�11173025634�017674� 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-0.9.8/plugins/wcx/rpm/src/rpm.cfg���������������������������������������������������������0000644�0001750�0000144�00000000546�11173025634�017663� 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-0.9.8/plugins/wcx/rpm/license.txt���������������������������������������������������������0000644�0001750�0000144�00000002205�12014201074�017757� 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-0.9.8/plugins/wcx/rpm/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016353� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/rpm/install.txt���������������������������������������������������������0000644�0001750�0000144�00000001026�12014201074�020003� 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-0.9.8/plugins/wcx/deb/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015541� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/deb/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016330� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/deb/src/deb_io.pas������������������������������������������������������0000644�0001750�0000144�00000003420�13331373456�020266� 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-0.9.8/plugins/wcx/deb/src/deb_def.pas�����������������������������������������������������0000644�0001750�0000144�00000000400�13331373071�020401� 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-0.9.8/plugins/wcx/deb/src/deb_archive.pas�������������������������������������������������0000644�0001750�0000144�00000021703�13331373071�021275� 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; function GetBackgroundFlags: Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; 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-0.9.8/plugins/wcx/deb/src/deb.lpi���������������������������������������������������������0000644�0001750�0000144�00000010761�13264210216�017573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="10"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <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="..\lib\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"/> <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"/> <HostApplicationFilename Value="X:\Totalcmd\Totalcmd.exe"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </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="..\lib\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> </CompilerOptions> </CONFIG> ���������������doublecmd-0.9.8/plugins/wcx/deb/src/deb.dpr���������������������������������������������������������0000644�0001750�0000144�00000000435�13264210216�017571� 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-0.9.8/plugins/wcx/deb/src/deb.dof���������������������������������������������������������0000644�0001750�0000144�00000002417�11173006725�017563� 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-0.9.8/plugins/wcx/deb/license.txt���������������������������������������������������������0000644�0001750�0000144�00000002037�12014201074�017716� 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-0.9.8/plugins/wcx/deb/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016307� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/deb/install.txt���������������������������������������������������������0000644�0001750�0000144�00000000646�12014201074�017746� 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-0.9.8/plugins/wcx/cpio/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015741� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/cpio/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016530� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/cpio/src/cpio_io.pas����������������������������������������������������0000644�0001750�0000144�00000017233�12612631376�020674� 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-0.9.8/plugins/wcx/cpio/src/cpio_def.pas���������������������������������������������������0000644�0001750�0000144�00000006143�12612631376�021021� 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-0.9.8/plugins/wcx/cpio/src/cpio_archive.pas�����������������������������������������������0000644�0001750�0000144�00000023733�13503643000�021673� 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; function GetBackgroundFlags: Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; function CanYouHandleThisFile(FileName: PAnsiChar): Boolean; dcpcall; 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 = -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; 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-0.9.8/plugins/wcx/cpio/src/cpio.lpi�������������������������������������������������������0000644�0001750�0000144�00000010413�13022776142�020174� 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"/> <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" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/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"/> <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="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="cpio.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/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> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/cpio/src/cpio.dpr�������������������������������������������������������0000644�0001750�0000144�00000001660�13331423270�020173� 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-0.9.8/plugins/wcx/cpio/src/cpio.dof�������������������������������������������������������0000644�0001750�0000144�00000002433�11173006725�020161� 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-0.9.8/plugins/wcx/cpio/src/cpio.cfg�������������������������������������������������������0000644�0001750�0000144�00000000546�11173006725�020153� 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-0.9.8/plugins/wcx/cpio/license.txt��������������������������������������������������������0000644�0001750�0000144�00000002205�12014201074�020113� 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-0.9.8/plugins/wcx/cpio/lib/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016507� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/wcx/cpio/install.txt��������������������������������������������������������0000644�0001750�0000144�00000001026�12014201074�020137� 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-0.9.8/plugins/dsx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015004� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/everything/�������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017170� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/everything/src/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017757� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/everything/src/everything.pas�������������������������������������������0000644�0001750�0000144�00000021645�13144363001�022654� 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-0.9.8/plugins/dsx/everything/src/EverythingDsx.lpr����������������������������������������0000644�0001750�0000144�00000001675�13144363001�023306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library EverythingDsx; {$mode objfpc}{$H+} uses Classes, DsxPlugin, everything; threadvar AddFileProc: TSAddFileProc; procedure FoundCallback(FileName: PWideChar); var S: String; begin S:= UTF8Encode(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-0.9.8/plugins/dsx/everything/src/EverythingDsx.lpi����������������������������������������0000644�0001750�0000144�00000007270�13144363001�023272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="10"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="EverythingDsx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <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> <FormatVersion Value="1"/> <HostApplicationFilename Value="R:\Temp\doublecmd\doublecmd.exe"/> </local> </RunParams> <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="EverythingDsx.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value=".."/> <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> <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-0.9.8/plugins/dsx/everything/lib/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017736� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/DSXLocate/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016572� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/DSXLocate/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017361� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/dsx/DSXLocate/src/un_process.pas��������������������������������������������0000644�0001750�0000144�00000004444�12014201074�022244� 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-0.9.8/plugins/dsx/DSXLocate/src/DSXLocate.lpr���������������������������������������������0000644�0001750�0000144�00000012010�12014201074�021650� 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-0.9.8/plugins/dsx/DSXLocate/src/DSXLocate.lpi���������������������������������������������0000644�0001750�0000144�00000007732�13022776142�021673� 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="../lib/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="../lib/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-0.9.8/plugins/dsx/DSXLocate/lib/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017340� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/plugins/build.sh��������������������������������������������������������������������0000755�0001750�0000144�00000001717�13210735026�015652� 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/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/xpi_wdx/src/xpi_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 fi # DSX plugins $lazbuild dsx/DSXLocate/src/DSXLocate.lpi $DC_ARCH # Return from plugins directory cd $basedir �������������������������������������������������doublecmd-0.9.8/plugins/build.bat�������������������������������������������������������������������0000644�0001750�0000144�00000001421�13210735026�015773� 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\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\xpi_wdx\src\xpi_wdx.lpi %DC_ARCH% lazbuild wdx\audioinfo\src\AudioInfo.lpi %DC_ARCH% rem WFX plugins lazbuild wfx\ftp\src\ftp.lpi %DC_ARCH% rem Return from plugins directory popd �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps.txt�������������������������������������������������������������������������0000644�0001750�0000144�00000000667�12014201074�014750� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������avi=video-x-generic bat=application-x-shellscript deb=application-x-deb doc=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 mp2=audio-x-generic mp3=audio-x-generic ods=x-office-spreadsheet odt=x-office-document pas=text-x-pascal pdf=application-pdf po=text-x-po rpm=application-x-rpm sh=application-x-shellscript txt=text-x-generic xls=x-office-spreadsheet �������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/����������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�014206� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/mainicon/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016003� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/mainicon/info.txt�����������������������������������������������������������0000644�0001750�0000144�00000000350�11765566230�017511� 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-0.9.8/pixmaps/mainicon/dc_96.svg����������������������������������������������������������0000644�0001750�0000144�00000037642�11765566230�017460� 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-0.9.8/pixmaps/mainicon/dc_48.svg����������������������������������������������������������0000644�0001750�0000144�00000032772�11765566230�017454� 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-0.9.8/pixmaps/mainicon/dc_256.svg���������������������������������������������������������0000644�0001750�0000144�00000034310�11765566230�017523� 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-0.9.8/pixmaps/mainicon/dc_192.svg���������������������������������������������������������0000644�0001750�0000144�00000034067�11765566230�017533� 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-0.9.8/pixmaps/mainicon/dc_128.svg���������������������������������������������������������0000644�0001750�0000144�00000034031�11765566230�017521� 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-0.9.8/pixmaps/mainicon/dc.ai��������������������������������������������������������������0000644�0001750�0000144�00001302310�11765566230�016720� 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-0.9.8/pixmaps/mainicon/colored/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017432� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/mainicon/colored/v4_6.png���������������������������������������������������0000644�0001750�0000144�00000017233�11765566230�020740� 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-0.9.8/pixmaps/mainicon/colored/v4_5.png���������������������������������������������������0000644�0001750�0000144�00000013343�11765566230�020735� 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-0.9.8/pixmaps/mainicon/colored/v4_4.png���������������������������������������������������0000644�0001750�0000144�00000015143�11765566230�020734� 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-0.9.8/pixmaps/mainicon/colored/v4_3.png���������������������������������������������������0000644�0001750�0000144�00000015506�11765566230�020736� 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-0.9.8/pixmaps/mainicon/colored/v4_2.png���������������������������������������������������0000644�0001750�0000144�00000014677�11765566230�020745� 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-0.9.8/pixmaps/mainicon/alt/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016563� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/mainicon/alt/info.txt�������������������������������������������������������0000644�0001750�0000144�00000000105�11765566230�020267� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Alternative version of the main icon by Ivan Dzikovsky (vanyasmart). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/mainicon/alt/doublecmd.svg��������������������������������������������������0000644�0001750�0000144�00000066640�11765566230�021272� 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-0.9.8/pixmaps/mainicon/alt/dcfinal.svg����������������������������������������������������0000644�0001750�0000144�00000112613�11765566230�020724� 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-0.9.8/pixmaps/mainicon/alt/256px-doublecmd.png��������������������������������������������0000644�0001750�0000144�00000036705�11765566230�022140� 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-0.9.8/pixmaps/mainicon/alt/256px-dcfinal.png����������������������������������������������0000644�0001750�0000144�00000056323�11765566230�021600� 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-0.9.8/pixmaps/mainicon/alt/128px-doublecmd.png��������������������������������������������0000644�0001750�0000144�00000017365�11765566230�022137� 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-0.9.8/pixmaps/mainicon/alt/128px-dcfinal.png����������������������������������������������0000644�0001750�0000144�00000022776�11765566230�021603� 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-0.9.8/pixmaps/folder_src.ico��������������������������������������������������������������0000644�0001750�0000144�00000017126�11226363660�017041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ���6������ ���������h����(��� ���@���� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������feeed d d c d b b b b a a ` ` _ _ _ ^ ^ ] ^ ] ] \ \ [ [�����s~|yvtqnlifda^[ \����s}|zxwusrpnmkjhg^ \����s}|zxvusrpnmkih_ \����s~|{yxvusqonmjia \����s~|zywutrpomljc \����s}{yxwutrpnlke \����s~|{yxvusqomlh \����s~|{ywutrqomi \����s}|zxvutrpnk \����s}{zxvtsrpm \����s}|zyxvtrqn \����s}|zywvtrq \����s}|zxwutr \����s|{yxvtu \����s~|zywuv \����s~{zxwx \����s~}{ywz \����s}}{y| \����s}|z~ \����s~}{ \����s \����s}zxvspppppppppppppp������������s~|s������������������������������������������������������������������������ss��������������������������������������������������������������������������������ss����������������������������������������������������������������������������������������sssssssss�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(������,���� ������������������������������������������������������������������������������������������������������������� [��Cvggfeed c c b a a ` _ ^ ^ ] ] \ [R�����k{wsokgc [S�l~|zwusqnlih \S�m~{ywuronki \R�n~{xvtrolj ]R�o|zxutqnl ^�R�p~|zwtrpm _�R�r~{yvsrp _�R�r|zxvsq _�Q�t|zwvs `�Q�u{ywt a�Q�v~zxv b�Q�w}zw b�P�x~|y c�P��y~{ c�P��zrqpnnlkji5��Ky�j��zu�����k�l�l�l�l�l�l�l�m���������R��zu�Fs�����������������������������������������s�����s��z�z�z�z�z�z����������������������������������������������������������������������������������������s������������������������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������� ��?����(������ ����������������������������� \� \� ]� ^� ^� ^� `� `� b� b� c�d� d�e�g�j�l�n�n�o�q�s�t�u�w�x�y��z�W�\�]�`�d�e�i�j�m�q�r�v�w�z�~�����������y�{�|��|�~�}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �A420.,*(%# Jia[SNKEB<75TmgbXRMID?;6\tlc_WQLGB=9!owqh`ZUNIG?:"yztld^XPLIC>$}vqia]VOLG@&|wnf`YRMKF'yeTH831/-+)~~{xusr uupkj������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/folder-link_src.ico���������������������������������������������������������0000644�0001750�0000144�00000017526�11226363660�020000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������! ��� ���6������ ���������h����(���!���@���� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fddcbba`a_ __ _ ^ _ ^ _ ^ _ _ ^ ^ ] ^ ] ] \ \ [������������rTFQ}|xvxwutqnlifda^[ \��������rwF1Phrxwuutuutrrpnmkjhg^ \��������raƿN"}nb|zywwuvwvuusrpnmkih_ \��������rTN-؆\~}{yyxxxxwvusqonmjia \��������rN/\Zö~|||{yywutrpomljc \��������s6 5N~|{yxwutrpnlke \��������sd83NNw~|{yxvusqomlh \��������sN6HNNNw~|{ywutrqomi \��������sNBWPkN4Nw}|zxvutrpnk \��������sN>+uXzN?4N|}{zxvtsrpm \��������sN="}0+ӑNNNN:n4N|}|zyxvtrqn \��������sN4zy57>>>;jn4N{}|zywvtrq \��������s1/Ϗ@vuuuutxkhi4Nz}|zxwutr \��������sN?5wwwuwvohii4N|{yxvtu \��������ssN?ܚ<+Հ"z#|$}wyhi4N~|zywuv \��������sqN5=֕4440݅yr4N~{zxwx \��������sZɱNNNN4|4N~}{ywz \��������sN44N}}{y| \��������sN4N}|z~ \��������sNN~}{ \��������sN \��������s}zxvspppppppppppppp����������������s~|s����������������������������������������������������������������������������ss������������������������������������������������������������������������������������ss��������������������������������������������������������������������������������������������sssssssss�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(������,���� ������������������������������������������������c2q9J&� !���������������������������������Cvfeccaqxvqpvb\ \ ] ] ] ^ ] ] \ [��������kP!t\~yyxvsokgc [����ls^)Kzxvussrqnlih \����m0(֏ S{yxvuronki \����nl9ݜ Ro8~}{xvtrolj ]����o]ROu\>|zxutqnl ^����p^9mD|%s0ڄ0~|zwtrpm _����r_(݁/ z V V*yl)|H~{yvsrp _����re4t(ڀ,܄,݃(jm#u6|zxvsq _����t[ȳ02tvtvogf2߇5|zwvs `����u90Ɇ8ד*ف)܂&~zk({&w{ywt a����vf-]]'xz)|@~zxv b����wo4(y}zw b����xb3~|y c�����y?~{ c�����zrqpnnlkji�����Ky�����zu�����k�l�l�l�l�l�l�l�m�������������zu�F���������������������������������������������������������z�z�z�z�z�z����������������������������������������������������������������������������������������s������������������������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������� ��?����(������ ����������������������������� \� \� ]� ^� ^� ^� `� `� b� b� c�d� d�e�g�j�l�n�n�o�q�s�t�u�w�x�y��z�$k�n�"q�s�s�W��\�4~�]�`�!�d�e�S�"�i�l�j�K�m�;ś�L�q�r�Qè�x�ԋ�v�?̛�Tƫ�l�w�%؇�[ÿ�z�\ƺ�Zɳ�~�Fَ�a˺��֯���e�l��0�`�%߷�g���_��P��Q���y�O�{�|�|��~�}������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �fXUQKGB<3.(%!nsMOurojga\Y#v5'zwIqmid`[&x/+Ay2plgb]):Z" Nmld_,^9LF7-6$mhc0J1TV=C>ple4}DR@tqok8{v*;WSPHE? ~|��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/folder-link-broken_src.ico��������������������������������������������������0000644�0001750�0000144�00000016526�11361045050�021243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ���6������ �������� �h����(��� ���@���� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fddcbba`a_ __ b a a ` _ ^ _ _ ^ ^ ] ^ ] ] \ \ [��������rT}FlQ{~|wvtqnlifda^[ \����rwFv1YPhrxw}|zxwusrpnmkjhg^ \����ra"I@b|zyw}|zxvusrpnmkih_ \����rT-^+~}{y~|{ywvusqonmjia \����r/fZ~~|zywutrpomljc \����s6a 05h}{yxwutrpnlke \����s68@3gw~|{yxvusqomlh \����s6fHow~|{ywutrqomi \����sBfWmk4cw}|zxvutrpnk \����s>f+jV'z?f4c|!!{z!!tsrpm \����s=f"[0k+T:eK4c|!!|z!!vtrqn \����s4eZW5e7e>f>f>f;fCK4c{!!}|!!wvtrq \����s1X/T@fTQQQQU\E@B4cz!!!!zxwutr \����s?f5eTTUQTYL@BB4c|{yxvtu \����ss?]<f+V"U#W$[TX@B4c!!!!|zywuv \����sq5E=Y4c4c4c0^XK4c!!!!{zxwx \����sZ4c^4c!!!!}{ywz \����s4c4c!!!!}}{y| \����s4c}|z~ \����s~}{ \����s \����s}zxvspppppppppppppp������������s~|s������������������������������������������������������������������������ss��������������������������������������������������������������������������������ss����������������������������������������������������������������������������������������sssssssss�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(������,���� ������������������������������������������������������������������������������������������������������������������Cvggedcbaa` a a ` ^ ^ ^ ] ] \ [��������kcZtzwsokgc [����l}Hy.VGxptvzwusqnlih \����m8cD9es{xy{ywuronki \����n\A7u~}~{xvtrolj ]����o3Y/P7fS|zxutqnl ^����p)NAi9}]+S~~|zwtrpm _����r*N<hMJ`'I&KX~CmLq/S`p _����r*N/`(a$J22-ROCT},@8jpXq _����t9e1]"X%X'X'Y$^EI"JVS 9;]$Eks `����u~&G3]#VTSWKAK%Kj9c#bwt a����vh&D5Q.Z,^)[SN!GdHw)IM}9hv b����wKz(L?$J$[#Hk-B<mw]w b����xf"H%LjX_|Gxmy c�����yh1r~{ c�����z|rrqpnnlkji�����Ky�����zu�����k�l�l�l�l�l�l�l�m�������������zu�F���������������������������������������������������������z�z�z�z�z�z����������������������������������������������������������������������������������������s����������������������������������������������������������������������������������������������������������������������������������������A�� A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��AAAAAA(������ ���� �����������������������������������������������������������������������������������������������������������������������������������������������c`R?E] ` ` ] ^ ^ \ \��������kY}:e{~wqjd]W ]����mG@k|y\ ]����o^9^FvGya}{` ]����q[@h&PJ+Qckbaee ]����s],`+^ @"@'V KdRD|BzO|i ]����t,N"WRRQA Hd,M+Mm ]����ua,F/Y+^"XL-Wj-N,Mhr ]����wN*O.a.XUF~E}Qv ]����yY3Vz ]�����ztsqnjge�������������zx�����������������������������������������z�z�z�z�z����������������������������������������������������������������������������������������������������AA�A�A�A�A�A�A�A�A�A�A�AAAA��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�015617� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017365� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/mimetypes/�������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021401� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/mimetypes/unknown.svg��������������������������������������0000644�0001750�0000144�00000017611�13175313470�023634� 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-0.9.8/pixmaps/dctheme/scalable/mimetypes/package-x-generic.svg����������������������������0000644�0001750�0000144�00000023266�13175313470�025412� 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-0.9.8/pixmaps/dctheme/scalable/mimetypes/application-x-executable.svg���������������������0000644�0001750�0000144�00000023126�13175313470�027022� 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-0.9.8/pixmaps/dctheme/scalable/devices/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021007� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/network-wired.svg����������������������������������0000644�0001750�0000144�00000050664�13175314305�024347� 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" inkscape:export-ydpi="90.000000" inkscape:export-xdpi="90.000000" inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" width="48px" height="48px" id="svg11300" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docbase="/home/jimmac/gfx/novell/pdes/branches/NLD10/network-manager" sodipodi:docname="network-wired.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="perspective65" /> <linearGradient id="linearGradient12836" inkscape:collect="always"> <stop id="stop12838" offset="0" style="stop-color:#515152;stop-opacity:1;" /> <stop id="stop12840" offset="1" style="stop-color:#515152;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient12828"> <stop id="stop12830" offset="0.0000000" style="stop-color:#cccccd;stop-opacity:1.0000000;" /> <stop style="stop-color:#adadae;stop-opacity:1.0000000;" offset="0.0000000" id="stop12862" /> <stop id="stop12832" offset="1.0000000" style="stop-color:#8f8f90;stop-opacity:0.0000000;" /> </linearGradient> <linearGradient id="linearGradient12810"> <stop id="stop12812" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop12814" offset="1.0000000" style="stop-color:#e5e5e5;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient11625" inkscape:collect="always"> <stop id="stop11627" offset="0" style="stop-color:#fce94f;stop-opacity:1;" /> <stop id="stop11629" offset="1" style="stop-color:#fce94f;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient11615"> <stop id="stop11617" offset="0.0000000" style="stop-color:#636363;stop-opacity:1.0000000;" /> <stop id="stop11619" offset="1.0000000" style="stop-color:#000000;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient11602"> <stop id="stop11604" offset="0.0000000" style="stop-color:#f6f6f6;stop-opacity:1.0000000;" /> <stop id="stop11606" offset="1.0000000" style="stop-color:#e0e0e0;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient11594"> <stop id="stop11596" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop11598" offset="1.0000000" style="stop-color:#d1d1d1;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient11520"> <stop id="stop11522" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" /> <stop id="stop11524" offset="1.0000000" style="stop-color:#dcdcdc;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient11508" inkscape:collect="always"> <stop id="stop11510" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop11512" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <radialGradient gradientTransform="matrix(1.995058,-1.383691e-32,0.000000,1.671510,-27.19988,-29.02822)" gradientUnits="userSpaceOnUse" r="20.530962" fy="35.878170" fx="24.445690" cy="35.878170" cx="24.445690" id="radialGradient11526" xlink:href="#linearGradient11520" inkscape:collect="always" /> <radialGradient r="6.5659914" fy="44.565483" fx="30.203562" cy="44.565483" cx="30.203562" gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-4.933466e-14,29.48178)" gradientUnits="userSpaceOnUse" id="radialGradient11532" xlink:href="#linearGradient11508" inkscape:collect="always" /> <linearGradient gradientTransform="matrix(1.061966,0.000000,0.000000,0.837825,-4.389811,0.164729)" gradientUnits="userSpaceOnUse" y2="38.947163" x2="31.799011" y1="8.9471626" x1="20.092352" id="linearGradient11600" xlink:href="#linearGradient11594" inkscape:collect="always" /> <linearGradient gradientTransform="matrix(1.000000,0.000000,0.000000,0.837825,-2.875000,0.164729)" gradientUnits="userSpaceOnUse" y2="39.447163" x2="24.445671" y1="12.947163" x1="24.445671" id="linearGradient11608" xlink:href="#linearGradient11602" inkscape:collect="always" /> <radialGradient r="4.7500000" fy="27.749998" fx="25.000000" cy="27.749998" cx="25.000000" gradientTransform="matrix(3.070491,2.727143e-15,-3.444813e-15,3.878514,-55.26225,-82.65742)" gradientUnits="userSpaceOnUse" id="radialGradient12909" xlink:href="#linearGradient11615" inkscape:collect="always" /> <linearGradient y2="27.375000" x2="21.500000" y1="30.000000" x1="21.500000" gradientTransform="matrix(1.016250,0.000000,0.000000,1.000000,1.658750,-6.000012)" gradientUnits="userSpaceOnUse" id="linearGradient12918" xlink:href="#linearGradient11625" inkscape:collect="always" /> <linearGradient y2="27.375000" x2="21.500000" y1="30.000000" x1="21.500000" gradientTransform="matrix(0.985000,0.000000,0.000000,1.000000,0.315001,-6.000012)" gradientUnits="userSpaceOnUse" id="linearGradient12921" xlink:href="#linearGradient11625" inkscape:collect="always" /> <linearGradient y2="27.375000" x2="21.500000" y1="30.000000" x1="21.500000" gradientTransform="matrix(0.985000,0.000000,0.000000,1.022813,-1.675625,-6.638771)" gradientUnits="userSpaceOnUse" id="linearGradient12924" xlink:href="#linearGradient11625" inkscape:collect="always" /> <linearGradient gradientTransform="matrix(0.755725,0,0,0.755725,-25.19847,17.09924)" y2="12.022278" x2="62.591469" y1="25.209778" x1="84.998962" gradientUnits="userSpaceOnUse" id="linearGradient12927" xlink:href="#linearGradient12810" inkscape:collect="always" /> <radialGradient r="7.0056136" fy="33.398670" fx="88.593018" cy="33.398670" cx="88.593018" gradientTransform="matrix(0.732463,0.172296,-0.147115,0.625415,-17.70794,5.185566)" gradientUnits="userSpaceOnUse" id="radialGradient12931" xlink:href="#linearGradient12828" inkscape:collect="always" /> <linearGradient gradientTransform="matrix(0.755725,0,0,0.755725,-24.84491,17.27602)" y2="36.656250" x2="92.062500" y1="31.656250" x1="88.750000" gradientUnits="userSpaceOnUse" id="linearGradient12934" xlink:href="#linearGradient12836" inkscape:collect="always" /> <linearGradient gradientTransform="matrix(0.755725,0,0,0.755725,-25.19847,17.09924)" y2="21.459777" x2="87.528968" y1="21.459777" x1="65.623963" gradientUnits="userSpaceOnUse" id="linearGradient12941" xlink:href="#linearGradient12810" inkscape:collect="always" /> <radialGradient r="6.5659914" fy="44.565483" fx="30.203562" cy="44.565483" cx="30.203562" gradientTransform="matrix(1,7.106946e-17,-4.3595e-17,0.338462,-5.036557e-14,29.48178)" gradientUnits="userSpaceOnUse" id="radialGradient12962" xlink:href="#linearGradient11508" inkscape:collect="always" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient12810" id="linearGradient3152" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.37407,0,0,1.37407,-85.1015,-12.38821)" x1="84.998962" y1="25.209778" x2="62.591469" y2="12.022278" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient12828" id="radialGradient3156" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.889444,0.209222,-0.178645,0.759454,-34.9767,-11.86445)" cx="88.593018" cy="33.398670" fx="88.593018" fy="33.398670" r="7.0056136" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient12836" id="linearGradient3159" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.37407,0,0,1.37407,-84.45865,-12.06679)" x1="88.750000" y1="31.656250" x2="92.062500" y2="36.656250" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient12810" id="linearGradient3166" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.37407,0,0,1.37407,-85.1015,-12.38821)" x1="65.623963" y1="21.459777" x2="87.528968" y2="21.459777" /> </defs> <sodipodi:namedview stroke="#a40000" fill="#cc0000" id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="0.25490196" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="42.256907" inkscape:cy="27.418015" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:showpageshadow="false" inkscape:window-width="1220" inkscape:window-height="818" inkscape:window-x="214" inkscape:window-y="30" /> <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: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 id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <path transform="matrix(2.752736,1.43844,-2.455422,4.679605,48.40044,-223.0412)" d="M 36.769553 44.565483 A 6.5659914 2.2223356 0 1 1 23.63757,44.565483 A 6.5659914 2.2223356 0 1 1 36.769553 44.565483 z" sodipodi:ry="2.2223356" sodipodi:rx="6.5659914" sodipodi:cy="44.565483" sodipodi:cx="30.203562" id="path12960" style="opacity:0.40641713;color:#000000;fill:url(#radialGradient12962);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.81415844;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" inkscape:r_cx="true" inkscape:r_cy="true" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccccccc" id="path12803" d="M 12.80097,5.8182116 L 5.1577075,12.516803 L 5.4153448,18.657177 L 23.407072,34.845436 L 35.000785,24.110515 L 35.258424,17.411926 L 12.80097,5.8182116 z " style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path12787" d="M 5.0704024,12.658182 L 5.3171158,18.579297 L 23.57389,34.615652 L 23.327178,28.201111 L 5.0704024,12.658182 z " style="color:#000000;fill:#a6a6a6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccccc" id="path12789" d="M 23.327178,28.201111 L 23.327178,34.739009 L 34.922696,24.006986 L 35.169408,17.345732 L 23.327178,28.201111 z " style="color:#000000;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccccc" id="path12791" d="M 5.0704024,12.669106 L 23.57389,28.447823 L 35.169408,17.592444 L 12.71851,5.7502141 L 5.0704024,12.669106 z " style="color:#000000;fill:url(#linearGradient3166);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccsccc" id="path12793" d="M 6.2664926,11.644777 L 9.1411708,13.645034 C 9.1411708,13.645034 9.8196319,13.891747 10.128023,13.645034 C 10.436414,13.398322 10.374736,12.658182 10.374736,12.658182 L 7.5000581,10.400285 L 6.2664926,11.644777 z " style="color:#000000;fill:#ffc11a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccsccc" style="color:#000000;fill:#ffc11a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 8.4010304,9.6710707 L 11.361588,11.671328 C 11.361588,11.671328 12.040051,11.918041 12.348442,11.671328 C 12.656831,11.424616 12.595154,10.684476 12.595154,10.684476 L 9.7204774,8.4265796 L 8.4010304,9.6710707 z " id="path12795" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccsccc" id="path12797" d="M 10.583973,7.7348437 L 13.458651,9.8209807 C 13.458651,9.8209807 14.137112,10.067694 14.445505,9.8209807 C 14.753896,9.5742672 14.692216,8.8341268 14.692216,8.8341268 L 11.731658,6.4903526 L 10.583973,7.7348437 z " style="color:#000000;fill:#ffc11a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="opacity:0.34224596;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 12.829749,6.3689141 L 5.7478543,13.004915 L 5.9865695,18.350786 L 23.25803,33.865361 L 34.343751,23.57536 L 34.582465,17.96991 L 12.829749,6.3689141 z " id="path12820" sodipodi:nodetypes="ccccccc" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="csc" id="path12822" d="M 31.564353,28.210626 C 31.564353,28.210626 37.404149,30.529369 40.495806,35.252734 C 43.587462,39.976098 45.305051,46.846447 45.305051,46.846447" style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3159);stroke-width:5;stroke-linecap:round;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path12824" d="M 32.200708,26.732644 C 31.367882,26.833528 30.70943,27.486206 30.601215,28.318112 C 30.492999,29.150018 30.962562,29.949431 31.741863,30.260022 C 31.741863,30.260022 36.625199,32.925232 38.260739,35.423974 C 40.0495,38.156803 41.243238,42.622122 41.243238,42.622122 C 41.496652,43.6041 42.498135,44.194717 43.480113,43.941304 C 44.462091,43.687889 45.052708,42.686407 44.799295,41.704429 C 44.799295,41.704429 43.698802,36.992826 41.35795,33.416522 C 38.863875,29.606131 33.118401,26.876032 33.118401,26.876032 C 32.829855,26.750352 32.51384,26.700975 32.200708,26.732644 z " style="color:#000000;fill:url(#radialGradient3156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="cscscscscc" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="cczccc" style="color:#000000;fill:#a0a0a1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 15.925782,15.865453 L 30.975286,27.214258 C 32.702277,28.324466 34.36759,27.029223 35.416121,25.733979 C 36.464653,24.438734 36.279618,22.896778 35.169408,22.03328 L 19.133053,13.39832 L 15.925782,15.865453 z " id="path12801" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="cczccc" id="path12799" d="M 15.309,15.865453 L 30.728571,25.240552 C 31.592068,25.857335 33.442415,25.117197 34.182556,24.253702 C 34.922696,23.390204 34.305913,22.156639 33.689131,21.786569 L 19.009696,13.02825 L 15.309,15.865453 z " style="color:#000000;fill:url(#linearGradient3152);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> </g> </svg> ����������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/media-optical.svg����������������������������������0000644�0001750�0000144�00000070603�13175314305�024251� 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="svg3077" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices" sodipodi:docname="media-optical.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="perspective91" /> <linearGradient inkscape:collect="always" id="linearGradient23419"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop23421" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop23423" /> </linearGradient> <linearGradient id="linearGradient3435" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0.0000000" style="stop-color:#ffffc8;stop-opacity:1.0000000;" id="stop3437" /> <stop offset="1.0000000" style="stop-color:#9a91ef;stop-opacity:0.0000000;" id="stop3439" /> </linearGradient> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientUnits="userSpaceOnUse" id="linearGradient3421"> <stop id="stop3423" style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" /> <stop id="stop3427" style="stop-color:#b8c04c;stop-opacity:0.0000000;" offset="1.0000000" /> </linearGradient> <linearGradient id="linearGradient3406" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0.0000000" style="stop-color:#b307ff;stop-opacity:0.82178217;" id="stop3408" /> <stop offset="1.0000000" style="stop-color:#f0ff8b;stop-opacity:0.64356434;" id="stop3410" /> <stop offset="1.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;" id="stop3412" /> </linearGradient> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientUnits="userSpaceOnUse" id="linearGradient3394"> <stop id="stop3396" style="stop-color:#fff307;stop-opacity:1.0000000;" offset="0.0000000" /> <stop id="stop3398" style="stop-color:#166eff;stop-opacity:1.0000000;" offset="0.50000000" /> <stop id="stop3400" style="stop-color:#ffffff;stop-opacity:0.0000000;" offset="1.0000000" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6036"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6038" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop6040" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6028"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6030" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop6032" /> </linearGradient> <linearGradient id="linearGradient4236"> <stop style="stop-color:#ffffff;stop-opacity:0.32673267;" offset="0.0000000" id="stop4238" /> <stop style="stop-color:#ffffff;stop-opacity:0.60396039;" offset="1.0000000" id="stop4240" /> </linearGradient> <linearGradient id="aigrd2" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0" style="stop-color:#FBFBFB" id="stop3043" /> <stop offset="0.5" style="stop-color:#B6B6B6" id="stop3045" /> <stop offset="1" style="stop-color:#E4E4E4" id="stop3047" /> </linearGradient> <linearGradient id="aigrd1" gradientUnits="userSpaceOnUse" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075"> <stop offset="0" style="stop-color:#EBEBEB" id="stop3034" /> <stop offset="0.5" style="stop-color:#FFFFFF" id="stop3036" /> <stop offset="1" style="stop-color:#EBEBEB" id="stop3038" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#aigrd1" id="linearGradient3912" gradientUnits="userSpaceOnUse" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075" gradientTransform="matrix(1.190476,0.000000,0.000000,1.190476,-4.224424,-2.500000)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient4222" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.250000,0.000000,0.000000,1.250000,-5.652995,-2.604165)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient4224" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.250000,0.000000,0.000000,1.250000,-5.652995,-2.604165)" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd2" id="linearGradient4242" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.190476,0.000000,0.000000,1.190476,-4.224424,-2.500001)" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6028" id="linearGradient6034" x1="28.702885" y1="31.494707" x2="17.742729" y2="18.366575" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6036" id="linearGradient6042" x1="10.501720" y1="3.6100161" x2="48.798885" y2="54.698483" gradientUnits="userSpaceOnUse" /> <radialGradient gradientTransform="matrix(0.848684,0.958020,-0.782119,0.692834,18.69147,-20.52578)" gradientUnits="userSpaceOnUse" r="21.333334" fy="27.569166" fx="37.751469" cy="27.569166" cx="37.751469" id="radialGradient3392" xlink:href="#linearGradient3394" inkscape:collect="always" /> <radialGradient r="21.333334" fy="48.238270" fx="53.556889" cy="48.238270" cx="53.556889" gradientTransform="matrix(0.158450,-0.158988,0.432907,0.431441,-2.723645,15.00107)" gradientUnits="userSpaceOnUse" id="radialGradient3429" xlink:href="#linearGradient3421" inkscape:collect="always" /> <radialGradient r="21.333334" fy="33.377594" fx="16.885271" cy="33.377594" cx="16.885271" gradientTransform="matrix(5.184267e-3,-0.122860,0.544548,2.297824e-2,0.957234,26.30756)" gradientUnits="userSpaceOnUse" id="radialGradient3433" xlink:href="#linearGradient3435" inkscape:collect="always" /> <radialGradient r="21.333334" fy="21.618015" fx="35.511295" cy="21.618015" cx="35.511295" gradientTransform="matrix(0.105916,-1.914240e-2,0.104789,0.579807,17.13693,7.115158)" gradientUnits="userSpaceOnUse" id="radialGradient3443" xlink:href="#linearGradient3435" inkscape:collect="always" /> <radialGradient gradientTransform="matrix(-5.048220e-2,1.387847e-2,-0.128440,-0.467196,35.41257,39.44172)" r="21.333334" fy="23.914305" fx="133.84108" cy="23.914305" cx="133.84108" gradientUnits="userSpaceOnUse" id="radialGradient3447" xlink:href="#linearGradient3435" inkscape:collect="always" /> <radialGradient r="21.333334" fy="38.807304" fx="26.137741" cy="38.807304" cx="26.137741" gradientTransform="matrix(0.769501,-1.242500,0.670300,0.415141,-21.77857,41.36563)" gradientUnits="userSpaceOnUse" id="radialGradient3449" xlink:href="#linearGradient3406" inkscape:collect="always" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd1" id="linearGradient23343" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.190476,0,0,1.190476,-4.224424,-2.5)" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd2" id="linearGradient23345" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.190476,0,0,1.190476,-4.224424,-2.500001)" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient23347" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25,0,0,1.25,-5.652995,-2.604165)" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient23349" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25,0,0,1.25,-5.652995,-2.604165)" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6036" id="linearGradient23351" gradientUnits="userSpaceOnUse" x1="10.501720" y1="3.6100161" x2="48.798885" y2="54.698483" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6028" id="linearGradient23353" gradientUnits="userSpaceOnUse" x1="28.702885" y1="31.494707" x2="17.742729" y2="18.366575" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3394" id="radialGradient23355" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.848684,0.95802,-0.782119,0.692834,18.69147,-20.52578)" cx="37.751469" cy="27.569166" fx="37.751469" fy="27.569166" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3406" id="radialGradient23357" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.769501,-1.2425,0.6703,0.415141,-21.77857,41.36563)" cx="26.137741" cy="38.807304" fx="26.137741" fy="38.807304" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3421" id="radialGradient23359" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.15845,-0.158988,0.432907,0.431441,-2.723645,15.00107)" cx="53.556889" cy="48.238270" fx="53.556889" fy="48.238270" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23361" gradientUnits="userSpaceOnUse" gradientTransform="matrix(5.184267e-3,-0.12286,0.544548,2.297824e-2,0.957234,26.30756)" cx="16.885271" cy="33.377594" fx="16.885271" fy="33.377594" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23363" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.105916,-1.91424e-2,0.104789,0.579807,17.13693,7.115158)" cx="35.511295" cy="21.618015" fx="35.511295" fy="21.618015" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23365" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.04822e-2,1.387847e-2,-0.12844,-0.467196,35.41257,39.44172)" cx="133.84108" cy="23.914305" fx="133.84108" fy="23.914305" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23368" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.04822e-2,1.387847e-2,-0.12844,-0.467196,35.41257,39.44172)" cx="133.84108" cy="23.914305" fx="133.84108" fy="23.914305" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23371" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.105916,-1.91424e-2,0.104789,0.579807,17.13693,7.115158)" cx="35.511295" cy="21.618015" fx="35.511295" fy="21.618015" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3435" id="radialGradient23374" gradientUnits="userSpaceOnUse" gradientTransform="matrix(5.184267e-3,-0.12286,0.544548,2.297824e-2,0.957234,26.30756)" cx="16.885271" cy="33.377594" fx="16.885271" fy="33.377594" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3421" id="radialGradient23377" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.15845,-0.158988,0.432907,0.431441,-2.723645,15.00107)" cx="53.556889" cy="48.238270" fx="53.556889" fy="48.238270" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3406" id="radialGradient23380" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.769501,-1.2425,0.6703,0.415141,-21.77857,41.36563)" cx="26.137741" cy="38.807304" fx="26.137741" fy="38.807304" r="21.333334" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3394" id="radialGradient23383" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.848684,0.95802,-0.782119,0.692834,18.69147,-20.52578)" cx="37.751469" cy="27.569166" fx="37.751469" fy="27.569166" r="21.333334" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6036" id="linearGradient23387" gradientUnits="userSpaceOnUse" x1="10.501720" y1="3.6100161" x2="48.798885" y2="54.698483" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient23390" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25,0,0,1.25,-5.652995,-2.604165)" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4236" id="linearGradient23393" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25,0,0,1.25,-5.652995,-2.604165)" x1="21.125000" y1="14.625000" x2="29.000000" y2="28.000000" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd2" id="linearGradient23397" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.190476,0,0,1.190476,-4.224424,-2.500001)" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd1" id="linearGradient23400" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.190476,0,0,1.190476,-4.224424,-2.5)" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient23419" id="radialGradient23425" cx="23.334524" cy="41.63604" fx="23.334524" fy="41.63604" r="22.627417" gradientTransform="matrix(1,0,0,0.25,0,31.22703)" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="0.25490196" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="19.046921" inkscape:cy="-26.568656" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:window-width="872" inkscape:window-height="804" inkscape:window-x="176" inkscape:window-y="44" inkscape:showpageshadow="false" /> <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>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> <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <path sodipodi:type="arc" style="opacity:0.55;color:#000000;fill:url(#radialGradient23425);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="path23417" sodipodi:cx="23.334524" sodipodi:cy="41.63604" sodipodi:rx="22.627417" sodipodi:ry="5.6568542" d="M 45.961941 41.63604 A 22.627417 5.6568542 0 1 1 0.70710754,41.63604 A 22.627417 5.6568542 0 1 1 45.961941 41.63604 z" inkscape:r_cx="true" inkscape:r_cy="true" transform="matrix(1,0,0,1.066291,1,-2.885106)" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3040" d="M 24.347006,4.1666669 C 12.799386,4.1666669 3.5136719,13.452381 3.5136719,25 C 3.5136719,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666669 24.347006,4.1666669 L 24.347006,4.1666669 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " style="fill:url(#linearGradient23400);fill-rule:nonzero;stroke:none;stroke-miterlimit:4" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3049" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " style="fill:url(#linearGradient23397);fill-rule:nonzero;stroke:#808080;stroke-miterlimit:4;stroke-opacity:1" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3051" d="M 24.347006,14.895835 C 18.70442,14.895835 14.24284,19.488638 14.24284,25 C 14.24284,30.642588 18.835644,35.104166 24.347006,35.104166 C 29.989592,35.104166 34.451172,30.511364 34.451172,25 C 34.451172,19.357414 29.858368,14.895835 24.347006,14.895835 L 24.347006,14.895835 z M 24.347006,30.511364 C 21.328879,30.511364 18.835644,28.018129 18.835644,25 C 18.835644,21.981873 21.328879,19.488638 24.347006,19.488638 C 27.365133,19.488638 29.858368,21.981873 29.858368,25 C 29.858368,28.018129 27.365133,30.511364 24.347006,30.511364 z " style="opacity:0.10999995;fill-rule:nonzero;stroke:none;stroke-miterlimit:4" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="fill:url(#linearGradient23393);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" d="M 29.922111,5.6692337 L 26.325518,19.663896 C 27.450222,19.963413 28.349661,20.659366 28.960646,21.622438 L 41.352866,14.073153 C 38.817618,9.9434382 34.748656,6.9050853 29.922111,5.6692337 z " id="path3916" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path4214" d="M 17.307824,43.766057 L 22.043079,30.114558 C 20.946815,29.723566 20.107654,28.956005 19.577936,27.945951 L 6.6068752,34.450599 C 8.7939325,38.774811 12.599255,42.137482 17.307824,43.766057 z " style="fill:url(#linearGradient23390);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient23387);stroke-miterlimit:4;stroke-opacity:1" d="M 24.347002,5.2023655 C 13.373458,5.2023655 4.5493711,14.026454 4.5493711,24.999997 C 4.5493711,35.973541 13.373458,44.797628 24.347002,44.797628 C 35.320546,44.797628 44.144633,35.973541 44.144633,24.999997 C 44.144633,14.026454 35.320546,5.2023655 24.347002,5.2023655 L 24.347002,5.2023655 z " id="path5264" sodipodi:nodetypes="cccccc" /> <path inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:type="arc" style="opacity:0.67213111;color:#000000;fill:none;fill-opacity:0.31638417;fill-rule:nonzero;stroke:url(#linearGradient23353);stroke-width:0.93053865;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="path6026" sodipodi:cx="24.306795" sodipodi:cy="24.930641" sodipodi:rx="6.0987959" sodipodi:ry="6.0987959" d="M 30.405591 24.930641 A 6.0987959 6.0987959 0 1 1 18.207999,24.930641 A 6.0987959 6.0987959 0 1 1 30.405591 24.930641 z" transform="translate(8.838835e-2,8.838865e-2)" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="opacity:0.1142857;fill:url(#radialGradient23383);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " id="path3390" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3404" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " style="opacity:0.09714284;fill:url(#radialGradient23380);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="opacity:0.71428576;fill:url(#radialGradient23377);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " id="path3419" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3431" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " style="opacity:0.62285713;fill:url(#radialGradient23374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" /> <path inkscape:r_cy="true" inkscape:r_cx="true" style="opacity:0.37142861;fill:url(#radialGradient23371);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " id="path3441" /> <path inkscape:r_cy="true" inkscape:r_cx="true" id="path3445" d="M 24.347006,4.1666665 C 12.799386,4.1666665 3.513672,13.452381 3.513672,25 C 3.513672,36.54762 12.799386,45.833335 24.347006,45.833335 C 35.894626,45.833335 45.180341,36.54762 45.180341,25 C 45.180341,13.452381 35.894626,4.1666665 24.347006,4.1666665 L 24.347006,4.1666665 z M 24.347006,30.000001 C 21.608911,30.000001 19.347006,27.738096 19.347006,25 C 19.347006,22.261905 21.608911,20 24.347006,20 C 27.085101,20 29.347006,22.261905 29.347006,25 C 29.347006,27.738096 27.085101,30.000001 24.347006,30.000001 z " style="opacity:0.23428572;fill:url(#radialGradient23368);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" /> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/media-floppy.svg�����������������������������������0000644�0001750�0000144�00000033676�13175314305�024140� 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" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices" sodipodi:docname="media-floppy.svg" inkscape:export-filename="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/devices/media-floppy.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <defs id="defs4"> <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="perspective48" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6719" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient inkscape:collect="always" id="linearGradient5060"> <stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6717" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient id="linearGradient5048"> <stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050" /> <stop id="stop5056" offset="0.5" style="stop-color:black;stop-opacity:1;" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5048" id="linearGradient6715" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" x1="302.85715" y1="366.64789" x2="302.85715" y2="609.50507" /> <linearGradient inkscape:collect="always" id="linearGradient2371"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop2373" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop2375" /> </linearGradient> <linearGradient id="linearGradient2350"> <stop id="stop2352" offset="0" style="stop-color:#858585;stop-opacity:1;" /> <stop style="stop-color:#cbcbcb;stop-opacity:1;" offset="0.5" id="stop2356" /> <stop id="stop2354" offset="1" style="stop-color:#6b6b6b;stop-opacity:1;" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient2277"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop2279" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop2281" /> </linearGradient> <linearGradient id="linearGradient2263"> <stop style="stop-color:#1e2d69;stop-opacity:1;" offset="0" id="stop2265" /> <stop style="stop-color:#78a7e0;stop-opacity:1;" offset="1" id="stop2267" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2263" id="linearGradient2269" x1="40.884724" y1="71.869133" x2="16.879831" y2="-0.38931385" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.976612,0.000000,0.000000,1.139789,0.564215,-3.271158)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2277" id="linearGradient2283" x1="13.783585" y1="-0.99672896" x2="33.074715" y2="55.701546" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.985432,0.000000,0.000000,1.148179,0.641070,-2.933883)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2350" id="linearGradient2348" x1="20.125" y1="21.84375" x2="28.5625" y2="42.46875" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.067698,0.000000,0.000000,1.121532,-1.368937,-5.574460)" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient2371" id="radialGradient2377" cx="24.3125" cy="41.15625" fx="24.3125" fy="41.15625" r="22.875" gradientTransform="matrix(1.000000,0.000000,0.000000,0.269126,-1.352272e-16,30.08005)" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview id="base" pagecolor="#efefef" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="-125.27386" inkscape:cy="9.8398597" inkscape:document-units="px" inkscape:current-layer="layer1" inkscape:showpageshadow="false" showborder="true" borderlayer="top" showgrid="false" inkscape:grid-points="false" inkscape:window-width="872" inkscape:window-height="693" inkscape:window-x="502" inkscape:window-y="155"> <inkscape:grid id="GridFromPre046Settings" type="xygrid" originx="0px" originy="0px" spacingx="1px" spacingy="1px" color="#9f9f9f" empcolor="#9f9f9f" opacity="0.10196078" empopacity="0.25490196" empspacing="10" /> </sodipodi:namedview> <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" /> <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 inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"> <g transform="matrix(2.415802e-2,0,0,2.086758e-2,45.237,41.6536)" id="g6707"> <rect style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6709" width="1339.6335" height="478.35718" x="-1559.2523" y="-150.69685" /> <path style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " id="path6711" sodipodi:nodetypes="cccc" /> <path sodipodi:nodetypes="cccc" id="path6713" d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> </g> <path style="fill:url(#linearGradient2269);fill-opacity:1;stroke:#25375f;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" d="M 4.5577604,3.5675797 L 43.448063,3.5675797 C 44.037357,3.5675797 44.511771,4.0419938 44.511771,4.6312883 L 44.511771,42.396499 C 44.511771,42.985793 44.037357,43.460207 43.448063,43.460207 L 6.5577604,43.460207 C 6.5577604,43.460207 3.4940519,40.396499 3.4940519,40.396499 L 3.4940519,4.6312883 C 3.4940519,4.0419938 3.9684659,3.5675797 4.5577604,3.5675797 z " id="rect2259" sodipodi:nodetypes="ccccccccc" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect2328" width="30" height="23" x="9" y="4" /> <rect ry="0.12620771" rx="0.12620772" y="4" x="9" height="4" width="30" id="rect2330" style="opacity:1;fill:#d31c00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> <rect style="opacity:0.73863639;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect2332" width="2" height="2" x="6" y="6" rx="0.12620772" ry="0.12620771" /> <path style="opacity:0.13068182;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M 11,12.5 L 37,12.5" id="path2334" /> <path id="path2336" d="M 11,17.5 L 37,17.5" style="opacity:0.13068182;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> <path style="opacity:0.13068182;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M 11,22.5 L 37,22.5" id="path2338" /> <path style="opacity:0.59659095;fill:none;fill-opacity:1;stroke:url(#linearGradient2283);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" d="M 4.6189226,4.5276647 L 43.387404,4.5276647 C 43.457323,4.5276647 43.513612,4.5839533 43.513612,4.6538724 L 43.513612,42.302111 C 43.513612,42.37203 43.457323,42.428319 43.387404,42.428319 L 6.9282818,42.428319 C 6.9282818,42.428319 4.4927149,40.036946 4.4927149,40.036946 L 4.4927149,4.6538724 C 4.4927149,4.5839533 4.5490035,4.5276647 4.6189226,4.5276647 z " id="rect2273" sodipodi:nodetypes="ccccccccc" /> <path style="fill:url(#linearGradient2348);fill-opacity:1;stroke:#525252;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" d="M 14.113967,28.562183 L 33.863791,28.562183 C 34.751762,28.562183 35.466627,29.313093 35.466627,30.245836 L 35.466627,43.447387 C 35.466627,43.447387 12.511131,43.447387 12.511131,43.447387 L 12.511131,30.245836 C 12.511131,29.313093 13.225996,28.562183 14.113967,28.562183 z " id="rect2340" sodipodi:nodetypes="ccccccc" /> <rect style="opacity:1;fill:#4967a2;fill-opacity:1;stroke:#525252;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect2359" width="5.0297527" height="10.06597" x="16.464279" y="30.4566" rx="0.75120711" ry="0.75120765" /> </g> </svg> ������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/media-flash.svg������������������������������������0000644�0001750�0000144�00000065403�13175314305�023715� 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" inkscape:export-ydpi="90.000000" inkscape:export-xdpi="90.000000" inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" width="48px" height="48px" id="svg11300" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme-extras/scalable/devices" sodipodi:docname="media-flash.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="perspective71" /> <linearGradient inkscape:collect="always" id="linearGradient6210"> <stop style="stop-color:white;stop-opacity:1;" offset="0" id="stop6212" /> <stop style="stop-color:white;stop-opacity:0;" offset="1" id="stop6214" /> </linearGradient> <linearGradient id="linearGradient6196"> <stop style="stop-color:#edd400;stop-opacity:1;" offset="0" id="stop6198" /> <stop id="stop6204" offset="0.5" style="stop-color:#c3af07;stop-opacity:1;" /> <stop style="stop-color:#ffeb3e;stop-opacity:1;" offset="1" id="stop6200" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6151"> <stop style="stop-color:#2e3436;stop-opacity:1;" offset="0" id="stop6153" /> <stop style="stop-color:#2e3436;stop-opacity:0;" offset="1" id="stop6155" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6125"> <stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop6127" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop6129" /> </linearGradient> <linearGradient id="linearGradient6115"> <stop style="stop-color:#555753;stop-opacity:1;" offset="0" id="stop6117" /> <stop style="stop-color:#3e3f3c;stop-opacity:1;" offset="1" id="stop6119" /> </linearGradient> <linearGradient id="linearGradient6099"> <stop style="stop-color:#eeeeec;stop-opacity:1;" offset="0" id="stop6101" /> <stop id="stop6107" offset="0.8918919" style="stop-color:#dededa;stop-opacity:1;" /> <stop style="stop-color:#838375;stop-opacity:1;" offset="1" id="stop6103" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6099" id="linearGradient6105" x1="22.797205" y1="39.679859" x2="22.797205" y2="46.635937" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.934004,0,1.557982)" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient6125" id="radialGradient6131" cx="24.218407" cy="45.25996" fx="24.218407" fy="45.25996" r="21.38998" gradientTransform="matrix(1,0,0,0.128099,9.432564e-16,39.4622)" gradientUnits="userSpaceOnUse" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient6151" id="radialGradient6157" cx="33.45499" cy="28.603338" fx="33.45499" fy="28.603338" r="3.8890872" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.657239,1.232816e-15,-1.232816e-15,3.657239,-88.89792,-76.00592)" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient6151" id="radialGradient6161" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.342154,-3.746956e-16,3.746956e-16,8.342154,-227.6289,-207.0663)" cx="29.61227" cy="27.974968" fx="29.61227" fy="27.974968" r="3.8890872" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6196" id="linearGradient6202" x1="29.374996" y1="21.741114" x2="22.101643" y2="7.6786127" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6115" id="linearGradient6208" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.982516,0,-7.076703e-2)" x1="21.617008" y1="4.6076145" x2="26.443777" y2="47.007381" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6210" id="linearGradient6216" x1="16.845879" y1="8.6784801" x2="30.507824" y2="78.505272" gradientUnits="userSpaceOnUse" /> <filter inkscape:collect="always" id="filter5339" x="-0.068965518" width="1.137931" y="-0.62068962" height="2.2413792"> <feGaussianBlur inkscape:collect="always" stdDeviation="1.1886709" id="feGaussianBlur5341" /> </filter> </defs> <sodipodi:namedview stroke="#ef2929" fill="#eeeeec" id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="0.25490196" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="200.83545" inkscape:cy="-11.195251" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:showpageshadow="false" inkscape:window-width="663" inkscape:window-height="688" inkscape:window-x="355" inkscape:window-y="160"> <inkscape:grid type="xygrid" id="grid4690" /> </sodipodi:namedview> <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: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 id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <rect style="opacity:0.43373497;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50843191px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter5339);enable-background:accumulate" id="rect4692" width="41.365746" height="4.5961943" x="3.3587573" y="41.989594" rx="2.3794458" ry="2.2980971" transform="matrix(0.965812,0,0,1,0.8219361,0)" /> <path style="opacity:1;color:black;fill:url(#linearGradient6208);fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 5.4999978,3.2368595 L 5.4999978,43.618858 C 5.569704,44.669066 6.4987349,45.72121 7.8834214,45.616246 L 39.735278,45.616246 C 40.628844,45.573136 41.513052,44.830044 41.499984,43.358328 L 41.499984,6.4283398 C 41.499984,5.7118028 41.268737,5.2304363 40.743728,4.7146061 C 40.743728,4.7146061 37.994733,1.8791213 37.994733,1.8791213 C 37.707471,1.6077368 37.530774,1.4999993 36.735279,1.4999993 L 6.7352914,1.4999993 C 5.7977914,1.5614066 5.4374978,2.4999722 5.4999978,3.2368595 z " id="path4291" sodipodi:nodetypes="cccccccsccc" /> <rect ry="1.8974454" rx="1.8974441" y="5.616117" x="9.4999952" height="16.999992" width="27.976646" id="rect6089" style="opacity:1;color:black;fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <rect style="opacity:1;color:black;fill:url(#linearGradient6202);fill-opacity:1.0;fill-rule:evenodd;stroke:#c4a000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect4293" width="27.976646" height="16.999992" x="9.4999952" y="5.616117" rx="1.8974441" ry="1.8974454" /> <rect ry="1.1461133" rx="1.1461439" y="6.6162395" x="10.578098" height="15.00028" width="26.000004" id="rect4295" style="opacity:0.44943824;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.0000087;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" transform="matrix(1,0,-5.5327e-3,0.999985,0,0)" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 12,6.116117 L 12,12.11612 C 19.204912,9.2558473 27.058025,16.094119 35,14.11612 L 35,6.1880393 L 36,6.1880393 L 36,22.11612 L 35,22.11612 L 35,16.11612 C 26.337016,18.056862 19.445696,11.070476 12,14.11612 L 12,22.11612 L 11,22.11612 L 11,6.116117 L 12,6.116117 z " id="path6043" sodipodi:nodetypes="ccccccccccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 13,6.116117 L 13,10.850955 L 14,10.611733 L 14,6.116117 L 13,6.116117 z " id="path6045" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 15,10.611732 L 15,6.116117 L 16,6.116117 L 16,10.523344 L 15,10.611732 z " id="path6047" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 17,10.523344 L 17,6.116117 L 18,6.116117 L 18,10.674178 L 17,10.523344 z " id="path6049" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 19,10.895149 L 19,6.116117 L 20,6.116117 L 20,11.11612 L 19,10.895149 z " id="path6051" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 21,11.274645 L 21,6.116117 L 22,6.116117 L 22,11.451422 L 21,11.274645 z " id="path6053" sodipodi:nodetypes="ccccc" /> <path id="path6055" d="M 23,11.804975 L 23,6.116117 L 24,6.116117 L 24,11.937558 L 23,11.804975 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 25,12.335305 L 25,6.116117 L 26,6.116117 L 26,12.512082 L 25,12.335305 z " id="path6057" sodipodi:nodetypes="ccccc" /> <path id="path6059" d="M 27,12.733053 L 27,6.116117 L 28,6.116117 L 28,12.90983 L 27,12.733053 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 29,13.219189 L 29,6.116117 L 30,6.116117 L 30,13.307577 L 29,13.219189 z " id="path6061" sodipodi:nodetypes="ccccc" /> <path id="path6063" d="M 31,13.395965 L 31,6.116117 L 32,6.116117 L 32,13.395966 L 31,13.395965 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 33,13.395965 L 33,6.116117 L 34,6.116117 L 34,13.263383 L 33,13.395965 z " id="path6065" sodipodi:nodetypes="ccccc" /> <path id="path6067" d="M 13,22.070139 L 13,14.639459 L 14,14.525128 L 14,22.070139 L 13,22.070139 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path id="path6069" d="M 15,14.480935 L 15,22.070139 L 16,22.070139 L 16,14.348352 L 15,14.480935 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path id="path6071" d="M 17,14.348352 L 17,22.070139 L 18,22.070139 L 18,14.462683 L 17,14.348352 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path id="path6073" d="M 19,14.772042 L 19,22.070139 L 20,22.070139 L 20,14.993013 L 19,14.772042 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path id="path6075" d="M 21,15.232235 L 21,22.070139 L 22,22.070139 L 22,15.4974 L 21,15.232235 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 23,15.850954 L 23,22.070139 L 24,22.070139 L 24,16.204507 L 23,15.850954 z " id="path6077" sodipodi:nodetypes="ccccc" /> <path id="path6079" d="M 25,16.381284 L 25,22.070139 L 26,22.070139 L 26,16.646449 L 25,16.381284 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 27,16.823226 L 27,22.070139 L 28,22.070139 L 28,17.000002 L 27,16.823226 z " id="path6081" sodipodi:nodetypes="ccccc" /> <path id="path6083" d="M 29,17.176779 L 29,22.070139 L 30,22.070139 L 30,17.220973 L 29,17.176779 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <path style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M 31,17.39775 L 31,22.070139 L 32,22.070139 L 32,17.265167 L 31,17.39775 z " id="path6085" sodipodi:nodetypes="ccccc" /> <path id="path6087" d="M 33,17.353556 L 33,22.070139 L 34,22.070139 L 34,17.176779 L 33,17.353556 z " style="opacity:0.44943824;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:nodetypes="ccccc" /> <rect style="opacity:1;color:black;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6095" width="31" height="11" x="8" y="35.116135" rx="0.81717849" ry="0.81717849" /> <rect ry="0.12967849" rx="0.12967849" y="36.116135" x="9" height="9" width="29" id="rect6097" style="opacity:1;color:black;fill:url(#linearGradient6105);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <rect style="opacity:1;color:black;fill:#8f5902;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80000000000000004;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6109" width="29" height="3.0000017" x="9" y="36.116135" rx="0.12967849" ry="0.12967849" /> <rect style="opacity:1;color:black;fill:#e9b96e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80000000000000004;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6111" width="10.036427" height="1.9999989" x="11" y="37.116135" rx="0.12967849" ry="0.12967849" /> <rect ry="0.12967849" rx="0.12967849" y="37.116135" x="22.963573" height="1.9999989" width="4.0364265" id="rect6113" style="opacity:1;color:black;fill:#e9b96e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80000000000000004;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path sodipodi:type="inkscape:offset" inkscape:radius="-1.000373" inkscape:original="M 6.75 1.5 C 5.8124999 1.5614073 5.4375 2.5131127 5.5 3.25 L 5.5 43.625 C 5.5697064 44.675208 6.4903135 45.729964 7.875 45.625 L 39.75 45.625 C 40.643565 45.581891 41.513068 44.815466 41.5 43.34375 L 41.5 6.4375 C 41.499999 5.7209628 41.275009 5.2345802 40.75 4.71875 C 40.749999 4.7187498 38 1.875 38 1.875 C 37.712739 1.6036155 37.545495 1.5 36.75 1.5 L 6.75 1.5 z " xlink:href="#path4291" style="opacity:0.17977528;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6216);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.8;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="path6206" inkscape:href="#path4291" d="M 6.8125,2.5 C 6.6714126,2.5092414 6.665484,2.505736 6.59375,2.625 C 6.522016,2.744264 6.486054,2.9918242 6.5,3.15625 C 6.501465,3.1874828 6.501465,3.2187672 6.5,3.25 L 6.5,43.5625 C 6.5340897,44.076101 6.9647984,44.689259 7.8125,44.625 C 7.8333282,44.624349 7.8541718,44.624349 7.875,44.625 L 39.6875,44.625 C 40.042231,44.607886 40.509542,44.418409 40.5,43.34375 L 40.5,6.4375 C 40.499999,5.9303711 40.465181,5.8331404 40.0625,5.4375 C 40.051855,5.4273147 40.041435,5.4168955 40.03125,5.40625 C 40.03125,5.40625 37.37257,2.6558683 37.3125,2.59375 C 37.252809,2.537358 37.283219,2.5655737 37.28125,2.5625 C 37.279281,2.5594263 37.249931,2.5312266 37.25,2.53125 C 37.250138,2.5312967 37.104314,2.5 36.75,2.5 L 6.8125,2.5 z " /> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/drive-removable-media.svg��������������������������0000644�0001750�0000144�00000044752�13175314305�025707� 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" sodipodi:docname="drive-removable-media.svg" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices" inkscape:version="0.46" sodipodi:version="0.32" id="svg2913" height="48px" width="48px" 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="perspective61" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6719" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient inkscape:collect="always" id="linearGradient5060"> <stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6717" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient id="linearGradient5048"> <stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050" /> <stop id="stop5056" offset="0.5" style="stop-color:black;stop-opacity:1;" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5048" id="linearGradient6715" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" x1="302.85715" y1="366.64789" x2="302.85715" y2="609.50507" /> <linearGradient id="linearGradient5699"> <stop id="stop5701" offset="0" style="stop-color:#7a7a7a;stop-opacity:1;" /> <stop id="stop5703" offset="1" style="stop-color:#a5a5a5;stop-opacity:1;" /> </linearGradient> <linearGradient id="linearGradient2681"> <stop style="stop-color:#000000;stop-opacity:0.47524753;" offset="0.0000000" id="stop2683" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop2685" /> </linearGradient> <linearGradient id="linearGradient2673"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop2675" /> <stop style="stop-color:#6f6f6f;stop-opacity:1.0000000;" offset="1.0000000" id="stop2677" /> </linearGradient> <linearGradient id="linearGradient4264" inkscape:collect="always"> <stop id="stop4266" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop4268" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4254" inkscape:collect="always"> <stop id="stop4256" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop4258" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4244"> <stop id="stop4246" offset="0.0000000" style="stop-color:#e4e4e4;stop-opacity:1.0000000;" /> <stop id="stop4248" offset="1.0000000" style="stop-color:#d3d3d3;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient4228"> <stop id="stop4230" offset="0.0000000" style="stop-color:#bbbbbb;stop-opacity:1.0000000;" /> <stop id="stop4232" offset="1.0000000" style="stop-color:#9f9f9f;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient gradientUnits="userSpaceOnUse" y2="40.943935" x2="36.183067" y1="28.481176" x1="7.6046205" id="linearGradient4234" xlink:href="#linearGradient4228" inkscape:collect="always" gradientTransform="translate(0.000000,5.546300e-2)" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.821398)" r="20.935817" fy="2.9585190" fx="15.571491" cy="2.9585190" cx="15.571491" id="radialGradient4250" xlink:href="#linearGradient4244" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="47.620636" x2="44.096100" y1="4.4331360" x1="12.378357" id="linearGradient4260" xlink:href="#linearGradient4254" inkscape:collect="always" gradientTransform="translate(0.000000,5.546300e-2)" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-6.731815e-16,9.455693)" r="23.555494" fy="27.096155" fx="23.201941" cy="27.096155" cx="23.201941" id="radialGradient4270" xlink:href="#linearGradient4264" inkscape:collect="always" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient2673" id="radialGradient2679" cx="40.796875" cy="33.734375" fx="40.796875" fy="33.734375" r="0.98437500" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.253968,-7.218212e-15,7.218212e-15,1.253968,-10.36111,-8.567460)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2681" id="linearGradient2687" x1="25.785229" y1="32.363384" x2="25.785229" y2="35.670216" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2681" id="linearGradient2689" gradientUnits="userSpaceOnUse" x1="25.785229" y1="32.363384" x2="25.785229" y2="35.670216" /> <linearGradient gradientUnits="userSpaceOnUse" y2="10.596288" x2="16.127340" y1="22.705490" x1="34.420757" id="linearGradient5705" xlink:href="#linearGradient5699" inkscape:collect="always" /> </defs> <sodipodi:namedview fill="#f57900" inkscape:showpageshadow="false" inkscape:window-y="160" inkscape:window-x="275" inkscape:window-height="688" inkscape:window-width="872" inkscape:document-units="px" inkscape:grid-bbox="true" showgrid="false" inkscape:current-layer="layer2" inkscape:cy="10.253819" inkscape:cx="89.378036" inkscape:zoom="2.8284271" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="0.36078431" bordercolor="#666666" pagecolor="#ffffff" id="base" /> <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>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 inkscape:label="pix" id="layer2" inkscape:groupmode="layer"> <g transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)" id="g6707"> <rect style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6709" width="1339.6335" height="478.35718" x="-1559.2523" y="-150.69685" /> <path style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " id="path6711" sodipodi:nodetypes="cccc" /> <path sodipodi:nodetypes="cccc" id="path6713" d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> </g> <path sodipodi:nodetypes="cccsccccccccc" id="path4196" d="M 11.285690,8.0180850 C 10.660690,8.0180850 10.254441,8.3082650 10.004442,8.8618380 C 10.004441,8.8618380 3.5356915,25.965402 3.5356915,25.965402 C 3.5356915,25.965402 3.2856915,26.636961 3.2856915,27.746652 C 3.2856915,27.746652 3.2856915,37.396620 3.2856915,37.396620 C 3.2856915,38.479233 3.9434770,39.021622 4.9419415,39.021620 L 43.504440,39.021620 C 44.489293,39.021620 45.098190,38.303440 45.098190,37.177870 L 45.098190,27.527902 C 45.098190,27.527902 45.204153,26.757479 45.004440,26.215402 L 38.285690,9.0180890 C 38.101165,8.5061820 37.648785,8.0299910 37.160690,8.0180850 L 11.285690,8.0180850 z " style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#535353;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="ccccccccc" id="path4170" d="M 3.2735915,27.052276 L 4.0381936,26.360061 L 41.647883,26.422561 L 45.110290,26.739859 L 45.110290,37.178391 C 45.110290,38.303960 44.503272,39.021722 43.518419,39.021722 L 4.9354314,39.021722 C 3.9369667,39.021722 3.2735915,38.479671 3.2735915,37.397058 L 3.2735915,27.052276 z " style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="csccccccs" id="path3093" d="M 3.5490842,25.969868 C 2.8347985,27.434154 3.5484686,28.362725 4.5847985,28.362725 C 4.5847985,28.362725 43.584797,28.362725 43.584797,28.362725 C 44.703844,28.338915 45.430035,27.350820 45.013368,26.219867 L 38.299082,9.0091620 C 38.114558,8.4972550 37.644320,8.0210630 37.156225,8.0091580 L 11.299083,8.0091580 C 10.674083,8.0091580 10.263369,8.3127310 10.013370,8.8663040 C 10.013370,8.8663040 3.5490842,25.969868 3.5490842,25.969868 z " style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="ccccccc" id="path4201" d="M 43.562434,27.674347 C 43.562434,27.674347 5.4437179,27.674346 5.4437180,27.674347 C 4.1544861,27.674347 3.5317878,27.437788 3.3154731,26.894679 C 3.4072345,27.839011 4.1854847,28.455597 5.4437180,28.455597 C 5.4437179,28.455596 43.562434,28.455597 43.562434,28.455597 C 44.638441,28.422526 45.301832,27.596846 45.047181,26.300495 C 44.913133,27.142077 44.470547,27.646437 43.562434,27.674347 z " style="opacity:1.0000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="ccccccccc" id="path5637" d="M 38.344670,9.2120874 C 38.344670,9.2120874 44.500000,24.750000 44.500000,24.750000 C 43.881282,24.352252 43.618718,24.036612 43.000000,24.125000 L 5.2500000,24.125000 C 4.5428932,24.125000 3.8383883,24.875000 3.8383883,24.875000 L 10.125000,8.8750000 C 10.258882,8.3753463 10.748699,8.0732233 11.411612,8.0732233 L 36.830806,7.9848350 C 38.156631,8.1616117 38.123699,8.5933690 38.344670,9.2120874 z " style="opacity:1;color:#000000;fill:url(#linearGradient5705);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" /> <path style="stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1;fill:#686868" d="M 44.707773,25.362009 C 44.373548,25.128501 44.072800,25.167489 43.518240,25.139579 C 43.518240,25.139579 4.7366112,24.874414 4.7366112,24.874414 C 4.1620870,24.918608 3.4957121,25.684093 3.4957121,25.684093 C 3.4957121,25.684093 4.0667741,24.284062 4.0667741,24.284062 C 4.0667741,24.284062 4.4064556,23.120892 5.6646889,23.120892 C 5.6646888,23.120893 42.855327,23.120892 42.855327,23.120892 C 43.577781,23.153963 44.022560,23.550547 44.207491,24.016460 L 44.707773,25.362009 z " id="path5697" sodipodi:nodetypes="cccsccccc" /> <path style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" d="M 11.642515,8.4711800 C 11.040823,8.4711800 10.649724,8.7505390 10.409049,9.2834670 C 10.409048,9.2834670 3.9940341,25.874196 3.9940341,25.874196 C 3.9940341,25.874196 3.7533573,26.520711 3.7533573,27.589019 C 3.7533573,27.589019 3.7533573,36.879115 3.7533573,36.879115 C 3.7533573,38.233855 4.1974134,38.506014 5.3478414,38.506014 L 43.034746,38.506014 C 44.357872,38.506014 44.569062,38.189617 44.569062,36.668522 L 44.569062,27.378426 C 44.569062,27.378426 44.671072,26.636735 44.478807,26.114873 L 37.885616,9.3088910 C 37.707973,8.8160750 37.334964,8.4826410 36.865071,8.4711800 L 11.642515,8.4711800 z " id="path4252" sodipodi:nodetypes="cccsccccccccc" /> <g id="g2142" transform="matrix(0.828197,0.000000,0.000000,0.610240,4.176000,11.16143)" style="fill:url(#linearGradient2687);fill-opacity:1.0000000"> <rect y="32.363384" x="5.3414402" height="3.8650389" width="37.930714" id="rect2151" style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2689);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" /> </g> <path style="opacity:0.71428573;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" d="M 8.6250000,33.250000 C 8.6250000,33.250000 9.0696486,34.066942 9.8651437,34.022748 C 9.8651437,34.022748 40.715385,34.000000 40.715385,34.000000 C 40.671191,31.569320 40.027885,30.881430 40.027885,30.881430 L 40.062500,33.312500 L 8.6250000,33.250000 z " id="path1899" sodipodi:nodetypes="cccccc" /> <path sodipodi:type="arc" style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2679);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans" id="path2671" sodipodi:cx="41.015625" sodipodi:cy="33.984375" sodipodi:rx="0.98437500" sodipodi:ry="0.98437500" d="M 42.000000 33.984375 A 0.98437500 0.98437500 0 1 1 40.031250,33.984375 A 0.98437500 0.98437500 0 1 1 42.000000 33.984375 z" transform="matrix(1.380952,0.000000,0.000000,1.380952,-15.62500,-10.94643)" /> </g> </svg> ����������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/drive-removable-media-usb.svgz���������������������0000644�0001750�0000144�00000010227�13175315140�026654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\mo#7:K+Xw.wYjyt%CǞ"jm|dNajurקc.֫!Tb8WlpMVr/Wo.lp'z6x\> ~ZNvZ4zs;~;8;ۏo ڞϦæfͦzYիv mi6vFf6%24XZm?vdK]Q1Z?- EcB{g!TqsYWz7~}器fM<±ɴގS9r (P/n?ZqQ?mt91AX. LVhd=|mwTQvquir{D%#]J2;[Oi4lXm pvWMEFv_]}:.d6MTKv_~u1zOnrHfsdw֜J!] nt_3AKKebŸ捓W{'gKlx3|D^}OVl?LW)[hlxջLV<OWl7[Ow/ܬ7zz\7*؞T<}LunPVkON٧8j-UfCy|7q6Hi6_,wcMiǕ?&b!4Jnr }l\/Re||C_]֓?6ق>;BhOT`*'| rrRI?W6eX;RD՛ᄏ{|UXr{>?&!|i҂")BhzI+<}Į<_4|X㫟A>b<R'oK'*2jg'EvwZP[JI+ N"(< kw>hʞZi{OIcmk8%HSdv U9^#h:< WH4S\_GRg+c?G ӗ"7ep.Sd6 Tl{Bd GS^#{@]bP _GYSu*[;12-2f𧈸Xbw(:P+FrzW?UzO3+&Mp&s5p' 5,5e%;zuNK{M:R1a-:[e Nfe=:(Π*S:嫟[g|~@acmŀ=uqIV?W8bI&ej] H[LoOʅw?ʞaoN7OP@p~3GI%QeN#,P˹&}m&Gr)5(ӗs q#| 5Zsz"{:) '<e]c(z7K}uX:~]ϮN駓r?7Ӳ= 7k>D/Qgيe}b}뻁[N ȹзl/sWo\Ov G҃ �2G(7rz~@ rBVHuC D<Dmg;*a$cFҡXibS)#8hjw\zQ 7p4?ꉂ,*S{�b kM2a@H>Q( zP2{zc cmfd.P8pC83QYج;:` Xi W H*"\3}Qf[FdY<�#OV)k+6 _,$'y ̏ryzsN|}.ШZVm^[!9EfoWʰYV'+>_[17TLxaj*dtii1&uTyJ~&;DŽnBν4!pF5K4 q%l*\aTW.aBBDH4uv) 皬$71֯~>+]\t!z4l=6(Y"'yTJt ޷Cwc+/EVBLe~7sҭu# GEXI|0AԌME4m?ꭊ7GoLTDdqU蓤z~f.ˤ@2`9aH/XZ|[%Mppw+n=1cEÍ* iMe >(c>½K h3b|H^!laW/7UsQ.|ua7Þbf:xYtr&KN`4{&->DmX&@#W:\."0�,#koq+NKmP,X[+g[@~^_/DD%<^:tWƢ'FS#sNg'O1:?!K.Jf³y"4jXu_]2'-Ϗ'/XV'1".U)R5gJ>I\H0D8/*P66M:Gč81a$&Rǂ4t .oi^kmP\|4 slUzCpBDCxw-fіKϝ̵D[=›[|;pGFt-6BsK|O6"\P1~PkE~5cZkqb\'P[;o.q[В\ߓ[mg(S(sc++PdE~q3?oBn/ηP6]l:uw|Sy�,w;z—_]xvcwzPN|yxžwқ8Z牃l+pz)s caG^V2�y]F><#h ƙEe>;`v~d퀣΄_׌J[Iobܸ4Řtt5 )OHHgJB:uҋ?"!ݴyòejRжCX9N$cJ,\IN PN 7ml;YM)3 ͦ,M֌ ue{Dƶ%|͘Sh (*FBV8X"-Jȑ6r`!<ӶK~f]xd~$쩖Ff2BK6%7l4-6u|KYr=ÆLD c R<P$b)#FFs h 숆v4;-IÈFR[nA`, ^"03R(هJ+nj`.%KLH' ӄ kIʱ>6*R[+HSτošCAdƲRn:Lm24)~@I[:~9V`pM!K;cc#CaL1T|CG]DL< x=r4{Du6a/*A8 JHc%@+)U”ۀcBiP+cɠ}ՏJP8GՌ̄& AEr+՚ʓمȯd.giJLJ 2H+. [EMMi M*է먑fjd255rC52"S#ƭ1jՈPF25"kHB>]l\GܡL\GlF&S#Q#uFFdjd:j35jEGLF2S#Q#QQ˛Hgjdr52"S#ȊV,dj5C5LdGF2S#fjHwHgj%ڄuF2S#쨑ꨑHej:j$ȈL0S#O'HWs5OYL>]lGlG S#騑eg#l䳳﨑訑է=T#Hgj:j$HwHejwHgjaG0S3!Q#Hej;g#vF@DFQ#8T#;j5LTFF:T#Q#djhVaFQ#Q#Hv﨑25tqLDjorI_.vohP���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/drive-optical.svg����������������������������������0000644�0001750�0000144�00000056733�13175314305�024313� 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" sodipodi:docname="drive-optical.svg" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices" inkscape:version="0.46" sodipodi:version="0.32" id="svg2913" height="48px" width="48px" 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="perspective83" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6719" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient inkscape:collect="always" id="linearGradient5060"> <stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6717" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient id="linearGradient5048"> <stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050" /> <stop id="stop5056" offset="0.5" style="stop-color:black;stop-opacity:1;" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5048" id="linearGradient6715" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" x1="302.85715" y1="366.64789" x2="302.85715" y2="609.50507" /> <linearGradient id="linearGradient2351" inkscape:collect="always"> <stop id="stop2353" offset="0" style="stop-color:#656565;stop-opacity:1;" /> <stop id="stop2355" offset="1" style="stop-color:#656565;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient2345"> <stop style="stop-color:#d9d9d9;stop-opacity:1.0000000;" offset="0.0000000" id="stop2347" /> <stop style="stop-color:#eeeeee;stop-opacity:0;" offset="1" id="stop2349" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient2329"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop2331" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop2333" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient2315"> <stop style="stop-color:#656565;stop-opacity:1;" offset="0" id="stop2317" /> <stop style="stop-color:#656565;stop-opacity:0;" offset="1" id="stop2319" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient2165"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop2167" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop2169" /> </linearGradient> <linearGradient id="aigrd1" gradientUnits="userSpaceOnUse" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075"> <stop offset="0" style="stop-color:#EBEBEB" id="stop3034" /> <stop offset="0.5" style="stop-color:#FFFFFF" id="stop3036" /> <stop offset="1" style="stop-color:#EBEBEB" id="stop3038" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6036"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6038" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop6040" /> </linearGradient> <linearGradient id="linearGradient4264" inkscape:collect="always"> <stop id="stop4266" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop4268" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4254" inkscape:collect="always"> <stop id="stop4256" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop4258" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4244"> <stop id="stop4246" offset="0.0000000" style="stop-color:#e4e4e4;stop-opacity:1.0000000;" /> <stop id="stop4248" offset="1.0000000" style="stop-color:#d3d3d3;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient4228"> <stop id="stop4230" offset="0.0000000" style="stop-color:#bbbbbb;stop-opacity:1.0000000;" /> <stop id="stop4232" offset="1.0000000" style="stop-color:#9f9f9f;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient gradientUnits="userSpaceOnUse" y2="40.943935" x2="36.183067" y1="28.481176" x1="7.6046205" id="linearGradient4234" xlink:href="#linearGradient4228" inkscape:collect="always" gradientTransform="translate(0.000000,-1.944537)" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-6.821398)" r="20.935817" fy="2.9585190" fx="15.571491" cy="2.9585190" cx="15.571491" id="radialGradient4250" xlink:href="#linearGradient4244" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="47.620636" x2="44.096100" y1="4.4331360" x1="12.378357" id="linearGradient4260" xlink:href="#linearGradient4254" inkscape:collect="always" gradientTransform="translate(0.000000,-1.944537)" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-5.289283e-16,9.455693)" r="23.555494" fy="27.096155" fx="23.201941" cy="27.096155" cx="23.201941" id="radialGradient4270" xlink:href="#linearGradient4264" inkscape:collect="always" /> <linearGradient inkscape:collect="always" xlink:href="#aigrd1" id="linearGradient2155" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.952531,0.000000,0.000000,0.656725,1.345471,19.22026)" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6036" id="linearGradient2161" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.738933,0.000000,0.000000,0.509459,6.215767,21.99197)" x1="10.501720" y1="3.6100161" x2="48.798885" y2="54.698483" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient2165" id="radialGradient2171" cx="24.218407" cy="33.769478" fx="24.218407" fy="33.769478" r="17.677670" gradientTransform="matrix(1.000000,0.000000,0.000000,0.695000,0.000000,10.29969)" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2351" id="linearGradient2321" x1="24.306797" y1="33.693432" x2="24.306797" y2="37.609333" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2329" id="linearGradient2335" x1="23.375000" y1="28.433596" x2="23.375000" y2="32.938416" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2329" id="linearGradient2337" x1="23.375000" y1="28.433596" x2="23.375000" y2="32.938416" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2315" id="linearGradient2341" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.000000,0.000000,0.000000,0.799429,-9.653736e-16,6.604619)" x1="24.306797" y1="32.790924" x2="24.306797" y2="34.201233" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2345" id="linearGradient2343" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.800126,0.000000,0.000000,0.551649,4.725541,20.59938)" x1="26.332899" y1="34.172115" x2="26.193645" y2="21.987923" /> </defs> <sodipodi:namedview inkscape:window-y="74" inkscape:window-x="294" inkscape:window-height="752" inkscape:window-width="872" inkscape:document-units="px" inkscape:grid-bbox="true" showgrid="false" inkscape:current-layer="layer2" inkscape:cy="20.858772" inkscape:cx="24.951242" inkscape:zoom="1" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="0.17254902" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:showpageshadow="false" /> <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>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 inkscape:label="pix" id="layer2" inkscape:groupmode="layer"> <g transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,34.82775)" id="g6707"> <rect style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6709" width="1339.6335" height="478.35718" x="-1559.2523" y="-150.69685" /> <path style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " id="path6711" sodipodi:nodetypes="cccc" /> <path sodipodi:nodetypes="cccc" id="path6713" d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> </g> <path sodipodi:nodetypes="cccsccccccccc" id="path4196" d="M 11.285690,6.0180852 C 10.660690,6.0180852 10.254441,6.3082654 10.004442,6.8618382 C 10.004441,6.8618382 3.5356915,23.965402 3.5356915,23.965402 C 3.5356915,23.965402 3.2856915,24.636961 3.2856915,25.746652 C 3.2856915,25.746652 3.2856915,35.396620 3.2856915,35.396620 C 3.2856915,36.479233 3.9434770,37.021622 4.9419415,37.021620 L 43.504440,37.021620 C 44.489293,37.021620 45.098190,36.303440 45.098190,35.177870 L 45.098190,25.527902 C 45.098190,25.527902 45.204153,24.757479 45.004440,24.215402 L 38.285690,7.0180888 C 38.101165,6.5061820 37.648785,6.0299905 37.160690,6.0180852 L 11.285690,6.0180852 z " style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" /> <path sodipodi:type="arc" style="opacity:0.56571429;color:#000000;fill:url(#radialGradient2171);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" id="path2163" sodipodi:cx="24.218407" sodipodi:cy="33.769478" sodipodi:rx="17.677670" sodipodi:ry="12.285980" d="M 41.896076 33.769478 A 17.677670 12.285980 0 1 1 6.5407372,33.769478 A 17.677670 12.285980 0 1 1 41.896076 33.769478 z" transform="translate(0.883883,1.260942e-6)" /> <path sodipodi:nodetypes="ccccccccc" id="path4170" d="M 3.2735915,25.052276 L 4.0381936,24.360061 L 41.647883,24.422561 L 45.110290,24.739859 L 45.110290,35.178391 C 45.110290,36.303960 44.503272,37.021722 43.518419,37.021722 L 4.9354314,37.021722 C 3.9369667,37.021722 3.2735915,36.479671 3.2735915,35.397058 L 3.2735915,25.052276 z " style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="csccccccs" id="path3093" d="M 3.5490842,23.969868 C 2.8347985,25.434154 3.5484686,26.362725 4.5847985,26.362725 C 4.5847985,26.362725 43.584797,26.362725 43.584797,26.362725 C 44.703844,26.338915 45.430035,25.350820 45.013368,24.219867 L 38.299082,7.0091618 C 38.114558,6.4972550 37.644320,6.0210632 37.156225,6.0091582 L 11.299083,6.0091582 C 10.674083,6.0091582 10.263369,6.3127314 10.013370,6.8663042 C 10.013370,6.8663042 3.5490842,23.969868 3.5490842,23.969868 z " style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="cccccccc" id="path4201" d="M 44.796162,23.684152 C 44.859684,24.934126 44.382159,25.999992 43.474046,26.027902 C 43.474046,26.027902 5.3553296,26.027901 5.3553297,26.027902 C 4.0660978,26.027902 3.4875937,25.702955 3.2712790,25.159846 C 3.3630404,26.104178 4.0970964,26.809152 5.3553297,26.809152 C 5.3553296,26.809151 43.474046,26.809152 43.474046,26.809152 C 44.550053,26.776081 45.226851,25.385128 44.826210,23.814361 L 44.796162,23.684152 z " style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" d="M 11.642515,6.4711801 C 11.040823,6.4711801 10.649724,6.7505387 10.409049,7.2834674 C 10.409048,7.2834674 3.9940341,23.874196 3.9940341,23.874196 C 3.9940341,23.874196 3.7533573,24.520711 3.7533573,25.589019 C 3.7533573,25.589019 3.7533573,34.879115 3.7533573,34.879115 C 3.7533573,36.233855 4.1974134,36.506014 5.3478414,36.506014 L 43.034746,36.506014 C 44.357872,36.506014 44.569062,36.189617 44.569062,34.668522 L 44.569062,25.378426 C 44.569062,25.378426 44.671072,24.636735 44.478807,24.114873 L 37.885616,7.3088910 C 37.707973,6.8160745 37.334964,6.4826414 36.865071,6.4711801 L 11.642515,6.4711801 z " id="path4252" sodipodi:nodetypes="cccsccccccccc" /> <g id="g2142" transform="matrix(0.933652,0.000000,0.000000,0.933652,1.612716,-0.367774)"> <rect y="32.363384" x="5.3414402" height="3.8650389" width="37.930714" id="rect2151" style="overflow:visible;display:inline;visibility:visible;stroke-opacity:0.42372879;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:round;stroke-linecap:square;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2321);color:#000000;opacity:1.0000000" /> <path style="fill:url(#linearGradient2155);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 7.9921136,31.810344 C 7.7171786,32.641366 7.5233636,33.513742 7.5233636,34.404094 C 7.5233626,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.517511 40.702291,32.638143 40.429614,31.810344 L 24.867113,31.810344 C 26.706930,32.055511 28.210863,33.069699 28.210863,34.404094 C 28.210863,35.914562 26.401684,37.154094 24.210863,37.154094 C 22.020041,37.154094 20.210863,35.914562 20.210863,34.404094 C 20.210864,33.069699 21.714796,32.055511 23.554613,31.810344 L 7.9921136,31.810344 z " id="path3040" /> <path style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:#808080;fill-rule:nonzero;fill:url(#linearGradient2343)" d="M 7.8358636,32.341594 C 7.6633096,33.007401 7.5233636,33.702881 7.5233636,34.404094 C 7.5233636,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.702881 40.727168,33.007401 40.554614,32.341594 L 7.8358636,32.341594 z " id="path3049" sodipodi:nodetypes="cccccc" /> <path style="opacity:0.10999996;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 16.572139,31.835312 C 15.798652,32.755289 15.247183,33.294631 15.247183,34.422908 C 15.247182,37.895941 19.357577,40.629280 24.277804,40.629280 C 29.315180,40.629279 33.308425,37.815173 33.308425,34.422908 C 33.308425,33.278057 32.722182,32.749858 31.948602,31.835312 L 26.571647,31.835312 C 28.249533,32.378741 29.194088,33.072249 29.194088,34.422908 C 29.194089,36.280577 26.972214,37.805032 24.277804,37.805032 C 21.583392,37.805032 19.361520,36.280577 19.361520,34.422908 C 19.361520,33.071466 20.280853,32.378317 21.960294,31.835312 L 16.572139,31.835312 z " id="path3051" sodipodi:nodetypes="ccccccccccc" /> <path style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill-opacity:0.41807911;fill:#ffffff" d="M 18.573984,44.742880 L 22.362784,37.212044 C 21.485635,36.996354 20.814201,36.572930 20.390359,36.015734 L 10.011877,39.604017 C 11.761798,41.989464 14.806535,43.844478 18.573984,44.742880 z " id="path4214" /> <path style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient2161);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" d="M 8.9118137,32.267515 C 8.6630467,33.007387 8.5077732,33.947164 8.5077732,34.740917 C 8.5077732,40.331493 16.102156,44.813068 24.210871,44.813068 C 32.319587,44.813067 39.713147,40.331492 39.713147,34.740917 C 39.713146,33.946625 39.529342,33.007846 39.280247,32.267515 L 8.9118137,32.267515 z " id="path5264" sodipodi:nodetypes="cccccc" /> <rect style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2341);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans" id="rect4963" width="37.863773" height="1.1911809" x="5.3414402" y="31.627470" /> </g> <path style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2335)" d="M 26.312500,30.250000 L 40.062500,30.250000 C 40.062500,30.250000 40.603959,31.370993 40.000000,33.625000 C 40.000000,33.625000 26.687500,33.125000 26.687500,33.125000 C 28.537859,31.274641 26.312500,30.250000 26.312500,30.250000 z " id="path2325" sodipodi:nodetypes="ccccc" /> <path sodipodi:nodetypes="ccccc" id="path2327" d="M 22.098146,30.250000 L 8.3481460,30.250000 C 8.3481460,30.250000 7.8066870,31.370993 8.4106460,33.625000 C 8.4106460,33.625000 21.723146,33.125000 21.723146,33.125000 C 19.872787,31.274641 22.098146,30.250000 22.098146,30.250000 z " style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2337)" /> </g> </svg> �������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/devices/drive-harddisk.svg���������������������������������0000644�0001750�0000144�00000056570�13175314305�024450� 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" sodipodi:docname="drive-harddisk.svg" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices" inkscape:version="0.46" sodipodi:version="0.32" id="svg2913" height="48px" width="48px" 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="perspective79" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6719" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient inkscape:collect="always" id="linearGradient5060"> <stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient5060" id="radialGradient6717" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" cx="605.71429" cy="486.64789" fx="605.71429" fy="486.64789" r="117.14286" /> <linearGradient id="linearGradient5048"> <stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050" /> <stop id="stop5056" offset="0.5" style="stop-color:black;stop-opacity:1;" /> <stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5048" id="linearGradient6715" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" x1="302.85715" y1="366.64789" x2="302.85715" y2="609.50507" /> <linearGradient id="linearGradient2555"> <stop id="stop2557" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop style="stop-color:#e6e6e6;stop-opacity:1.0000000;" offset="0.50000000" id="stop2561" /> <stop id="stop2563" offset="0.75000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" /> <stop style="stop-color:#e1e1e1;stop-opacity:1.0000000;" offset="0.84166664" id="stop2565" /> <stop id="stop2559" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient4274"> <stop style="stop-color:#ffffff;stop-opacity:0.25490198;" offset="0.0000000" id="stop4276" /> <stop style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="1.0000000" id="stop4278" /> </linearGradient> <linearGradient id="linearGradient4264" inkscape:collect="always"> <stop id="stop4266" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop4268" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4254" inkscape:collect="always"> <stop id="stop4256" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop4258" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4244"> <stop id="stop4246" offset="0.0000000" style="stop-color:#e4e4e4;stop-opacity:1.0000000;" /> <stop id="stop4248" offset="1.0000000" style="stop-color:#d3d3d3;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient4236" inkscape:collect="always"> <stop id="stop4238" offset="0" style="stop-color:#eeeeee;stop-opacity:1;" /> <stop id="stop4240" offset="1" style="stop-color:#eeeeee;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient4228"> <stop id="stop4230" offset="0.0000000" style="stop-color:#bbbbbb;stop-opacity:1.0000000;" /> <stop id="stop4232" offset="1.0000000" style="stop-color:#9f9f9f;stop-opacity:1.0000000;" /> </linearGradient> <linearGradient id="linearGradient4184"> <stop id="stop4186" offset="0.0000000" style="stop-color:#838383;stop-opacity:1.0000000;" /> <stop id="stop4188" offset="1.0000000" style="stop-color:#bbbbbb;stop-opacity:0.0000000;" /> </linearGradient> <linearGradient gradientTransform="translate(0.795493,-1.325821)" y2="35.281250" x2="24.687500" y1="35.281250" x1="7.0625000" gradientUnits="userSpaceOnUse" id="linearGradient4209" xlink:href="#linearGradient4184" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="40.943935" x2="36.183067" y1="28.481176" x1="7.6046205" id="linearGradient4234" xlink:href="#linearGradient4228" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="33.758667" x2="12.221823" y1="37.205811" x1="12.277412" id="linearGradient4242" xlink:href="#linearGradient4236" inkscape:collect="always" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.876862)" r="20.935817" fy="2.9585190" fx="15.571491" cy="2.9585190" cx="15.571491" id="radialGradient4250" xlink:href="#linearGradient4244" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="47.620636" x2="44.096100" y1="4.4331360" x1="12.378357" id="linearGradient4260" xlink:href="#linearGradient4254" inkscape:collect="always" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,0.000000,9.455693)" r="23.555494" fy="27.096155" fx="23.201941" cy="27.096155" cx="23.201941" id="radialGradient4270" xlink:href="#linearGradient4264" inkscape:collect="always" /> <linearGradient gradientUnits="userSpaceOnUse" y2="26.357183" x2="23.688078" y1="11.318835" x1="23.688078" id="linearGradient4272" xlink:href="#linearGradient4274" inkscape:collect="always" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2555" id="linearGradient2553" x1="33.431175" y1="31.964777" x2="21.747974" y2="11.780679" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview inkscape:window-y="30" inkscape:window-x="435" inkscape:window-height="818" inkscape:window-width="999" inkscape:document-units="px" inkscape:grid-bbox="true" showgrid="false" inkscape:current-layer="layer2" inkscape:cy="16.661091" inkscape:cx="21.494618" inkscape:zoom="16" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" /> <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>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 inkscape:label="pix" id="layer2" inkscape:groupmode="layer"> <g transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)" id="g6707"> <rect style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="rect6709" width="1339.6335" height="478.35718" x="-1559.2523" y="-150.69685" /> <path style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " id="path6711" sodipodi:nodetypes="cccc" /> <path sodipodi:nodetypes="cccc" id="path6713" d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> </g> <path sodipodi:nodetypes="cccsccccccccc" id="path4196" d="M 11.285690,7.9626278 C 10.660690,7.9626278 10.254441,8.2528080 10.004442,8.8063808 C 10.004441,8.8063808 3.5356915,25.909938 3.5356915,25.909938 C 3.5356915,25.909938 3.2856915,26.581497 3.2856915,27.691188 C 3.2856915,27.691188 3.2856915,37.341156 3.2856915,37.341156 C 3.2856915,38.423769 3.9434770,38.966158 4.9419415,38.966156 L 43.504440,38.966156 C 44.489293,38.966156 45.098190,38.247976 45.098190,37.122406 L 45.098190,27.472438 C 45.098190,27.472438 45.204153,26.702015 45.004440,26.159938 L 38.285690,8.9626314 C 38.101165,8.4507246 37.648785,7.9745331 37.160690,7.9626278 L 11.285690,7.9626278 z " style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" /> <path sodipodi:nodetypes="ccccccccc" id="path4170" d="M 3.2735915,26.996812 L 4.0381936,26.304597 L 41.647883,26.367097 L 45.110290,26.684395 L 45.110290,37.122927 C 45.110290,38.248496 44.503272,38.966258 43.518419,38.966258 L 4.9354314,38.966258 C 3.9369667,38.966258 3.2735915,38.424207 3.2735915,37.341594 L 3.2735915,26.996812 z " style="fill:url(#linearGradient4234);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:nodetypes="csccccccs" id="path3093" d="M 3.5490842,25.914404 C 2.8347985,27.378690 3.5484686,28.307261 4.5847985,28.307261 C 4.5847985,28.307261 43.584797,28.307261 43.584797,28.307261 C 44.703844,28.283451 45.430035,27.295356 45.013368,26.164403 L 38.299082,8.9537044 C 38.114558,8.4417976 37.644320,7.9656058 37.156225,7.9537008 L 11.299083,7.9537008 C 10.674083,7.9537008 10.263369,8.2572740 10.013370,8.8108468 C 10.013370,8.8108468 3.5490842,25.914404 3.5490842,25.914404 z " style="fill:url(#radialGradient4250);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <rect y="31.174183" x="7.8579960" height="5.5625000" width="17.625000" id="rect4174" style="opacity:1.0000000;color:#000000;fill:url(#linearGradient4209);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.4089999;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" /> <path sodipodi:nodetypes="cscc" id="path4194" d="M 7.8579947,36.736680 C 7.8579947,36.736680 7.8579947,32.725195 7.8579947,32.725195 C 9.6935221,35.904421 16.154485,36.736680 20.795492,36.736680 C 20.795492,36.736680 7.8579947,36.736680 7.8579947,36.736680 z " style="opacity:0.81142857;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient4242)" /> <path sodipodi:nodetypes="cccccccc" id="path4201" d="M 44.796162,25.628688 C 44.859684,26.878662 44.382159,27.944528 43.474046,27.972438 C 43.474046,27.972438 5.3553296,27.972437 5.3553297,27.972438 C 4.0660978,27.972438 3.4875937,27.647491 3.2712790,27.104382 C 3.3630404,28.048714 4.0970964,28.753688 5.3553297,28.753688 C 5.3553296,28.753687 43.474046,28.753688 43.474046,28.753688 C 44.550053,28.720617 45.226851,27.329664 44.826210,25.758897 L 44.796162,25.628688 z " style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path id="path4211" d="M 10.968750 10.156250 C 10.922675 10.356571 10.781250 10.543047 10.781250 10.750000 C 10.781250 11.698605 11.372230 12.539474 12.125000 13.343750 C 12.365268 13.189675 12.490117 12.989342 12.750000 12.843750 C 11.809691 12.027746 11.196604 11.127168 10.968750 10.156250 z M 37.625000 10.156250 C 37.396273 11.125866 36.782988 12.028676 35.843750 12.843750 C 36.117894 12.997332 36.247738 13.211990 36.500000 13.375000 C 37.257262 12.568344 37.812500 11.701956 37.812500 10.750000 C 37.812500 10.543047 37.670906 10.356571 37.625000 10.156250 z M 39.812500 18.593750 C 39.198709 22.633861 32.513887 25.843750 24.281250 25.843750 C 16.068996 25.843751 9.4211001 22.650964 8.7812500 18.625000 C 8.7488928 18.822132 8.6562500 19.016882 8.6562500 19.218750 C 8.6562503 23.536697 15.645354 27.062501 24.281250 27.062500 C 32.917146 27.062500 39.937499 23.536698 39.937500 19.218750 C 39.937500 19.005826 39.848449 18.801394 39.812500 18.593750 z " style="opacity:0.69142857;color:#000000;fill:url(#linearGradient4272);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" /> <path transform="translate(8.838843e-2,0.176776)" d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z" sodipodi:ry="1.0164660" sodipodi:rx="1.3700194" sodipodi:cy="25.593554" sodipodi:cx="7.2036505" id="path4224" style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> <path sodipodi:type="arc" style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" id="path4226" sodipodi:cx="7.2036505" sodipodi:cy="25.593554" sodipodi:rx="1.3700194" sodipodi:ry="1.0164660" d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z" transform="translate(33.96705,8.838804e-2)" /> <path style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" d="M 11.642515,8.4157227 C 11.040823,8.4157227 10.649724,8.6950813 10.409049,9.2280100 C 10.409048,9.2280100 3.9940341,25.818732 3.9940341,25.818732 C 3.9940341,25.818732 3.7533573,26.465247 3.7533573,27.533555 C 3.7533573,27.533555 3.7533573,36.823651 3.7533573,36.823651 C 3.7533573,38.178391 4.1974134,38.450550 5.3478414,38.450550 L 43.034746,38.450550 C 44.357872,38.450550 44.569062,38.134153 44.569062,36.613058 L 44.569062,27.322962 C 44.569062,27.322962 44.671072,26.581271 44.478807,26.059409 L 37.885616,9.2534336 C 37.707973,8.7606171 37.334964,8.4271840 36.865071,8.4157227 L 11.642515,8.4157227 z " id="path4252" sodipodi:nodetypes="cccsccccccccc" /> <path style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" d="M 40.500000,31.429166 L 40.500000,36.450101" id="path4282" /> <path id="path4284" d="M 38.500000,31.488943 L 38.500000,36.509878" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" /> <path style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" d="M 36.500000,31.488943 L 36.500000,36.509878" id="path4286" /> <path id="path4288" d="M 34.500000,31.488943 L 34.500000,36.509878" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" /> <path style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" d="M 32.500000,31.488943 L 32.500000,36.509878" id="path4290" /> <path id="path4292" d="M 30.500000,31.488943 L 30.500000,36.509878" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" /> <path id="path4294" d="M 39.500000,31.479065 L 39.500000,36.500000" style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" d="M 37.500000,31.538842 L 37.500000,36.559777" id="path4296" /> <path id="path4298" d="M 35.500000,31.538842 L 35.500000,36.559777" style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" d="M 33.500000,31.538842 L 33.500000,36.559777" id="path4300" /> <path id="path4302" d="M 31.500000,31.538842 L 31.500000,36.559777" style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path id="path4572" d="M 7.8750000,31.187500 L 7.8750000,36.718750 L 20.437500,36.718750 L 8.2187500,36.375000 L 7.8750000,31.187500 z " style="opacity:0.44000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" /> <path sodipodi:type="arc" style="opacity:0.20571424;color:#000000;fill:url(#linearGradient2553);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.93365198;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" id="path2545" sodipodi:cx="25.000000" sodipodi:cy="19.562500" sodipodi:rx="14.875000" sodipodi:ry="6.6875000" d="M 39.875000 19.562500 A 14.875000 6.6875000 0 1 1 10.125000,19.562500 A 14.875000 6.6875000 0 1 1 39.875000 19.562500 z" transform="matrix(1.037815,0.000000,0.000000,1.060747,-1.632878,-2.094626)" /> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/actions/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�021025� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/scalable/actions/view-sort-descending.svg���������������������������0000644�0001750�0000144�00000002220�13175313470�025607� 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:#4d4d4d; } </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-0.9.8/pixmaps/dctheme/scalable/actions/view-sort-ascending.svg����������������������������0000644�0001750�0000144�00000002166�13175313470�025450� 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:#4d4d4d; } </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-0.9.8/pixmaps/dctheme/scalable/actions/go-up.svg������������������������������������������0000644�0001750�0000144�00000020032�13175313470�022577� 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" sodipodi:docname="go-up.svg" sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions" inkscape:version="0.46" sodipodi:version="0.32" id="svg11300" height="48px" width="48px" inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" inkscape:export-xdpi="90.000000" inkscape:export-ydpi="90.000000" 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="perspective23" /> <linearGradient id="linearGradient2304"> <stop id="stop2306" offset="0" style="stop-color:#73d216" /> <stop id="stop2308" offset="1.0000000" style="stop-color:#4e9a06" /> </linearGradient> <linearGradient id="linearGradient8662" inkscape:collect="always"> <stop id="stop8664" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop8666" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient8650" inkscape:collect="always"> <stop id="stop8652" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop8654" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient8650" id="radialGradient1438" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-3.749427e-16,-2.046729,1.557610,-2.853404e-16,2.767009,66.93275)" cx="24.53788" cy="0.40010813" fx="24.53788" fy="0.40010813" r="17.171415" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient2304" id="radialGradient1441" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)" cx="11.319205" cy="22.454971" fx="11.319205" fy="22.454971" r="16.956199" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient8662" id="radialGradient1444" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)" cx="24.837126" cy="36.421127" fx="24.837126" fy="36.421127" r="15.644737" /> </defs> <sodipodi:namedview inkscape:window-y="30" inkscape:window-x="0" inkscape:window-height="818" inkscape:window-width="1280" inkscape:showpageshadow="false" inkscape:document-units="px" inkscape:grid-bbox="true" showgrid="false" inkscape:current-layer="layer1" inkscape:cy="25.620377" inkscape:cx="9.6380363" inkscape:zoom="13.059378" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="0.25490196" bordercolor="#666666" pagecolor="#ffffff" id="base" fill="#73d216" stroke="#73d216" /> <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: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 inkscape:groupmode="layer" inkscape:label="Layer 1" id="layer1"> <path transform="matrix(1.214466,0.000000,0.000000,0.595458,-6.163846,16.31275)" d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z" sodipodi:ry="8.3968935" sodipodi:rx="15.644737" sodipodi:cy="36.421127" sodipodi:cx="24.837126" id="path8660" style="opacity:0.29946521;color:#000000;fill:url(#radialGradient1444);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> <path sodipodi:nodetypes="cccccccc" id="path8643" d="M 14.491792,38.500000 L 32.469477,38.500000 L 32.469477,25.547437 L 40.500000,25.547437 L 23.374809,5.4992135 L 6.5285585,25.489471 L 14.497096,25.555762 L 14.491792,38.500000 z " style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1441);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> <path sodipodi:nodetypes="cccscc" id="path8645" d="M 7.5855237,25.03253 L 14.995821,25.03253 L 15.062422,31.594339 C 20.718034,20.593878 31.055517,22.749928 31.656768,15.966674 C 31.656768,15.966674 23.366938,6.4219692 23.366938,6.4219692 L 7.5855237,25.03253 z " style="opacity:0.50802141;color:#000000;fill:url(#radialGradient1438);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" /> <path style="opacity:0.48128340;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000004;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" d="M 15.602735,37.500000 L 31.502578,37.500000 L 31.502578,24.507050 L 38.311576,24.507050 L 23.361206,7.0700896 L 8.6546798,24.550470 L 15.475049,24.528373 L 15.602735,37.500000 z " id="path8658" sodipodi:nodetypes="cccccccc" /> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/index.theme���������������������������������������������������������0000644�0001750�0000144�00000006460�13175315140�017761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Icon Theme] Name=DCTheme Comment=Double Commander default theme Directories=8x8/emblems,16x16/actions,16x16/apps,16x16/devices,16x16/emblems,16x16/mimetypes,16x16/places,20x20/actions,20x20/apps,20x20/emblems,20x20/mimetypes,24x24/actions,24x24/apps,24x24/devices,24x24/emblems,24x24/mimetypes,24x24/places,32x32/actions,32x32/apps,32x32/devices,32x32/emblems,32x32/mimetypes,32x32/places,40x40/actions,40x40/emblems,40x40/devices,40x40/mimetypes,48x48/actions,48x48/emblems,48x48/devices,48x48/mimetypes,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/mimetypes [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/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/apps] Size=20 Context=Applications 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/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/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 [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=128 MinSize=128 MaxSize=512 Context=Actions Type=Scalable [scalable/devices] Size=128 MinSize=72 MaxSize=512 Context=Devices Type=Scalable [scalable/mimetypes] Size=128 MinSize=128 MaxSize=512 Context=MimeTypes Type=Scalable ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016424� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020440� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000003762�13060735370�022662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs�� �� ����tEXtSoftware�www.inkscape.org<��oIDATx[OH3m8MM Bm՗}g~Q}Ԫ^R$@;>t!;&`\lgvu8\7/^ !\|>O;z'Wv�˲H>&9voI(�Эj��~P;#7bB8u&B0)4PWp*0z�6 MNhH?S.cB p 2�4=hp"0{L<&.1.<&�c@@q'z-h躎cZ-Z-~�FH&$ T td_+n˗/GC"@<G,c dX3ׯuHR?e$0ZPnN@1bw:TU('O NWiiD^G6͕$ $4M~b=,#躎W^AQ,--]{ !,Ceq�@CFw$AP)*={H] l*2 cC,--aqqhB@ACVC) Ya޼yϟuk.۷4mס( ,:| ,vvvF^ CW? ;ã#pί>� H˲n˲,$ lll\q4Mxn!IҵmdY[&�JeuǏzxqK'qqdrlE8sb�cld,@^G.ݯc4Mӵ8tH$FBn}Ӈ۩<Wicӛt:wַ[8.E4TUEj"9zgggl!˲\"%D"T*GVC4N)E&qԷx[ Ja@ ;cK&E piB$!n5ZvctT)NeIc{{X,R9ڂ(#s/|R_ptt4NQ*|P7B`ss^۞JP.'-wo&d&e{{{dQ/`eeNvzڼX,\.\D>~8z!X]]TᧅYz}famm DbjB1)>}1uqߺZCr|>q|%l?"޽{5i3wYi|.!\.n"P/T*Y饿UԠRՒ۳["pQ؄/~&1"~X<w\}^?lv_ `1:4kA~>$1`V,ݗ }n{cׂ)`ss4 $s|O>uKQ* 2(84M2޽{7T%S-Ex1#j0򹋋Ǐ63caa낖Q=15S; *ƍeT*̼ ͦh4|>?CPM@)ސ%(eB�˲*4MCӁ렔Beb1(,E @9z0F> <& ;S=-e 12K ?3wkCg:#N%nP*�V*lrAsʔRʓB)t]s.}l),* fS0I8g4M! e*v-SVa yX,֫Vpm}HP,Rcq!D��nY; =CHHHHHHꕶ+����IENDB`��������������doublecmd-0.9.8/pixmaps/dctheme/96x96/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000004441�13060735370�024430� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs�� �� ����tEXtSoftware�www.inkscape.org<��IDATx]ˋ,W}u3sM6.S.dE !A]7"n.$F: \ \$(Fx5tOwzz[f;||g:tСC:tСC:tСñ-@H@ 5]7!>`D_~[zDN"Zhop܁R>m[׫ܫSHtM>WO"|OG]X&cR.r{R ¡yKzY,֦"`f?zWat [;C{^^UI(�=@"fā{kh0/fO_QRV"8D$ dܧ5c1 \9{/Cx FsjmbJ0 𛅦!ppk~uu|1|F)e/l@?IY�/po {aF&'%[f|^2QJ[�_}j]ۋ9~/5~+_+RS"\AXeS+A߇|�(GO2- 7F;η(i=g<B1=բ¶W,Oznm !kpnxEa/ |_/F'a) (zÓ×:/h!z7:;6P^K5/_hLz]o&e=g)U k4@ao{= e)@O_\ pVWFmy-;~(O|E'-�DtM�@۟7h^xx8É,|9h}sn|R@gpꙠPON:=k-ܙʜp�!,Df#ɳbNWB{-[ϼ4sh vo�,@"syBN Mb"\=%]x-HfX_*cx:V-*j?;ȨiR67h8`Y <GHEۥ@]hy%H~c{kX-L, .ȓJb2 ~HjM2;̡d֌vr-G?툶^ϠLh[)R"?@͕ aDndZ5/%i�Aq^|QV��K�%,vq% (5G6 3BџLa)'X4cvYJ12q[Ü>k9/3z?�k ,bX8Y`Z|73ANTLAu.A>mEIAHE=z5ꩌ$%'":lj"l  jrôhXI鯄!vOb)5Oq-RE!߆Sd\{ .rEhJIt jӈ8EAWJ6W%}9(KxAon֌ Bc;'ih4Wm)SUqnK 6c�7oDk i\P(M>.x(Ԍ^յU2)ΧHnMY$t/pXṶ\ @j�g;%;�L+bJ@�f`:9 lY- e`рz]N�`#Y{U[�</r㞎Qit$Sv0w\<˰ IM =6ǦZ@9buH'(?v>G�=#b B ``۲Fźq%n$ܪ`cCdu>G G`X"#က#G zUA `:- DK,I@@d}!26>�}5IVэGdcoB6:F_p\- N |�XcZ ��:,;p<Ȱ,7^}V H�1@xokӳw�E 솠]�mZ�x! Ce. % &0!c)pv|ظiٻ!i|g����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000015207�13060735370�026047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs����e���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��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-0.9.8/pixmaps/dctheme/96x96/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020064� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000004033�13060735370�024637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs��X��Xm7���tEXtSoftware�www.inkscape.org<��IDATxeǿJS,"µZd V۝wΆl C~F5HJ6ƴA,i*%`$Ĥ$MLӫQ={;3s}g{{Fh4Fh4fXF H)#t!:aG 1Zd c̨TV)m_'E}0==gLӼ;x7Rܹs?~vD{~~oisCz�}L礔7Jjw@V,=&@.; c솵y!�!Li~{YYA%~ض}%GCuY'Q&&& <l�|G�>t|%1l3#.=HD�!%<Ɵ.=$;�. aKϻ-b7 �[cKOo.9(.=>( `揙3!Lu @I�!ėV`"MLL\ )f9!Dh\PL-95!P)AVQ 1TDh2F 19G-@h2F 1Zd c�-@$q:[Z"?NDW��/̧U"sl_Шn �nPpsv3qDxeY ` j:9S7MKDI�uOkB1x޲kwA: 3}DtRئE1Y@Dg� W�A/%o[T seR*^V4jusTzͲ[QV `t&Xqz>jnhX5": gƉjcqquPV7q=mYE>+ov7Ž'8>[ƻ;>y^h⮂6&LD90>6Aq_FH>�03[R{� #�1!ި>$LD h`@[!-u{VĿT:I)$LR!L!)Q}Tz>քcL!LaqOe-]Tѭkkkۈh �liZW^!D}LƒZ,;�g^GD�v�43^Rm;1-BȲq=*׉Uvܹɶ}+++!��<bap"z,DLc<Q)f>i87<`2fKm$O۶?lƯ\vtǎ�m׉�A�^p �UCJ |3s'T̼ fG7FFF5?Q�^ض=̾5}y, `saj<{:_D<  / /f]׽:c3MpOBv~t7:2|Rʻ� JpP\e7^KNfVڙ )H!�~@۷ z+W`Wc333V.H\DP_^:U*m^+.� g򮴓C�i^a]_ZZZZ%�py?IF:!<S,oo4^qb'''][[{Y[�6![s:́ohPT�Lֽp2qh4^PBp|@}/h:'�1!qi4^ټ =m6 :�Rh?]�I)OUƍrl `G5,b]o[S�'m̼ 9 ?3|B\^qF;1?�b,Fh4Fh4̂����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/96x96/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000003757�13060735370�024503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs��X��Xm7���tEXtSoftware�www.inkscape.org<��lIDATx\Uǿg-gQ?Pbc$J0snݘ idj6XjTQ+T!X(;7RІiL$ƄtW4Pmy}o޻>~{'  `0 `0J3oOU"A"Z`\ ?�"r'YuO~�v�>Z�~l6w/,,GR\CDL)8=\=)qND6jc) yBDI1Cju4E@W�acD*xM8n<yҝj~=22"h_.w"oC[6T)fy^w=f> !<[KLyC ��uL8ED pY/=@"z=b} dw�k�kY*8}4amĆD�}*�}^�ڑ#GZ%ӧ%I��\#"Dimۖp�lѣG MMMjM4R`<L5۶bs�[/z̙37 B=Rln6'EN}tgX,›�[mgR@)3�a&�^�}_g^pgdyy0&&&qg_q{%"r�8gE$t6C�um8_s'`lll+_^&`-|횙)0LgffҢ'^DD>Pؾh4خ1}{8tX+Kjt�Oh4AyXdzK )BǏM)+XGs~]1~"95D73~d$�a5r<6ɶqm"Gc83?�`g)ͱߩ#Pg¡Jr}T ~+bO=@J~�6Z֦Xӝ5R!�BшˉWe߅BE�{\e4-6Z֦zOn"-|R!�D3 zO?+¤k�`WgTm"o@)#�FN~@Ln3Zxwln&{�,ǘr]�6zw^Y|Rw#VJݝhd,,,,V�,tpK�"R,y0.ݔvbdJD&/uaG"̼I`ww7�\>A|׆%:ͽfYuhur�E8"LR߹�و̒G:r#y?$i,*D �vj;̍��~2'BߒBD<ϻW_�ZmBp'h]`۶s$iE 瓻' `PҎ!`0FbV&Y ]'```$tԕ"r@lRy''ZcYYkd.�|Mͽu<kL`Ou:0,cYd&@\~z(KO@f �@7a-=;G. m H]�ԕ�0�RiLDfT>0�JOHU�Sz#]"r8?SzHZOA�ǰ3zlajJ*$-[6�')=-@| [c�e05'-3�֔h+Jx1/,3ou"^iN cnE #1 `0 `0 } "N����IENDB`�����������������doublecmd-0.9.8/pixmaps/dctheme/96x96/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000011623�13060735370�021631� 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-0.9.8/pixmaps/dctheme/8x8/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016246� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/8x8/emblems/��������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017672� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/8x8/emblems/emblem-unreadable.png�����������������������������������0000644�0001750�0000144�00000000504�11362134553�023744� 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-0.9.8/pixmaps/dctheme/8x8/emblems/emblem-symbolic-link.png��������������������������������0000644�0001750�0000144�00000000460�11312762055�024416� 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-0.9.8/pixmaps/dctheme/72x72/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016410� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020424� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002674�13060735370�022647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��N��N1����tEXtSoftware�www.inkscape.org<��9IDATxnJcc)h6*ETG:/r<G(7M#U\UCH@IsYlxvfvv Ec~ :MaD?%߿�LGA�|"dVPe,d#kG(6! b101Y*(a'9_?48,HtcZZPKRAA6ŖyДX*()Xۅ}sid2XZlt]u\^^u]t]�iX,RĦHIw]l"#"Fj8O>AIbwwP( Ru1: _~uRb'3NOOouض UUvuq~~fw(X]]ŏ?eɂzly8::B.{V6<8}?J>jx||KX4,hx>,B\:r3LR|h#"dY]әH6bbayFŁ?GUա}"U3Ms9=~-YV54ͱ-HD,Z"ɀ`2 <߉NIAdEQ.P͛TKOE)=l6X__ō2Zm"m'&x 83Oeo>IjZrTUETeYS{IS9qss'T*HR3i%ӰnOH(BǏ3?r#>;; IqJbs.-s/h8+Yu]7S MbOr(OTj#auY!Me9(!M&mYVx[d3qRbɤ4p)!QqjF0yHeAI1wNC@x%u$۷oPmömb_3b? ]i躎zr<>I4F}aخEL&[sS5 +b8z3iqi...�"eYx]"A�˲9HpbAq&D\E1ّ$sYr"yK'=E,W[ īBtQ1EvNE"-T*vRUu"BݶJ]כ] y:<<TUw- c,r,"U BQӴƘ9kNDLQ.1b '1D(fɒ%?@����IENDB`��������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000003403�13060735370�024411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��N��N1����tEXtSoftware�www.inkscape.org<��IDATx\ME^UwOfM9ǰz1rP7A$" Ü"*A<%z1 'AsD!;ꞞePNWuիzU'K,K,K,uf)õw:ފ<|Ͳ vJ΍Os<uߥn/}Z㴅aD:x�,rb�ގp y'y-NzՕVYZ?P@k2<~ TY{g1`~BIs'&13Mw/LT9h4 SցIկE@FrR\[u^}VL]6)\~Hf$('{ - ] SA Vs~XAQPouNe�崙$<ǩJ�?9VN7>]zthƤ+^D;C6vks4R{^9Qz�heHV"o㻛�[vz@f~EҨ2TM "EmªkۧNKd� xѬV:rڣ�̵zWhTnUk4eXJ .uzrIi1\ϿwsV?qRo)g, vpm�0X-&Hn; VN�\ }DZ'@V@ .1L4�L\'BxYS_Q8~Z&' & HZW,AF>lTL Eɉ,AA jq[yr59 UY$D�N[ٟ\NH_jtlArҞ^�Œ0؅hQȲi7(IAbX l;vskFcns$$e*h�cvl [) nofud}8 pC>X)EaI$Qגe*.#&p C@Qdt@$,>!ԱHn5AeҬdm)[탸2[9 -v-LU8p:>@ݬD,+iT.U)Hj@ 8:–*"W909p|\i4:{xV2TD՜I`,|Qu8i/&q?I<A1<$MS<Ts> B1jf EANb"rD`0( 9$DI1:P39i%H"Lu4Y!!^M b/$hJ,)Ai`mϓ]#Edfޓ&;c%�IVB%!$AJ9o0!A#!U""({L , Hb�|<.lN3׾*"Ř y�:6l(8`Dl_O(@uʆ "h?HW/Eđ6tFa`V&Z23����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000011361�13060735370�026030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��%��%IR$���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��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-0.9.8/pixmaps/dctheme/72x72/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020050� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000003234�13060735370�024625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��Bp��Bpn_m���tEXtSoftware�www.inkscape.org<��IDATx[lw`K@[R> hĞ3.SR"!SCHTԇ*<k"ڒMky+@D!jS.yh, JJ<[%ݳر{|Ιfg"A#)R" ,uA-H 8n8ǒ"UoDn WE,%V,SZIv_r &AGODnl}2G`%fxF@KM:B<E9t WA18rڠ.: <fF"w:Б >/"m2}ji[PXLN`U!ˢ-RmԿ\JN[lm2dٔVgAB'J5{/Ҫ,(= \٨VfcTu1<vGQUv"KlWX$;-{Gq$Z@Y$%ւDP A-H ԂDP A-Ȋ'N\|YDVDd(pRD9sx5lgA+&NDz}"?U3)rJb\blv;(�=-T՟U |gA"l'Tt:=><<|Q'/6΂~`&<^;=<<6zhhtx}ug۷p8<ܐ?c XkEf'rKTȊ]kځ.IvȃTjaG[Oz2Yk|߯9gJU罢ްaCnbbi`hwNڱ[rӪ[k:uc[UG4{јd {cr�LЭ\bYk_QՍ@X|x.e1 c/DZ3PB$5?J]&h%~57o�Xk˞*"{8d'fr�h }*cU7_.ig(nB]\I6,ͪz#| IDl':1U>Ij&j+Q<[" w"o�0<ͪ1f#NRkkڱP[kڪ(9"b.(Jut!9ᩩuv?CU[]T'"1K`rDd@@7 ?C]Q"^ A^HpC6kېr4[wApQb l!Ic%㺺]K,ꩴs<[WT đ\rt:MZUK@x`=psXsq%Z>FĉL8㺖 gyk T;%Z~1- "Ri1tvu\rqN$L&s~U8X+w"5NZ˃NHx.GTu>_V׍׭X |+}4-4����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000003152�13060735370�024454� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��Bp��Bpn_m���tEXtSoftware�www.inkscape.org<��IDATxkUg6kv[?h ~h}l٨RTV|TbVB6uw"*"KvL?4Lr'4{9gι7wx<ioo_h�pv��'o|\,w pgeQ/ }?OwfMu"͆?q�`&mR>sݤAY �#uy\JMCY�J)�vMVRf~�q;&I !kvIJFFFRe0&,| � alDF)CDG]3.P<09Amzwuu]zm*<<^ HvBp' Ѩ8{Pwwb&U�.0@z�hDtey6=o' Rv˲^`A$XODoMPXވ'IV˲.8>"̉R 4"�\FGĜc*4-rc捅BaL$' O߂Ǐ 'ѭ.Lu` RC~]P,ST{PUy.A%Q )Z"EqB˲f_U ̅ b P̢H$2z[9 ti`nu]O�'>yezf^]!n>73>MZK:f^GuR}iR۶?Kmm|"z鋈EULCI 6"+۶?4ql�ZB܄U\.:4{U[5yn-( dƗ�Py�󛌔>�(N  h4jJ)}&(Y5 c33LD?yL9FD�\�'!Ї)SI8�ïH߿f h/e}8�_)�8e4!\zR�T*%3qg 0C"XiZ?&�ٶl```BJ)D):%�=.abnrar84MMa<meYJݦ ž00ٶgYyi�xa'T4UL&SbhgYVual)j֙,n@�dh.�[(+/mr ޤkAIBӟN(PRʍA3 MTOқ7 K @URR y,ӧ$w#8#A:Rbdr�/zуlvk|2S@x<R,/g,i�y O*S@/T.25 H$0;~9KLi S$^�ƧCi-sKoTUƗ@t+mӦX5>J@R�<Raʴ*27�xtQ|U<g ZbɆf1 /̪ R Ln 0:K����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/72x72/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000006763�13060735370�021626� 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-0.9.8/pixmaps/dctheme/64x64/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016412� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020426� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002301�13060616051�022626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��>IDATxZmK2]vח5{Lʒ J$Dࡿ'>`eAB lWM?r{}9K^8\ٙ01�P�?Ida^>|0h=fN3;#q0^^o6F&/On#@$FC< A=)@jn)@_Bx*tôPrJ(��\.<�A@$iZ-y |||Ցe,^P(8qϼZ0V@R9$IeY}=J Mʗ(V\F;N$IlnnUQqwwRl6qvvSаvf3 loo`Lt ( .// j$I%[]]E8hgccooo*3$I* ,s;8lmm7ii�Vu^wD&I:Xv0RX B!aj.�XӅ0 +2 PzL&l<<<�|>O"ByhiDP rFF I\ >>>ZdKKKHRG7(2U~qDrp*\v{ymm 8~-HQP.8z` ?Y` DQ�o&,O D"a SR��VVVvuA} (2-..ZEúx |zۧ~, Yv8DQ, cTh 1-t:qpp`Ao +A@} meYakmSBX,v`v#J! BH$fYt]_UձdY$IEc vƂn0}ʱX͙t^:::BT(8 `yyْW-[@OpX,a^ح} m*;Oy tvf@9]+�,<oDn~޿S EB_؋Z�e@Nga 04Ͱ q����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000002712�13060616051�024407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��GIDATxZK#UNRJ:=0/QݸPAըøRpfVfW.Fhp6.dDqDp!g1ӝIR縨UT%m>Ms=~>RK,K,K/A*޼+< Nm'׭lQB{2_b oʒ7y'LlN~ڹvuaz54g ?`n)q+Shۼw<ADoL$`˭gɶt v/eu"x^@OC^Չ ߁0k‰%pE vf1\ G#։�14�Ԃd iRqxߘ"p?]s差kckܺ6�",TUq=U 7�lj ,zjS)et$l0fs rto>RѦW_sB@^a._Dmޢ?~{O�`uXɘX`$>L`"xo;�|}>" wVԔb0x!h�٧X/ng;_vɩ25) mUd�D`l۱?�|{ |9hm4HL@f۹iW.n>'BU:wGO_`0ֆKjqx0=j7je}937[u8_G H6j@-uاth`Zk l)Fvgj�MȀ|e([ɮL* )?i`ߐ6�t a ۀLiQ> %lZ+G͏N ɋ8 ^WZEBg�AY rS RQTIQ �9 8WJ{u02PFh:,w5c3Ӻ: (ݕӀpß ŠoS!e8 Ekl*[O@U\u�ck$-V}�3-b}�,^GC'IԌ TSVʖ%> "X`{{2Kx�3`ݞHW>jL9AFǩlBA7F3vfN9K]Bd3Y%C~ԟO R8}  }Qj}%O" ˲R_}f 苈XK'yv;jwˋ: c=0eԪXGBLN��ngGhkg6ulY!K�tB4\^����IENDB`������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000010161�13060616051�026021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� 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-0.9.8/pixmaps/dctheme/64x64/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020034� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000010467�13061015620�023346� 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-0.9.8/pixmaps/dctheme/64x64/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000014436�13061015620�023255� 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-0.9.8/pixmaps/dctheme/64x64/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000004757�13061015620�023140� 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-0.9.8/pixmaps/dctheme/64x64/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000007050�13061015620�022711� 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-0.9.8/pixmaps/dctheme/64x64/devices/drive-virtual.png�������������������������������������0000644�0001750�0000144�00000013427�13061022727�023347� 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-0.9.8/pixmaps/dctheme/64x64/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000004460�13061015620�024701� 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-0.9.8/pixmaps/dctheme/64x64/devices/drive-removable-media-usb.png�������������������������0000644�0001750�0000144�00000007157�13061021161�025473� 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-0.9.8/pixmaps/dctheme/64x64/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000006613�13061015620�023305� 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-0.9.8/pixmaps/dctheme/64x64/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000005653�13061015620�023446� 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-0.9.8/pixmaps/dctheme/64x64/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020052� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000002530�13060616051�024617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs��;��;̶���tEXtSoftware�www.inkscape.org<��IDATx_Tu?ggB % $ & @HwseffZ f(A%Jaʇ^ %)q)Bdv {?o;ȘHҎ`lTlxu|ND'M[VO_[ss$df69ù\L--Q �|a;TdD:) "�l,s[{P(,ǙٖtME0U]s֘ nXz{{/DoMk"5&''oJkNoe}|~=VYў�Bahk@m�'kԂ? L' ‹i(T9ps.߀5) J嘈 ϰ W*�Xր͛7NrmWd^9wsnmU=*"[k٪GÌ ^ xT*~܈mZumLHr =᜛H#meBn`fYlW#!B. /8007Zu@U1}RDװmGmlK*OcfYOOO5U"<pO$ǠylW| L`L}f�—Oȗfެh|T63yށf׏T*Wn <⪺v svf|H.ju|Qc-Cp3.\,{B4S;7 2_s߇^s·kC\ d]D}?06UKP.U 5vfѸ3H b%v\�ܻ"2|*J{EQ3{x<s@ ;箻bN`3v ?1`i33 `kbk@XVG4Xh;rDG>g<o&"#Oe)M?޺[Udjj,+RNK@1[RNJѕSפ~X~}/)U_).\x\G~�RK:Z 4:2$@NwD6vi׉}(;Ff6 w}$I̺sȼȘ WVܠp����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000002530�13060616051�024447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs��;��;̶���tEXtSoftware�www.inkscape.org<��IDATx_Tu?ggB % $ & @HwseffZ f(A%Jaʇ^ %)q)Bdv {?o;ȘHҎ`lTlxu|ND'M[VO_[ss$df69ù\L--Q �|a;TdD:) "�l,s[{P(,ǙٖtME0U]s֘ nXz{{/DoMk"5&''oJkNoe}|~=VYў�Bahk@m�'kԂ? L' ‹i(T9ps.߀5) J嘈 ϰ W*�Xր͛7NrmWd^9wsnmU=*"[k٪GÌ ^ xT*~܈mZumLHr =᜛H#meBn`fYlW#!B. /8007Zu@U1}RDװmGmlK*OcfYOOO5U"<pO$ǠylW| L`L}f�—Oȗfެh|T63yށf׏T*Wn <⪺v svf|H.ju|Qc-Cp3.\,{B4S;7 2_s߇^s·kC\ d]D}?06UKP.U 5vfѸ3H b%v\�ܻ"2|*J{EQ3{x<s@ ;箻bN`3v ?1`i33 `kbk@XVG4Xh;rDG>g<o&"#Oe)M?޺[Udjj,+RNK@1[RNJѕSפ~X~}/)U_).\x\G~�RK:Z 4:2$@NwD6vi׉}(;Ff6 w}$I̺sȼȘ WVܠp����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/64x64/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000006000�13060616051�021602� 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-0.9.8/pixmaps/dctheme/60x60/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016402� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020416� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002706�13060735370�022635� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs��t��tfx���tEXtSoftware�www.inkscape.org<��CIDAThnI}-clD`d$P!`Ċ`70;'HD€`Y(ɑr_fؓ]NI޴OS[0,03f(�yЋ/={YM˗?|u?<o3R攍�!msXH)R I m#4 H;()BJ;7JSd aցz}#,PAf~N/Gv] <CJI8&q挖 _:蔖G7"RZwL<gzzWNmkGѲaV~r˲dѠP(',#HDJ)1^[[cyyyeHӄB!*RJ۶(˼zEmh4Si CZeyy!Bl?w>dbbWvgVVVRǏFienu~|~e84M6vVEŋ<zp8ܳ'u]>|0m]Z~,@8&O+t:b1r<i3eWm{szZF,$D"FҶ{lcX$1i7�nlll�peɤ|uu- axD"<y/_ l<gkk}ǯ_nZúw<R?fw;633C24<--RjM/uVWW{wzw5,= N,ܙJX\\uݡl<h4zgYF>W* mڵkܽ{N8Qei}ٹ9nܸ1T}t,+Jr Z\%2crJޖ۾ᅫU*�pž '-!H Z>&ɠUZ&#;Ze캻Z<;qŲ,hm͛�&"syFbF%{h�~]jRD\ƶmrL5, B/;y.]tkf?~P, 8C(q6(Z8{ !RjauLe7Th4XR~rT&&&('I<x`{p]L&ӧOjضٳgi4C7|03A¶mbJ)677ǯ>sk:=N?=N *-O?L�Xu]vZ1aLJ)x1= Y`m};@<k_O�9 p S~=q,㮍����IENDB`����������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000003113�13060735370�024401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��IDAThZK\E=Uut3 (1K! ԍQPAQ7"+.BpB+l܈"J"$Ltwqzfޯ{&龯nnݪzK,K,Uǯ>|QgUbi;FȬm p>U,_wJ׎+p>i�Prd6Al0et~nn\i}ԳV#jZm) kzj ].m _BVo]�iR-3gر NݑŠq{殇_~#L*D mIHn b �>J*"ՊXe@*Di3C$-V*ՕNc4R$7>iEu�k"Ð�IR?d'ZZB{EXro>-jv56s't8P]567^Jy,h}{>|ikLOb/:2kwP,?~cn/<Q*TT>y~<- �J{ enn= g1NWӱn'*!TYc=Xz">~H;?UU#*|NE֔*TP/ߵz}3o}ܱmU뇃z t"1Ir�WtHPxqDj8BwcWN�H&+P�%h�)8VFly.&hu2邴#OX$s]vjJ-T<YZ0AR70%6C UPJCĂ SyxIHBu-l�176Blby P, Rk20#\9tZG�tZvJ*O_%" (BdN֩;7H)#\N5A`GtD$9<W{h@b.mc& q �  BNQ:#sAr%2NƎ; 37iE0sѽhdZ&369h^Det> MCF*x9aR?Ag|;$D,&,8eiBAd4Y@J7C0q!�x.=:JO&kK۩rL, s/Q*D᫛rRUsxMa>7QfWK5CE$DnK%vSHv*<nw;u0alsqx$TVXZKyfZ:c=YTR"TBܲ92n)\[:F0aQ6RD 1m88UsbpS} M/B. =h(|?{vbo,wnFǰ8zϾ#<~صXl6~?y'J !$9,L"VJjPi/QIZ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000007344�13060735370�026030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs��t��tfx���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� 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-0.9.8/pixmaps/dctheme/60x60/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020042� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000002755�13060735370�024626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs��7]��7]F]���tEXtSoftware�www.inkscape.org<��jIDATheǿ\{A"Q&.؛W*%k~QD؄藓n7{uA?" @#2-ɛ?n7qvfvv1}<3/; DDDDDDLKTe;Ba_;i^"eLLD�L;Ts,r|HeiYV,`NlE凪{a{]Ҋ,g.,j"I%a!l�hsjD3lb3\4�ptXu�UU3!3# ê �.Ҵ.* NR3[nt/* g2ɶ�q[RSA`Ǐ .Ҍ(* '6SJa!D\ ̠R,�֑O)6󶇊gM]vfNU"SE=o{eY'å4x. 'Lrŕtdr'2|Gooo</(J]DHB\566GD)��,,˒$M(0񗆆̤+f `ǘ(PUV&J| wtt|j`|H$څeݺu5iڟ�\ " ]{ǰ5T꒍bvggi[eZQxd2B^Z̼|><(Y�km^ D:Nwh%� !MArpCQ�>:K]�ޘ@R>ىI$HDtmu\~jB3wlwגuT*]pi�ʴY�6BK<TΧض�oL&)Foe"ڡA S*Zcf�wٶ=EӴbkXGGL3; pooX,mkt@D}#vbzsNo5],/W,AbaY?$Z6#,bB0fY L>}�>vHidfg^>d}}}=�8i#ADgg@H�%t41=k;\h: UFFFM�8.ݺ&kM E6-uwwo$\Dagع%N/mH&+$Iڏ&fo�0]_n&3\*dY.wr(��npq 0aZqi�p{ >ǎ;MD:�`;1aϚMFӴa<@eI}�[eff>ڊ4M,k=A�`潆a8 \vXʏYl>6T̼_၁ᰉm۶mtt4zӕ1MK 0����IENDB`�������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000003013�13060735370�024442� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs��7]��7]F]���tEXtSoftware�www.inkscape.org<��IDATh]lUgf]lbDh-t{v& hV%7SDНMJĠVEL"j4h0vvWۙٯچ%}sν̝YE-Z3P5xc��r8LJN7F(oE.{'|JDOmk8VP@6]`cϕR/9 F�b΅N,sj/y po�1vcͶm/D",@Dߔ [ֶ MUm{ cB!+ �>b�m.1kj*,[lQEJ3Z�ſk]r33HDiiԼK)/mgfnT(0s�H)%:{{{opsq1�d�Q �!9 Z0u>B+89e X1!],ZwjE.K5T8/B,7oKop4ED1u7q)R{YX8CJ":{yZzUX3*6!qI@ <u+NbY-)Ff#ȍSSS===KCLD? !Tb7%y"G�< �_$m{T)uU9Vc�g3Y"ze&Be9c�cxEfdj v]�d=fBB E[@ؤDBW\1O�ت�Efasއi� 0%<|,LB!ƘO0+|zj$z8#@B=ii�׷cYc#Ȗq6=U:RvfI)%�olI&o=b%ߖeݟN{cR)fS<f)�obzpWtCvKam&�< �[JņEk6'0MNNޣgM}"+@6s�N-g,d25�ຮKD-ҏڶ1N mf=ݰstL&Svkl6cH2\p-} mi"_ �Jg=5 _tzL~!D=[u"쫷fPsK+~?g1; ߤ5 NR1f?-3d2uW$j<66 Wu"TgMMO-[5[HU+,\�οE̯]50ZHhB$\$`!r"zor@T*oTpϛV.x {{Dc^n ߆_ y͘Wyжm Lk{%pƱT-Zhb/Ob����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/60x60/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000005511�13060735370�021606� 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-0.9.8/pixmaps/dctheme/48x48/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016416� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020432� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002752�12561351202�022643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��gIDAThnFK.?Hd#6`đC"r ¯w և(};A\K`J[ hY$] AR֥?`gvfg$ANvH)!�߄>~I+$]xUrDJ y0DB~zѳ42 uS B$89A5ܸqCUS{/O< &M.aۈ�e 9>eVu]{sss>EB4h0P(t۶SUW޵x!C4MӘeY5J?/_!yqVqJ)! #/DpΉi)Ƌ/~d@^Lܔ؈9 0nnn~?̀,4-(BUU{P )D|^upA1ϟ>}D\߬H)㕧4-|&O e0 ض]8>>L �Ee|A@J R 10ƈ8{!r߿~ ��X,^Ν;ms(  85mV+ccgg(mr1� y[,//ÇPUP *d"2K̹ 󰾾˲h4@JTUy8::ϟaYj6ױ!)!"$1"&* J�h`~~0ʔeױR0Ơ(J<F)?Ԁq=:hsZƌj@KKK<08ι{Btɼzpi^✲�:9e#Cu1.J%e$:ιc˲{I)H؃0|q<0.* 8s>~�^l�'6` �jx客j+ UGfn !͛8dEA1^˟)"YEP��0ưEQqt:8<<[{AO큼]TU躎U�R8d,Dȵ`6jZjY3 i7쵤aD ]Z^ddY{n{`T'8RF04GԲP‡:VVV`>5dB&AGn.o.2jZ}v|\V7v: S z~R7oΦaqq1uJ%D_c*�n20}b9gHb*{ CQLA,MVRׁhk Uד<8i6_rΆ t|N1��?WZ|����IENDB`����������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000002140�13060730354�024411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��IDAThYE~|g(:$B4(-BiAB"eP"ID�4)H  i$'nwGkkgw^w'4f[lg?}{7,F=r!(uݾݶ_GQ7A?hרlD'R<{xFtO/&S$!tlihg4<?'�[<F{Da mD�!Jݓɫ;~˷5 s "Y0 D`fq*5xN߆47^ IsզrGZ67Rˆ݈o�gX`<{ADZ#3p椿w3ʳa x^"mFWv</򣿓�<[ Y{mn1 _Ǔh _J R.b6==N\㷟V[ ʞtʠ? pѓV]1F`qdZ�P"`& 2 1ltLj̀ʭY@ Yl.˧ӗ0Ū($ rJ9C(FKDZ(/:*0]HAVbpp[M p?.TRur-{(3 2U4w?ϿbIRE,$5Ц%K-0su')rkXͅNi3y`Ym3%.y0چI,{7,5-ai#PR&ހRP"}*Bu.dfmqX )Lt֙ "2!0HiO*Kcފ{Pޒij ZEAd=0 vDxv̙?/Zjr#&TK,q̦!"CU~;mV4G�Oէa}!�%�^ (O!*;dk)>+����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000005742�13060730354�026041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� 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-0.9.8/pixmaps/dctheme/48x48/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020042� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000002640�13063505360�024567� 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-0.9.8/pixmaps/dctheme/48x48/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020040� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000005713�13061015620�023350� 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-0.9.8/pixmaps/dctheme/48x48/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000010242�13061015620�023250� 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-0.9.8/pixmaps/dctheme/48x48/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000003336�13061015620�023134� 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-0.9.8/pixmaps/dctheme/48x48/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000004632�13061015620�022720� 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-0.9.8/pixmaps/dctheme/48x48/devices/drive-virtual.png�������������������������������������0000644�0001750�0000144�00000010401�13061022727�023340� 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-0.9.8/pixmaps/dctheme/48x48/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000003254�13061015620�024705� 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-0.9.8/pixmaps/dctheme/48x48/devices/drive-removable-media-usb.png�������������������������0000644�0001750�0000144�00000005134�13061021161�025470� 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-0.9.8/pixmaps/dctheme/48x48/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000004652�13061015620�023312� 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-0.9.8/pixmaps/dctheme/48x48/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000004137�13061015620�023446� 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-0.9.8/pixmaps/dctheme/48x48/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020056� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000002152�13104132411�024613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��,K��,K=���tEXtSoftware�www.inkscape.org<��IDAThOhU?7J=H@KFDP J9fMz*xыz[-BЃE XMmAD30Lv71~N~{0`D:ֶ1s~,:JRQJ�N<: j=J(BꜮh63I_\\ Ҹy^Nr[:@V{ZI҉4B'b҉4bp(et�\}x+e@VcMotb2w fvk6xzyTlYhqg`@orӕJeL)5-"G{~OkO"l6gvDm23nQ)uZ0FK<}"<qP\.߻Zےyg5" $:nz#Z[>HOo@DfYk11ZrZ{8.(֞.r}n9x.2=aBa8k1T 0 k"z݅XO/p%zDGH'X'zZ?DcAƘ˕JeB)5Af_0}r֘ hkF7h]/3q r3/"WǙ}R:'jzTDL.ȉ �J93ZV 72hૄ$5kD^_9%$"o' M.,,܊ Z6n^NMMYD[RoAƦ!&HFqADJ4rEh4.t:w^�a "$;֏ĸLk+r(E~Q0 \w%;MOO?)Z窘ߕRd wq#U t@$r?&{9<#"s:pZic,`9$]Ƙs5`_e8I\s����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000002143�13104132411�024443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��,K��,K=���tEXtSoftware�www.inkscape.org<��IDAThOhU?oKz6Vml-&"S55ugd( ED<xD!9dOTDX=)63agt͛2~~o#F&*-(NpCDSJqXׯ-p$"W]6'_V Z | ].?I&Ñ�Ԓ)"&''KƘƘ{YZy[Sc/jM1HA�EK4 <��mg (.On iC{"r[GƘ娵 cŢgqPR9f_RJm=kg-Fg )^4_YYh7x-Ikm1!kmCk}}/}mgY}#0L goRwghOw\.&0uۓ",]\px8wmJr\)LejZ<`[e9S~fׁ?<.:pfxcL35+1y^3 DQtA)RcZ3""Xkg:}X$"r$O˄Idcy}Ck}' ]V529Ҿϖ=[cGv.ߣD7>"#YyDQf9yޒ+($yH:qaiZk�?q+w(~WJONҕxZ)x^͕7=PayP3a߯7,!WI?u`,^a<nu||*NO8^:zez ^RJ=^V+ a8-"wwtt50777$ɧ@)i@Tz8ik ǀW;{t8 axPD:?{t8dI,G;"_^< =c*? 1b/0l`H����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/48x48/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000005443�12561345244�021630� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��|��|B���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/�� IDAThXilT}y5!$,F6!a N$D"4%G&]Ҵ!HUtShUu!*,JPD*%1,k=c=qrg2^1jsujuq۲kq=ZCD/Tce7?pYnmOJVƊC�h�c*ڏ*%?]8Q5wt"'\B('6ϟ[3gƹFyœ[O6Tѥ|f 3n-ߴz[i)d4,U,(r᪰xQMɺ"/KE Ef fF2;X+k6#Dϕ]s[t6:Wbk&>`=A^ܽ)cz ǹY`H\-Xp3]CWvTˇ7%1j.鎷�3 .fhj.K$Ro ŋ=|qWug:E23 ZDr#w1{hZI٪<0I-4,5{?@P=k}`ft.%X0oy!Fe #)XVyY<i+zg|(\�%΢+zm3gKtSEGN'!0a VR?S ҕ|q' '8[_CZSYw 0kݺsA@Z_ݵaZZ�p$|qD�P9m0ߺG"⎞tr9;?#mJ=36t5|<zZ^ٶ~Qg]cZ?u;͛Ϫ^9$P,@?V.K\螏#Gq5ى]TZ2m}fhuT C); -ڳ;f$ڌy-DLΝ`%$d^(9:@W"f-CubΊ4qRh aXQ>kޭ߳>�7$�` R]PjjN8̠aMǖ~Zw9=:`hYO~[i\ He�$@ I#$ X!sk XQeRgOΊ?#d3vįxqی 4]n@IAB*<>9AYqAD꜁T6d/,܆D:JW{vU˿@t\3C/|XZg\2X(K:� ei֬.as)g6r妁WR9ՋR@gQt(mϗO =*ubaK68!.4ҟgZH1�? '@D5 ֋ tz]V׶c \; OMnTX#K;vF<ۇ=� ;�tTŪ@ c-szq2w4:GUe5{M~GEEf l5�И &nl u"sP0(Xe\XZ�=~/tƟe=*̸dzƗ/ 9\bV[r$KD3Hd�V qp HbAx߯D<lY# �%ťF<94d 8{MєKO{RfQQmu27R:O!+S'yUk] Z:x"z- Cz> h7@h2S6 KH!0^g0dɟ;-tEHFp68.p!YEZf\0˧?Վ ‹,PQ30#DG0d!D!t5=OxJG,͒ |F!!ac vI}WA HEBI%Rv AfU\PަueY`Lo$t6,}+ɍ*W})pUID^@6! ~u=Q5I"�H9h ,$t /pyһ[x[y�@KkkIKW; v`2+9xe JH$;b�e�w,B!s H6qZ_ g<x$cAR NzA#an)w{JnHH<#}Òp<sx x$�CRX>s+6/A.T<=(t`<l1h=ΠX,s�L-B{5 \J[)-`R@>NIS{ 1g/p3Z&/f88]HEc#onkP[PK:/"qG�z$"'TNJѷ|{{a'BP-^xGHu%�N;.xƺ?hҏsd�v@Pe����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016376� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020412� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000001751�13060615027�022624� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<��fIDATXOH?ݢ^ FŨ\6=7xًg#&^ f1x047$)vBx}BdC;噙g|>Um~oضmN7 iS˃- D(o777 j>>>m{�D"joNmH)g/7"sQ/peYszw((NmSytB;BGgMCI4 ^__i4t:bxd2I&!LN%rs*Cq^;wwwu"V(Ů:rl6KP@UUױnW Q,1 h4J.�UU1 '2i:b 7ɧ0�fDz!�!Nj9ny3tQeYeYR)yjEЋt:NضM=' m5x{{c{{۱(B677=#@˲HӬql~R'UiFFA&!.\uГj- k!0DJ~vT* `MDD`٤^~*;LPjBȍA h$ |z%P`GUU;6b\.7l`3dyy9LS< Ep&'W* lll2vNk6T*EAJIT=k'+bj~owUU9==Z( Ac[(kPJ L)% Ob4os+y~g]S$)'7)X ?Mzy����IENDB`�����������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000003132�13060615027�024372� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<��IDATXXE=zwv׏ݵA6@HdDG%~ ND`8"BDv,~�XBla3]ه/Wٞ[ι^k{mo}wvC$-7~՟&$w~+"kHIN,|_Dx"n_];9n=n:h:]zxU�OH]ޚĨ/76 1fF6;U7Ò/\sLxctm&q'OwA~k<*~0xT^Y�dvH椟1ck�Х{J �~}S㳛-^[Ub㯡q3 Q+yEHirw1ޟW6ΞG]jhJٙxr/O!w4l={ۧ�<ss H;ӺFB$I�$3ÖOˆH ò:`ccc~sAMaJgB @ �4Ft>ơ% �Lt=;RA5"$2 ٜY55IB&L5VVZ4Dš0s\b`@̟?nUu@P'%,]mI?0�AXk'8/1ҀuޟXV,ψ3&Kٮ (cjQT$J1A#,DXjb�^qHT<gkp`T%VY2Ž$D8,|^z R%gDڅj|hn4CqD&H,KmQm$0¨@"#Rr1iP %ݤa=$IȀ +`IqX6�Gb$ j@Gb�r\0`|PVƒRr$W4 ZS;PSBR| !HqQJW:ffl6P=PsT!,-P yE2enzNʘ &i8aXF\3B  �(02fIT(lEM,kn. )\Ws[rw$~e-<MCNے 0qJfES*̓墧)�)G /7%+HǨ\4"V &GN,u<u,r0�gЫ*RaRˊs؂5ɉ_nk=daJgIQ �aӨ 麔X)!K< ~|~̌5 hk�VNBb;i8.SRXhHѿ2E!BSu-@d*`B_"Ѵy1ѼT@v:剅 0JՕY=@ZNV3rc%aj�[�jpRuM35魭�{/_}{sӻ;L~0*0]7��π1 _eKO����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000004602�13060615027�026012� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��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-0.9.8/pixmaps/dctheme/40x40/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020022� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000003002�13063505360�024540� 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-0.9.8/pixmaps/dctheme/40x40/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020020� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000004616�13061015620�023331� 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-0.9.8/pixmaps/dctheme/40x40/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000006415�13061015620�023237� 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-0.9.8/pixmaps/dctheme/40x40/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000003377�13061015620�023121� 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-0.9.8/pixmaps/dctheme/40x40/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000004122�13061015620�022672� 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-0.9.8/pixmaps/dctheme/40x40/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000002736�13061015620�024671� 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-0.9.8/pixmaps/dctheme/40x40/devices/drive-removable-media-usb.png�������������������������0000644�0001750�0000144�00000004011�13061021161�025441� 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-0.9.8/pixmaps/dctheme/40x40/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000004026�13061015620�023265� 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-0.9.8/pixmaps/dctheme/40x40/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000003432�13061015620�023423� 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-0.9.8/pixmaps/dctheme/40x40/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020036� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000001745�13060615027�024614� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs��$��$P$���tEXtSoftware�www.inkscape.org<��bIDATXOhU?]%" ?D<hb(d7=k"x1BE(" Ͷob Vzɡ*j&σ3%Βla}go߼`*31LcUm5*?v?o? Fkiiȋ yCDsYU=6*J1;e_glщȱ(H>;DO uLpcFQ,FaX>X}v; hZ]f]$Dd&o!nvytU?;ɎN[UX 󼻀} 6p1�0{<Ec$9ǠsSlɱ.m<UTtNO>}^_�k+@ͪzܾJn0neey_c8>[[[;ػމ?�<T0EQ4_x<^n빊'&&|cxu9Tkm H™́Z΋-40ģZkgEq < 2LZ=l6^,nZ�\>N3FDNԬqZ}xЁ; UZËfn xDUWw<Lq+7L:Gzu#}~zAm $I{Aq/kAt:E<t=cj8_ 9_Tf{/8(>"2~(1Nj} L{ZNDn�'E&"{{^[7ccc-F (Rn*� -)|K����IENDB`���������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000001744�13060615027�024443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs��$��$P$���tEXtSoftware�www.inkscape.org<��aIDATXKoTqkJ;@ #Bj Dd|'ȁ@*-,AbAD*jċ E,� PX <!'vf|s^^!CvDf&U ߫l NNNj?Vz) .// �|IU}^UL׫p$y KXѸ("ߦUjR8�r�"WҭĨ0<< q571�ωȴvcܲɅ~d0 jz`|!"A$ XUɽ$maj[38 , Q"yGt=Fz<㥉v#ZL~cD<p�ȿlã-cW%("W1ocVD^=3|&'"ӹ淀 @KPn^NǁYӲbOD>䬵KYĮN$huccE3 WTt6y$P*fq/I\&Bg1FD5k�x: SݵKwAp]" \&$I -" .= ~(亮uZ{ώ[ ͵o `Pr?0kw}W.'``WJ<BYkRճ㜪 z s+XXXR㜥E1o SƓ@~*mj3J-###ۯsj3qSQ;̵In|~{Jˏ!C�(P]6����IENDB`����������������������������doublecmd-0.9.8/pixmaps/dctheme/40x40/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000003503�13060615027�021575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���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/��IDATXolWv|8qZTqKڤıMiSjJ@-!*Q)RJ|@B% "DU T(U@|w>{Ç]s8R4۷~;3o.ܕrgEVQ16/Ug~J5+d V<eͽߦv%�J2`ͭ[wOm)N{ǾѦ[_c}^%W7 ?Q/{ضm;mXWd$;7ҙխW>;԰ZPCFgh9T3<6wC\E>ng^2iZUG3cdCk^;neMMm}aP<SBcD6ݱ3<K9(߼N2Z�bв2;@j辗O|#|d:/u=92||[?Mn7\w?Gv_hVmTw :FlVmmuZQOlnG[6bcjNr ζxWY- kC/_8KFaE8TC%:w(NAUl?w׌ ?pl]%Odm0 Ƃ(*!bQ+EBq.&)}sKCjé٩e8Abu1ן>HNƲQ" YSA5Oe5,, -O_;W{/ű*s?|k]mOW:z!p/ /xϋ�ˁݛڟ>;ͳ}C'"H$\z� 8j(N 9r,לٱeW˻Ϟ{jNE#ji|{֛`,w E&򗙳Hi3h:ESX))C3b/`++`%˪*0T>j=4*UO~μRA91SExAB\s /u7!1`D F( � `~W 0t DpdQ*Aue"#川OkRl%3WS,񕲌+R+ +exgU}ԁ-qpsZXlWj!** LZHYhʑ3;5@} .қ `mAk$M={1&q78Y+�bb{M(1W�ś4Mh2# rHR R4VR_ Pds5?.|O:L](Q@EpbIEpS)^} yMC9իP5[k^W F@)݋LJ,T†T ԽZO++wA 77;θ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016400� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017647� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/link.png�����������������������������������������������0000644�0001750�0000144�00000001457�13065676717�021344� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXKhQ34m4}kVQ_DDU\q!2ˮťBek-RPhPki4I173s]t&NCv`6=p;3w✣!α Pw��m!47kpDi[ . 5@5TU@84yx܁Oo ,<# 7Jy7ۜ/P0V-B;G~�n^Cob5�9$u!̀ǁhT@8ڍ>xDԾ A$pY,,(%m+/.?ȷX77C nϹă ύ$xѵ9֖�3')kJ+tL~$aO[�r, WAj'q}мǏX|&TF�D={!!$3&ۚ~u3woWS t6\2�,op׺fz5�<AԾ4-bˉiXWh*SJ&Kpf"-hNl1Lƥ/9LcCH%)Gt-#?w+RR-X)M!6kdyl&~xdL~8&�k}+J!<LwG 9|Y5j\斝n[UKwM֎-MĦ^,[mh:I5pkM~5 ݐ*$*~&x1_$oas0����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/link-broken.png����������������������������������������0000644�0001750�0000144�00000001437�11361045050�022571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATx]Ka쎛J&Q ceBD/`P}.>A?W](eAIDe*b殹ή3;Ogv7e&= 7`Gt^K={z6]3�fA >5�[X`5Pr=dÅ&Bt l>rOePd"[�(sZ76DOCȠ*eL�A Shn `)�egu*͞C]�V�$Aݺ-x-�Og(bsFqD!1`dx OWДhN\4Q/0` :Rl>a% tPp� Bof[Z&[!{�.*+|uuwS/q:wށ%Z#<4:f>*(P{5uk<zhtzI <ao\ϖI0HcH`NC$qlM�CSD曕S-Į�8wtJG]h⣛�\;p֫�8p9 ~(4x0<O�i;:6,_>M]VfK�kj%Uv+yQsx%$IJ�!)܂c]^/#8КI㕲߯G`3�p}w 7F#P1dӵTXR+'!$ׄ]| 0[6����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/folder.png���������������������������������������������0000644�0001750�0000144�00000001757�11323355446�021651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs�� �� ����tIME 'ȭg��oIDATX헿]E)S + @bc:UV6b@ INJ| !|˙,ߞsL&.9Zk o+k~Flơ BBl|㷕a<b8EDÑϾz؃z ]n |_njW^m T@G_>WFO ,P Vk(e ~ -l%KhrK?$/e3|/ao<ϸ67Cñm@UXn®߇͘[9ŋ*a\5`oIڕaS<D7a:I(s-2-Q҂v "j<V;= =aDXXq9mXYtI#5:ZH:4NZ+*nLt|GҒ-8AݨbISfaH4~ѾNH.'NJ0e@iu~*-qp9jKz3KPijukBYYheVs.^1=2c˵? ~xޕ- %\3hEW/)-0DI;`WÝhYWl'}kofO 窳F)cVtB%!NMj$i"rPmZrKoqXlU+g(XP\wif;Dʩjfd/]oA"oV">iC?T@N" g9jYS)%.z?4·V}<Qig:)7z> }\<4EkN_mi%X5tLMĻ?�c: ����IENDB`�����������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/folder-link.png����������������������������������������0000644�0001750�0000144�00000003011�11323355446�022565� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs�� �� ����tIME "- ��IDATX[S339mU!4BdmLE  x0.KLܒ-h%HHA$H*B ^LtnZ圑$^|߾_k?c]UEWo9P4~s S/ yVۿDӸʼn)� 899RKH`Gb-%KRxz??\?v'q` 8 fN$TXSOzs~0L0UTLA=pW—WA3a6)֓菱 &(f=n:j0pspJ}V !e x:T bL9fW; -. df 9PEYĽѬ*0)X)>nPᄖYiz#:Jvj�jO3'yGij{捫Y~՞2L1us+[~\;T.?d M=ȯ#q!֞sz Sh<Z4beyKٵ6ʁ(ͱ:@sW�&'ٹs'}ܺߊ"V)0ews7?.Y`dG&JZ$bb@$s#ccUqV&HL k?OسLc/E ,`xV?k%U\n3P6Ad[Ff}AZa죀 ]'W!4;{G;._8cU2)ǐh'�rPu5f16νd:%w[qrddtt"F(}!'6f)8g%{*WwUU?nzvsc! JySQ;ϸQa% o3Kiz" L7-31FM9~$&@0tû$6)4yBF7VF=dٵFrE]$�Z!ɲ 'v 8)[,@,{SET@-\(q%-:e?G BPQYw&$̔Y / mRr"=GL `jo9y<^]Z4'I<II4ԓz@bP@Lɦׂ25_)X0w6n{ (4 ym=T:P3蛳59r<GΞ(1p9jV%x RMFkj."Un38eV>ݷ^ V3T=*y*`]19jm3\FŻ8sqsr?L~<2 ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/places/folder-link-broken.png���������������������������������0000644�0001750�0000144�00000003245�11361045050�024041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��lIDATx}LUeǿ˽HIlHBj&Mj6[3S0(Y.L|GT.3kp/Ery=9[[Oy<</WC~b4iR;qEŀ@RT*B_Eoa* TM$%2X]@ o� qch#FEk(mƳrJ[sY1Ön\ LL~3b32Ą!dLꞞ �}>GUk>L]>VUK0gKdH^@p4^2]>p\=#;Ќ>}tٽ:l/Px@$OAm KɪZ<yh\1RnH5Z1G!c A7vYjXx 2Eޘd02�!sz$[^4Oܬ,Tr4]k E�aZԔ۝9/Jf# )^b0OE|#% %k�>t^KqH}j;RTEЭ+GM bH\Ȕ5@X({Qu+,.›NH<ЃR@uB%Hn .u@~鑨x"P?f0*D0 D0[J9+-W-_@f*@ZgfnW $.&�rp>(h(D2nznh#�' )s|);p 9" Wt$ɸ#^ 4n*�rUQ.fHNAY#5dE0T47w$?POZ'&Ve-07D=[X�s!L? \׻qDsd?Si<GvF^P7f%�vذm*voYkdͩL#Q-7PsNg@1z}y)b%=s6�r P2H9*n[g+\[mZ `>0`~6$?;z.1mbmܱ#Y�7X�r(0rRsFCua$4Eqc1Fej*wl9xկl& Y{@B �$uSH>X(㺗 0hLx[4XdUbl$sؙ"mFB`T2+jtdMm)с"˲]Fu0Cڦ~$ B M(4$&f"&ce c3�e-.adLN)Jw]'мI2n&Q`܈7 +<:zpTz{Jl�ӶQ U@tCSVOy7:UĽo(x1lne<NTp4r }]aMWhxSa/L@͆ ("T^Lm ZvȏDr "zz U._n:y]ѼCʊ2/)LzDȌBxd}1^ 2&Ys>zK2< lAK����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020414� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/x-office-spreadsheet.png����������������������������0000644�0001750�0000144�00000002332�11323355446�025136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D���sBITO��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��PLTE��������������������������������������������������������������������� ��� ������װබݸ߸ǿ̿@���(tRNS� $'(+/189::;<>?F��;IDATxmjQg۴VbŢdЛR R}ק|;K[?\%Ij4Ls&$3H7X� q$qh@J5I(>R)_|@(`i)?w]-<�ZSK+1X`Vc?eJ{/ی3`]Y*$/+d *և eFonSC+6d^6Y-`?$y*QT 8'.9æX*XTH} TqK, b�9&3`flRI x E!u"m * 2wum( %@ I<2*(0~f{c7ƀ:$^MFQpc 8lqRL PcPXA:iCc)Q8<Eg</�uhB󋯝a<w7՗}M#vRm'w;a AϬƁs (p#ow1t۽'4|r=L1k q{ y�9 t}"?Igٖ.€����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/x-office-document.png�������������������������������0000644�0001750�0000144�00000001606�11323355446�024450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��=IDATXAOG38&S;MQUUXȁߡsOЏ[.BBWNqMv;;9YϮg5JO}3~3cH>P<)%Q?aO} v<H7;;;q0 }u=_]} m(T*A`�b"v AMh Yzfϳ)(A@V+HPh40*A{R y xrf !h4R0 P 666L��OԐS퉦ۯ;a�v ]�777IQο|Р^y)9: 㾭da�312rrr2<?D VE%~;ɐ`t!'?#Z@'ܕ%Dy|r@3tΣo桗(r֚Οʶઋ(=-9kx(fH y^v3 e]so|D޺, /o|0DG>ǗO36Юfo6Ը`)b8NONN5z&>rTbe+++ |�Wu||yXJS.IRB*hsU1i3 d}fek K<ObtzRKZ bnnnflR `;/?󷊘 ruzzx x_@dW5ůaW\/v�>8@_#eq>�Vƨ@����IENDB`��������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/video-x-generic.png���������������������������������0000644�0001750�0000144�00000002775�11312762055�024125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��zIDATxڵW]le=3;mw vVK(Բ A#4U#�@$ICğ$4UIJ>IlQ®t[ZKٶv睛ґ 79ooULӄId�qCq�D%QA(Ѕ�~Bll|M,E�8?yb!χ`Q&��Ps*rfC}'k_qd2&uu︺8ҽݥ ,cdd?׮&͈FK /@l9yAٹ9%DؿV,_5HĻ^|y MW@UU\ qe`43ǟX̡a3{tK 0 H1�rt2<gۉ@kؽgly~ŏ�jjbUWVN'N 6|9r͟ 㤶߈o}�E,@d2bځ=( X%.Q6l~˝>|>;Nv�3_:kGߵ#<! `^C2>WÙ_Pl{ eyܮxrD>k[O fN}{ |Mfff!." Ys@,d^n@7tLt\ \@Of+L:CI2(=F0jUS191ڵ&W\GUU%n}I f-v;_݆ÇcҞ7Pg64䴞z/-0 R{EA~Pyy96nzL*f1>>)TZ $'ꢎ;;;4 UQPTU'qztb &50*dFG1=5ɽko<,òeK`ydIAWMn'\R5j+e5'�x~%�FjH~`ͺud0:6MU 7pIa_u.f<K0`X0tĜ)CP2 .Dۤh)FdiZ3YX"8 EP ( �\= {iPPp%4T� QO�S"Y&4D6X8Bap~(EŃH&)"4 ŵ.n$MJGn`abwhCs󆆆{g'$a֤? 9[~ApICkENNNQ"lO7558'X=!B  ۷ɧw" CDz~Νg:f"$z>а@!+Ƚ)j wx?a rt{H]s1~9����IENDB`���doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002103�11323355446�022624� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵWKhQ=3TX"OVU\D0[,EV).ԅ•u).ݸVpB~3[65 3Ɍ&ϗq/#ys71|Ga5<, (',"x0N%P@D]qX�'że!^W " Ժ -LSGj%7\+B %XΪKaTrz.Ts4 vejV(WNfP.6kh@$ 76>98 NlCf p֗ͦ;c 0D1۱*ϭ[-|s ZWd$Ʀ`Hi.-5⠖�AbQRuZ% ʺ?س%d<I(}0<?3sBGe R;B5#OM3V]n <þIs`SR�uDs\?V+"{W~ daU?3{W2LBA*Ui\TxR~꫅5\J{|D5žM$²,M~#FH+)JLʙ!D<(2E6 齈ѬӗllkI3+dbu].x�Qz=oeiW$L<22ap$ b10oB:y.Rt%jNe{P 4rd>y'�蜄Qbnn21Ι]!ϗض=@)"h znA}&gGd�r Etw' WD@nֶ@_ZPޣVJ_i{{{n�=ʟSv1gz<ɅbG鳪 ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/text-x-po.png���������������������������������������0000644�0001750�0000144�00000003540�11323355446�023000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxŖo\G?3sfΞqBc7$PPABBBЂh<A_ԨU�%)M+hZT@J)4{;cMd]UBI?9;ߌGdY@oԭs lf( Ä́zܜ Y)yw$@FQ-x[JP}#X�Srsm$mqgL�-H1 tV* x5 5p$A!e[\(R,ԕk-DN��fʦ#㠄@1O9)Y%'De $ZhޤB"lZ*+ A$=a—T`,%%Ž, QdBT(%+h&KNv%D SA7V윈F &&ƹwq'RI6{?~y +>%o6 ֚08 bX%_rc*VO>kI|9` LD8[7 3qr,,*"PP윭jb-/3>3&{MډłĪ(Egw> G$eȎfTDd:xBRaHzV YM&Rne ʛ E|_}3.1], lu%|Q~! M(R8J�d)&wxtSf|޾Af,"mʕTP4~+ȷ3@\B _ JA4N7Q2Z\o`\YqהƈԗwG4͈,Xm҇hjiA#K*),ttxA;hiAd<x5Clxhnвd`Sе5A5` Emtɩq=3Nq`gS轳 bA' ,7Z<[_)+JnvVz̒#FD2+F9["iU*ǿVѐĀz=C˪Q$ e< + ~x7lmÑ}3<sq8˧y4:F97.t@,nᗧiH<U:{LJwO1W- W+kwG;�g/;B:.7>+spz+̎ ]W7m^0Fey fju(h߼gptˇj%[8#1E)35}*1H[ERJ 0e "H(8/Yފ9%N|n8>t?_}sixK$I6t: Jc& C4 a:YE˘_KׯѸzfiJK4>y۶)8MU%K-!D$=O,LJvP;6 k}߳ 큻J]<Kˊq#EZVmw<sss4c {|3C ۷=m7` RJln=q ܪiosH7"J/_o=򍯟ZZ?a!wl"RTh6 +xnW} 02>/]x+J9tvs'rkQ0[VEv"E |_?կ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/text-x-pascal.png�����������������������������������0000644�0001750�0000144�00000003174�11312762055�023624� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵW[O\U]̅aJiSZS XS륱iҾ*j7h&&5i4hME(DJ "rœ˸wd xۓ}f9{o}}Ea%A0X.'p *[UX Qֱv@F0 5Qu4rBHTQN#jlly9$!@&-ZY&#gbrM64 ڻ2+A4?fQLu]D"hll5jl>VOЃrcGGx%Xe'EW&P* ĔlQeTe$- >SnJQ<8B"3 x/ 66$DT2jz?"-8kXK\5si{|tdD+|> lg7 j^,Q@pJ^vuu$]][#)\/-ra=X&Umμ# eF)܋X^^FOOfgfH zP[[ KNܼy{E]]d࠼VUU%׫M&bJRHBBU]]M<{!^#}x]EjF+d*:8ri"yCŝyQ�#h sa syu477jzƜ J۔ˏ? h;Nfܸ+bߑv-755 sdJFȀ5Q{Cc;0CR^ *TB{`]|!`;6{>C37)U }:98MLzE]3wg]´ $-`R)WVVXT4` |094jrڟ~ 'Yv#QX#s ]Y` K:DC[,"^4҇Ȧ#Ӹ�2,/x6Tܵ\qmG0 B<A?z2T]P ^pZ-Fň/=cݰ-%4i[ Gl0l}L1\|~ݟEeSROӋ/0�ZDkU|ukD2X}"[+̶3@Wa6.+g;wSCS ]0ޒ@yrCzKJ'31OP/y&l5koՏaG#gΜy ߈mşܺ 뛕A2k"K2UPր.|$1??;w*>�j8S@ 2z1&'C%IgϾ`\=T<bGGG $ڵKX%9”sJ!QT~=>J^UXA"m+Bzݻwo�w9 V'}qbbp_m# 59Yg>lQK%@ ot_lKDJ(@T����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/text-x-log.png��������������������������������������0000644�0001750�0000144�00000003565�11323355446�023152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs��7\��7\Ǥ���tIME ��IDATXŗk\ޛ7#ɑSI#Np %R1!R!ݔ@LlM]l"hUpiJ1I#M$[H3޻t#Kcg77#;|;�UED;tܹDQdC͐1,oŁM7ĉş1NZNJ"hϻ۫}�t{'|򳥥w޻ҘA5 CƇ {A b~M3宱?Ν @c R:l}S'Hn)DG'O)"d>qB1^QT Jͽ�"769TYnQ_xD sD9ӤjEUDvLMM177GIfH f/;FX]];SSDIf1UݕV##edX1չ0")Bt:Xc ENqx(.ɬ-�Tu4'!dZdsss̰cǎ qt# 3VK)B18c4a:dY"hہ/P#0ā:X}'jA`] ZK##ƠZkQ0O�BeȲl+Y8~=8" s<#$IRUHbWP.<}4z9,Xȑ9f@,R-:k-E*ưS>{ɓ'"jY~[[4rs" IG(=RSlvsB|W+>(q*ֹJ=[La{{ arr3>jqalTر;^v]:>Ev&&&HNWLsf񱲮TjX #gGL:rNY(KQ5HjʫW~Vَk-ZDּ̮V{CPU s( V~i:hYBo1q}ޔC1ަ^ :z{OQ9e9Bl[—j(BQ5ZnU~GE=z=iv}Q5L%`#w [c0"LL^nKEt]<guM9ʛW>)`(!Ib:$H5% "R~h w6)F=›WK.… ߼ީxr)zϿZyl6fcc>*y^]?ycLhZW^/7Ft:8s iRx)ScʡTș(<ir& @X\\4 ?W<W/_\C$zh$jLz1&kȐ&-L kkkfaagϞ?~>l<sCY\\,TA}ZxkAUU}P-עC r J0֚k׮];{/qƍt8s �>}۷o|e cl^n͛k |O?'xRyzi!cv^TB}yw^r /"[o?_tNLA*Fq1Z+u:/R왞nq\ׯ_iB<c.Z)B8����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/text-x-generic.png����������������������������������0000644�0001750�0000144�00000003565�11312762055�024001� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs��7\��7\Ǥ���tIMEO��IDATXŗk\ޛ7#ɑSI#Np %R1!R!ݔ@LlM]l"hUpiJ1I#M$[H3޻t#Kcg77#;|;�UED;tܹDQdC͐1,oŁM7ĉş1NZNJ"hϻ۫}�t{'|򳥥w޻ҘA5 CƇ {A b~M3宱?Ν @c R:l}S'Hn)DG'O)"d>qB1^QT Jͽ�"769TYnQ_xD sD9ӤjEUDvLMM177GIfH f/;FX]];SSDIf1UݕV##edX1չ0")Bt:Xc ENqx(.ɬ-�Tu4'!dZdsss̰cǎ qt# 3VK)B18c4a:dY"hہ/P#0ā:X}'jA`] ZK##ƠZkQ0O�BeȲl+Y8~=8" s<#$IRUHbWP.<}4z9,Xȑ9f@,R-:k-E*ưS>{ɓ'"jY~[[4rs" IG(=RSlvsB|W+>(q*ֹJ=[La{{ arr3>jqalTر;^v]:>Ev&&&HNWLsf񱲮TjX #gGL:rNY(KQ5HjʫW~Vَk-ZDּ̮V{CPU s( V~i:hYBo1q}ޔC1ަ^ :z{OQ9e9Bl[—j(BQ5ZnU~GE=z=iv}Q5L%`#w [c0"LL^nKEt]<guM9ʛW>)`(!Ib:$H5% "R~h w6)F=›WK.… ߼ީxr)zϿZyl6fcc>*y^]?ycLhZW^/7Ft:8s iRx)ScʡTș(<ir& @X\\4 ?W<W/_\C$zh$jLz1&kȐ&-L kkkfaagϞ?~>l<sCY\\,TA}ZxkAUU}P-עC r J0֚k׮];{/qƍt8s �>}۷o|e cl^n͛k |O?'xRyzi!cv^TB}yw^r /"[o?_tNLA*Fq1Z+u:/R왞nq\ׯ_iB<c.Z)B8����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/text-html.png���������������������������������������0000644�0001750�0000144�00000003131�11312762055�023051� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵkh\e:sf2IӤmbozAQA]ĭ(ayaaYve?A ^H\ɌML&g̜{|9=$xxρw{="PET~RS$/z!U:��6$BIֽǯ#O di,n<P�|<? KRU(~5f,H=w)H[�it+6P� \\H\z|9Sk|,03X`ăcyn?P4LG Ԕ�Q4~mʕ94W>Kχ[V["Xg๳!GvxSQB` �8-pRl*Wy\k䳂]RxW)'7)Mʖ`bq"^c{"ʖ9$5LSpzm}*}~wqqVx؄ڼMt N0(^rhHPq\0XF4r\-{ # w.oxF!)蚆ihdPA_ gꊅ-TmO'nWL9!1ضB@kD.kCKq jԠ+\DNDQ>U:RͶZPg s5Ci9& JD c|ri֗143ߘ ^ǵpZʔ &JCdi9^[=Ϣ\}&ե5i*&-7C ÀO) @E03LYp O@罯gtS5JJW)j:cslc8g[cn  oOaejr nk.O>pbͣVD[ph֨^s(| FնazVVf!(>L}۷Šs H>0O:Kdi<W9{'vT +cҟ,n.2~}4M۠]'`0Ͽ">wQ�i8UU;2>Až'" �ǰE|&[`a%`ZϓfFLmPoyv?KV+@Ғ/~~ OTxrC-fm1!EܮR5'N%_ @OfI^-x`e?,Ѫ'Oqҭy)0x�jAP+A$qAgfvv6^k333KL�HF0R@rR_ ^ť˧O~ܶ -`wzt+ԩS]o&i-G0p+q%iӂ>9qGSSS_?~i`$y4ax`S=�B`-Fb|75����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000001356�13063505653�024410� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs����od���tIME )&-﭂��{IDATXW=0}qd7Ynr@=uH ќ T?hit+E8ndN7w>{Oo(\φ8o{ۗCG?a_a0z=Oj�1O7v �2@!2 2ͫq-.Ip8�0lEUJ @c#rq@�7h5B@)X`}ӶR8.w=`@aBL57c G'ӓG�>I�pn_^~�zDv9UD;ד~2!? ka(9H'` fۻ{rte%4s)E8ȗ릍^{r"Z*cC{seD)�{<iV|�ne/-1H(@7 5?_̀i!dCקJC5BfDH pDzk t:dBs'mU  Ğ%3DDIܓ�"oih2 ecZAv[` n-.%tMnz+k 4;]Lws*@|/{k'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/image-x-generic.png���������������������������������0000644�0001750�0000144�00000002213�11323355446�024070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��BIDATXk\U}2I26MlT G/',>7 AKQJhhK-VK[L~ə뙳/ˇImCA^}{7^Ź>xߝ<q�sN:(P/";gZi&vGQ@'8ss8簝޹3"lJA>f-"xhpNNuNv.&Ja ϥ=8voLԫ\DH,lu~H'P $\{}|}^T*@9 iG_;[A) P:H.86D+@aZ=˩FV]]=#5]<�ЭL:HJ-o{ 6"IeO^^* kn�,LHro!K\6wt4A6qi6YAìy$7: mOP:BQ!TȌlɤnb�i_FWI'e Betnz:�sl:E/1t$�pS#$Ą2��"1KҿMvy]a�H2�B�q" "!?z}uiET֗9�.c-Hy.�0@kMP� b�AGuPG8g�TKDi`L*vz�sc,Ze<aL-9hFRp|qo�k-Au;C4[<b8ER^_0:@\B:Rτw!)8ɇ} 'XZ]die �TU@hcyysbc K+K_=pvc� Clmm>+k+9wf�@)ŗ_;w/cZxժk̜319};9y0]]^x܅F �^r~AR\~pff~ ԁ -NK 7</?nײ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/audio-x-generic.png���������������������������������0000644�0001750�0000144�00000002715�11312762055�024112� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D���sBITO��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��PLTE��������������������������������������������������������������������� ����o��p�UX n�iy�� �� �#�%&((+0%1 1�22�5557&99:t6;-;>,?%@AAB'E5E3G(LAM:NO@O.P,QXBY:[[b(ffgBqQ|\}}}sȌש٫̮ܪ"P6n���&tRNS�  &(),/2:<<=@G,��^IDATxmMkQǝivjqfn\TTޅ.uOƭp ؕbKVƴII'3̽k{8 �R �xe A�1#2" L( 0!"@0+�BVX'd&f"dDw1!v@&.vۏmR+1dL4{zxwS�L|%מDiBߤKOHH'o')ߘͱq"d$%03t@h} ]B:@pr` Qo?$" pr㜿i}�\í7V/HV.v�~) xF$ʬ G?gZm?x*r�I&X:uCHuX 7j*kςӊ X(}j\T*~AO|J�6L,sDFuXKjӝb0=Zz/ "V$ya vA 4d4 aL~Q(;D:MC Y%0љ_-ӏ[A9����IENDB`���������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-x-shellscript.png�����������������������0000644�0001750�0000144�00000002075�11312762055�026233� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵWMOW=&dRMHhv5XcV P>ZO4R& ɢڐ a{Ff3J{{~~CN!S? ҀSBi??C)@9L%*?N@YVasX !E9#1K"5bvc (xUJRP{Bq"@WǏ199\EdrFn}d{‚fvR|jj Lpxx8L1uy\#c|k/~ p}4&zZ6Ȁ+WK899JB$ w9 Q86ӹc`qm[rW *h4p̾7oc>˨=qnPf#Q> h<(sدSgRW˗~9\'D㽽=0~@;ݝ5�?.Bxe_C?<m<2R7, 6 a> ^w]_ؑ@dg]@ +OO6 FqgW@mǯ ߗ�wS�{aTĄ|lszȃA ~B7j? P0w�apZa||VJemnn-4x#.ȍr[r~{/�k fff/T8(}BZ .-*Iۿ]`&¢QȧEWҮXdYسlPB𽈯�h:T$�)GInC/J;VP1٩T*/D| Ni aGXnK.&L?<3 ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-x-rpm.png�������������������������������0000644�0001750�0000144�00000003067�11312762055�024477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxW[lUΜn[b)ZlU|@DH$�%45B">hbPmPPnQFMBJt\ϙ v<o3g7sfYM!gfZ\op4<|mkkp -1MMN< mZxitshp4 ?ܱfwZ@ko3k^7  Bُ:J� UHUD.ETiKlպzWw>h*2! p(p!(#×(]3UMٖW}t$l,q,v"4 Plvz'>qE;u<ՕdA�6ڦ�][Y2x|6_u[b(roYcCFuzdL8v>^ LA#)ʉ SOWg�hP@rH2lہx!R1qP(,]U|oZfru17<iJsMU \\#PS,Vwttn�SLM<Ho_EcS3S"Evl_Ps|r#GKP.z4NA:>{1s �kѼ\D<k$VﻅR5MG\T ?" +Kȍi |Qgbr 6&q3 3y苦?fSHP fD  㚚,@SLmcf)/=ut0{o򦅙Y ã&{°cIS0=[/ |u,5% 7Ef k/=%ƱdM(IVXY >pXu*l:$M]GP@ `L�̠r"E| =a]Š Y"eDM[ Tt,[4C#6X2O*Q,ۊΝG�uH.C7I$"pfl vP_lіe6ᅕKBt?NdY|(t啋Ey2K.C:Mv\ih_ӆIi3g7t]/#eb\܈D33Al`?zu]6:2*m)8 *'+h6<ʦ"S h<~iwׄƼk% H%GDE1I LnCL.&JB\mt_wNxYbq "(N[.l`YT>R\LxȽ ,& PN1z0 $X O(:G"%#vWpVCfqC AbA98d�L&!קyA|x 0j-Gx D>Eyt����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000003213�11323355446�026017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��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-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-x-deb.png�������������������������������0000644�0001750�0000144�00000003037�11312762055�024430� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxWklTE>sna*B IDD1c"QGL#?R_jhLD?bL 5 "H HKҖ>g33ٲ ~{v͙sδDs�ftuuFP/Sh`F69mڴ݌8omk(1iG c9- , J)X)(5q\qέ;?yt6gy]=D29aB.{PLJ”,*\}P_Xp9(0k98" _E(׈߉i‚7_y]/\LPi�iJh&5Pku^Wv.X-5z$NA ν,]Č<<C?*0q_.:$IE$p jl2 ca 8 l]�W x\2B$ I=�g̪L.ce�ChM $�w~]ggcǎh�$|>CHEo`�#M22V<k[u=I^5w ?БP"B(c{ᷓ 19W�Bx]BP)"ïxZGnڮYR:LFB49x Q*5B7() p; #Dbr&2$A:\ 3u$ -ȅBAhhA1?jL(E(pi(6A}>e847N5ww]pvj;fy̝ P9m q a[t2U�5=+z=a55zq>͏O{;`FC =} 7F!oI7U��QҹEs=>{X1xa,^%<~Tfm^!W@hAXy>|wwq68r';\Θ/ ذvI=|xcajX�AD,R8|{pix ϵ8etѫ+wup>=NȪ́y^eEx^ kW-(WAbE[r>2Wq`~>@1.[L݂L_作p|FF&k$WFd]ڲ#δDD!#@:n٣W*?86ƭ(`MD䠀e?Cy0=W FkwP,i.:a$]r:D)EI"H%7g.˘ptR=X;i $ &9:Egdt_!TM=B pkCH+˪cBp-b m_Kt R����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-x-cd-image.png��������������������������0000644�0001750�0000144�00000002753�11312762055�025350� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��hIDATxڵoG3{-N@KDQ_ZJ}C)-O<?m+UUVrA^Fmiv~9;oJЀ dv"<vkW4d�pm9\V߻uHyJ w�0z@FkH/YZG b{r`|\8 y7г\` m]oOhfT5ݣPp�&t g4S!eTD)]/Uc8,(e]H܇)FR'AI㋐klɑI)V yEMA`<s _1;?I{ˋ]>:łn`lRVe 6޹kRE:@@e-.fe>x6Cy?'U)1F#r#ɩ O6OTPZM8~}2! "TbAv"%-U_9+> scWs 0S)Z۞E7 7>Z�iwyh!bݝHzadMP(9yek§)UC6�%)^=ajF7J0!ɑZ@ \@<@sm NǍ+@2Uڻf$F8Ή^B_E1?awlLH]Qr=6Y"jrvLl.YujQ_q1 +[䮝+g.L&pyR%�GuDhl."x&Zs ڃr5S܅qn>HuӘd@LӮ"2&OX+bS>yNꉅ35i<ͤ~C`־'sQ=@ɦl;20NwQr&v H@Sȯc @.!M:zg?@ qFzd#&18<cÇ~ցdDɑly,+=rC8Af,h^mٌͲM,//޾}G`Cd nWgܩ R{y!r#Hs |WMK<yB�+B-7>(g6qd:y)zŗ,gj6ښ{SnlluE! MGϬ;Rč!ulq]$ fZWVVݻCz  E8.p"ժΝ; ~:'H1R[n} ,ɾ > { ?es_T>a~9∁k!O(P6FY^Hܜ�eDR����IENDB`���������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/mimetypes/application-pdf.png���������������������������������0000644�0001750�0000144�00000003001�11312762055�024171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��~IDATxڵ[hgUZToJ&A5A( EM| Dˣ- ^@7HLc`4udݝ^fw\vc=0L,H3;|4IӘfSI_!59jf&30!J!N# 34!V6m|^/D6G bGF f2C*`,X<x"DB0޺?1 ӄIbY+Crd $Jg pI˒^:+&q$N&x$%IT* f4@�7\Zt.X"ىի<[Gs @GQu y /Ҩי3REcc{.JK# ,DB!<jnF\BgBLx2KDff3<w.zF=ʕju崍SԊEfy >ݶS۷؈77·s't]s@N@%or}r7<ĝ$~_fFM3G.iRx XMN*J́mJ~& Ey}s`:ٽ?…Ȝ8\< õJ͛Q~M߽͛ ]g,>#m{^f:*u+41κrK"J+\먔JjBe^skh ^^ sP?|Hk@M pb<!qsׯGVK`"VB`jop_̱5۩PUFX% nzg6@IWT|<J^ƌBGyGmH\;d2{ h@z^{'mZ^6xCV$n%k{ވh[uW_g֬A7heѺwY*X#B2U}*cn؀,Yą 3Z#2 FZ &}6 N2\{B,&mѨH$JIS= T?n؁̛7<N7~twwo߾cxBy^AHK 75N$dy獨d :< _ "gvԵkH< w?t$_$P(Ǐӽ`I[bܲ�Wt3bS Z%ݷm@fq1(VAʻa GGGA24Ӏc6 OEƾ}(X��~ c y@+S#I-1lsԵ^[ZGiˀpL8~n|����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020024� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/emblems/emblem-unreadable.png���������������������������������0000644�0001750�0000144�00000004475�11362134553�024111� 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-0.9.8/pixmaps/dctheme/32x32/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000001702�11312762055�024550� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020565� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/dirhotlist/submenuwithmissing.png�����������������������������0000644�0001750�0000144�00000010214�12405254001�025227� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/submenufavtabs.png���������������������������������0000644�0001750�0000144�00000002111�12653161145�024320� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/submenu.png����������������������������������������0000644�0001750�0000144�00000002771�12405254001�022752� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/newadditionfavtabs.png�����������������������������0000644�0001750�0000144�00000001434�12653161145�025156� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/newaddition.png������������������������������������0000644�0001750�0000144�00000002567�12405254001�023604� 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-0.9.8/pixmaps/dctheme/32x32/dirhotlist/dirmissing.png�������������������������������������0000644�0001750�0000144�00000004475�12405254001�023447� 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-0.9.8/pixmaps/dctheme/32x32/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020022� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000003325�11323355446�023343� 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-0.9.8/pixmaps/dctheme/32x32/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000004360�11323355446�023252� 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-0.9.8/pixmaps/dctheme/32x32/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000001572�11323355446�023132� 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-0.9.8/pixmaps/dctheme/32x32/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000002453�11323655670�022717� 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-0.9.8/pixmaps/dctheme/32x32/devices/drive-virtual.png�������������������������������������0000644�0001750�0000144�00000003041�13061022223�023313� 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-0.9.8/pixmaps/dctheme/32x32/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000001704�11633361331�024673� 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-0.9.8/pixmaps/dctheme/32x32/devices/drive-removable-media-usb.png�������������������������0000755�0001750�0000144�00000003024�11715671161�025470� 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-0.9.8/pixmaps/dctheme/32x32/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000002472�11323355446�023306� 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-0.9.8/pixmaps/dctheme/32x32/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000002203�11323355446�023434� 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-0.9.8/pixmaps/dctheme/32x32/apps/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017343� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/apps/utilities-terminal.png�����������������������������������0000644�0001750�0000144�00000002720�11323355446�023705� 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-0.9.8/pixmaps/dctheme/32x32/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020040� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000000775�11323355446�024626� 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-0.9.8/pixmaps/dctheme/32x32/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000001003�11323355446�024437� 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-0.9.8/pixmaps/dctheme/32x32/actions/view-refresh.png��������������������������������������0000644�0001750�0000144�00000003750�11323355446�023170� 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-0.9.8/pixmaps/dctheme/32x32/actions/system-search.png�������������������������������������0000644�0001750�0000144�00000004247�11323654424�023351� 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-0.9.8/pixmaps/dctheme/32x32/actions/list-remove.png���������������������������������������0000644�0001750�0000144�00000000475�11323355446�023031� 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-0.9.8/pixmaps/dctheme/32x32/actions/list-add.png������������������������������������������0000644�0001750�0000144�00000001131�11323355446�022252� 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-0.9.8/pixmaps/dctheme/32x32/actions/help-about.png����������������������������������������0000644�0001750�0000144�00000004267�13110277137�022622� 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-0.9.8/pixmaps/dctheme/32x32/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000002251�11323355446�021604� 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-0.9.8/pixmaps/dctheme/32x32/actions/go-previous.png���������������������������������������0000644�0001750�0000144�00000002260�11416270327�023031� 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-0.9.8/pixmaps/dctheme/32x32/actions/go-next.png�������������������������������������������0000644�0001750�0000144�00000002303�11416270327�022131� 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-0.9.8/pixmaps/dctheme/32x32/actions/go-jump.png�������������������������������������������0000644�0001750�0000144�00000002723�13110302615�022121� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-undo.png�����������������������������������������0000644�0001750�0000144�00000003101�13110262743�022431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/32x32/actions/edit-select-all.png�����������������������������������0000644�0001750�0000144�00000001167�11323355446�023532� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-redo.png�����������������������������������������0000644�0001750�0000144�00000002736�13110262743�022432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/32x32/actions/edit-paste.png����������������������������������������0000644�0001750�0000144�00000002003�13110262743�022600� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-find.png�����������������������������������������0000644�0001750�0000144�00000003144�13110262743�022413� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-find-replace.png���������������������������������0000644�0001750�0000144�00000004070�13110262743�024023� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-delete.png���������������������������������������0000644�0001750�0000144�00000004001�13110262743�022726� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-cut.png������������������������������������������0000644�0001750�0000144�00000004047�13110262743�022271� 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-0.9.8/pixmaps/dctheme/32x32/actions/edit-copy.png�����������������������������������������0000644�0001750�0000144�00000001323�13110262743�022442� 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-0.9.8/pixmaps/dctheme/32x32/actions/document-save.png�������������������������������������0000644�0001750�0000144�00000003663�13110262743�023330� 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-0.9.8/pixmaps/dctheme/32x32/actions/document-save-as.png����������������������������������0000644�0001750�0000144�00000003455�13110262743�023730� 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-0.9.8/pixmaps/dctheme/32x32/actions/document-properties.png�������������������������������0000644�0001750�0000144�00000002133�13110262743�024555� 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-0.9.8/pixmaps/dctheme/32x32/actions/document-open.png�������������������������������������0000644�0001750�0000144�00000003016�13110262743�023323� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/32x32/actions/document-new.png��������������������������������������0000644�0001750�0000144�00000001760�13110262743�023157� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_workwithdirectoryhotlist.png�����������������������0000644�0001750�0000144�00000005026�12451473236�026452� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_wipe.png�������������������������������������������0000644�0001750�0000144�00000004001�12451473236�022174� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_visithomepage.png����������������������������������0000644�0001750�0000144�00000002542�12110457565�024103� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_viewsearches.png�����������������������������������0000644�0001750�0000144�00000010214�13017704640�023716� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_viewlogfile.png������������������������������������0000644�0001750�0000144�00000004260�12451473236�023553� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_viewhistoryprev.png��������������������������������0000644�0001750�0000144�00000002311�12451473236�024523� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_viewhistorynext.png��������������������������������0000644�0001750�0000144�00000002333�12451473236�024531� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_viewhistory.png������������������������������������0000644�0001750�0000144�00000002273�12451473236�023635� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_view.png�������������������������������������������0000644�0001750�0000144�00000003144�12451473236�022211� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentpath.png������������������������������0000644�0001750�0000144�00000010236�13016463506�025011� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentnameext.png���������������������������0000644�0001750�0000144�00000010236�13016463506�025516� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentname.png������������������������������0000644�0001750�0000144�00000010236�13016463506�024775� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentextension.png�������������������������0000644�0001750�0000144�00000010236�13016463506�026071� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_universalsingledirectsort.png����������������������0000644�0001750�0000144�00000001710�12451473236�026551� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_treeview.png���������������������������������������0000644�0001750�0000144�00000002365�12617337032�023072� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_transferright.png����������������������������������0000644�0001750�0000144�00000002270�12451473236�024120� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��ZIDATxW]lUk&&Ő͟mڂ /J V$jH1  h@H H$j;w;ݙLr{w,SJ~>L>ı2yF5?"c RF^쓴-^ YstA9vOױ5LByoL_  - ck�Lj$! `" AR>ѱ0�zE\<Қ!zg! R;ҷY. XOϬV-v~ X�`x<ѫ4)^/i?'�Ɣ�el;{&`�.%*Z@[ gi pjg{!9Hb\A a7o ԟTRJ!ob[}atuTo)P3V65|Oom3ss N^BKҒ`NC? TRJcF9g ;1Lンh+=$:F*�Ji`ݘņ 3ʻ6@@m?æé%eHDIIDȗ6} GnpىGѷT/rv5Dp-H0(XMoa)q4 NY؂Ļ'qrp4{L(B^gϫE8\'!1XQ'w= yOQZ4yi䯾~Cx=^F=zZA 9E4~vh*wUPϬr#؄'@㾸HWB6Mw-2_6Mhk!rhxse/s"]Rjh<Gfh<8חP,49W>1 @Ae6cvA)6Vg/hտ\00#WXd�c*Szbnhz'b37*3cnoe|9_T`ph9�[у I^i`VK#b[ \b�U6Sl$L{$.FNots<S=󇙫Eduj-~jEvYWפ{4ow~`�]>c����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_transferleft.png�����������������������������������0000644�0001750�0000144�00000002246�12451473236�023740� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_togglefullscreenconsole.png������������������������0000644�0001750�0000144�00000001410�12510224200�026135� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_thumbnailsview.png���������������������������������0000644�0001750�0000144�00000002456�12110457565�024304� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_testarchive.png������������������������������������0000644�0001750�0000144�00000002574�12110457565�023565� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_targetequalsource.png������������������������������0000644�0001750�0000144�00000001620�12110457565�024772� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_taboptions.png�������������������������������������0000644�0001750�0000144�00000002311�12110457565�023413� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_syncdirs.png���������������������������������������0000644�0001750�0000144�00000002720�12451473236�023074� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_symlink.png����������������������������������������0000644�0001750�0000144�00000002013�12110457565�022716� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 4!��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-0.9.8/pixmaps/dctheme/32x32/actions/cm_switchignorelist.png�������������������������������0000644�0001750�0000144�00000002731�12451473236�024641� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_srcopendrives.png����������������������������������0000644�0001750�0000144�00000003333�12467744673�024142� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_sortbysize.png�������������������������������������0000644�0001750�0000144�00000002001�12467744673�023460� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_sortbyname.png�������������������������������������0000644�0001750�0000144�00000001552�12467744673�023440� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_sortbyext.png��������������������������������������0000644�0001750�0000144�00000001360�12467744673�023315� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_sortbydate.png�������������������������������������0000644�0001750�0000144�00000001640�12467744673�023433� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_sortbyattr.png�������������������������������������0000644�0001750�0000144�00000001656�12467744673�023477� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_showsysfiles.png�����������������������������������0000644�0001750�0000144�00000002662�12110457565�024004� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_showmainmenu.png�����������������������������������0000644�0001750�0000144�00000001143�12451473236�023746� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_showcmdlinehistory.png�����������������������������0000644�0001750�0000144�00000002611�12451473236�025173� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_showbuttonmenu.png���������������������������������0000644�0001750�0000144�00000010214�12705015424�024325� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_shellexecute.png�����������������������������������0000644�0001750�0000144�00000003366�12451473236�023737� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_settaboptionpathresets.png�������������������������0000644�0001750�0000144�00000003321�12110457565�026051� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_settaboptionpathlocked.png�������������������������0000644�0001750�0000144�00000002107�12110457565�026006� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_settaboptionnormal.png�����������������������������0000644�0001750�0000144�00000001102�12110457565�025152� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_settaboptiondirsinnewtab.png�����������������������0000644�0001750�0000144�00000003011�12110457565�026354� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_setfileproperties.png������������������������������0000644�0001750�0000144�00000002616�12110457565�025011� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathresets.png���������������������0000644�0001750�0000144�00000010236�12653160641�026726� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathlocked.png���������������������0000644�0001750�0000144�00000010236�12653160641�026662� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionnormal.png�������������������������0000644�0001750�0000144�00000010236�12653160641�026034� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_setalltabsoptiondirsinnewtab.png�������������������0000644�0001750�0000144�00000010236�12653160641�027235� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_search.png�����������������������������������������0000644�0001750�0000144�00000002556�12110457565�022511� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_savetabs.png���������������������������������������0000644�0001750�0000144�00000010236�12451473236�023047� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_saveselectiontofile.png����������������������������0000644�0001750�0000144�00000004453�12110457565�025311� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_saveselection.png����������������������������������0000644�0001750�0000144�00000004357�12110457565�024111� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_savefavoritetabs.png�������������������������������0000644�0001750�0000144�00000010214�12653160641�024600� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_runterm.png����������������������������������������0000644�0001750�0000144�00000002720�12451473236�022732� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightthumbview.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024320� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightsortbysize.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024523� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightsortbyname.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024471� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightsortbyext.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024351� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightsortbydate.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024466� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightsortbyattr.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024523� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightreverseorder.png������������������������������0000644�0001750�0000144�00000010214�12467744673�025015� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightopendrives.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024464� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightflatview.png����������������������������������0000644�0001750�0000144�00000010214�12467744673�024127� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightequalleft.png���������������������������������0000644�0001750�0000144�00000002567�12451473236�024267� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightcolumnsview.png�������������������������������0000644�0001750�0000144�00000010214�12467744673�024661� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rightbriefview.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024270� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_reverseorder.png�����������������������������������0000644�0001750�0000144�00000000710�12110457565�023741� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_restoreselection.png�������������������������������0000644�0001750�0000144�00000004434�12110457565�024632� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_restorefromtray.png��������������������������������0000644�0001750�0000144�00000002550�12110457565�024505� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_resavefavoritetabs.png�����������������������������0000644�0001750�0000144�00000010236�12653202722�025130� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_renametab.png��������������������������������������0000644�0001750�0000144�00000001320�12110457565�023166� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_renameonly.png�������������������������������������0000644�0001750�0000144�00000001530�12451473236�023405� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_renamenoask.png������������������������������������0000644�0001750�0000144�00000003262�12451473236�023543� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_rename.png�����������������������������������������0000644�0001750�0000144�00000002102�12451473236�022477� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_reloadfavoritetabs.png�����������������������������0000644�0001750�0000144�00000010236�12653160641�025114� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_refresh.png����������������������������������������0000644�0001750�0000144�00000003750�12451473236�022700� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_quickview.png��������������������������������������0000644�0001750�0000144�00000002741�12110457565�023247� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME"oq��nIDATXõT?9;;.m\ #ZӚ֥ $DM@hDciW`ME,jV,syޙ]` ddΙ><s`8nVUPnN.`�zwn!#+Xc?z@?<)nTysxUӵTF-ȵ9dRbpg_+ 7YG3s/پsi.۠@9 QcblW6='.Qͷ ݝBV�-U.sPb!EA.]_``Ġ7tun2W"$i!b b57 l#"o o!:ǵ` BpdRY244]w1WbLg&W p'`jjQ#m18~1XƍHSs/bED6׵!BMtp3f<gO""=IsxdAhBfΟ=N߲EV`Y�K8W{7S>nm&K%Ʀ͛I4 5 m«j^Ѭ cGj \h@!<s  c%plQ@9Cy̒"2}|XO_osg` X+W{zE*�(WG@�Şc\/fi!\ IEЃu: B!"I1cLBh)n&Ms8 4f4kh !`#nUUEw|�Xf 3鯜A FGb w7Pe꬟ qE0sD2m USO!4># 5<eFGغX 33�<ƺ?<ay_UL\=ie6cݺ!hG#p*Ƴޱp`o^޿zʖ-\Edi& 'Qp/1֑?0BT94ӻ[?\636qCѬR,qR[i[BZ=OG:rqn5&r@xG?(|{\cO.WPպ)0\7VZjM~{Ls^{ep)7sa"ח~ή,[`S|l{�hVy�_ܿ(g 0fsy�40}%HۀՈWԞ[9MY{DT1yr?B`�XU&2"zB37-'?#����IENDB`�������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_quicksearch.png������������������������������������0000644�0001750�0000144�00000004440�12451473236�023541� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_quickfilter.png������������������������������������0000644�0001750�0000144�00000005530�12451473236�023562� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_prevtab.png����������������������������������������0000644�0001750�0000144�00000002011�12110457565�022671� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_previousfavoritetabs.png���������������������������0000644�0001750�0000144�00000010236�12653160641�025522� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_pastefromclipboard.png�����������������������������0000644�0001750�0000144�00000003332�12451473236�025116� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_panelssplitterperpos.png���������������������������0000644�0001750�0000144�00000002236�12451473236�025542� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_packfiles.png��������������������������������������0000644�0001750�0000144�00000004117�12110457565�023200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME i7 ��IDATXíklٙ]^;qiA( Q%H Q? Ҥ"4*A'Q(<R (/) -* DK co_3;so?̮q8·jVwfssZ鈈?ys #׷sϋ՞64řg`o�%  *ޯ}'" @q!3?J�kw%$jn%}LZkJCPI܄qn7/!8*>k+ۙ7w_o Ah({zNx)lF.<� kr,˷/Qdtl:)}ק@hjN6q-s:z#*k-Z(bӺ57\BYc\g5"kfcB_`|l-kC6/ B6]C%0�r�k׭ 7RoԎ==oHzϟ< ˡfNZ<�wKߍw2S#ǸJ:Bя-NhM/TKm]\z݃y?VOתVu� _YKr5DlЛJ)W:lx'aTәogN>vvo;ʥ=(l|ʕ[MV(E?Í?WñJQhxbAv]EE>gJǞt;ϳON�v~#pT"&}Fgav'[ׯax|t]{G#oIҔM8s Krȝw0 $XSs:6<1*ab:``M+/8S˜4t_;v-McKqeX<sPiklZw (&HИT;c> uԹ u}Y dՊ,z\7`R4/k ι> 4,dAg(W@̋4^}s_͚ ;}A~ګ4֧y})Vd4q#rgoS|x9ZJ(`)OBi_e3){%6\<Jyj�4ᲗpUk Ɇ6u˘gSX̎Wk'*C�4>"4Lcz?[i/23D^׀# ПBD!cq("`jU*>vԷ,>ۊJ7DB;Ѿ^Q Q(z6B�L`- k S#G9JnP)2;Q&(c\+A J�``nh8I)D J+ѮrDD!J3RJQlTAI͘BB:ᠴ/Dp\32ֺX4XGc# fZ'8P%恨YW �ZDE((!Z#Z'>b`Le勉v4jbM%pn 1f9N V%$<<BucڲTm9X Dh8EaLRq- ZbD Cd`K]ZWԆEPUN zt1=5' gq\k@`C'Ͱ(E}<x僾}@ yC?wVݍ֖\{ 1X�5x yXÃ{x= ��Ud~6^uY{f岎vs͘`l ,n] \SPZ1><αA ?~/=0V]S_J˫ rqWmVG[+[1DSAB)Gz74﹃zC(Pf>`Aq:2-ۖuP8 8 sp? bezɪZ>!W0iovvyA{=F'.bk?߹T-at����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_options.png����������������������������������������0000644�0001750�0000144�00000004473�12110457565�022737� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_operationsviewer.png�������������������������������0000644�0001750�0000144�00000002737�12110457565�024652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIMEk+��lIDATXýMeg㌊!H7AFc fBLʈ lBDuqDqcl`Cl0c{,}{^wg6St_]uUD"^SC!i5W\فE~W֩9]z7Oo6Ëϝވx@ZBFh_xv\:_^32a7#̜pwg L #"p nd~ίwIW^\v~-?ݥYADi{3Oލv ђU4hRK#hҜ6i!M.gGx< d]ɩsjrKxWEu75WTQSL^ UL{׎E97lgK DΉG@JceTˋrA"!$⹜<%"AAC{?b!P.8!8kz Qb* IN$f02r cl/;u{5sz`Tfr,qC;Dq^IvLRȃOœgG`a`=XEmO<̌:&?<-TqzZۂXq p$'s/#5q _1]&p+?܂$R2 JRú@Zq LD #�K_ =,Rl/ˋ' M9ܶ(́T87^~0`!$6 BJuו&O85 KWHlhjE_BQ/M9P!IQvƵnWЀ8vO807|{|t$U͐\{=$LT0^irӏ?ammb(` K wƥ7 ђ[8ɻ zQhԿZ}_{JS;;80@PJ$8៼iWZqfmyea#  mp+䔹yYǁK;.at9U%5Zo&9 NQL6*i'1: dH<\V$r=} ;t G `>kLx- t/9̼qtve@fS\ ^z r]b^ɂw~cw l< {2(,wgβWva4,SgaNWVԁ2 \- 7G6i; vgC|; Qφu|rٰɉǞ}|K?8sgM?Mn%����IENDB`���������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_openvirtualfilesystemlist.png����������������������0000644�0001750�0000144�00000003224�12110457565�026606� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_opendrivebyindex.png�������������������������������0000644�0001750�0000144�00000010236�13367456510�024620� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_opendirinnewtab.png��������������������������������0000644�0001750�0000144�00000002642�12110457565�024430� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_openbar.png����������������������������������������0000644�0001750�0000144�00000001302�12451473236�022657� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_openarchive.png������������������������������������0000644�0001750�0000144�00000004245�12451473236�023545� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_open.png�������������������������������������������0000644�0001750�0000144�00000003052�12451473236�022176� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_nexttab.png����������������������������������������0000644�0001750�0000144�00000001771�12110457565�022707� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_nextfavoritetabs.png�������������������������������0000644�0001750�0000144�00000010236�12653160641�024624� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_newtab.png�����������������������������������������0000644�0001750�0000144�00000002164�12110457565�022517� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_networkdisconnect.png������������������������������0000644�0001750�0000144�00000003463�12451473236�025006� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_networkconnect.png���������������������������������0000644�0001750�0000144�00000003421�12451473236�024300� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_multirename.png������������������������������������0000644�0001750�0000144�00000003254�12110457565�023562� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_minimize.png���������������������������������������0000644�0001750�0000144�00000005330�12451473236�023057� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markunmarkall.png����������������������������������0000644�0001750�0000144�00000010214�12723431627�024074� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markplus.png���������������������������������������0000644�0001750�0000144�00000004673�12110457565�023104� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markminus.png��������������������������������������0000644�0001750�0000144�00000004626�12110457565�023252� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markmarkall.png������������������������������������0000644�0001750�0000144�00000004250�12110457565�023533� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markinvert.png�������������������������������������0000644�0001750�0000144�00000003774�12110457565�023431� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markcurrentpath.png��������������������������������0000644�0001750�0000144�00000010236�13016463506�024446� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markcurrentnameext.png�����������������������������0000644�0001750�0000144�00000010236�13016463506�025153� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markcurrentname.png��������������������������������0000644�0001750�0000144�00000010236�13016463506�024432� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_markcurrentextension.png���������������������������0000644�0001750�0000144�00000010236�13016463506�025526� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_makedir.png����������������������������������������0000644�0001750�0000144�00000003044�12253356421�022646� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_loadtabs.png���������������������������������������0000644�0001750�0000144�00000010236�12451473236�023030� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_loadselectionfromfile.png��������������������������0000644�0001750�0000144�00000004442�12110457565�025611� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_loadselectionfromclip.png��������������������������0000644�0001750�0000144�00000004436�12110457565�025624� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_loadfavoritetabs.png�������������������������������0000644�0001750�0000144�00000010214�12653160641�024561� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftthumbview.png����������������������������������0000644�0001750�0000144�00000010214�12467744673�024135� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftsortbysize.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024340� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftsortbyname.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024306� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftsortbyext.png����������������������������������0000644�0001750�0000144�00000010214�12467744673�024166� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftsortbydate.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024303� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftsortbyattr.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024340� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftreverseorder.png�������������������������������0000644�0001750�0000144�00000010214�12467744673�024632� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftopendrives.png���������������������������������0000644�0001750�0000144�00000010214�12467744673�024301� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftflatview.png�����������������������������������0000644�0001750�0000144�00000010214�12467744673�023744� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftequalright.png���������������������������������0000644�0001750�0000144�00000002624�12451473236�024261� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftcolumnsview.png��������������������������������0000644�0001750�0000144�00000010214�12467744673�024476� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_leftbriefview.png����������������������������������0000644�0001750�0000144�00000010214�12467744673�024105� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_keyboard.png���������������������������������������0000644�0001750�0000144�00000002255�12110457565�023040� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_horizontalfilepanels.png���������������������������0000644�0001750�0000144�00000001104�12110457565�025464� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_helpindex.png��������������������������������������0000644�0001750�0000144�00000004337�12110457565�023223� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_hardlink.png���������������������������������������0000644�0001750�0000144�00000001733�12110457565�023034� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 49z*��hIDATXŗoE?MRA T =4 U()[oZ �'8@65(Gn=aDI൳kēVg7ﳰZyɢH NM8Z젱i+�Aq٬͍[Hx \ZEάz}a&ң]UQUsOo-4VV6дIAU̧@#G}o* Z b(O/Jaѩ>ja |ڤsZӧO2ߋ(xkq1` . Upvffob ]H2x\�<֛Y.1Kc�H  gp?P:)$WPd4@b ;;B;r�PRPTRZ8@s0 W~/1ѵ+N_<֓0 BFOޝDOkwS\<A;2R pS=_s ,:nrw< ˟_3;"V# Duo<ӟ Q%rd6 J �ŅSoD)izސd:YN:B+]yTa/Ӂ>hEoh<H27Ul+Ml ^y?m ,i!n8hY\ק"mLz.$Àߡ9Bh??+C&ʂf4;Mʫ]0 rI�@=m׾XW$/vٵax8 <2ONGމ: �0Knܣ7fռcf����IENDB`�������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_gotolastfile.png�����������������������������������0000644�0001750�0000144�00000001252�12451473236�023731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��LIDATxW=HAv5Hecg!9XإQD!FaqvҤ, ?777wsW̾RJjB(WC^B)ݛo#Ykak3|X4[_x&ɆI КƷZ=g& >RrH_bXBPT*"󐚀X@A{e(l $ e%i3 *Fc(nHF{q 4>\Z:46|RFa#Ph Q. U.țTwW,YGëT$˿_"564АZn ]ET1b Q8.ߟtv_8qUhhq#9?ZT. FvK骘yf-Ig,f`+qVrK1fjB-4&8Zp 7!˘dqZ"3t;zop|}&%%AFr}z(/Yŵڝ��:Bs����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_gotofirstfile.png����������������������������������0000644�0001750�0000144�00000001334�12451473236�024116� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��~IDATxWMhAf7AQA)'E" TDTD7ICz*T@1B Ճ< _"lvw|ov7]b/7޷}RJfBvÙۘprhnwa7Hz/>w?%/Cȅŧrv~HNEp682g'3{/&P8OCN$%=VC|f_/?@M_wQzU@#JsZ$zA {nƣ;P^D qwk1Ubawb/͠fI`t .Lc0Gà^\:w$0 CP† s*y'NX$Ib'!LByS~&,^|'AJ㜎[`_;ts ppmuP Aր3JA#.B3E=Y~ X뜆`V@Q "@,uoBG/XC;_&+^3`=l,:9]v֠a>%R6ःD&z?RNC��tC����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_focustreeview.png����������������������������������0000644�0001750�0000144�00000010236�13377641504�024134� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_focusswap.png��������������������������������������0000644�0001750�0000144�00000010236�13112333276�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������C��� pHYs�� �� ����tIMEO��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������K����������������������������������������������������������������������������������������������~JP�KL6�������������������������������������������v�P9�������������������������������������������|K��� ��n�������������������������������������J���p�������������������������������������K ��������"��������������������������������������"������������������������������������������ � �������������������������������������������� ����������������������������������������� ��������>�>���������������������������������������������������A�A�������������������������������������������������������������U���������������������������������������������*������,+*���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0���������������������������������������������������#��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Z �X �_���������Y �e����������������������������������������TM���\�}���� �!!�Q �������������������������������������6U��0(�96��9�@#l�Q�;9� �fI_�L����������������������������������������������������^9�j!� .�$� �������������tPo�M�s������������������������������������������������������������������� �B�~4�P6D�*9����������� ����������������������������������������������������������������������������������333���z�Ȫ��� ����6 ���y�zm�E�������������������������������������������������������������������������������������333�������;�j<�W�G,~�n_�E�333���������������������������������������������������������������������������������������"""����������333��t_�E�333������������������������������������������������������������������������������������������������������������}@��333����������������������������������������������������������������������������������������������������������������///����������������������������������������������������� +������������������������������������������ �~������������������������������������������� �����-�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ny(94@?����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_focuscmdline.png�����������������������������������0000644�0001750�0000144�00000001521�12451473236�023707� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_flatview.png���������������������������������������0000644�0001750�0000144�00000003350�12451473236�023057� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_filespliter.png������������������������������������0000644�0001750�0000144�00000002543�12110457565�023562� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_fileproperties.png���������������������������������0000644�0001750�0000144�00000002447�12110457565�024277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼWkLWfg]6i+ ,)/ITLLiI jX[+%CkӤ*h`],VY-[PT`wYwwz0Y`م$'wι~sE -mmMz!"a4jqq1uV�q2::*ZVW z j84:sY fsii },5^#BF%U&WNCZ�|v&eRI:h4"7+|R V} 6z9]y͍!^MP+fl`ijw9twc<IApa�#19122$ $ޙͅ-P�N9$U/ zS>vU @FPSBf`1fԀ|H# B;~E_]/Ky8`A9a4srb;w=ץۑ0mk0ky:;j>A 4{/G;ovEPa'?e%-n'QA$ě04<0_)%%yCgA,X2#P\\ٸN>܀_%/t'zzYϤp҉En�/o  7obGqO6 U/АiHMI#q;$ XؐqtTTv Kx  b.]+[}}HJLy5ԟh@lZn%Z|q6Y WC̔Up\a/)y+*q @ATl±: -=5Gkuɖ q(ɈZ5YLj.+ŦTDo9,M͘vySMה[ׁ?HC�(g  2:1؝vKAr:ټӮiDE&Y10,�(N'*3Sا[7:;;FW(moɇ}b)o �EEy>b.vw}~hͮ={-))>WۉioNrbYwe+1cp~.J62{H[^~w]_`�8O�SX����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_filelinker.png�������������������������������������0000644�0001750�0000144�00000002553�12110457565�023365� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_fileassoc.png��������������������������������������0000644�0001750�0000144�00000004123�12110457565�023204� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_extractfiles.png�����������������������������������0000644�0001750�0000144�00000004270�12110457565�023734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME:H��EIDATXŗiU]t;v@ JAJ"ւP $؂e (4KCJJ@Н,Ysw9s K<9ys<y|blŮ]Yyפ] klwM]_(]nׄnpD<pD7m85k^\ |1 %([΍v6,�8k<{C1/WvkY�ի_qb;!4RPJ/MH^ ֹq~.rv~w㳿}8�K ,)0g!L ؓ*yqon[\΀\wSOmnk^pacsQ| { K:Y$`V)ތg?u<kc5;dFvR(q}+.壓H9X3W )%a!jJҵ-Gjan\`C2%)"Mnu}˿X-p-ފ `7!0cb^v�)\*Ì%JPGDfq7\S/dMMonn{ّ㢕dNٴc`Ht"!f8f 4ni vIu&'T>A}~cr3ZjvܵBig53ԽoSHO◯8 <*#{n]H}yT^E~gރ;yw~֓*$=D- y~ eRr}dRG4LlΥҵijӲJ0}q-tFs(n&PQO-7~c 7 nXrizʢQF#P >DB0Đh fo% Mx__+ t^gk{vᶇ U1zd(DnTE+;v|p<2b%?t{H~h[t5e^ N/A[Z֍e#4ecӔ*I[H !la Di|.P53/H`k;=2?цՀc�%-kFe)MYҩK2\.A#} |.m_9EoaN_3tAr8q{ (b@ë_* i1L0 Sbi J*(އmI;7fm2C=>(_= 3ѱk)/ZFewO189hw=<sB&%߻z%YLz(9 OqekZt. 0P"ZEOr)('NÔQO$R}{p .S(ϣ-П;1-J˨?.bp<Bdu\$U'MXW7;(` 5B:%"ZNЂC�3#w3aBl&\"IՓDIphEWThTR*k`@b,'"'('>ꤤ,H8l" ,T0$[C"5I49@否iڒep<9Կj*[b4B|/w̻HPYh=eE婩IILi',B `(ًTߨ^[Y]IÜl<DJ.Zie`e;z;F8YF4]"ŀTw:{eUm X>D)i$za1B \%ѕdx`#Γ>/Ɯ6P�U_hVVUknĴmRS)R׷w)%RJxC+A?Eg;-< c<XN4v+ iaSmap(a9.ݝq):'}&1SxSL'*e\xssZ^XD,v:!z>%wj§r1@RTxI ÷ t8OtS.|10����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/32x32/actions/cm_exitfromtray.png�����������������������������������0000644�0001750�0000144�00000002546�12110457565�024000� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_exit.png�������������������������������������������0000644�0001750�0000144�00000002546�12110457565�022214� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_executescript.png����������������������������������0000644�0001750�0000144�00000010236�13016461404�024116� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_exchange.png���������������������������������������0000644�0001750�0000144�00000002446�12110457565�023024� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_editpath.png���������������������������������������0000644�0001750�0000144�00000002304�12451473236�023036� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_editnew.png����������������������������������������0000644�0001750�0000144�00000003460�12451473236�022677� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_editcomment.png������������������������������������0000644�0001750�0000144�00000002241�12110457565�023543� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_edit.png�������������������������������������������0000644�0001750�0000144�00000002763�12451473236�022172� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_doanycmcommand.png���������������������������������0000644�0001750�0000144�00000010265�12467744673�024247� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_dirhotlist.png�������������������������������������0000644�0001750�0000144�00000002771�12110457565�023430� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_dirhistory.png�������������������������������������0000644�0001750�0000144�00000003324�12451473236�023437� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_deletesearches.png���������������������������������0000644�0001750�0000144�00000010214�13017704640�024206� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_delete.png�����������������������������������������0000644�0001750�0000144�00000002467�12451473236�022510� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_debugshowcommandparameters.png���������������������0000644�0001750�0000144�00000003747�12451473236�026662� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_cuttoclipboard.png���������������������������������0000644�0001750�0000144�00000003725�12451473236�024262� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_countdircontent.png��������������������������������0000644�0001750�0000144�00000002555�12110457565�024465� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copytoclipboard.png��������������������������������0000644�0001750�0000144�00000003350�12451473236�024433� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copysamepanel.png����������������������������������0000644�0001750�0000144�00000010236�12451473236�024077� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copypathoffilestoclip.png��������������������������0000644�0001750�0000144�00000010214�12451473236�025645� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copypathnosepoffilestoclip.png���������������������0000644�0001750�0000144�00000010214�12451473236�026712� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copynoask.png��������������������������������������0000644�0001750�0000144�00000002771�12451473236�023252� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copynamestoclip.png��������������������������������0000644�0001750�0000144�00000010214�12451473236�024444� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copyfullnamestoclip.png����������������������������0000644�0001750�0000144�00000010214�12451473236�025327� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copyfiledetailstoclip.png��������������������������0000644�0001750�0000144�00000003653�12451473236�025637� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copyalltabstoopposite.png��������������������������0000644�0001750�0000144�00000010236�12656270711�025702� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_copy.png�������������������������������������������0000644�0001750�0000144�00000001323�12451473236�022206� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_contextmenu.png������������������������������������0000644�0001750�0000144�00000002562�12451473236�023613� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configtreeviewmenuscolors.png����������������������0000644�0001750�0000144�00000010214�12705015424�026536� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configtreeviewmenus.png����������������������������0000644�0001750�0000144�00000010214�12705015424�025314� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configtooltips.png���������������������������������0000644�0001750�0000144�00000010236�13340371272�024275� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configtoolbars.png���������������������������������0000644�0001750�0000144�00000004257�12451473236�024260� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configsearches.png���������������������������������0000644�0001750�0000144�00000010236�13017704640�024215� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configsavesettings.png�����������������������������0000644�0001750�0000144�00000010236�13005157257�025142� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configsavepos.png����������������������������������0000644�0001750�0000144�00000010236�13424361073�024101� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configplugins.png����������������������������������0000644�0001750�0000144�00000010236�13367401147�024105� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_confighotkeys.png����������������������������������0000644�0001750�0000144�00000010236�13017451256�024110� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configfoldertabs.png�������������������������������0000644�0001750�0000144�00000010236�12656270711�024552� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configfavoritetabs.png�����������������������������0000644�0001750�0000144�00000010214�12653160641�025107� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configdirhotlist.png�������������������������������0000644�0001750�0000144�00000010214�12405254001�024570� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_configarchivers.png��������������������������������0000644�0001750�0000144�00000010214�13310340103�024364� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_comparedirectories.png�����������������������������0000644�0001750�0000144�00000010214�12467744673�025133� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_comparecontents.png��������������������������������0000644�0001750�0000144�00000002104�12110457565�024435� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_columnsview.png������������������������������������0000644�0001750�0000144�00000002013�12451473236�023604� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_cmdlineprev.png������������������������������������0000644�0001750�0000144�00000003064�12451473236�023550� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_cmdlinenext.png������������������������������������0000644�0001750�0000144�00000003111�12451473236�023543� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_closetab.png���������������������������������������0000644�0001750�0000144�00000002212�12110457565�023025� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_closeduplicatetabs.png�����������������������������0000644�0001750�0000144�00000010236�12646743024�025112� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_closealltabs.png�����������������������������������0000644�0001750�0000144�00000002310�12110457565�023700� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_clearlogwindow.png���������������������������������0000644�0001750�0000144�00000004250�12451473236�024256� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_clearlogfile.png�����������������������������������0000644�0001750�0000144�00000004012�12451473236�023662� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_checksumverify.png���������������������������������0000644�0001750�0000144�00000003661�12110457565�024271� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_checksumcalc.png�����������������������������������0000644�0001750�0000144�00000002450�12110457565�023662� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_changedirtoroot.png��������������������������������0000644�0001750�0000144�00000002505�12451473236�024432� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_changedirtoparent.png������������������������������0000644�0001750�0000144�00000002431�12451473236�024736� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_changedirtohome.png��������������������������������0000644�0001750�0000144�00000003471�12451473236�024402� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_changedir.png��������������������������������������0000644�0001750�0000144�00000002617�12617337032�023164� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_calculatespace.png���������������������������������0000644�0001750�0000144�00000003622�12110457565�024210� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_briefview.png��������������������������������������0000644�0001750�0000144�00000001500�12451473236�023213� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_benchmark.png��������������������������������������0000644�0001750�0000144�00000010236�13302140730�023153� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_addpathtocmdline.png�������������������������������0000644�0001750�0000144�00000010236�13016313447�024536� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_addpathandfilenametocmdline.png��������������������0000644�0001750�0000144�00000010236�13016313447�026722� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_addnewsearch.png�����������������������������������0000644�0001750�0000144�00000010214�13017704640�023656� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_addfilenametocmdline.png���������������������������0000644�0001750�0000144�00000010236�13016313447�025362� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_activatetabbyindex.png�����������������������������0000644�0001750�0000144�00000010236�13367456510�025114� 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-0.9.8/pixmaps/dctheme/32x32/actions/cm_about.png������������������������������������������0000644�0001750�0000144�00000004100�12110457565�022341� 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-0.9.8/pixmaps/dctheme/32x32/actions/application-exit.png����������������������������������0000644�0001750�0000144�00000003275�13110303146�024020� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��: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-0.9.8/pixmaps/dctheme/24x24/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016402� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017651� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/link.png�����������������������������������������������0000644�0001750�0000144�00000001757�13061031411�021315� 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���tIME (�ݺ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���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/link-broken.png����������������������������������������0000644�0001750�0000144�00000002016�13061031411�022560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���# 8 !)'8 1G/Z.7  53 (\1@ ++JA hA.��  I++���� �� <(�������9������  �������  ��~��H"J$[$^,[)SN]3V#TSWKAKX"X%X'Y'^$EI`/a(J$22R-OCh<I'+���2���ptRNS�-:P8@hH($9ϏPT?y-2ٜ2Xdե`~ Wc 7P`>`]%! zw  'S`)\.q+���bKGD�H���tIME (�ݺx���IDAT(c`3`d!ʆ]!/ (TX$,"*&.Q,-)-+WPTRVKUTVUի3jhj!Lihljnim7042Kwtvu#aoie<Ɩ }'ܼ}|ŃCB#%"cb0$SR30LQ"##0$h �Hy04Ș|���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/folder.png���������������������������������������������0000644�0001750�0000144�00000001627�13061031411�021627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��aIDATH啱AEO= F *"榆*¢k&b"b fnh ( ˾{ gS 6h{[3<活t`yffiXV0 j R:G`w_"X||;8z"Ѝ =6𳇃P&�9L<5r^AHO6|}q'/l%XJHa' A+}ʄvJoݏ΁et9ZK"ڐJpٱ`v>�dQ�%l׻{\6mHA3T[kPu g hD21ڃU9VӒ-8Ѱ/qxnLf5�g7Mg֘@oVĄ{sND޹<$]Eu,H-8ruϫL8L(]#zz͂n١(]5j i }�H3Ӽ`Ω@ddN}˰Ɓx֡35L]mcf"zȓr" 8k(fL K([`"ϟ;ýʡ%r'G#- 1���tEXtComment�Created with GIMPW���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`���������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/folder-link.png����������������������������������������0000644�0001750�0000144�00000002407�13061031411�022557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHOUu?;G߼ɿC340i!h1@pca`H)HEDtPprDH,Ņ(4wwGg)bU.^9bGI3AC7üٓ=֘$!$wsV7`h $ͼSLo` wv>1! @O[rʑ^x`f[]p-g,}7R�wVnk:G/}-[yMf*nFotR��s?]ϳAq+  7l%�`E;Ow܍ I=ĸ"�ݣYb:E?!g99osrnf(-Х v'5sd*e4HgI:ֶӛDJNP%h?o]?6qs܍$+0FVըߪ2:vS815 'u8_~J5et|Em*mU:*TVږѾ)[Xc UHa+3M_g$Ѿkٴv}T1{)rczgt峧d_vf%(TfS @ 0uL 3\3�L&GFYvG7G-,6SDANG$D!:^\ VrJ wCu7TG4RsY!⠱ Wۘxff8s:}œdzf<˱b N-\Ȋֻ~C}IN<Lț1=�z\q3LW-ĚN?vnsPHi-TjB u $~xBf:H�o)UZ.x򷖵b*j1w_>���tEXtComment�Created with GIMPW���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/places/folder-link-broken.png���������������������������������0000644�0001750�0000144�00000002356�13061031411�024040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME (�ݺx��IDATHMUy?fޯQgBIHc$k1FhQAAPHBhcBV\XMPj0)kL;=紸o9 -ftsys΅:roldN�ɛ/~ZEq bC _QS;ߍSO$tpytI[>Ρ[w܁m|KS1L</ ͻ{;šb3ný;006b* `ju%v>wPh5L,kmު�\it4AUAgJwW;S&LNQ>q5?04$�0S8ǩ>^3baqAsi]Dtʫiʁn[d1 $)~}c,-mi$&BV-Qo1?tIڕ԰) SUC|xE1r/Rթ\/Oz`ɿYڎN Rw% sxY-Y|CIPG֠#gйn%@m&kLjPR4Iq.MP/eHg[i-dt?GGā,i@m-0ryj]to]OOG95]dp G[VTmL 7 s)&F"Ɇ i}+BMMqOG &Bv3p5 \A4/y|tlXMu 3Ր͢"<VR,^#AɋH\Wax2p*fSHº^B`9j}t48LA$3 aFX|ndo%bџ'YBH604o'r1wR2J|ZCv⪠"1T<5KS߃~ݾeYmC Askjr+Jsz/iY���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020416� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/x-office-spreadsheet.png����������������������������0000644�0001750�0000144�00000001763�13061031411�025127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��VPLTE������������999���!!!���φ������������ݼ���\f���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��@IDAT(ϝYW@pCW[,ҶqDEDvl=30LW Kolh¼A��}m_X\Z^Y][،D)FcP:0x4qrzv~(%^^]䔼,K!MŒ5u a6fGHoe%2eՂ<6"ʣQBU()7A>^?& 9W*ҵOA@jKn#g`p i&0+\38<]Pk_CӺ*2 D~TGig^~�]3F9)U���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/x-office-document.png�������������������������������0000644�0001750�0000144�00000001677�13061031411�024442� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��qPLTE���kli���������������������������������������������ߨrĚ魯Ûِꣿϒ뉘mzn{n{n|o|myithsﮯ説󬮫���-���tRNS�b*6ACFE@7& XG���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��IDAT(c` 0&(KKHJIK+!I(J+ ( IHHKɩkhji I1 Ij隙[Y Iȉ*[Z;:"I(:9z Ihyzy!K#\$jg$#$"ԑl,hb_PST*Y4IGD1G- <Y98yxX�?Ak |���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/video-x-generic.png���������������������������������0000644�0001750�0000144�00000002264�13061031411�024104� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<�� PLTE������������999���!!!���҆������������񺻻tsu힞ggqۃFFJ׺yx}|NQY^`g..500733:`afdekffkootlmqhioooukkpffjppsȿɽɺɸƳű¢UVZeej}~iirRR\sr{BBJhgnA@GSRWrqvddmLKTBAGUTYvv|qrz[ZeEDOZYcQPYWV]@?F##))(/--40/70/8.-6**1$$*OOR֡||~qqteehonrvvyzz}���^5c���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��MIDAT(c` 02f$HIIKK˰B%dUT5445:Jzp #Ee5CcS3s KK)\BTYSEKCR!ᢢ*5аȨ8F|BbRrJjZzFLB+;'7/4+ !!YfT^QYU]S[^/#$mie$ ʶ0q)S9F.ӦϘ9ksrq3 $,\xɒ˖ˬeKXKJddO]..[ɏg`deɒDGZ!aR��F!OX3Fʔ���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000002104�13061031411�022607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���������������������KKK���jjjiii���&&&���444;;;***������daˁB%nRȺ_gdhFgCi$njTZ"l)p„ۙ[QieiP|���8$���tRNS�-=.d nvypj9k8���bKGD�H��� pHYs��a��a0U���tIME (�ݺx��IIDAT(c` � +Xp%eUT5444Zr:zFZ Ym%S3s K+k[;\F? 0(8$$.m 7pԌOH MKxēCRRBCcc. qXxB>(YHxnH4 Y",9hi~P0Uv YYqE<08OҲr^>~Ȥ؊*/ZA!ؤ&a8\")+ԶET &KKQVR !ʂH2 ��ZO���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/text-x-po.png���������������������������������������0000644�0001750�0000144�00000002517�13061031411�022765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs��v��v}Ղ���tIME (�ݺx��IDATHǵoUE?3s-h* ?h!u뺊+W&I  ᑶIr[{^3?M|?93Ky}juGV(Xo76urv�)hiP,ـs!RӤEff&fZcEsBrmJ1�cֶ,7"j3(;xZ` B/PhJNPbf)*]n&,exq(#4ߧ횃"2󌝿Jg%Ϯ""ԒYK+m4ob0bZ1_al@knqŕ:zسgE PT%B>鶴^7 ,cqi{shc@7@7);JD x,Qh+zKi)cȓ%MDE V]ylbhE)JkkuъM<,}ռB_YO1iP aq~"֏mV4pFG_W'~[wkL,e$)w΁2ęt ?ZVgxρzPE@Ȭlo (/7yEܹ7\n.\=O=`~8S[maح�N@y!qYBrdG/ };\ p8Q-+2S9P@.hE=~C9^.|9z|},^wQ,U(˄A[whZGXJH3E49ܸtO~W^ 2]ʩ>-łaW!٘‰A{gSotoONNSrbb4Pg:1??/UqvJ$$IdttTժ$I">*Oh6E$I"IHeXk9'9XdiiI&&Ƴ/<0�'{w[?K?ql���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/text-x-pascal.png�����������������������������������0000644�0001750�0000144�00000002243�13061031411�023606� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���������������***999DDD883$$$���ʿl-ef,`p=llc&\x`&Zg]&WX%SV&QXƵij\'V黤ZbƱ[(Vƽݐ_Ȑe͹˜l\(W۞u{kl������tRNS�98"5=G;1sO���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��cIDAT(c` 02F 3TIVN^AQQIIYEUM]]] &o`h$""b 0QT253K((Y;X9ډ89%D]\] <<ʖZ^>~.j2p аpH=[)(dtLl\|}KT BB:9%5-=%/I** .ᔝ_PXT\RZV$a\QYU]STWԜhimk&Ot:mfaaIH;͝g!l;?++LI$<=[88N22QYQ\ QYYb xx9300 (%Ǐ#�_SY~���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/text-x-log.png��������������������������������������0000644�0001750�0000144�00000002137�13061031411�023126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE������������999���!!!���҆������������Ӷ���f���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��LIDAT(c` 02f$HIIKK˰B%dUT5445:Jzp #]EecS3s K+#kk)\BT? 0(8D!imc$.))-PȨXDxAJraL*B,-=#3+;'7/? !!Yh$*.)-""*#$Qd /1KHi؈[[VTVUs@%kj[rZ8a+m*ini%S�PdJ؀$*mXɏg`]Z*) $B ��D����%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/text-x-generic.png����������������������������������0000644�0001750�0000144�00000002137�13061031411�023761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE������������999���!!!���҆������������Ӷ���f���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��LIDAT(c` 02f$HIIKK˰B%dUT5445:Jzp #]EecS3s K+#kk)\BT? 0(8D!imc$.))-PȨXDxAJraL*B,-=#3+;'7/? !!Yh$*.)-""*#$Qd /1KHi؈[[VTVUs@%kj[rZ8a+m*ini%S�PdJ؀$*mXɏg`]Z*) $B ��D����%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/text-html.png���������������������������������������0000644�0001750�0000144�00000002360�13061031411�023042� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��CPLTE������������999���!!!���҆������������k0{?UטQ0~jEwlkY.zJfӲbxv0}6x_΂s_kU�W@~iӖdiyyd:zbРs<x~f#lQlկstZyꀳ{Xcdltd#m"lbn>`i耴Z*ulm-wFښdbߒtsfu��� ���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��PIDAT(c` 02f$HIIKK˰B%dUT5445:Jzp CEe#cS3s CCKK)\BT_R!�ظĤԴ xfVvNn^~AaQqILB !!i/$1aSN>cنp sΛ`K.[*!mr5k׭߰qfN.n䖭۶عkw^LȄ{9 L2@Q2IA$q&/u��_&Z ���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000001166�13063505653�024411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD������ pHYs����S���tIME :gb��IDATHՕP85" J$hh�Z R< oDC44!`؞CuHv؂9so_=Po@%]A9œQѰ̃#�Luvgt2} ܛ3xQ\܍T7�x @hy|].y|VqqP-eș/5ɋ(u�ؕα^f No^% :�; Z)g2 SdX+"F�Ƞ̐{+0<Wusňtk+{1+:::SPR�R(0G�ԟ ,30"k;S�7 kHg/`r740"?y.4qT6[*M9`Јh#Ј@r#g?\OK H+@_|'N \T_����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/image-x-generic.png���������������������������������0000644�0001750�0000144�00000002526�13061031411�024061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���꟡������WYW���������������������������������������������������������������������������zFWsGWsEVsEVrDTqCTpCSpBRo@Rn@Qn?Pm>Pl=Olfs?Qoachq_~[{WxTuPrLoHkDh@e<b8^9Mlsˤmiea^}ZzVwRtOqKn>Qoѯ뾁xurolheb_~CTrĶŲܱ}nycjtnjHWsʝdz·ѱØɖȕǓƑt}kuQQQn}JZuIYsѨҧѦѥФϢΌRSSupyO^wETn_afWXZpvUVWKYp7Gb=Nm=Om;Lk/Bb#6Y 4W'8T1<O1;N6?N3=M"4V3B]ATt@St=Pq8Ln4Hj3Gj2Eg*:W%4M*;X%4N0Cd8Gb6FbFY}BTv:Jhktr|9IeYkHZpx@PjAPk讯���uaá���$tRNS�n,  #'*-041&"   <���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��tIDAT(c`"`T*̪P* M-mm]=}C#cS3s KD? 0(8$$4,<"2*:*1JS'7/Z*QS[W1JoI'O:mz猙 �y,Xh˖X Xz͚k׭߰a[n۰}XBm]<tQuHSϜH;.\x XUo$njjj޺eeum Ĉ .nPD  KHJIȲMVNOFF^F^ؠƦ l@�'�)]K24���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/audio-x-generic.png���������������������������������0000644�0001750�0000144�00000002054�13061031411�024074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���������������***999DDD883$$$���} ѳ44$""֩+ ZZ2&Ԣ1'ӱ&߹ywU:z &q'`1zUB:w6[%}NwR= ƭښ���j���tRNS�98"5=G;1sO���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��LIDAT(ϝO@p(-SP8'}N{oӭ 5ߏ/\3vسਭc9'/�@eSr{> REfrJXe9X=Q3nim3ĘN Ț-p]=n%`p$ulN(mdTX MD4gLN,A "\\B+R uMd&"d;Cv0򠋚pxtL)֮tÓӳ Ne. sux}s{wO(%EŹ>C3 EiJJJm_�aBJm?�VQZF?VUy B(���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-x-shellscript.png�����������������������0000644�0001750�0000144�00000002451�13061031411�026217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��CPLTE���������xxx{{{555CCCLLLPPPIIInnnLLL̾AAAGGFEFDDDCBCBAA@@@?=>=;;;888777555HIGbd`^_]Z\YVWURSRNOMKKJDDD>>>:::///YZXRRQIJH?@?110...'''GHFefd<=<897443;<:YZWQRQ676222554~}jkiBCA>?=LMLjjiggeeed453JKHEGDAB@QQPyyyvvvuuu342HJGDEC?@>()(886---***&&&$$$ƴ���Y!���*tRNS�\\~0I]dMf:*S���bKGD�H��� pHYs��a��a0U���tIME (�ݺx��sIDAT(c`�#TZ:zF&f@ 5I\B(lbfieml]\]=<^>~A!p ȨظĤdaJjZzFfVvNn^|~A!\(<.aR[WߐԜhKXwtvuW$ zֽ}&N<e*Pjt͌f7Ι;o>H�!`K&UV--I,[bFU׀ubа^a&^l]%.ضwl۾s={%a kZz$aE P$Ѳ~L,Y/gPTRVQQQUUSQdD$��>`u���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-x-rpm.png�������������������������������0000644�0001750�0000144�00000002370�13061031411�024461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs��a��a0U���tIME (�ݺx��IDATHoUEs=rK 5 ;ٹq qAѕLH #  H >UG{[h{{_[h$a/39s~3ߗ?%̝&~CkQֹ؊$+͖Leid(MM{Ow%8{pVMZKYZJke1X[Ra4%R4%R'va9+\>qCj#sf,L0A@، H7T+ĊlݲqIv`iuCC`Eau=i͑cČ �eIQZ`j\(TjST!*<ӡ; @ |DBl i ȃ[m4)ꑲI;'P8 ε�1DaaH* &[UC -;DKDKp<AFyTUAU4Jx/XqE5ۡ$F|@dP&: HQ׺/Wiu 0kU._hQʵ WR'd6hmU3`Si}|l\fv/s8*.q19k914[..7?diDݥ>3gǓ123R˩ 'ȯ'ٱm=8^i5۝m;g-شa-<v>Eza;'ύ}#DaHQ:Ve/^oqHDxo!MBD<t;],DEQ%ڷ{ϾHx@Z5% Id!*Q0&LNS7s,[[-6zV.K"f~nMQLf1`#A�](oO]kjz8C7KKn+2 %P#?G@PH<G���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000002474�13061031411�026011� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��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���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��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���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-x-deb.png�������������������������������0000644�0001750�0000144�00000002353�13061031411�024416� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs��a��a0U���tIME (�ݺx��IDATHMU[]3 wBq ui .nt!. BLLdaB@ݐ57BaffzzHƅ'9usoUOܓ_<jomY_$V4'Q/7Lgid(MNy/f py5фTb c汶diJdiJT_{{jp±Ok^ XpôadUGY% 1IZxnG ';o׳;wJh lZs ,~04&x� Ðm[G:?56~9*keIXdC._+oFhziK`#%Ob"!64qiiSz  :K yGW�s=�c QB� !Cdr)V}Y9OfQuAUPU#cT<y(TĈ�hɺ^s)@2lj\x.†VN=jzwg9pI$1g{r>k5kkdqg~k*#k[h6jlݸW_wS,+t4[t}K7ؽs"-JtJڝEN+Iq˼i&[ :E,P~zbq04llr ݽ,lܟ/5001-tBe21}}|wfZ/439K<aLNԇ'#id!"""(wg͡\{xaz7h&?h(٨LSLfh`0& b<boK+?qꯙC]r"&N $<YT@EjCeXc ���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-x-cd-image.png��������������������������0000644�0001750�0000144�00000002633�13061031411�025333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���������xxx{{{555CCCLLLPPPIIInnnLLLûǴɻʻöտܽնƲҲ˽ƻ׽ɽѸˣǼǻ���R���*tRNS�\\~0I]dMf:*S���bKGD�H��� pHYs��a��a0U���tIME (�ݺx��IDAT(c`�#TZ:zF&f@ 5I\B(lbfieml- ]\݅^>~Ap xHhXxDdTtLl\|L.!1)9%5-=#3+;'.a_PXT\RZU^QY0ojljnimkKXvvuM6ir \zTigh1s9s%lEE/X8cƢK.[Xr5-k׭߰q-0 Tm߱m={p>6'N@H>sI.^|媤#L"(>777oݾ(-@ADUUG̼ƻd` `DBAQIYEEEUUME]C!�jzr���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/mimetypes/application-pdf.png���������������������������������0000644�0001750�0000144�00000002064�13061031411�024167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE������������999���!!!���҆������������ܷիܪ޼ρݙڛssᙙ⛛33qq,,~~눈퀀00uu22]]LL99eeNN뼼퉉QQCC봴UU;;뫫JJWWcc鏏���&"���tRNS�#S&l\MwX���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��BIDAT(ϝWW0(  T*Qʼn{=p'x{*-gZ�Ac 8\rCۣx}~U pBrSsKk5΁p{h$qpr!jN�9R]iA:84<ctGcS0 38>;7dB܈ XFDZY][�5bps+fB�aP�ON/ ƒE˫ 흵D0!q(1?2/oF__ÚZav"aQf*g?mu~Gj?>L���%tEXtdate:create�2012-12-16T09:30:48+03:00*���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020026� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/emblems/emblem-unreadable.png���������������������������������0000644�0001750�0000144�00000002747�13061031411�024076� 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-0.9.8/pixmaps/dctheme/24x24/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000002206�13061031411�024536� 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-0.9.8/pixmaps/dctheme/24x24/dirhotlist/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020567� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/dirhotlist/submenuwithmissing.png�����������������������������0000644�0001750�0000144�00000003042�13061031411�025227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵYlTUiJK-`1c1|pAP| @0%DQB)BYN鴳:3wfz|(--{wϹC�I>h96Ys|cp9mq弧wNǶdUk_u*Rzbvn?{�ZNPA@sR˵cD-{�6p4_\@QÜ+rۓ�BQ{�D/@(bT~hP5 ˖vh"F- q!E%3h4RU#�|.g^˶ ~|jQ l\EIH,.64zґ80 PU)L<9f0_\p�AN#!=7.bwA:T$5+B<XpM!KG/�$ 3@-W[;l;vGpZV4tTG@ q$]}Qp WSPy m 3]@H[.rpq,Aˎ2^Jd/y ^ Ebgu$HKa0n8�ʰ̎S8T|9k,Y$W? ^�Jci-7~͆�J/J3Ox. }io^l-9%Ӆ((EP|%d|%�*e2+Ds?q.=¬77"jgRKZׄ~An*C*pFJW5pus}V֎'Cɘii0=U v. YvD`pL ^kmD#ZZV`.yEooez @Юd~yc*&i>ּk^Lʚ&h}UsWкy%8a&sIƼtON|EAYԳR[ƈןpɋW-vaغM>|Juw<.Dz1}Eqn1~k�'F2=g0 Mƚɞ=/~?-_(`΄riMh?CX˂PCdCt8Y1pƔG{3zGDI)U C٫Ѥ�c/Ko�8agab!���%tEXtdate:create�2014-09-13T10:26:26+03:00ț���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/dirhotlist/submenufavtabs.png���������������������������������0000644�0001750�0000144�00000001635�13061031411�024316� 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-0.9.8/pixmaps/dctheme/24x24/dirhotlist/submenu.png����������������������������������������0000644�0001750�0000144�00000002576�13061031411�022754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��$IDATHǵKhUsK&NZ{X * qSKq%RRtJi%F 4mR$Mtd.s\L.3IZk>s{}sGƤDAL봲K^=zJ�,zrpþǏ&7&…YeQwpNny1(͸>ttRJvoHvO3 t:PbkjCGdv<'?>[5G%tXcHYJݢ?ݳM �0!B*`+BM5B 02EX H R!0XB *2| cZ@�1KwXA iYZ@)7M)W"l@k{O)M^ ϟ:�JQ+s*Z߁-/48 4ҽq/^-XDhCq2ލ!rTX[I`*s—}s�BSRtKCmxNچؑ;ģ4Vٱg*%#4WNv!(bgP22AkA1{mfⵓ Q$ZU]@{,[oK@11A0dώ z!0~]@#PҴ"8AX m;HX1TF'rǿ >] fBE`$FGDگvDt<MO2ʙi )bݫ@i麄^x֎LݏCWFQ)zާy3aZp`i/Cނx$EݻD h vG'^6]q2jOޝIvm^!<WATCcv'/ش�P̉o [> AJ+#s} |4 $qs[p[~$<bmnu@%r}Sq$:Aq}hxj<)O`rXOܘr}h>wZw㦵 1RPVr^kv|E(0Y���%tEXtdate:create�2014-09-13T10:26:26+03:00ț���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�DirHotList_���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/dirhotlist/newadditionfavtabs.png�����������������������������0000644�0001750�0000144�00000002000�13061031411�025130� 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-0.9.8/pixmaps/dctheme/24x24/dirhotlist/newaddition.png������������������������������������0000644�0001750�0000144�00000002340�13061031411�023570� 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-0.9.8/pixmaps/dctheme/24x24/dirhotlist/dirmissing.png�������������������������������������0000644�0001750�0000144�00000002747�13061031411�023446� 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-0.9.8/pixmaps/dctheme/24x24/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020024� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000003002�13061031411�023315� 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-0.9.8/pixmaps/dctheme/24x24/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000003035�13061031411�023232� 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-0.9.8/pixmaps/dctheme/24x24/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000002520�13061031411�023106� 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-0.9.8/pixmaps/dctheme/24x24/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000002412�13061031411�022672� 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-0.9.8/pixmaps/dctheme/24x24/devices/drive-virtual.png�������������������������������������0000644�0001750�0000144�00000002533�13061031411�023321� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��CPLTE���صٟӫxxxppprrrVVVwwwvvv~~~pppxxxrrryyyzzzWWWooo���UUUsssYYYUUUmmmkkkfffMMMVVV]]]mmmggg^^^ZZZ000/////////024qqqzzzА|||...///---333lllkkkjjjiiigggdddOOO迿ٰͤʵɑ~~~۪|||YYYù{{{㭭䤥᧧��� i���]tRNS�4w|A =X3aBo.@kCz=w=ib$; Go}L_hs0q䵱t%@EP'qq���bKGD�H��� pHYs��a��a0U���tIME (�ݺx��rIDAT(c` 021srrq'&&%!SRӒ329yEY)I%"PqʴԼڴqd}CCcSNA~smKk[{TBzz[e}&VO,P6oTBӦhN9kby3:/XX:gb%ʒw_rڪרB%ԖMzmʮu3oUyPcJE݋-c&M-N連[znݶj" R:/ر5-,ZY`L;,N]P]=<w)V.m_elْVZ�   8�ӆt���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000001504�13061031411�024661� 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-0.9.8/pixmaps/dctheme/24x24/devices/drive-removable-media-usb.png�������������������������0000755�0001750�0000144�00000002434�13061031411�025456� 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-0.9.8/pixmaps/dctheme/24x24/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000002253�13061031411�023265� 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-0.9.8/pixmaps/dctheme/24x24/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000001317�13061031411�023423� 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-0.9.8/pixmaps/dctheme/24x24/apps/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017345� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/apps/utilities-terminal.png�����������������������������������0000644�0001750�0000144�00000002231�13061031411�023664� 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-0.9.8/pixmaps/dctheme/24x24/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020042� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000000617�13061031411�024603� 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-0.9.8/pixmaps/dctheme/24x24/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000000615�13061031411�024431� 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-0.9.8/pixmaps/dctheme/24x24/actions/view-refresh.png��������������������������������������0000644�0001750�0000144�00000002767�13061031411�023161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME (�ݺx��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\���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/system-search.png�������������������������������������0000644�0001750�0000144�00000003146�13061031411�023332� 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-0.9.8/pixmaps/dctheme/24x24/actions/list-remove.png���������������������������������������0000644�0001750�0000144�00000000634�13061031411�023010� 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-0.9.8/pixmaps/dctheme/24x24/actions/list-add.png������������������������������������������0000644�0001750�0000144�00000001020�13061031411�022231� 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-0.9.8/pixmaps/dctheme/24x24/actions/help-about.png����������������������������������������0000644�0001750�0000144�00000003036�13110277137�022615� 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-0.9.8/pixmaps/dctheme/24x24/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000002237�13061031411�021572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<�� 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߄㩯څۃރ݃���rK���FtRNS�ySk4D' sxLN   "# f���bKGD�H���tIME (�ݺx��IDAT(c`/`db*ƎM͝S˛]\@? PHU\DT,(8$4,\\BYYJ:"2*:&6.^FVIB^!!1)9%5-=#SQ !_PXT\RW(+ohlԂJh777봴wtvu9zH4O8ir3?L6}YL9w(ͳ.ZdF0ac#+W^`f3S#c}e3XZe,:́:lllmNH98[;g�рSr���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/go-previous.png���������������������������������������0000644�0001750�0000144�00000002445�13061031411�023023� 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���tIME (�ݺx��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^���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/go-next.png�������������������������������������������0000644�0001750�0000144�00000002277�13061031411�022130� 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���tIME (�ݺx��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|���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/go-jump.png�������������������������������������������0000644�0001750�0000144�00000002415�13110302615�022121� 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-0.9.8/pixmaps/dctheme/24x24/actions/edit-undo.png�����������������������������������������0000644�0001750�0000144�00000002331�13110270720�022431� 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���tIME8 ��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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-07-26T14:56:12+04:00ڝJ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-select-all.png�����������������������������������0000644�0001750�0000144�00000001473�13110270720�023517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���������������������������������ݫ٩תجށ߭������tRNS�$/5.���bKGD�H���tIME9r6��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 @˳(���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-02-21T16:57:07+03:005Hp���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-redo.png�����������������������������������������0000644�0001750�0000144�00000001757�13110270720�022430� 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���tIME}U��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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-07-26T14:21:08+04:00y`����IENDB`�����������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-paste.png����������������������������������������0000644�0001750�0000144�00000002034�13110270720�022600� 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�� �� ����tIME  V-��'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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-10-14T04:32:10+04:00H ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-find.png�����������������������������������������0000644�0001750�0000144�00000002472�13110270720�022412� 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-0.9.8/pixmaps/dctheme/24x24/actions/edit-find-replace.png���������������������������������0000644�0001750�0000144�00000002366�13110270720�024025� 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-0.9.8/pixmaps/dctheme/24x24/actions/edit-delete.png���������������������������������������0000644�0001750�0000144�00000003047�13110270720�022733� 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�� �� ����tIME"2��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@���tEXtComment�id logow���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-06-19T19:34:15+04:00 "����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-cut.png������������������������������������������0000644�0001750�0000144�00000002412�13110270720�022257� 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�� �� ���tIME 3 2+��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]���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-07-12T14:51:12+04:000����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/edit-copy.png�����������������������������������������0000644�0001750�0000144�00000002043�13110270720�022436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��tPLTE���ɗʼn‰ው퉋񽾻Ϻ󉍇���tY���LtRNS�W~~~~~da Ɋ>���bKGD�H��� pHYs�� �� ����tIME � )��?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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-10-27T00:10:15+04:00G=����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/document-save.png�������������������������������������0000644�0001750�0000144�00000002147�13110270720�023320� 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���tIME ; ��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 ���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-11-10T16:59:32+03:00U=����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/document-save-as.png����������������������������������0000644�0001750�0000144�00000002054�13110270720�023716� 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���tIME ; ��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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-11-10T16:59:32+03:00U=����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/document-properties.png�������������������������������0000644�0001750�0000144�00000001450�13110270720�024552� 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-0.9.8/pixmaps/dctheme/24x24/actions/document-open.png�������������������������������������0000644�0001750�0000144�00000002564�13110270720�023326� 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���tIME@e��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���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2008-01-03T20:08:20+03:00u3���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/document-new.png��������������������������������������0000644�0001750�0000144�00000002106�13110270720�023146� 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-0.9.8/pixmaps/dctheme/24x24/actions/cm_visithomepage.png����������������������������������0000644�0001750�0000144�00000002443�13061031411�024065� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���~~vJ nkg�f�egd>SQ> a �*�&�)���������a^kH79t`OQPPߘǠqɢsƯжŠrֱس]4|*Ұֳ^ժw0˯fɩyu꿤xŨzµåvw˴jѸə]ԣeiȼǪɝ_ȇķĨ–TްU´й§GޭOòʶ©<Gљɇ]|zz<BȨx<y<|@IKK~L���>���tRNS�Q\\XjjjjjkVR4=3.}K���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��IDAT(c` Y�3#PMZ H%eP,;PCQIYEԀ�H(+)r�%854@559\:z ``hdlbj0wpt0J8{xzy8C%CB#""cb!q I)iiY q ܼ¢⢒Ҳܜ8nDyEeUuMm]}CC}]mcuUeE9X inHtwwO8qB_o$1iӦM2yD3g͞=kHsΛ`ŋ-\09p%K-_rիVXlϚoذ~#X֮J ~A!(JHHJa�I ܉�BבߍM,���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�VisitHomePagefH���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentpath.png������������������������������0000644�0001750�0000144�00000003337�13061031411�025001� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��IDATHǵmpTƟs{7mòI(/ 10VS mEFg_֗v vC\>�/dڊ bB̚Mn6�@S}{<~Ϲ,>P p7\77fϟVx޾K3^ ��Q98gO>{r6זH˹Ȟ[`k Νojt2dFo+Kj셫U/^ha@yõ/}AhXҲiM@6:H />G~055ݻn}bgL/C(5X$oRG(zdždža@}P!�gs66P~hc,p_p7? <aQHf:.>ryr0v`̶Bb'l`=px*AV Hִ\\�tYzYЏw;J+?塇)>҆"¸4 *)RI�Ꙛ+1꾋e3Kt@ͯabHM0.DZph.709]7�yy"rD+&�/DuL}:ոN&Rq ),@ 6d_(^lj`suS ;я8cl�c0vA)D ai9hp, S8"`=(gH푕(ʀ6 *Muyc&ѽA(HBH N0^ L5HȦƉUԴ>=dzmRUG5A߱3.0r$.vSaeŐLO9G6KG3lh4mď_LڧIXuϝH i Uĥ[/m$[j1P`>yWSDDinlXd:Q@Yϝ 0�f6y?˖ `g cmVwNtʀwh}fVݵп^FQW&zkOo X Yʸ$ԜHEl\P�;q~As lSGsEan0-C{EQlw8ŷtI�#|wF" 9I8UW韇wCcL&i]G9*˲x,(/҆�3OWUE1p 1֦aŐl!%<.F=DBN /lXxJU lNӴm Q� IbE/h[?8*~vǎ\t^թP8 �N���-&KB͛{"u]�7[__u9 ;1v '���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentnameext.png���������������������������0000644�0001750�0000144�00000003116�13061031411�025501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��=IDATHǵTmlSe~{{ṷc0Y3 85$N$?C&A1A  a07FǺcno{{}Q ݗ{9vY /9sYAgBGs}E%ý/͋w쵕8��1 wtO.no m6lljxkG״DN^F_d^[sRa?Ra?lM_J߯ӻ܇- p4=aaSFC 1k#�4.jܲ`#H{ .g6B_& FG 4:`뎽{e1(cY1-�&!wm),/N(:.:�wW&pLfA(f j\SmΔ�G\T_ƺY*ɩ}ZSyApgqUw*96SC7ݭ,{p|o5!�,Zdn}偳;wWg1wd:$âmԮ:>m/0X exϟ]0D$�X$)x+F �,um^R*-ł~)~+EH seJBMnxg]m͍ޜ p;IC*6j#�k�t6P4DvPED2RٶlLk a(w9`( r€kI5Vh@X&x?䃀K@X*A2Y�JĂɔƤoex*! ǂu`9:藎 h4= ԋt"@$ulӦ[싓Q_,&yn;u[-O?؄H@r?w snp{YvibFsXHva�H.Y"Ա< 0$TƴB21_/C <;4DZ6ˆ)Uxő'P`"rx^u֒ӃSJL4E!<4Ns�@�UTbLfwTU% )BbA*p%7th}gfL@NPu�0 �ER "t6+�,ͺ\*#gܽܶq%5~CFHfqZ4}W pPׯ D<ٜ"D<xD6"rÎ$}qO$@i3�@mK'mxr:#}4LI�Ӄ"� F�՚՚K&YVp3"OoSD>a���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentname.png������������������������������0000644�0001750�0000144�00000003225�13061031411�024761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��IDATHǵ{lTY?Ν3;mN2}Pʔ7MCaCTf"Acf5A#1YͮCEXM6"v@)<;3(%SMNr]쮨kY,:LR*v0['~k}˂�'9Rq6A}סk :tCD1AlV~OOl|E_G;((v%uK/nmXf`g*RI!*«7޽{r)Ѻgf;roIY(Ħf~?,`Qy_AzP9+=fVu8w4V<~gq/eg0LLc]'3xR[PK lQes닮Ԛp~x{;߁/a[%T0o\3'q=!,wֶoSJ _?%][f1;UjEb|ws?=u]/ okr*@UXM[v@92<I5,n "4[~Gr[7iJȥ ,QPAwC&ͨUɔ�/luEc6gbQ#}7ND)\wIcvUTv!Թ*"I2t2?." K�L딁u+%Pup@ZL74dcS8+4<_TQԡ6_W~bPL,\iت -Muis#ym _3CT 3 )H$Yc62fL,61?V&]E nΥr(jyrHoKq2B.rA;>m|DZM uΧ[?q',kyLC%JGVk 5jpGF{ l=8 ?us " {R`<_h嘳yL3.{RGu SLPW'PU~6[zcJu_H"\v_L:r%!+Ld %M)f[̂>@|yDu{<R;�L qEQPKMk.ݦ"A՛O:�Ebڴ7%E~-*9lR͑PH'1ط ===v8޽{7ܹ"rU'�Rʾ ȉof_UUռGiZM6óK*FUǒƛ �ԅG 3}}}礔'sܟx-}oo@ 0iZaoG B PbJ���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentextension.png�������������������������0000644�0001750�0000144�00000003304�13061031411�026053� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��IDATHǵS]P~ηǷ ]W Fv(bkTҖIbR!֋Ng^411Ա^T߉&fm#cb&e4DpD ? ^g\s}y1|oܲY+ ?ر};7\}::�ѱJvΩh14ooW~{َ`Х k< xx&׫Vեյ+:CG3cVO̓_aD�׆e[8v�A^Fۍ^/W#tߗ~�CY^,m6nY`}k)V.@}M6؏[`XÍ^�~6J,60=k&4]g�(tz~1} ru IT]N2N7gcu�_sQS}P\A+W BX~ǔpG@w',|ytП}o.>Wů`*0#(�#dP,�BE阙1xI/u$A9GeJ\M?a3V"sVra�SYȲ �((s!0H鿸?@Udk Bsy9 T<C_)To&Nv-p0 sV77�Ed<wOdDOqt�T^WMc0� �Ф<$ MB6V h Ji%"*aF4@&i P@&{JV'޲Pƛ PP{n�iË`p<�(QX*J\2%G2ii* xmXB١ӌx9Oa^Ti.- ًLLARY�4ͮ-qly(FC)%|<|-|Ÿ׹sFllBb naeXp=Ɲ@xqmX* ,oX5ED}NKex�'2_g %lP3yqWk׮ϧ}ŞR<XXoZ r^,"S΂ boKhsE`ӦM-󺊈3K nE[n@ p(q=Kr<<5+35E: tgDq@O@k֬O�Z@�詟UTE:>Փ9)x;^e6T*tb*#�$<eG0GdKէbo+$I]bƳd*�EPZ,nH�HUO6l0mv@7 �jkk@ D7 �4H+#7v{VE9488x1FM^7~;v\ly޽�c{Qwӎ���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_thumbnailsview.png���������������������������������0000644�0001750�0000144�00000002361�13061031411�024261� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHǵnES{<0rDmXo'2o DBJ�H (8Ì=:,zf$M|_?/xKi/٬f-+vaͭ_r0Oz!coT %_/h [76J#< �39E1r30V=b a`b;hǭâ:?7ف"B-[&M@`P%"*Fʚ3� /[W|0*v ?9_)*ށH[wx L3"qYn3u1Bʽ6g(#Qi?{J]�DqQ!EX$8|l쏦FC] �@'ԪObh2 a l2Eq$N?p<Jh`$J�ji pKՇ�rc­{qt1n8]ܡh"s5 Ν19ST  ݳky$ĩDvD{ש-21 3(νN\}lo*wn#4NO%ޡ>J!>iNH}f>UndRԲH[)ws(w7&ҁ[:HP84OHh,tT"2C@xR鋜<AiQ*k FNLID`80tp�U.Xyl00(&}+vFZ_}U i`!o>:  -|'Nɡo}r,B'/A[v"t; 㽺Pm]x囯.^a!�C,O�Q ;_A^Ra?\���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ThumbnailsViewI���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_testarchive.png������������������������������������0000644�0001750�0000144�00000002517�13061031411�023544� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHݕMh\Uf2_/3$i;QJQ1qmVnƅt,Fnb)BQPAMdҤd>޼xH'IKӅw&<sP7U) HŠ[շӣ9=o}j0MRӣ7NίWw{z"L]fiz拿\xg3wséE??|jw#�ʕu)Oph\VagM"D衆i�+ ;IBP bZ]GHt@)uCv@Y� .XҬWpK6Bڻ Uoh{U=8jAq+A^&Oo ă[$`ڻCazz\9wӨT7o[ PX:h3f8'K4)C^W]m BatBJTzgF0f!M(N` K׸UK࿓,eqYa#D)맥, uXMN& 5f$HCB 06*\r$^͋!(!-1җ-QN%pnɦ3;0y4=<2Y$)6%2X&8  #}t'BVP B.'9ܦDI9-VrofV ]D,\\ LXFwc|1'QaIU!Iڻȃ-Ƴ,; ,ptp?-- Fiˎڻo˓GR4t !4FX'fj<iTAHڎDw9[Ϝ0Z=Ѩeh˯D%ut8?/~5T1s㥆EcyڹI:e}^;n}88[u�� ?H@k=o=ѕ}{=SS,t6`;e}4;^֪-T[3-La>|Ɯj*?ꞽ}���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�TestArchiveM0d����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_targetequalsource.png������������������������������0000644�0001750�0000144�00000002340�13061031411�024754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵMk\e9ޙ;ydbIMMu#B \B7VUЕDDbŶ+-*Iid&އs9s^̽2@9~_;izy�C4Q0x#UL}n[͋x�GZĂqJs336ʷ7[O"f'tv`�&0513R05SoX9bfD[�0^HMeՒکQ6{#sR_.l٣ 'V?26RxsY]E${F[#cU ]""(ĥH � ("2[* /% k<{u&*U 0Sϝ(^K[7R1xՍb& Y?m̌̍\Zo. e bZL5(NL'W~_0{;3 # `/�BeS^9y;z8KxlJȻ2 X�&%`N^ "<4RIJ%>:;DQz�*fUpE~B);7n_e7 ,uJ]TJiS@�T;*dY0'mge>.O̜F >}"L0kqp ag&tn曨 4uզ�Yܤch<1gC\k^JTM2\ 4fy*oycɮLB=gX~_/&-Xlk>b`AH{|OL@|uggg9՛Vva M`h<3>Ij���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�TargetEqualSource k����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_taboptions.png�������������������������������������0000644�0001750�0000144�00000002216�13061031411�023401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat#Fc 1U_u'F_?|V⟦gC:tD}-Wy5g0a0a0b?i^wdeh`yLg������������\ZXZ[^ YZ]iijacduwyRSUacd012TUXTUX012���jlnjln���DEGrtv]^`������ TUVdegTVW���������xhklxzzzzyxۂޏӣlԋw˰̬c׵бط���fܼs���ftRNS�,,,,?;;kj?^ e=eU-]!= (+!2@���bKGD�H��� pHYs�� �� ����tIME (�ݺx���IDAT(c`rX9 \<|p/%NK@i"` 1̬8ʔKHICAAaQqI,XBN**kjAJ* PҬhk޾ 'i%utu@O`C#㩓MLfP`ie=aj8Lwusws*3O@ DPpȬsJGDF͋COHLAԔ tqd��CU*"���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�TabOptionszq����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_symlink.png����������������������������������������0000644�0001750�0000144�00000002517�13061031411�022711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��pPLTE���vxx̺WYY⵷gkkOQQᶸ෹fhhEGGOPPľ8::8996 9ExCLHzl?u=6j67j98k;9k<:k>VWW;l?///nooghhfggiikSM>nA������������;j8GxBGwCGxCGxC7^6���������������ݻϻκϺrssxvr|kKUv*{2`KxV٥eҖ[jPܩ̸ӕΈ:fJݩωp(=}_EИ`vU{vFЀߨߧગ\tPNJFEGNpP���M=^���BtRNS�  _LSSSSSS\qqrT {:#$nd|���bKGD�H��� pHYs�� �� ����tIME (�ݺx��XIDAT(c` `!\p n/o0vGHAWPp\"4, ""|Eb1q`".NMDqIGHĜl)D.!KN‚"iDqp W�A<Lʥjj[a)@ׯ0qLn2u3gVI̙ /Xh˖PJ\5gUk֮[a[AQ} l۾c͚vрHhj<tѣǎkC$ttASN9{"alb f `em(lOa��."F���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�SymLinkW����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_showsysfiles.png�����������������������������������0000644�0001750�0000144�00000002537�13061031411�023767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHǵoTU̴̙ӛ F@XAB4@ &&O?FL/G>R%1#JNa:3휹9goN !䜳ZZk�šQA=v~Ĺ�B�J}GOz+:Dq魳Cb-:ݕ�*xx#-Xrh־eS:ri>z1`Sw1~9LP%Fbh[FJ]OMYr� `}DiD`إ"(iYo%Hh~`-k2 <(QB)_svu5 }_TR-ҨPQzU܌K\K:2>}h ZS-x3UYZƫݗ$.7>1I@`PAr֙rp{M X s9=p'"�4)bdScN V@ӹͣmvY~E eOON]Z_Ww!0�jעCw (AIRY2s15`_hhg|AcW=Y6DXLRJ"XJ� Bf||ZyĶ$SgY7KW5<d'D+$^ߜl'8*q/VfSs#7rC(m @8|osOa%yo߽wM/fkreWKgη;Zlڼhzυطu-{ʹϾgt >_>3w0Ʈ`vF~'lyӿ}?wɱֱVK0}s}tv|'\rD'iNsߤòCwLވuA!=6FK+LGL%UkQ lWL_Bdb$[[_%O=bq"^5֥TqA�z4!?^O?���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ShowSysFiles ���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_settaboptionpathresets.png�������������������������0000644�0001750�0000144�00000002465�13061031411�026043� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHKh\Us#wfr&I&/ 1mh"}X]JA܈]]Y4vEH)(-}YH0><&d2dޙ:.چsaspyg7; ;լdblޞϺ2-dԿ Bilzf _/ Kdܶe=nzLezM(eaS[K)`! -"=<$FP~Dv|-J`cG3k3NB? <-ȚU jމrH?b-_+14#P R$jS>Gom5حʨByCv2PMR P{(s+�!i3Ok)�^=pⅬdD1` 9E@#т8d+mW݆`(x|ȯ_ Ҭƛ{r4Wk~ Q`uB.JHBD0$ CVK(#k"T@K?m`o|Xnζ֒&&"g;] qDȯovL t )$-$3&_>xkj+3~WF4NX/$LA: ɵYWZ:'#_E;asDپ~3g'ƚr.6>y~U`$<G\``Ϯ.,T~Rh8w4NGtF,hKI 46G9eaQB>]EWZ,P.sȏ5amfzF <0114AEV }O⧋k3*%Lc_ސDn$'gKWɏqvUʝYymI˭JQlP(%RMwWG' Ǧr(ȱ*8}#8ͿqRj�D4J)fz�W*.؅Q篑?ùOm@���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���$tEXtfilename:orig�SetTabOptionPathResets9����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_settaboptionpathlocked.png�������������������������0000644�0001750�0000144�00000002261�13061031411�025771� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat$Fc 1U_pBa?|VYF:tH-Wy5g0a0a0bDi\`Bh0a4f,Vy���������M�IKJ�u ܩFSqr ء:ܨFnm ՛1١:ik ͒&Ж,i `fkjgk`���������xhklxzz|ꎳ͘Í꛱ēάϕlԋ耦}}}Ɗq׿`_gZaqknks>o F6^>6! ;3ߢ#Ֆ6���Z���WtRNS�,,,,?;;kk?? <;,,,,,,,, ���bKGD�H��� pHYs�� �� ����tIME (�ݺx��IDAT(c`rX9 \<|p/%D"` 1 �QQ` )Ĥ䔔ĄTY|ZzFFfVvNnvVfFFz"H\IY% _UM(QYU]SS[WZ[SS֮ 7142rMLfV}&ZۀfpM<eih4}̙f;I͙;oh^ -^h@``@_0DHh$�Svt"���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���$tEXtfilename:orig�SetTabOptionPathLockedu 1����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_settaboptionnormal.png�����������������������������0000644�0001750�0000144�00000001424�13061031411�025143� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat$Fc 1U_pBa?|VYF:tH-Wy5g0a0a4f,Vy���������xhklxzlԋq���҇���3tRNS�,,,,?;;kk?? ߯���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx���IDAT(c`rX9 \<|p/%661E&"` 1q3s K807KHI[Y k[YwTP+)89�'U5u; pJhi�]=}04@'��>$iS@���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!��� tEXtfilename:orig�SetTabOptionNormal$]���tEXtSoftware�Adobe ImageReadyqe<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_settaboptiondirsinnewtab.png�����������������������0000644�0001750�0000144�00000002473�13061031411�026351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATH]Te{Ι93;쎛PehF](^HtMwAAu T AYDeaQP_άqf9yH ݖ@>uԭ/)T}ﶀ^=tal&&C{AuOUN]_yľ\ߙׇ=\k׬aS4kwɆlu5:߼g7n�D^ IFBLeFD#ZusP]f^T,K* GrAЎλ&BhhQ;֊�CXvFqY9~xC)Uj 4Mv^J;Z#jLM'm bA! ֔j(2F8y2t�zlL<?:1[tv$L6!CP73, rw$JeȌ'g[nB<4Kͣ1$,aij%n&1Tc۪w;s]r\D;yt2A H1<rgZ}axa0o#z?ttR6� Ÿ[a[3g"!A" e,+>|a"u/MΚv6EJ CX<5Ε~C@,S"Q93]#SxfCl\9Uӓlcs3[غd? >Oq $E \?k#DWҠ#f~ u �=g\ԣwW.2Ri=Dֵ V.:!QAAqãqAD�c\לun8]QY- T`1[P.W+DiרƨUؑVWJj U.04>ȧgPN}vo@ ,�JyhQˁok?OgQVE,S|g*Mĵk<My]_]N���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���&tEXtfilename:orig�SetTabOptionDirsInNewTabׁ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_setfileproperties.png������������������������������0000644�0001750�0000144�00000002632�13061031411�024771� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��^IDATHǵ[lTU̥@^hiLK)-h ^ % A"> F4AIL Q5`,ҀB񁠆NGJC-htsY>u S$yXdo?Y?RE/]3'!r8H3o-{ `y*75s>(a ;r扌5{0lorU^ 7b(�!247 [6榪=|J�²pb0fK47b܊tZˋ _Gck>`xKDZr1N6pcvsj#v`h:E"C)&8sOZS<feoo:�a$yDEXm8v`&͌ /F+$tg_2Egb5 ۲_M~`?ny>,F]&#+P;ewp-865GrKK$mJlzm\ǖ-@jҹbkdMIeEl޹W@-XԊzjdd|/^_ZhpKtwuP1o>u+Yfڂ|wu)`pN�8\Tx PC\now-D#Cr((.+gˊ`Y}W2�n60Zvz{z2Ne\ȡ̤ CA4|dF p:̞3TZ/e G\)(,"7p$̧ (WR!"0NFD`hS理YE),*"/? jj8!Mhؿլ~-2:XD-KW?SVaق&;+RjəF*j&'Kg7l'Gw@:zU7ݣS>C)^02o/4x]Smxi_J>ypM"BĴ20m .ac` b$"%G$hhNu;Qj<A&hJ 3ߚۺq׈G#w)Q=a~�xQEۯ%00NsvOX̊���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�SetFileProperties ʶ����IENDB`������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_search.png�����������������������������������������0000644�0001750�0000144�00000003113�13061031411�022461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHǽoUǿwnm6-BPL0`Ԙ‹AC|P›! /5+$(J"b- "n?̝Ç">Infs{=B:G>cO\-*Oϟ{�|KI�v++_fZ'V]A9J޷ׄ4Il!RucNyQVd ecϬg\f( HFǾ_WKr¶mrjrC~}"� @p===8ލd"!ZG;SS<H$FWWW�7z7o޸@ɗ x4Mh@)ED"~Z]ݢj-/:|@)˘Kg]DžF鱱#,/-4^@PRa˲APY]"=zd~smR Z htJv �!G:t]y]/\Ti\+``` EyM�vBH̗Abv۟<z___ܟ xԩB&c"(BHs>{WiZ-DJA�gi /$KwF9kΤ`6BT*]l6[1JUJbͫO=|l  wx<-y0M DJH6yǁyp\b1m=-ueHgQD]C&!A4MR*>v`2PJ !X9mY`QB"v0E& !`Qι|Z7 a>6Jbt:@حo%Q!CESBzlѝRBDQW;HX"bBch4W>?9wBIy%,d�~0l0�s(%(bqs~�X}Vsc jRnٶ XyF8FOġ1X�p�4MF8ixd~Muҩ\ו?+ZǶ`6\ %Fyom[plmC !ST7`ei۶DD\pp.9ͦwiԪK~u6*jߨz�Ȣ[$�s; NL� $jz���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�Search\W���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_saveselectiontofile.png����������������������������0000644�0001750�0000144�00000003304�13061031411�025265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵ[h\̹iWծwd%ŵ,/Ĥ\j?8SI q(}iKӖ!ZC-&&$$V M8ٲ"ۺ֫hwϞ=gΙCT-yf>,aF֫٪/{rsD, =r髾_WV;Zs W?> }�xqDшoXzӫ,:z=@\mrfbF~v<7F[G1L�6Z:"D@0qzwڕ0pf#y&Μ\%f4`"ֶf0K}a$*{w.YmN1:]ڲh ;3HwCtY♑ˇ_ϝ(�< 7{J0J<&)Jt!\ڻ_򧹢_&.FhfIw-Rx:o3x7n7.8BtȢ 1 m� i{x}Eـf|azzj"ɾ]`q!4P=`_4((qs˯�oی=O qR uowܚŸW8gh~ #򼬪(rpG5XBef�n8/Byߗ! DFl(Cq%SlpB>;{.Sknݩ{6u9T F\rS [YYESKJj*1e0v.p9ɖ,vC':y-'a ''Nvᶈ$꧇s �GEо{{7Pc~lbpZ ttHmjM`Lcʾi.!"|Vʉo_9 �fbˋl!c'+'zxzK䩇7L&Y>ah.Ue GF\e^iTun 4+`̧jp̹z-mJ$] H(8({9uH\Gm lz<\<Y Ŝ5ɨqòp58JՅ(�5AV5N_+KWF v�<t68Z,MBswb{zC{w[:GAkEW .&a3j |�,=0^�WsoXC6|*Q+L pI\�Wu͓e f̮OQ.EepAp H I`\.s`!11̑-=I+N |Vc"$гW9J2 [KBR4���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���!tEXtfilename:orig�SaveSelectionToFile/����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_saveselection.png����������������������������������0000644�0001750�0000144�00000003251�13061031411�024063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��qIDATH͕ilTUoyufL;0&h .[Bq-Iܢ!㐲b}f:YvOsor~^?5oφ\J7?}!Xmy8}!�;^PV4wNL;3o`k%hZ Y w |d&7>>%tBWtC6O]dכ bT" w"?4i[Yﻕ`R1&p_HC(�њK$ RcƉ[?E\ЀMS3*IöMQbunW/{bE[T%Oӝ=w?�*}@]o f=`L͙D1dedJz<>wtͱi+w">fH")%rtk7tIEU$,E ?^ޛh.;v hj687Ӝ&FۊXLj\ZV1FD}-kNl`y"d&MP V xiaU7286Q詓-ձѴ#0.n)�Љ14X",4AaIeY >WRbYYlm6E-Qu,8ek*щj"2Nt܂(##Rg\+.Vp(i،c#z-aRykl E Po\ުH#?N2r\.5α/׉h 1أĹ 6վ鑪懅2":&knomL'K>9ə Y�r�*:iv ��y�}V[Y0O u;fN'].S嫬=~�J�fVoExM_?'-#H=ƻ6ظ )3l"?v[C>~E kx*K|mneS]R5hò$M' =O a:DD(�#kaKs_ԗ ~˅hy5-y&?]Et[r/uH%}&Ʊ۽fx!ˁJ2)Rbɪ/6p1^MC(Qa:+=(<]Jx>nSzȀӚ �+ĵto-#rLRC~jn6bO?l6;~8��kyËbˮz@1d{dIVbTwkIJ~c7gֹ2G3Nڹ/>U ]%u~!5ug| k|_k l�'~S~n=���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�SaveSelection����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_runterm.png����������������������������������������0000644�0001750�0000144�00000002355�13061031411�022717� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���~~~~~|{B`Cwrm sklg�g�f�fii=OL? b&�-�(�)�)������������^_`_`_`^_g2!'-39@EKQ^K9W8ӬUNug[^`bcdfijtj`pZࢩǹuܖӽξμμμϽ϶ѽڕߓVQQ;:<=<><;=?>@@?A=<=WQQՓ\YYFFHooqDDFIIKJJLGGI]YYa]^||}ttvLLNNNPKKMa^^eaakknPPRSSUebaiefTTVkkmRRTWWYjffmjjUVXXX[Z[][[]XXZqnn\]__`burr`accdfyvvefhhikghj}zzjjmlloف}~mnqppslmqops֘���A���)tRNS�3\\\\\\Z'7*hcjjjjjjk^R7==3c7I���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��AIDAT(c` XYYX98A\ܚZo`726153wptrvJ{xzy %D"" &6.>.>!1I(!�Y9 ܼ¢8(-˅HVTVUAmDZAb]=[/0qLHL:m: 6u XbYQ3 sΛ͝XpbhĒ˖eK@$V\V�K^v Xf8PBbh`z J+(*e:Pv�Ӯa���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�RunTerm_���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_reverseorder.png�����������������������������������0000644�0001750�0000144�00000001235�13061031411�023726� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������J~s���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD��#2��� pHYs�� �� ����tIME (�ݺx��jIDAT8?hSQMLI * Bk"t^ HN[BPCK$7Yr8-y~M8;ظUIƄBe5iǠA1"z<5Q\ӕPtۖ@y a:LQPISpEU67-,RAA 4i^{D'hjgYwyMc?;ZQtH$tlwNwb +b^,)5{#m܆sN[aTR`TX-4OΚDCZH(+#DPKJ(#o'Ohlc���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ReverseOrder1����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_restoreselection.png�������������������������������0000644�0001750�0000144�00000003253�13061031411�024612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��pIDATHŔYlTUǿ̝BӖʃ! FX11hD &JL j�XH-j)et:;..0%w?6y cϋFh~=𱷌"\&Ӹ'||V* E@��`W)ฉ`-_.+=0|TFnV7 ?h|`UK88•{ %u-g6 �дTlrVr^O[{D[0w't.Gb'A%^�𔕯`m&XdcCӷF得N"A5p,=9-20)d)z^.R}X")$;{my_�� =_j+9fTh[ h$'s޺'ikS~CۿMJG9@Qf�=}<95gESKY+avW)C18 Y)q #P8ݠ� /[نS&Pdqb972OCN3W'!2G'r7whk,qլ%(iH,5ͫyH**t/B^Ӆ]e 0FB%Dv45�HH5 $J� p LppReI2b�h0d\%tAYg*)MYDE@ 62S&\'ؘ\(c&#iȘ04EmV1[UU'b54CAY[^΄Q|d<]d*6-Pn_8:ȕ9JH|G'~i�`ygnhxhFp`U ?cc}6<L16|��@�p[Eki]c,rrR M&~hUq+GYm7pK.<Y�@�?ѿ[t_>'AdrAtR ~Ƅn_ (Ўmw?Y\޲&0 KRkʬip;]t, YlwP�䞁ZUxvaQm3 '8"{)>:@) tH)HZNoR]  e {J؏ Ӂ$p00pvl73K,$##Wxa@瀈w# %+߆s�@ USGɆ*x4ҩDDe# rk_Eg�Ǯ/ Ooc#]BESlKO%>-\ŕ$A F]+GH[5_ '7Ӏ'�zVop|۷,VbMS{ݝ|�Gc 0���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�RestoreSelection(����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_restorefromtray.png��������������������������������0000644�0001750�0000144�00000001726�13061031411�024473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���L?_L6@A^O'!�0^ 7�t�F<S4� t&9[#�v^� vRec�fY؆%lΦ˥ʤɠƪ<ʴԖ߮پ殿樽ύȰ䯿ӔǺЩˬӡ~ŹٞҺϿݲzѩͥܦxĽŊ檷Pe|NczMbzNc{]lqgogH_yciiQdsy|gKa{Od{Nby��� ���tRNS�@f���bKGD�H��� pHYs�� �� ����tIME (�ݺx���IDAT(c`�021cgaec"Ǐ!. ($,"*&.!#)%-#+',E%elkhbգĻpAHBF&fV6vF` {G'gW7}w}O/'go{@EPpHEX`x/X"2*:&6.>!1)9%5-=6#3*,_P__\RWV]hhlhninjKttvuvYOП8irWW�A��7auL���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_renametab.png��������������������������������������0000644�0001750�0000144�00000002102�13061031411�023147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���5��L-N5!C��2Kb0t9{SSfvS\dSZ`ScqS>/s.Lb"5=zdɄۉሺሻᆹއᅷ"4Do\[Eo 7\cmAd 3U^q$Fc 1U]mBa?|VYF:tH-Wy5g0a/`.`/aAeLasM^lDf/`4f,Vy���������3)!B=9A=::2+���voݯʦcLONJy常bFKIJCx\>B@;w˱Ͳlԋ끦xq���M���ItRNS�,,Ǥ/,?;;kk?◒? +991{vr���bKGD�H��� pHYs�� �� ����tIME (�ݺx���IDAT(c`\<|qA!aQ1 K@`PpHhX<XBA1"2*::&:6.>!1)9%UI,_PXT\,-+ohl5utvutuu%'LL6}ƌ 3g%LL- ( .n@qT��o>>J���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�RenameTabҾ3����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_refresh.png����������������������������������������0000644�0001750�0000144�00000002652�13061031411�022661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��xIDATHKlTU1tf<J[ii+/[SLBĄ qʘB!1х11&HĄg@T mJ1tZy;BhcowN97RZ!s�ַ4ՌT\(8fG.s2z(`jl[{pSM*9leIMo㷍c' X\yr7|m;6Fz^ SI5C\p j%$X@ۇD6G7b6V<͜9RDZmr)RXVj{ )y=?JѶ7ٻu{Ն0Nh4E!oφp~wᲵAxPЭz*fCXnzZh}EmqG/ =H΅7̙|5m5EQziSqq)?Ryڵ~5!T7 :Wg/KzNeH+m{BUx7@l]ލ1PLMz1(P;?2kX|u39xdWuEj<^?G5E`T 2YdYM_c :DQK7#@ @"Wf{Gg' Q(r+ `P x\p.͏d@6ҤWbצ5A_}eBʿžlK90hQ.ޙ5?Į}WRpiW^lVəH e>xy|Js\e)nwL[߿gqf. #YT^!?όQtJQ\S4[a K_||@.|[݅X% .y!Zx‘US/qQ],%iDb3h%8Ρ8n0}J E +tr:uH\d* 骱#/j}tՆM̒IJtr>� `Ft&,u�`*[~g" i+@"'=vǞG6kh T]Ύ DO2{kO&S OM���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�Refresho#����IENDB`��������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_quickview.png��������������������������������������0000644�0001750�0000144�00000002315�13061031411�023226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATH͕o\E33+؛XƤHA)S )R/PD))i(EH"lmQ~O>zw-G!BH4<|7ܘ=3rˌml|Two?NO~w$&KV8kVOhal(6b<# VT9;b H9p13"zRHI"w_c2:H@ 2B=@AA#GD;_h<.Bo@D#^^'IPQ=IpxwJ"Z *Uu q`� v)(Tit$ԉ"F:8稔ˬI)rvTB ef''9 9:-`X4-޸ՀG6~XƘ# X 8EX 4Ԑ\LLSF̿I\ *S[EY;I@D+$rc J!0) �<yϳ8gv踋(I$</xB- a,"]@h�'*61L!aH2jy`,Ի*Mu|Y\4>f)5H;siciP ݪoܹ&r#2|'<DWֲ?;Ԧgټ3g'g0:}pOӯ]νD ְZRqzё JMzcwie1Am<Vcpט0ÙjZwԢF+|oū/H>zws?^PET^a+1d;mڷ,y,qwa֞Ti+<,k_-N|'nS0 d*PbJ?tx7fӵ���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�QuickViewW;����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_prevtab.png����������������������������������������0000644�0001750�0000144�00000002217�13061031411�022663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���Oa6w6w5w[P8tUqyxynEoUVEo@flf :a#Fcta 4V4Nr_� @DOyuK@~J;v8nX]<D~D|D|E}E~4e8p�5(J�������������2b�k%;l����������,T�j�t�o�o�t b 4_����.V�k�N�=�=�=�!B� �/U�_�O� �������#C�*O�%�������eggvxxwufxh}vpcqzt._k5i[j]j\k_pmnՕ*$K5''%J���-�����������lK6���[tRNS� $ %xx%gh`Q]W$%!DFV5Yռ^ZZKWۧ F>F���bKGD�H��� pHYs�� �� ����tIME (�ݺx���IDAT(c``dbfV6v8'7qr@cb@LXBX$>!1 E)ip))ˇBY9bQqIiYyEeU5*)�%T[Z;:@W (?aSjji뀁>Pp3gΜ5́sΝ7V60` wX %l=<xy]@`PpHHH ZښG` v([zE12��gSRn���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�PrevTabiI����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_packfiles.png��������������������������������������0000644�0001750�0000144�00000002717�13061031411�023166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǽKlGgf׹5IH IBڤYMwtP lB $.ZCBH)W (6&ϦNع~]9]b'!j4s~93? ڷ:'xa)OA�ӠP2x,�TM,T"ܫ>P}LNτ,'Ru*P+(Jհp/=7uT0kǮч~PQ䃂 ^UgU$wp{˖= YY*^xxtk_-p\{ԙ"{5y~?e@7o Zp2wcR?:wno+Ǔo~u=p_8~v<z@ճsq-z˿I w~ywІ oZUib;Pog6ᇩ(p\7{.E:qm]j}|R|&7jc#;n"G"[ƕ]?]1T[L:}݃׉1M>6^Еkj�V3NP_0DW@ЩzO^ %_ g6qQq-{(.l0=kkȖweX" "�f  F<bQ"4#Y8O*h4DkZ@iU TA{l&a#&hOTyF. A0ր jQx7@E�*s(^Q']#][I<A:XzDJͭ6ko ȣW%"`ڕ "Urʮ zϢ 2(zU"zDݭB�qvE*/*.\k˝m@^Ty1"AŮI,zIګpUN6-TdIvVT 1EDc# BXIh Z5dYw'r/\{/Hz- ]7o{j?ac{ZgQ)"'%:};sܟu[=3?qFv#WJH3m|OwvA/S~{řco?;wׁXQ ?39Ρۭ4+g.̾~~=ѝ�f6> o:���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�PackFiles`-^����IENDB`�������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_options.png����������������������������������������0000644�0001750�0000144�00000003477�13061031411�022724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHǵUklW=ٙGv#^{$㍛MV(Q*T(E@j$*ڈ(T!M $SG!ͮww}vԤFݫ{>"w`s늽ǟ ܽɗk7=^[.EUT= �XEBACl/y<A)MnLg>d_tտ3e*;49U64I[F=:"GA3g+@+?7~j]DEփY[wvE h<J$|j]/FߩhDHiÁ Nȩ:;J̗DDƵ|5Á |R@Tqs qT={EZ鴣umkzܣFc`1 B(LCp�JC>9{kq(gS]2V`DAfߖm^Q+ b@DW.QjN~-*"ɌX�˲vnH.to281J�^SG:aHnQUS o{0?Z[ɛ/8~kƵhz BƦ9�mgpǯRPu$$V%1Տ% p �#ymxb^Jþno,uy u8�@8 P B8TQ@+9./m_ OnuׇǛAg&fok.>a:ȯ'UIn\ - AUR{T從_߳}OgGSauA$c&bkbfu89}6?t3Z`G/<O`sׇMlg@۠Sht@%h =Yu]hƲ9{7R{k(M`t9*-%.nV2E-jA#eK׳}Eo3Q_ G .@PJ 24<mxl'6òEg>h({藪@@U<Ę8ʥFÂhٹE @|c (w!E% 9 f^�&I|wXEki_:5 v!R.36~?NuuW­)(z~6rޖRf.Wa<<޵JyӃFX0ss3<:ַcp[rFwCZBR@́6E+WW -cT >uj,ԊpgO"Y2X^ Gt9HWMe%^}m��8|[O2ڶK;zbࠞͿ)eJ|rwn\iw[|oiy䲵`Ey+5�A� �g+>`PQ*���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�Optionsy���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_operationsviewer.png�������������������������������0000644�0001750�0000144�00000002541�13061031411�024625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��&IDATHǵϋ\E?U̎M6&!'ɻ< '/�Y*b7hBv7ٝyufvvQT~44[Uߪo<W^wxwoe;egWR( g9>s8x<#W7nO*PGO?w$Y5 '_|"%Ӕ\V7rq"+wQH/qwݩRYN9RE$!#4tgsHT  D QrT:YySGOT �AQ%b/(˒R%UYRUW778KyN+2b P1@2'B�A d$MI12c*z�{;X$3kkwWnET2d(A:dD4,'KܡJF'xܛone2n1H{7mA̭>k>`d; s{ F::Rv;p*ք;HSorz:0 P� qm,ɢ4,ȲHPQEcd $nEчA6\]ITAȲUHR{TP$@2ÛopHAtC9BJHQC 3#%I7+6gX7A5� R"3H*+Cܨ` >Jz/͜Kpkm6R$ <{U �TCqnk+EREdBK B;*o9Dƣ7Y "tZ?RfW$2Q(*œSDvpJSX|q,6b&R!E!JjfN+zǀlod6( -uW~"DȴNM B+SQ?*Ej陬IZoo_8j1s̭voJ3YwcLu$ɺ1w'Ss {02 7:TT$w:~L:yě|w-uy�QDuœ���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�OperationsViewerIeW����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_openvirtualfilesystemlist.png����������������������0000644�0001750�0000144�00000002710�13061031411�026567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��_IDATHǽoTUPvWmPBD�!&ƍ. #hB0 M HD&JB' A[N;3s>\дг:79y7qksЫBXNaR;7?r�͋oK qGXL9PVr$H_Pv>O۽5$>,!ظ*;S@A�fvzBX— xy82s9rR1` QJs{MDc8h^ hq|6Ps�``5 *zAf.T z@Ԋ_ uy i[W2_DC/w?q[@�.X#byLd"ݲuGt&�|LDFkMuUgcJ!YB-h2wj75>>.")Et{ [НQf#V7q_<|رeā5m^N4ì4]R3;0דMѓpWG?&><tx_4FI%®{kjqbF&3'J5,Hhmk`q!il+ Ghy~dO _7:2tfK`(O#K4O3+ n2%W7lj)tډ_k,<tsE�EeLeRÄh=#CC"'is[3ĕ9y ;?@Aim|69exde$fV2];;@�ax$L<RC.Lsp4xLy`M|vVL0Tes ŗDFa ۲Jc8O5WKq~5 iDN]éRg2�333ƛc0KP�=Mv�&z=}3^zt`y}dUUK=BXM&ݽ=;fg{o~wn2hLu}@.} 8 \g޻zǮ::~Kvv^=<t[J9DD~/V%%eG*m"pvh���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���'tEXtfilename:orig�OpenVirtualFileSystemListбk���tEXtSoftware�Adobe ImageReadyqe<����IENDB`��������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_opendirinnewtab.png��������������������������������0000644�0001750�0000144�00000003001�13061031411�024400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���P[5w6w6waO8tUnyxyqEoVUEo :afm@f 0Oar$GsČ<̜QvY`+V-0?O.@r+=zOo+yOi:tv/ҨjGd<u�6ЄG2bm=s�:ܵiZ&A�Y�.V�y6Î@ɛNɛKɛKʚIʛKʛL<# �;l�d�;l� � ��� � ��� ������ �7e�W�k�m� �������������������������6�%I�$H�������eggghjihuwwwwxla`^ıӋ֊؆i{|IORQL͓…ݼݾ޾ۻo{=C7l,D͎wwދߢ}|K0s�S43rJ̆wvn\ms޷u21Tz&2~l[]\l{hHvczxv~!gR! ٤O܏萄��V5���+ ����o2[A���htRNS� $ 4!g%sfvjpЍkk}jfkE@<W֏vu*//1:80.y?ae `q]v���bKGD�H��� pHYs�� �� ����tIME (�ݺx��[IDAT(c``dbfV6v8'7qr@22@fXBX$'7/ KJEeU5Uu R qi٦ֶή޾ r &O:mfϙ;o*,]|U׬]~M7l٪ P۶}]ݧC<zL(uSϜ={N[._z.PB[ܽw_G<}fd 0yo޼553xOXX%ml]\ݾ~㧛P? 0(8$4,<"2"<,*(qiiqtn�:=!���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�OpenDirInNewTab %����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_nexttab.png����������������������������������������0000644�0001750�0000144�00000002262�13061031411�022665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���P[5w6w6waO8tUnyxyqEoVUEo :afl@f 4Vat#Fc� @_r4N@~KuyOD;vJ4eE~E}D|D|D~<X]8n������������(J�58p�������;l�%k2b�4_�b t o�o�t�j�,T���� �!B�=�=�=�N�k�.V���������� �O�_�/U�%�*O�#C�������egguwxxvhfxpc}vnՙpmk_j\j]i[k5_.ztqԽJ%''5K$*-��������������g^���[tRNS� $ %xx%hgQ`!%$W]FD5VKZZ^Y W>F���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx���IDAT(c``dbfV6v8'7qr@cb@LXBX$>!1 E)p))΁ܼBY9bQq WTVU*)�%TAW (:}&N<e>PMLM1cÝ0`e=gy,Xhc2vN΋H{xzzy,D   ua,"��RRϤ���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�NextTab"A���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_newtab.png�����������������������������������������0000644�0001750�0000144�00000002333�13061031411�022477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���P[5w6w6waO8tUnyxyqEoVUEo :afm@f 4Var$Gs� @_Y`+V-@~Ku؊?O.@;v=zO4eE~E}D|D|D}Es:t������������:g<u�������<r�m=s�-V�Y�Y�.V� �;l�d�;l� � �7e�W�k�m� �������6�%I�$H����������eggghjihuwxwla`^“i{|IORQLo{=C7l,Dnՙ|K0s�S43rJ21Tz&2|hHv!gR! ��V5���+ ����P���QtRNS� $ !%x%hfQj!%"wk_f7<vuy?ae qJY���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��IDAT(c``dbfV6v8'7qr@@PXBX$4,<"cbD !)ܼ¢bY9bIiWTVU+)�%TW (:}&N<aT=!O>cs3J -^5h-_r56vk׭߰ U-=}|}Ł.3St�UT���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�NewTabxr���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_multirename.png������������������������������������0000644�0001750�0000144�00000002656�13061031411�023551� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��SIDATHǵ[lUnF]-b _4Iʃ&b@H#0 1!F�@mhhNev4,b'yso΁{XZZL|F ȁ /nڸaC;~˧ֺRy?~(p{h豒)X q'|>zzz4WK)v~JwJRYS<_ckߨXg�dG*&q'T*EItܹIeN͚.O=7c JJR*H!R)XX%}vZ{om|d9�B xAMI|(  S۵'.%><|x^t)%%hG]# )l?!.=Cn|tP^P�| ?KvHO(*VZ"1H0{ ]GTP{s= FeYTU4gv(C­N2exG{Y﾿9h ^~O$ƦB(Bl?{z; +k( NJ|,3bVJ_"1,vOmgLĭ˝&Ɗ*ܔD'gd5K^c#~] 1hU=(;) -Ճ(.+&3*8=m]ʭUVI#=#Țo6 cG0|Ey$[<*gZd6גD#Qb#(x711in3R/+5ahm5gҰݍH*_2p1?c\_d,Af.@)5ђ"vhhyOLOm&H"ߏ֚p8Lgg'Dh4MԬYp�w,|L̶#cY{�̻d2,",klzLdF�ÐmsǶ)(g/ mc q0'uX]ݏJ)sRjE=ݩ~}G(`2vx?<`У��{,���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�MultiRenameф���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markunmarkall.png����������������������������������0000644�0001750�0000144�00000003536�13061031411�024066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (6&��MIDATHǽmP>Ͼ>K%`H� DDHSh1LG:vll'&56$#MNS[c&jDF(/ e!,a_`eٗynǜOw͙svp x {u/`�mw:~N󿏩P^4&6XVY˚ᒓ\q㖵| %SoVt{@~aQw1zCk !|-�KL3ڵ0څRk̇ * aeOزCڶwxt#],8|6| |<#_D^6f4[#WO˜M {_n[νTW7,كw˰X{Hv9-]o_`}"aYǘNə_nAW;/6i;̋>X\y9܆פּ`,ZKݖD4䂾wŏ&P1F(ڜ�-UŅOK5ˋ-*D[h)W Ek6r$M9^Vc$JcT̢{l%�'z7?"4#v} XAm\Rn_/nxʬӪd}8p? N�`{WnEgSOf]Px銺eqV Jy$'o:O>k=w6pDa/AhK_$�0}YmqB2s yd4TQAJ#-T \Fi @Ai5|j�t7#ZZZ5i -d`0rj.o4 -m`(qB9&P)B'ϳt Yd4.jxK3B9^2'S9P5= R�68y}ׁѾP ᆒh&`zlҟF{v~\T!q<}3rx͟<h+N> h$h+oe`@@@bP'73+6aCOu#k6&!<S2=R�ߗϻ~Xy#!]3# *su`+7SQjSBdBd11uLfp`M;d3[Eˎ{97ex�U..`i3_6Ru2KL (yV}uܺpw pO**-`sTKF"J=0: CII2Q<0 ߸ou=[e^}2QkhGwos?w>++s q@ O2pJͤWAzz}c?l zGg>5s+s~˺5N ?#q0(`1BuAy.:`_<oQӏ'w�da҈7{tg?` *$Q$�aZI �pW  @@➜YyHm<V ¡0FZHz#/s�-Z* �u'} 4/Y܄^���%tEXtdate:create�2016-06-04T10:30:40+03:00wd���%tEXtdate:modify�2016-06-04T10:30:40+03:00*����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markplus.png���������������������������������������0000644�0001750�0000144�00000003337�13061031411�023062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵ[l{^'1!!$M�QRPV򒪨T!jRRA/<Dj)ji %AHm⤎z;7>*P!qIoXf_Kng"b{)uQZedWW\M$CY'sItkݣ��O~GD]? }*fX1`j牠$IOtg�Ca!/!yK&y;K:3/)+/Hi�J!WCPsP/Lwz1 ՙ$vqMQBGX7Ne,}"o*),>zxJ% ��Gmp372j!ob4KeC<cH~7T^ؑN/;D- to<f@]WNÃYX(p6�\»YZZ8Иrksa8K=CRqeaq}h.z\HkT,=Ln�4 v ?9ia`znh4qlxc]  ޞuYvxy#2jT_#�8,c" bA3, vY`q+˥݄c[M@?hq\wl--e6NN$Ǽ@<ض.e1nsn(7lӰѬ~ 08S sFh~۽?CF-GJ 5F!,t`^:7rË"0xiY'vH3w- �?ȡ~{8}`_ɴX+hؕ~diiXњZ}c^{�<y4y}E3y;3Y~gJ/hnݛ8twoKoI;#~%|KuBg5QQ|&B<;Nu?.m0[dj<hw*Z5F( AMDhv q/bN1_xy>0QW)4?* J>QLۢ"ٶVDÙD"-{7Dq膪W+`+djZ/W[k ~dA:ۓ?A&zBA5PY.|0;l �_ݕ=QOjlNϰa"^wuuG\AI$B%(5°PImQ[ur�;{6S`׏m_P6˞b!"PPqZ)5k(\7M@> ʇ1#>9)=3C5ʗ6SDՆqN1f{IfVdxn}d��@)Cn>ECEvS[kZ?ůٌ́���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�MarkPlus����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markminus.png��������������������������������������0000644�0001750�0000144�00000003305�13061031411�023225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵilTU߻{gLNgi0%R c(D1M`Q(Dh1&.qC(� FE,NNٷ{$[⛜9| ϢpEf/(g ϾnX\uP}{[o|-VTܷ7�4-w"c[?1J<=Ls^F_, oy/$�[}-]r8 wؠ ;r%�zW+#SJ6yؤǶ+`$pPSdt_@nC)mrOæ>* _Ӡl'ϛ%UM=1 R*_Az[E��0* n~x̷wdy,^Adj:n{>/=#mٗ P*Bܐe +7K$ IB;X ߾+f>v�@~ԚHs" MI)$'&itA݂Knb$&s-w;[Nley>Hter&=04} c[ MzVV-[ G j$@ƨfhKhTDil#�Tgfܠ9N;�f 8On۔IJ2kL:(0VM՘ FyT8JUSTŨ^3Tvဃi-Wׄl<Uo l"eӫyYz¹TQMjkW0n^'sb^l8_wtXxğ7`zhۆ5mO8qjh̞CR1UM?ob ClK`LrD-X}469� �ЪztFˈ̤Hv}6W#Y|p>2g(PSuX8~ӗw+5үxZ=#\u0(ԉݧ3WjAv 3ØI G<i=n_,9NjFBr>{P%aR�ҾL%WP'ȠbE]�I%`O nsmg�4)-?N" 7 %&�űU7{ݓ"/_`] X@~ ["M 22GV/w7- �gr,~$'RA+ ` h E͞ˉP�}KWk^I`P4@6Mg&}_�L,N\+:]^,�歡LaeL11Aedh:R\/ؽ#| �B��JbhAoRkO q:o_0s;o[N���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�MarkMinus����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markmarkall.png������������������������������������0000644�0001750�0000144�00000003337�13061031411�023522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǽU]l;?zul jB~T JK$x+?RiӦDmmhURJ 9MH 1ql'uY﮽.3;?;sg`R$=}:=]lVh$xj΂hlrg˿|rŏ,[8Tbɇ{le�N-Qb[`;|Jܨ\^OX-Z<N>EiT _9zu;$7lfoSm1A96+dJQ؋SL�dE-`0/A*HLF#&]Ӎ}Yٵ~fPg$wT;<޿~G8HdC;q,(ݲD�FNd-ti%fJ6vwj]Q>0=O'1wx�=�].unE'%۬T);X5N(W?Ϋw�>%;I-??ݜW$ͷ1,1!{2gb12aybܟq~ 緂X9�\qp46e~s>eԱ%u; I4gNzG} p$%0q cB!>0u( cY֜n[ODVAsn C2w=>(U Lc|"|q)8�e�`ڐۀPm, _D<6!0c Q&VJSn¥p,-"#hфkp\svDk^ Ь^^/s(@ Q! �[Dk ^RN3 V1*K_@_wBucJpfr񈘉LL4ye �~~X;;S{p3vbE bNƌ>ZfhvVxOݖK"D?H tFu'EYYN.%ؑow_.1|o BjǞbeq�j 4,S=c}ATF+#9~Z]5g[dWs#?L} ZZfbמ s̩͢-7S{s DE;ٙuϛŷSInr,jOػ.cfrBPmm%]}h6|a$*٪8wnvϮ7#btn}@H^41y֞ss܂�8^|vŀeK޻P%ڲM%%<t_*gokir}?Y�t",s rO-Rc=|A/ yQ6���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�MarkMarkAll.����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markinvert.png�������������������������������������0000644�0001750�0000144�00000003204�13061031411�023377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��OIDATHǵklUy/m߷kunV`%>(8Hp~2Mp`bD F ^�%cL$0LD1ƶue�2 O·<%9sFNl S׽79}cW%1T"QA*v/�wkR2ZX^m*POʩ�N�Y Dt4Y#ӧ ~&'.z-r7� JXɱVh(rTUH�y.֮8\%.oUbj>tw'f�ں2\<qA'G'zY̽vx�jd-"v=ֻ[Z1+Gg)"n #VrH3gZ{H,;nUhZr_��GhzUquVZ+XXUu:r[,QK&<=/|,9]NV N4L@yUJ)k$ciYyd*P:ϟK#_mhOxhEeV�-�(Lx 6QXY-8Y9@xr49k}4ˋnN5%71 \V�*X$d(4UStfly9i6"PD>DgqOkBM,͛QbD 9< B@^<)ƃVbd1@8 Väqѳ 4;@ՠkzWȹ|N*y%buf^$r8ё9ILI0p&:9oL(Jhc!/OT^/'ƕфkh+]w}vDž5הWN#gzSn@zli ޷0qի흑_VVhHP&4?۹08ݮ{fu][lfْǔY$_?�Tm(l*aEyjB'k3;#+Y̺×zLǎx=^PJ:#{K5jkޕbQLCc~7=M/ccn h(rHE %EU`Pdd�h8=@uG0 gnhF �'/k+{N$&d3�+1ڒq` F۷5555mkkW.3vgd�Őx%ٚZg_eb²hllDKK �H( DC;w&PG~?Utm ,M24�{MiuwӖO@iEq,7Νx,X4:?6²0 B7̝}BXa~` -{30h���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�MarkInvertX>����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markcurrentpath.png��������������������������������0000644�0001750�0000144�00000003233�13061031411�024431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��IDATHSmlTe={wivӏBmcX!~a@BȲ1heWTtՒD%*F(t+DY,նHi|3"lkϿ}<yr~䇻o֐;KVrd[vb=��@πM7KYcs_Oson?\ ;xi;hǏh?~߼a\JP\RV)$G;H-;n•^[AO k~oGthHM23L#r #Kn�ذ/w.#  ^0\@T頫cYKr(Ó[\kq4HZ{}׈t X[e^WCj-k$?h_=v G>=|3L3{N9Ƒ:YjJʂʪW =<+>=fQ~aq�OyncZV11'\aɘ x/31{(bKHӓ@p!! lJұ3 1�}y!-OL<g2D*C2U+͛԰ԯԀyn_]-Fz^ꠓnn[�.!'!1xdTUAnD|4bd+Gme!�)BnBиg�3hI�X�0&l=s?@0FN�Yd;Ɇ":G,'LL~N[+oC݌K""1c_Ѭxhe7 #7�@Sw9\5eG3F9{^+?XtoG3g C1l2KۓgyΪ1PꡊH9NhϥVˍV'*(Bb##KR=�S0LV\Z;0ScwVX+EUwt|NtɀAـ'8DF,6>:4?1Zl*g*>ڶAs@B9Ù$S| ;ѷ)f(Q�7^(bmORWC�<TU]VRR^K6s^yNsўR)3ЕfȲld�St w(/^1֪~0Ll0(0 {C[_kDтD"!"GU swRP <AӴw].i6Ah%SD�I,EvP I#am7mt�:{�2poq: �.���-xq:nݺ5͋;;;KPkiiY9' f~SPo.dZCP���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markcurrentnameext.png�����������������������������0000644�0001750�0000144�00000003020�13061031411�025130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��IDATHT[lTU]>f<;L;,RAJPi#Ԑ�jT i&B"j&1X !#J-Sh;̽s=~i;5+{Z? ޽9z6}-뿷Z)܃f� � zqهk,ў74Y]w8Vw׷㽟]>rh&`fzR(l-X)wga_um?S$-Tip.~򩶒\/`'#Pȅ"zg@Iʖ4*] vޭym^;(~uky{|./t%D xbn#Ȅ5Io>9L.PZrT`<+ Uf7Wl~S3o}Í�" '?/7$ o.lI?.jps洽h�޳=CxcPV0з ѵ _*>1<0, T w_6]/1i@GB{*gIٛ1J� ptͯ^%8 UIXpL¡2ʒ>Դl%!]և: fwl?g�FȃAQ7H` ((+Pbhrr" d0Oz5| �)?`2�KH6m4F) � N9[9L827)kH8j@jD:9#E($HT4LJq9 -n(y&; s<wƔ|j7l6o11#%GN8#qr?ˌuVwzOKM < (Sk62]G[ax"[XsB-gLtFGjă#%xіJ Uy|gG e�[ :oy rV;Q5rd4,EON�2B4N�@=�tb̤ NXď @j>N&~Mͦ4N1�BUw���)@ )� `F2Uc�8x<=6aSx\#ٙ%Ibl 錚 j^{%5H\z.U$-�&�\K4>4NQh D .nO<�0�(& aͰlQQ?OO1s���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markcurrentname.png��������������������������������0000644�0001750�0000144�00000003110�13061031411�024407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��7IDATHT[LTW]>g;� oZPHTHDlF!M?چjڤI?kXB[BRmcжmQ 2C >JNr+{흽L}�FNȸy?I[GNE��Qbqĸޗrފ[\Ip4<V HZ_z7#snkGRɖWa4i#Km`A;B7 _?W6_ٿ09\K ')VFd[�l{oQIDKX(xJg_^5+>(:Kު="㦈8b@kȅ73 �j.ye|n=V󢸢ݯ?:qtm�\O)E10!຃ݦ]ZC,O9wa[|iâ �ҿBYEXMvgU=kŲ1Oy%9aX'Dah o9殸f ]<G"+]G"GcI~%�0zl!*C>&{'<Nk yIV] A{ &LdJ5: wlvIu&�FAOO M RZC`YP% &E,M`Em�D@ H"�` iRfD@xP� �J9}.i^DFPV~FT I'G.J'))A9ȓ~og>*mH{9z[ s,1NMƘ )Ve4!�ΏTe^24ꉌޓNj'oV01<&̢1>eFԷ=?un60%3Sb9KZjts}0�eaETЍ^J b,` YCO�!lg7SV(Cԕ%ݎcbtQV#+{'=dr/h4z:�N > WA��^-U3}.U(|/T"2�j[5xD�ω�p2 Rb P|��AbZIcbBBJ\�p4yuy׍tQr�(�J�K�rT%/!ZSSut�5.�]Ji@]�qL> �l\as!&�$ jD!jX|W)gBX~}ccդ$(۷ߟ, L 1k1pڭX���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_markcurrentextension.png���������������������������0000644�0001750�0000144�00000003201�13061031411�025504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME  - ��pIDATHŔilTU-3oڙvB[+6!BSV(FA !~RiT@hAM\ @ZP@S+@ZvJ7?OOr>{O{r>wxqhgM;w:yιfl�mˤ%_tXʎy<}3Jm�w|&/ߚe+ktRp�*=P" &!+&׮{rR̺nD0єUOUEYp �Cre'CHw�r_-mZ$ ~p=` rͭOeNohl[Bl6r Wh9$CTed, 3[ګ2.b%hݱQ9M|fFEǟ@~ gp^1!܃lyM z"m$N \@ﻖX<V |J v!xq/\?j 8IiNvDN]| eESӢxE=ҿ-%�/瑽j9i%Ra%6 PYSKbAG{vէpksj0;%ɈxO+y1s�pR. R ⒐WZ Wkr X<1dpKPY57J�(a@~li�<cnΠq �@`I`` ":C|HL�H`zIVaQb�!T2cм~%t0N /PW']V;%b!{Cj,�@�_ mruT_ ]{6I/|C?7d JEעFzZ5.m,uS,T;ou~swL"(Fp|&,|f"O!rJS*FngKK1 &|NV KHTB'ҡrx(d�v<]I&L֢†-ע]z=;#CsI[9r[\S} o{\wV�j!y�dɒ/4k�ybV}3K=2J4m;8Vr�EzLB?eL`ƨ`p_,U�sV=3>n(!Dc�i\ gw4f'a�P:n@nq�T]]}<�Pccu�T[[s<$�h``@8{_�yFGG555yv{h4_|`[[[;c***F5M󔗗9e˖V5}cO/~���%tEXtdate:create�2016-11-19T12:20:45+03:00(���%tEXtdate:modify�2016-11-19T12:20:45+03:00u?����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_makedir.png����������������������������������������0000644�0001750�0000144�00000002763�13061031411�022642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���@ˋ0Ɇ)Ɇ(ˌ2~9t(?( a͒ȏ=`&`~)` Â'ǃ'ʊ/@a o$a"ʛmG͠\���a"v)���`#9"`$���b&A�"�f*R1j�l0-`�i0ЗD͐<ˏ;͎<9.\����+ ,!* >.Y���������� �G��G�����*N�O��&�Au�������������Ȍ۰۱ܰQ[VҙGӛIӛHԝKګ`khߋ٥dnomne؟iqrtg߬JKGnכmtuuvo٠@֖ۧrrXYY[ܨOl^]Z~֒u߬KgpphՎwecjjuttuz}~׌pȀvyzㄲAJ M Sy܌Vߙ{}}qy@{?oۇҘBpn*qɐ*rihyNu�oЕ@億8zធ=vj��u�n��n����P�������MtRNS�*--)2?u???v?7?, ??1???*?=<? 3==<^<VA &).ᷳ���bKGD�H��� pHYs�� �� ����tIME (�ݺx��IDAT(c` YXXY%}?]30(888+4 #!<Q1qqq OLJNIIINMMN `fV6d�Aa(PBjāM-m]`+)0qSN3edr3g͞3w .\xeKW�J(\zu`~M7m٪r;v{CU@G;~N:}.\TSJh\|*\~wnߺоwC0xg<PBWO� ^_1JCw?'+6P`kg˝/P7.h&wwY%i(XZ+0�ƿ1v_"d���%tEXtdate:create�2013-12-15T19:40:38+03:00���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_loadselectionfromfile.png��������������������������0000644�0001750�0000144�00000003271�13061031411�025572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��yIDATHǵklUw;ӄҐBKiU$^.i"HH@ Zih|�!>B ,E[hMдĉ8=3s$QKGW9�g ?=ieϦJBKQ =bTser�ae2'N- u wXwW{�|�O7]͏fإ_̮V& =ī[#~ӰO �vܭ+;xS(-~68|N\8rZ\ Y]n ⏼ys3 �M-T-C|2uxnp+c.M W5p_*I.!JSi77gFג0~t(wϛ ?�`**4z5!i ]H(|.P$ Wgu'&ijkUR1+m-j !֤z봸˟웻x!r"gV([wDU/OlOP!t2 3sIkNAb/ec�^u_ vo5jeFVb̅/3}J/xCwQEc^^Σ|q4=�2wt4 qDpNQ}|Ap1&/UkR�0-~DZժ5۠&5lrZ$ geRZK$j</{$ ^Y!2yaf0>]tf'tʪYƝtI49SoV+3ߜ:ُڽְug=g~ %�rN]=z{;9WMM v\!=~zC?d>9˱&khԻU묥YwDj+M7hσBr䴡_D� #cw.*/LTv?Fus(frr#sG=baGxFo#j]ySc$<Bljs_ Uh2TR RlINN,+``д DfH</^wUˠU1 y U=sB֪m uu]ݷ]ф 3 tbpL ZSgvE�ޓ=qǶOД e']ʼnjE Qri5 .#Kܪ�`�Q7qdTOV}~%odPpu`NJ4Eaa:Zɒ##A]*@ N�X;7>̒pt2{aԙK�%|}M.#?в}lyP�.Y`~%)YNE2���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���#tEXtfilename:orig�LoadSelectionFromFileG����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_loadselectionfromclip.png��������������������������0000644�0001750�0000144�00000003113�13061031411�025575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx�� IDATHǵo\WsOlO!mFJ# ,*RWld6*@7H]BBK"!$X4;~=ܹ3ssaB\D+tw}$ݼyuƍDQ 0 ۝;} 3+J kVV*E+8hӣ7޷8N&ڭjq<>f"zH;hs$ ix&vT\Q_sw'&u~cvq t& n %R(WCG;voU35OB )^B% .matάS7Q.; h=@_)4SN`e&is|;"䄅*je:ig)`L*Ro9Y;D3i+2¨M8WiO)#�Shs5A^q=#<Jz} RWI.0y8˓gӇbgsʾ4)TЬejT:,Lϵ'i&ɲQRAO#sKfz%|E`j{ ?w<R:>ȈBװíV1v*s$ǚ)’Yy鉀6iQhC[Z-wOzR$bE-';Vd2Kƹ29"B?q%7b6%_P/MJSɐT;63r֓ѳ_N⨀E -d7ߞ3q~kܷW._6?3hI 3MX&\sl$:3"luyhu۱ P洍X1O_n⇆ӑ(^Z/о"uW|2|PY;l:/|K[_{{vT<EUO`mB$3 p]h#eYqgGxոIqV3_Q1LQl?A1E!=B4_i?9P:gƒV=xTB(X4dp{c]ķH뛟癟 WqUQAQ~0I'\2S)zd_s%TJ)J*%H!,oc-1B:n3]ekz9TR]e|] ?xY͕C~���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���#tEXtfilename:orig�LoadSelectionFromClipk����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_keyboard.png���������������������������������������0000644�0001750�0000144�00000002562�13061031411�023023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��XPLTE���lykx6>Bjveqzq~vn{jvht~R\cgs|mzkwhu~gs|NW^%*0jw^iq6<A ���|sgu~ivT_f\jrgvjyprsz{ŹĸĹŹĹĸĨzp}q~o{o|p}q}r~r~stto{GORV_dQZ_QZ`S[`=CG���������������лȽʼɾ˻ʶļǨȩȪǥɰɽ䮷寷Ⲻͳ毸峻ƻƲḾõŹۿƸ鶾贼涽½ɹŦ緾緾¸þȻ趾¸ı¬ʿ髳˹Ĭ������LtRNS�A8c ]D `C'" +,<`51/-,,& \Ojijjjjjjjkh`.kqqc& ���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��cIDAT(c`�02agfa"ō)/ (!.,"*&.!&*%-#+'j@ M-mm]=}824J@a`_ P4$4,<"<"2*:&:6.>!<*1 (a_PXTl0/)-++ooljni5՝S?aɓ-SN^1}Y̝7y~@ ˅/Y:y+W^l:i 뗬_2b=6mJXUnٺm@c{;u5Pzi{@`jUS{J>r>r H͵w�J8:9W7'&#i��$w}$���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�Keyboardm���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_horizontalfilepanels.png���������������������������0000644�0001750�0000144�00000001565�13061031411�025461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���y7p lh�f�e�e mo mkgg a>SQ�)�&���������HHg[NOoK9:ڍ^ΉۄG[WWkF46vfVW���8KN���tRNS�OhjjjjjjjjjjkR3=>���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx���IDAT(u` C 2op.<oKq( bDIcT:E2)/ XˈX*Y*U"`ku&[ fh6xv6;eDg`16t6GfӉc\rlwva/xr!׋DǝrA/q |! kY!Q���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���"tEXtfilename:orig�HorizontalFilePanelsr���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_helpindex.png��������������������������������������0000644�0001750�0000144�00000003326�13061031411�023202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��}IDATHǽ[lW̙[kljk;v۸qhHKhD* \JxC<QEKH <PKj7e^_ֻݙݝ+G8y}>/W7C},+&ChKeRK5wyM}޾7O�P5K]f7s oTw?kI{᧹џ|cO=H,Vn.K>$w$C2>[ r)_F?6~k/=7єx{zږC hvi| %٥Ac~J#Z?xo͹'8㯾G??:,2T! C⇂ PBQ%Zc}h#;NډszP{ٱOO|?^M;M*xf�v6*61S2=ɱ>9{k~ۭ|><xяLoaBz(/rCIrFl5%m(I;j-*~ ?@ ~Ӷmj%%2\MY+Íό=h 2P]'$OGΜFg2)CvMnEnՙ)Yz�(C $J I4Aee*Bi!Sv�A@kM2f<;eiVF:c)�!ou+|?kH!/~xzT?Retr@J 욳C ~X0PL L/U(Q�Z} Cϩ\k@m} BB4bfXDui5=t LTGNgm5}vś%4 T$,ַԫykn@^S(l޺/s'N<jbHit6B0q8ηxej8 qeHl2Kkew[{r),Sv-he`qTcO%}i2++żvp"ݮS9:T(ChkJNu&!CvH):Wn. zfv<ϭktŋIC~RrQX\)sƒ_x~➱kVjn{ 0bTd,BO"H#$bʻ-ϮsRʻ?|ۜYhJ=4hO|l_Mg>כN'1Bvn]u+V/o<ЉoN$ SV|X|W[ 7Z:]^L1 X5j@,m'���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�HelpIndex`���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_hardlink.png���������������������������������������0000644�0001750�0000144�00000002647�13061031411�023023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���vxx̺WYY⵷fjjOQQᶸ෹fhhEGGOPPľ8::899::9=!9t@'If���XAde 7Z`8Z^9Z[9ZY:YVWWW:Y///nooghhfgghhh^hqST<[����������(8p>u=t<t;s=t<r6L������������������޷޷jzuvxxՄl~jPk{݁h{bezbd{`̀^vojfglv���6���QtRNS�  aJ \qqq "#)���bKGD�H��� pHYs�� �� ����tIME (�ݺx��jIDAT(c` a ! a\p nȨh0 GH'A|dbR\"%5 R32cEb9`_PXT,.H*)qIDx>(C(*)Du\ Ԃ@ \[dIm@P-  'M2y4U 0csΛ`:Tb%K,]|U׬]RC*~lܴymwܥ ٽg=GՃq8qgΞ;o`02p.\|7n^11K[Xͭw޻,aN.n.^ �p穐2?���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�HardLink Z����IENDB`�����������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_focusswap.png��������������������������������������0000644�0001750�0000144�00000004626�13112333276�023253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD������C��� pHYs�� �� ����tIMEɸ'�� #IDATH  �����������������������������������������������������������������������������������������������������J������������������������������������������������������������P���� +���������������������������$���������������������������d�������  ��������������������. ���������������������� �# ���������� � �������������� ���� ��������������������� �����������j0�������� ����� ��M# �V& ���������������������������������������������� ��� �������������1����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������� ���������������������������������������������������������������������������������������������������������������|�����������������������������������������������֡���%5������� )��������������������� ��������������������������������������ӌ�9��و�0�]8������������������������������������������iE����~�u� � �h�������������������������������uP��1�.!�G7�!� ��f������������������������������������������������������hC��&�� � �� �0���������������������������������������������������������������������rO�/���#�( q�P3m�����������������������������������������������������������������������[�qI�4� [�G.^��������������������������������������������������������������������J4������� (��������������������ТA����������������������������������������� ������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������^(Q����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_filespliter.png������������������������������������0000644�0001750�0000144�00000003016�13061031411�023540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE��� 8NGg�Ab�Ac�BcGf 6K ^i]�[�[�d�f�f�e�g�t�v�v�u�c�Z�t^x Lkjihijiic���������������iНߘݎ̋ʘܡ̾yluhɻ¹ncs`ocûڞtiq_ubshq^r_p]vko\o[mYtiznxfwdubvcvcubuirej[gYfXn`՞߀ո熸ײ捼٫ܣޜ̇~{qzpzpyo|q΄{hYucq_q^q^p^vcdU̮l^r_nZnZk\Ƨʬj\tap]p\k]˭ͯtbs`l]гj[wdk\Ҵٺm^k[ַ���;t���)tRNS�GEvuwwmjjji^\\\mw\x]Y@8C7BV���bKGD�H��� pHYs�� �� ����tIME (�ݺx��IDAT(c` `cJphji6426S3s K+Ȑ(mmckkkgjkkc usrx|AA!aaޑQAA|@ ظĤd HJLIMJgdfed %J+*"QW M- u ֶή޾ޞΎVAD&O:mӧM2s B Y̝7@h%K̞% Z|U׬Yfͺ7l\lXb۶عk'ؽf-QX}8x#=߾` 'N:ӧl; �K;…._r.?y6ܹ{@[7AFI>~=@'o2r a(*)%TT0� x���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�FileSpliter!$9����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_fileproperties.png���������������������������������0000644�0001750�0000144�00000002622�13061031411�024254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��yPLTE���Ė���ǔ���ŗŠ[]]>@@899%&%}VXY;<>}~vwz���rtvceg9:;|}%&'���ijjijjfgggiiabbfhiikmdegTUWsuwYZ[���������BDFbce\^_&'(������������������άֽ権аԾʞմ垠̣ޓŷʫ•ǫ���,%���OtRNS�!" PE5Cpqqqh  !)^;*  ���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��YIDAT(c`  ! !a\p n GHĂA\|BbR \"(R32#"A-*/¢Rq DYp9$V $ː@P$\"j:Jj렠>HJ&Q M-m2rPWPTHO&O:mU y,\xRU5IJ+@`eɪk]~u DM7o^bmwܵ[S$g/G%?'O> @F@E+k[;0酞. }|1đ�Ĥ@/���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�FileProperties\I���tEXtSoftware�Adobe ImageReadyqe<����IENDB`��������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_filelinker.png�������������������������������������0000644�0001750�0000144�00000002741�13061031411�023346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE��� 8NGg�Ab�AcGf 6K ^i]�[�[�d�f�f�e�g�t�v�v�u�c�Z�t^x Lkjihiiic���������������iНߡԿ̬ǢǢƢ̩ݽʲs}r˰ښr vݙs�tߞ㛺u�v瞼x x렿wvăń߀ո熸ײ匼٫ۡߘݙݢߜɰʲԦܩ۝Ÿ!�àġ#��#àƢ& '˦|&}&ɠɄsss��� H���'tRNS�GEvuwwmjjji^\\\mw\x]Y@8C7e0���bKGD�H��� pHYs�� �� ����tIME (�ݺx��IDAT(c`  +P]]CSSK4u488\zF&``ldj 4;k{ sM'x{y:9�%xCBÀ 4<"20ߏ(OK�̬윜<;=,_�E%%e v>D kj̊r_cSsKk[{GgWwOG{[kKsS�HIL6}Ɣɓ&NI̜5{9/Xhy@Y3@KFF.[bU+W.Y+ X~}ކ6oٲymyׯJm߱c]ݻg:|'N'N9{p8X /]/]vDzUn۷ޫ2J?Ǐ>x* C @ %e ;��6ȯ 7���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�FileLinkeryP����IENDB`�������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_fileassoc.png��������������������������������������0000644�0001750�0000144�00000003151�13061031411�023166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHǵˏ֭~TuOwy11Ɔ@DBEƋ,6?`+6YE B"bm㙶{5wWuUˢ{؄OSus\]K�<ȣJw2L\粯1�sGBY.9uJ_ @ӥRx w@�B(XLpgjuup# #c²,N->31K>Y\R6$-H*H&aPGGmH1X3赱ӷMMrIpCچ$ ˤȱYEJM QħKg�dC< aP1a}}fd!.{Y|qm0\B7N apEJ obRJbVkJ Jj:&֚HF$.`,k*( $4V7a@?DF`#%v?x7H~vRJx/cACCzfc:ئǁޟȁ*qħ=(2ᅢ@ 1kFԏ@` ([E{DZy<%ؐm0ȥQ RE Bp_^?cd&P H%sIBw,^ Lp788)#2䬈e,H[GBB,*WkR)n3EnmR7!Ȥn 0ӏ a'hn]3aF*�f=`4ni(cBMLN-9${fndig{(j77^y@|9=yXCv:ͩ/;w.fjv;8$яYEF9tO=o~ugM;z nӿ5*utamf56~a/i6<O8qW ; 5F'ٸZ^0C@!(MQ9z0_?7zkzz{okZEQփFðe~U(O&71AT7+LfT*ڝ}<ϛjAݐ<wb~+㹇s{ffVME\)?9y8bI%2O۶M0;K@yn2^fB0 h])oJ|z eYd\! F/uy�ܸl`Ì-`\~ 1C~^7iCJ9���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�FileAssoc���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_extractfiles.png�����������������������������������0000644�0001750�0000144�00000003243�13061031411�023715� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��lIDATH͔Ml\W{ﹿ38c;$Qo֩XPݒ H U B *EH,X6,H A!8'{̽3w{X4N@.=;/(ŋGOG󏾟:d\:ٞ+/NLߍ-'3g[?=_+xBwrպDWJ:>4_nok9D;85BBSS04>$.Yeⱕ/x"{NO;g?3|'A7C)A˥Hd'^<?>nT35FWK}g 3ݖ:9AW $[ cRZETo%gaX޻Wl_췗��Vqltn4tī \NЎ'q 0 (px6U5DwprFKV6~ \b K[)ٙRCFI+bm<! `:9C,M_Q׷z[i7yo&+o jԶ/=aF;gqϻKR&?ȁNۼS _~69y |6U${KW6J@aGnLƿf%)oxKoS<򈚰Dv,St[{A18+" j02}fNy mURK&;(b"-ThZdy 5-߬zzThI {x(EfΠuZ{VաZ׿ݺxv?6�;w[Oz P*QK<|ЫiZIW/W D�0u\´m\/`gJ汵Aݭ WcJL&A2�qHe:1ͦOd RXHQ=0M 8IAӯ`FQ�2tABWmvku*B:iLb EUЄBEQ�b:R"% !E` t(.MIE{ ISM9yIqt0uTUET4bI¨.4 ǸU{7/Η_, WG'FROLd?64نi $y.vCj=Zߨn~:Ɯ;TVgi@PN:w̹CB)u+T+{\,,yO?/�@gz =9#FOL=3p }˻^[t{?WDUT���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ExtractFiles{����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_exitfromtray.png�����������������������������������0000644�0001750�0000144�00000002400�13061031411�023747� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHՕoUu9~ѦD F"BMj$.DBM ]iĕKܸP7n1ABT E 4mf\+jIn<y;?N]G{odU_z1?0wU=J!ccWQ F3jķ"QIΦ~dĶ7.@ ATeC@J~TY T;~ae~ᘵ^DB2SjY`�E4)B K_#$$L j@�jAjRˣlm^ݨ9Z())DOX w]o^OWyB@Tp<Z[%ɱpC`pzYQ'svϳ01D#y1m0EQ,S2`g9cMG ) }n;WJ` V l6ĞC\މ.oI}ɖ TNr#&3st z 4&[P 3+ܼkݺm2Qpo[$aK4W-uOZr#)v<BXO y5j {Spz҉I>rw9|is1Tw- Y X5Ru <¸}=ryӀ= Ϗ3>[;2vDj&yוg!ؕ|iѽ]o∉U 6? >5�j5AJ@˃v KT# ?Cq wCO 3 8y򤴫6ftvi"u*Sݫ`vv<ߊ;)QI)T:(̹''˲ d^4HD6K+k&D;З;=yCeaU wsol%@ kZ?#&@���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ExitFromTray���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_exit.png�������������������������������������������0000644�0001750�0000144�00000002370�13061031411�022171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHՕoUu9~ѦD F"BMj$.DBM ]iĕKܸP7n1ABT E 4mf\+jIn<y;?N]G{odU_z1?0wU=J!ccWQ F3jķ"QIΦ~dĶ7.@ ATeC@J~TY T;~ae~ᘵ^DB2SjY`�E4)B K_#$$L j@�jAjRˣlm^ݨ9Z())DOX w]o^OWyB@Tp<Z[%ɱpC`pzYQ'svϳ01D#y1m0EQ,S2`g9cMG ) }n;WJ` V l6ĞC\މ.oI}ɖ TNr#&3st z 4&[P 3+ܼkݺm2Qpo[$aK4W-uOZr#)v<BXO y5j {Spz҉I>rw9|is1Tw- Y X5Ru <¸}=ryӀ= Ϗ3>[;2vDj&yוg!ؕ|iѽ]o∉U 6? >5�j5AJ@˃v KT# ?Cq wCO 3 8y򤴫6ftvi"u*Sݫ`vv<ߊ;)QI)T:(̹''˲ d^4HD6K+k&D;З;=yCeaU wsol%@ kZ?#&@���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�Exitz���tEXtSoftware�Adobe ImageReadyqe<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_exchange.png���������������������������������������0000644�0001750�0000144�00000002556�13061031411�023010� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��;IDATHǵKlU}A*)AM Ƙ@+0č 5qaqe41č MԘU&!V,Lg:t:}u1Z:ϷrϽss6~G+m ϷXkoECAɗM{hߨ;0Zlic`U"Ү8CS%+6ye;ʚ2$__.e_`-C_}U.�#s$Bg 芹!vC(Uw�a)>M@[Hs|G0(QWf){ #]�B./1Ł7EXy<՚|={J 2r~`hQS)B8`6 98Vn��PcBU{U3_x~-cv:2l8ZPH7rњ?ϩHB<GA,Xp|8(T ƉpAfK�b?F*18(:jXЪV#\A)hL:PP6tmeⓜ| %tC+֚E3q\ l ZAUC6ncL+�(0aW`3=OGtO>|:{֓6>c-% `hj"<a7Jn.c;eX~ښF7$Klxu R#XW1]羾8Z6-kАH#QR5LłD v RŸo2SO8!^~ś�5bp~;IZ h &eyLQ\+\I>=�Q ̨ Mܽ�ut/@OȕI^a_5,bLOWA~=z@~`foz}71H#<~Zxz}7(8 H3ZY*g`ݝd�_Nx6܈�,TFsz1)T\1�Xվ}{I&6s1WjfKU?Ovm ML:{ZJ#}JKP.D}V@6-rE���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ExchangeY����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_editcomment.png������������������������������������0000644�0001750�0000144�00000002156�13061031411�023532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���2s[hkjRrԛrQs%SnO���\���\���ZZUAk���$:ff$: 1W{qq2W{ ���,Qshi���.FZjcd]<d-DHzr .� � � ������Iq,Oo���<n{{(If'F`-Ux0F���������PC���LtRNS�>%' Cc!!UU^9Ń<@//( P 1Rf< KQ;���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��"IDAT(c` 021 3#B |}88`\A` ^dTtDGEBcb@L�PBX$.>lj%Dⓑ@|R(HB<%5 %$32@fFXBR*;' dKI$ed ?ON^^E20((RVQ{P@M]C굴 a"Шo`h&:ҰP5kj6+k[Dٷ88:00t&!mKf@�`׋H���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�EditCommentN���tEXtSoftware�Adobe ImageReadyqe<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_dirhotlist.png�������������������������������������0000644�0001750�0000144�00000002576�13061031411�023415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��$IDATHǵKhUsK&NZ{X * qSKq%RRtJi%F 4mR$Mtd.s\L.3IZk>s{}sGƤDAL봲K^=zJ�,zrpþǏ&7&…YeQwpNny1(͸>ttRJvoHvO3 t:PbkjCGdv<'?>[5G%tXcHYJݢ?ݳM �0!B*`+BM5B 02EX H R!0XB *2| cZ@�1KwXA iYZ@)7M)W"l@k{O)M^ ϟ:�JQ+s*Z߁-/48 4ҽq/^-XDhCq2ލ!rTX[I`*s—}s�BSRtKCmxNچؑ;ģ4Vٱg*%#4WNv!(bgP22AkA1{mfⵓ Q$ZU]@{,[oK@11A0dώ z!0~]@#PҴ"8AX m;HX1TF'rǿ >] fBE`$FGDگvDt<MO2ʙi )bݫ@i麄^x֎LݏCWFQ)zާy3aZp`i/Cނx$EݻD h vG'^6]q2jOޝIvm^!<WATCcv'/ش�P̉o [> AJ+#s} |4 $qs[p[~$<bmnu@%r}Sq$:Aq}hxj<)O`rXOܘr}h>wZw㦵 1RPVr^kv|E(0Y���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�DirHotList_���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_countdircontent.png��������������������������������0000644�0001750�0000144�00000002642�13061031411�024444� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��CIDATHǵˋ\EUuvtIfL$08ʅAĝ"(.\&B"n\kAe.\ĿEB2y81!i23=۷oUu{^9_s gS�S_6 R>2ă4bko?X�֒'N]|we(dy|80#"hc@y.֒\; IC{*" `qqu@k"_~+UQ>, B�FI {R=4W. 9@7sCR xRxګM:GA&LL, l3UG$=ZeW4uZ W!(l'_14e �J<\l_s �: R)s10}8 ܽqThAJQV"2 ƒ7�"((4TyV�JF"h J Ͷ΁s[W/Nv|<#SіV@@!<PcIC?a0^)<;KyHq<#/$4YqGϙZRܻw:1PD7,/n3SqLT$PFD=˵tV Vڽ{X/T S�6,g><ETPJ:cU+|`faLUZkyCAWiHLdgPeЈ#96M桬Sd*"^:jNJ2!/bC@fQ, T2pNG+E 7pC :9֚`@0K"T;Tc"_Ŋ`oگg9n1=@q}>0IѠ^,ʥS:Yko)oArGlP�Z+ׄĞ=}l<J]U011%V)Z)?;G^P+KOv1"p&xA)D"4:i2l?[<xlj@|0^O2zkQ쀰L/vƃ(x6&3tG9NL���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CountDirContents���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_copynamestoclip.png��������������������������������0000644�0001750�0000144�00000002461�13061031411�024432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǽoTUۙ)m-JP@&C0B+A6b;\61 wb0q!AB| tNwf9bi;R* };>nܹ_El6ٳgO\w^ Nd2y,FQl}txG{|n~6_Xaq+E}X<Z&S;s#\ 0ʍB7#q {7ǢOz0A.#nkJK0a@1;FXg  "ZںH$�QqQs\:{^ggKf1(i x( ϛM'AT/yS綻ǯ9>.Rol7Uڇ S0o}H$�ؾ7}%^c4oAk"Qw㲖a7j 1b#΁e@1zyǻ.ܟ?GWeКĢQa-Ld^פe_Uj |xĕr`hiJKtw rdrb8L*+⯊5�ZoX2ay8#ۻxG?қ[6!SWP*uoYkReng9C:Ӹ'  X 7uPMō4bjZR-=CxGoo/"l xzW�QE15a d$x*TABQFtcM=�f")eoZxk)j 6X Xckҽhm܍>8JLXYe"e9!#z"EjuK\# O4l(Pa_5�8RjZTm|g|aĕEclqP=KE2FnO 0,*c(kx299i9Rc D"?=55B!*+R���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CopyNamesToClip;����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_copyfullnamestoclip.png����������������������������0000644�0001750�0000144�00000002515�13061031411�025315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��<IDATHǽMlTU73mt:hP۠Rb!$ѕq#-Cسҍ \vl;c  C * "B83mgλSГws߽sރӾon&LDo<;طgDbX:ӃۺqwKs B./~�Xf /|~Qk >0ӕri.n*E*Q#[H5 dt؟ Ma@a2A .[>,2Ē$7X�hp.µ RUA6`]ENO|Ґea!'W˷F9;wC16s$:.1xb]VW_8�T p){lK>)BcbzK&-4j ,cPŊG5�R͛6p}WfsM{eCcCEe:;ZcRGG!@R 1J KE!ݦ5e53ʝV,-d(|a%Ԭ(U8ݍ 儉 47sxLCַocZ/sc8|Dϖ|EX6U `%<gY{=tm+M2}&&pAVUZZJz?u ,_@foKc P(^'Zwyq2e `k*a*$r{W+8/ֺd&פ+ZE@9}}�D ŪU�xj=N*D@ GQ U9\6K`j^ "D>z0^8 F"}y^� Hjl #&NW*|]#G_PU:tkTj[V1TMtmldT ij~,SXck D' >;q+{ydʪڠwn ¼{GxaBgΜDUW@"OOMM=1I5i���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_configtoolbars.png���������������������������������0000644�0001750�0000144�00000003150�13061031411�024230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��WIDATHǵTklU;n-v RC<*U@ J4&? F$&l+K A05F!X @(1TlyK)lhv;3f[bbss�3Ha矝u(Lte5�3&[cMU] u�@(S’j9c^7Rۖk< `2V\ lbՎ619)3°ayQ b �,i�3f+5YUTXM?ҍ։@D<!(ʍc5`$JHO.]}l>Z\TU@)ن:xފg RuDF/zEB 8x>/>,RM&mA(JT+Bu̍Lz@`jn29Ǥ)8tu�?bY9TU(hhG0{#8yT:]C˜% ^oߘ={wHJLN`FsvF`uP!!-wu|(u(Xp� @?Vo>Gl69(%WּThrf@Hϐ͊!PtuF]HASUBp)xMUHL[+CkGË+A4W 4Vs1~ \)~p>nY@4϶Kຎ^!N]׷Xs1<j=ׯa򕹄S#I:n^ +�4M"϶1ro +oR rrrHE׍86Z QWŅ ~�øxAS4%�G"c(!Ue&nY (,@j060ehX}9kB�'MK~?PT#�0G lJN$ @wo� |Df&b@Djճ=_tS*8'-5+Ʀ @�>šx.a;U_'<Bن4;jEmbLQ pt5+Yp�Zsk&,IH^X12 ��ב32E"1Q?VU]?$=�G!?_Af`@q/ hȯ*`)Ɛi D�f dQv+Zd'P0HxՈk]7q *DTU _�|HEqoǃxIen7�O߭f)N4pnK4s ZnF# %AN.CF ʢ\s^9yeW %x B@@`a3xr5.@k `O @4.^���%tEXtdate:create�2015-01-02T10:34:53+03:00 .���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_configdirhotlist.png�������������������������������0000644�0001750�0000144�00000003075�13061031411�024576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME (�ݺx��AIDATHǵozkz`kIHl% !�5Em^ԫ"?EUjP/"RB(%_(%$&vzg3;3�*^{> |!�.r%"*@MkF ̾^��}8ǣ10uRϟ{I*JYڴgqK�ݦXs:0G΃lD׌g!Uk{G�CPGX Ub:{7n]H$麿Y�GH !�P(.z!BU5B މ(źN/XU@#) ؅ Je#"zwط#$e{}wW1RC:Bjk@%_}@"L7νV 4jc!_\ӥ !j4mjĐ7><$ 6 ʜ5^Y'Q f 0VmDԖnD|/w}@Bhq)/vi؁GYqeF/.Ϯ�JL(W4.Ͻ\啧0c[ic POPH4"Fʙ[g\,L|^yO&SFym^AsL%p\)1eG@.[y.3triDYtu?E&& fj&°f(_rV؅"c~!l%4MĘykMV1"(3NGzUj2\GF, }ثOt*Œ&ryBA~*zn{vts=Dڀ?chqַC+ JNqxD7[W?q27U6_C-ɒNO?Dg1zf14cN9ڼ!"aXC Fc'w>9�iolx}TΝ{R'lÿ6{cVbpڋ PB#W>rSU(;bWv~M\-wo>іޟNeF ?<sq|rC,R\pEHA2ZLj V�j~lۦ&snfzˎm kcF#浫ſjN>Wm)fC,xj0°]xáw5�;^8#>B>nQWU6;Svt荄T7RjfOxrCdg:hyOE4C7vGO- -V-Qӌy:ׅ�%ˮ\֮b/���%tEXtdate:create�2014-07-19T04:58:36+03:00k���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_comparedirectories.png�����������������������������0000644�0001750�0000144�00000003057�13061031411�025106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME.%m��IDATHǵMl\;g&'M\'IDQ ZJ,&R!RQؐMDu !@m*B$i/3c̝a1?Xr+]{ys@бQ| TߊD Hm'>8u}wҴke!xdrhHm[Y:/8釀�{p#Ĺ9G h@\7e|hϩs $!w=� Pվ vVv񛁆Yu:ɻj2Q6?7?+$bk-&Ts`s(cga1KฮB#w H}N&93A8!zR0n(Di)Jd/_uzM p%wgN $`TBa !5Z~TU1�\~}L9ax/˕˾+ .,ϝQ0"ڽR \בVkt,Nc}dy&rFD](*?Al3--RU /j1L/J[< ̜4P1<IRc8|YzbQK]wr~{vI)u[iD᭷Z>###.N GH%s\bi(ND{A&n۶MtEkk7FW"Dj6sq&[~i7Y-KxC~;?|E2V bb''ŋT1P6#FB!'3Ɯ4H2T|Q΢Jv {9lCAE 8?-kC0 WR|A5{F`dEۇڱc k1"JJ\^6(k!7@<J=æMN;m\W^ dPbxɤtK6B3Y1GPR)BRn %жNt fg]eT;MyJQR_bp_f,#0oF.geXk[!1B<?uD da| ÛDf_-i+Wɗk'W2_�PZY;NMR]l˙RFzd ]Oz]!aڀ]8qQٟcUtDng;U(p H}|\z zG!@A���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2015-01-24T05:18:46+03:00����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_comparecontents.png��������������������������������0000644�0001750�0000144�00000002624�13061031411�024426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��ZIDATHǵke󼗙MW햵n"%凊냔A!FHdAPBDtQb },M4Hp/̾syӇ]w5χ9g)>}uV+?t Hf<>n:JVsάsB$80564SbA[kIdsGJo$ 9Vȟ,U<m=~;l�%kk5|hYTsfp~xZ͸CXQXgbȪjɬ�*g pM �`m’keZ�*}Cjm{[%\c8^o93?my ʔ*b465dke[kr"ڸ/�uWG/Ő%Q�*J!"TE:a+Â9׋8;  9} ##SҗK!#8ZQ*v_'kCFaEs#PMcR"*HHi#^aCb7mhc7'.�L1X YFQ<ϭhXuG |Pq(@Ԗ@RAL!D(T9"tvΊųiG `e �bCu]4ɠV \V3XDPt?N)5ٕl>鞟LȊL$t3�!U2aSQJG _ ]ш"9[μ }ih ' GjbwYx;pG6<m۾ڒ5 q16RƆ9|G)q�FԿ3*lHc%ۼ i;xFʆcb:{{~3�ŢE1O  *T@o'ןӄV&l&tϙ>u ρ|fӝ[6o>c~UzTZaK:ȣq/ןxc�9<ܘ(M5>דtkUaZ~Rذ8\1xljJ7Rh�a`t]�cN���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CompareContents8"*����IENDB`������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_columnsview.png������������������������������������0000644�0001750�0000144�00000002734�13061031411�023577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���~~vJ nkg�f�f�egd>SQ> a �*�&�)���������a^kH79t`OQPߘ⟺ԭ©ܵӯ褿سǯỽٴ̶ܺŽ߸ӽȿ���%p���tRNS�Q\\XjjjjjjkVR4=3W���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��IDAT(c` Y�3#PMF Ȱ%Q;PCIYEUMM UPS]C 4555u459\z@`dhlbohdo03wptrvwqKp{xzzyzz{xq%CB#"cb"I)iiəYii9Pܼ¢ҲT JDUuMm]}Cc]CSsK}cC}skHϯBľIxSN>cٍskyBĢK.[bk֮[{͋ [n>c]ݷC+C$=vSWi<{3H\|eko̸p;wݿ}ңK=|`^ Ja�q 4ĝx�=I���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�ColumnsView:E���tEXtSoftware�Adobe ImageReadyqe<����IENDB`������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_closetab.png���������������������������������������0000644�0001750�0000144�00000002265�13061031411�023017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���P[5w6w6waO8tUnyxyqEoVUEo :afl@f 4VaqMp� @_ǘkw_38@~KutcMJLx;vvTd4eE~E}D|C|=oe|/!������������."1$������1%TA1%w%G7G7w%0$P@0$-"H8YG\J������Lgf���������egggeccbuwvvɕ̓줄qg|jl|jukra}h\CP5}inՙtkq[K0I.K0t^okmZr]rrjSn]aNs[HjUq\o[hRgSkUiThThTlZtaub������QtRNS� $ !%x%hfQj!%"wk_f7<vuy?ae qJY���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��IDAT(c``dbfV6v8'7qr@@PXBX$4,<"cbD !)ܼ¢bY9bIiWTVU))�%T[ (:=}}&% x)SN6} P L-fΚ={9Ace=w-EwXxENf.nn.h.t)�T ���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CloseTab���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_closealltabs.png�����������������������������������0000644�0001750�0000144�00000002440�13061031411�023666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��OPLTE���P[@J X)n7x6w6waO8tUnrWdvyxyqEoVUEo :afl@f 4VaqMp� @_ǘkw_38@~KutcMJLx;vvTd4eE~E}C{AyGD|C|=oe|/!������������."1$������1%TA1%w%G7G7w%0$P@0$-"H8YG\J������Lgf���������u{ؗdQ̓pfggeccbsXˋywvvɕ̓\ʊ줄qg|jl|jukuiВra}h\CP5}inՙ`̎tkq[K0I.K0t^okmZr]rrjSn]aNs[HjUq\o[hRgSkUiThThTlZtaub���Q���\tRNS� $ !%x%hfQj!%"wk_f7<vuy?ae ,���bKGD�H��� pHYs�� �� ����tIME (�ݺx��+IDAT(c``dbfaec�N.n8/@%bb 9ER ,!- 9yr` yҲr STK(7465wtvu54{'L4iӦϘ9cPBw/XpK.[bF&f׬]n,V6P`kq-[lݶ(N;vڵkngԠqu۳w}{{Jxzy<tAo_T G?�`  E$2*:*ҁN �fTf"���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CloseAllTabs����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_checksumverify.png���������������������������������0000644�0001750�0000144�00000003115�13061031411�024245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���wy{���egi���]_`���{}_ac���"##~tuw qsuikm���BCCPQS9:;���UWX���������ghj|~DzfOrtuklp>58E $%&< 6:=�FGH=~23j�&*$)*+=6)/\zoPOT<~2)1^���y0g;|().Zz1]oqs /Z}2X xgKHSfhjrtvxx~Pg8rOg8yyOPQ���������������%G����ÿȹM-$,�Z-�C2:-�@%�)�Ƹu �˱}m# ��ʏ~� в{z~������tRNS�C{299$7./5:<c"O V?q#;L 5F%|5C5Pp'5fUC4h9>4h h hzwC8Y #%6ue���bKGD�H��� pHYs�� �� ����tIME (�ݺx��IDAT(c` 021#� +\}9P0w'\{ -EKxx|K-KHJI/_RFVN^AAQIYaƪ՚Z\\\:H7XfH$ T|ͺ LN W7=<Wnfc`ݴy?L& 0h.Pmw GDFg PIJ>pPJ*WZ#GedfAݕsSyϜ=WXd /.)=eeW.]ZXS_Qyn߾sU0 5'O?K6<}W߼}]cs]6Í>}Ҋή޾ '%L&O ӦϘ1}LcBI�_]YJ%���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CheckSumVerify !����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_checksumcalc.png�����������������������������������0000644�0001750�0000144�00000002554�13061031411�023651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��4PLTE���acd~:<=:;<,-.)*++,-(()acd`acEFGEFGFGHRSU678������jklDEF���������OQRoqs,-.���$$%z|~���������<==\^^HIJ���YZ\99:Z\]122KLM���fgi~qst���[]^ijlŭ~���]__fgiZ\_—::<=?A./1124/02''(&''"#$"#$##$""#ǰƹȳķ���n$]B���tRNS�6\\\6 cYZYm~# R|! 1pEC Y/!kp$RB<b } h 񨃀$;==;$|&+���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��8IDAT(c`YXa.1qS `*'\g3fysΛ!(EDb -WPK()NpьI&@EfHZ4g-W4g,^I'g9aH({L Cwr?�%tWX*"2 ]<:f%q@ēS,MMK2329yk׭/(,*.)-+KTVmXq[lٰu[u \n;!`ǮDcSs w%:{za"8,BQ��8oc31���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CheckSumCalc+���tEXtSoftware�Adobe ImageReadyqe<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_calculatespace.png���������������������������������0000644�0001750�0000144�00000002776�13061031411�024203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��IDATHݕMlTU7G;PZZ$7ĭq `ch .LP1  ii|uu'9y/=}_7`9v2,eYj=U?Jn[帽NS[N[a(,cUB_/WM 'X^ 8~KdSgmnC(эYCgst^ hDE4&&P̱wwU79!C{7vjꉇpgQ"t"KA b')nM\ʋ@2t8|%X8]DŽoE7H#Etm#ma;iXŵd7{o65f}0vkKe7<wn Fatl9)%aئA{^瑛&j:vӌ -)]G&X PDojDU#:$ ZzA( E_і5xot?0h8FcnWehdI &PiMBv| ';0hT  YF7��}.?BIjީ(E9Ô'\UZ ,#D �Nʣ=X f1xj@"HӘ:$g#TMDfH!1NٯgE1#dIZ%l62@ WWxFndEeJAc}Da KyPΤ%-O021W#T Fi0$%6cyѵTP*@Yfv[zH9t6E9&BHB-0 )צ3aKTWMqs�a?3~a'' @)7R6Tތg7Rr (x~%6llБiOZ'lUq?Ցrs>RTgrù玌^>Tm̗,7q\G7wE\O*B!kJ@uJ#ۿ @m] #F*ڭ@8P# !%BG }TgG/=;:tdVaaҟ6wn}T惉xôjEZ*^~)?90?qW~ eVY*4tݑDk48hBZjarl;@(\,k=ll���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�CalculateSpaceKo���tEXtSoftware�Adobe ImageReadyqe<����IENDB`��doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_briefview.png��������������������������������������0000644�0001750�0000144�00000002645�13061031411�023207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���~~vJ nkg�f�f�egd>SQ> a �*�&�)���������a^kH79t`OQPߘ⟺ԭ©ޓ̴ؠֹ褿سǯ㘵кޥ٧̶ܺ鞺ӽɹȿ���R���tRNS�Q\\XjjjjjjkVR4=3W���bKGD�H��� pHYs���H���H�Fk>���tIME (�ݺx��IDAT(c` Y�3#PMF Ȱ%Q;PCIYEUMM PS]C hs%uttuuAL}m-. ikwptrrvquspt2ݼ>~A!a~QPظĘT 3> *_PXT dB$+*kj+̦2OYKk[{GgWwOo_ s2)SM1s9sy .Zd+VZf%χHlظisݖ۶ޱs{Db:|'N8x3gϝp+W=w3` 7:s2o%р0PBDT K�%$1$�)ݝ],R���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�BriefViewz���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/cm_about.png������������������������������������������0000644�0001750�0000144�00000003203�13061031411�022326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs���H���H�Fk>���tIME (�ݺx��.IDATHǽKh\;w^!,{Dlɶ,*ii m)䁳.uH ͶB7, 14JBSSb׎Ȓ"aF3zx4սBi0=p?w>x援Όc(0N8@c ANgTnTi#ּؚc&L6g΍|orlhxHT�а6Jm U,lg֪_/$p_/tVW|6_bX 0@ь &?"X~޺r5/]'D_<6q}_r*m{ 4�()Ή\#,,[?^T0;sW=rX?\YR[+VD,E.IxH!QRQnSpd:kW=�ٍ>93'.Nˬn6F4 L\~soN0KpEq Ξ22tn\ LMgRv~81RbX'hlD+@Ԣ_ZI,-µRc 7{RD:u;R~E%R ()it>7jX⇠U/0U4w z,2dc+k$7ےȞPk{XD 5\�a;:40ĶZCh֒w. l. ʕ2; )�!5@cR{5zOmKB/ֈ;D`h/Ax? 1K!x}[Iluh3�F`~ CYZZ;>A%K5Ogkt% KӅlq$E*q'R.N)@ܡAVfZޟ+6>̗X()c%r:YZ+ӪWn7׻*Rs0r44Ry2xT^`nd UL2J|ᵟt>.٭ncɦ=7z,-SmGA~ŵuXgz-Q[ 7 5n~k_vMkUH_ųer(rh%ol[XD8,~gɯ?lϽ` kk-xt(7tI6}qkw-b B"w/kz@tpI>{/=x:]i0BVQڪf:ۿnN7OpzDqٟqG; ‰ cWIgƴph> @pz�u ݚ? ;���%tEXtdate:create�2013-02-18T19:53:34+03:00+г���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtfilename:orig�About ���tEXtSoftware�Adobe ImageReadyqe<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/24x24/actions/application-exit.png����������������������������������0000644�0001750�0000144�00000002724�13110303146�024020� 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���tIME;wS#��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|���%tEXtdate:create�2017-05-21T14:00:35+03:00)���%tEXtdate:modify�2007-01-17T22:08:59+03:00U���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016372� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020406� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000001067�13060755414�022625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<��IDAT8Q.˺A0B4"XXB|9S |@FR`",dϤ{̌fI6Cb}Fv7�8Ͽf3!"DU0Em òEqܶSI.:v;"BKj!ne;# z}<c:r:NrZ'<(T*9U;rUD(J ,BDZ^) 8M.0"Ʈ%nRMa~`v*xlp^cYVjg/CbW*` h^ؔ8(..z-v(b2P(vcիVfEy;lZ+|Lߚ[�մx{#?+[ Z����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000001121�13060755414�024367� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs�� :�� :dJ���tEXtSoftware�www.inkscape.org<��IDAT8͔1kA-NфFLs`bm#VZe?! o,GcwfrQa͛ WOo4yk%J@*-WUޓ[?/]p7 )&L|@~ڼpvt\GZ�eIdElsw &ՂwͪRݍƷG+No!v=Đg�hyT$zm۾)$M(j>jG,iQ֢CwH=ƻ8gd Dz<L,+8iÊ�Ed&p\#xN/tӒA%gNrPJf'{ :?Mx)KyptF)3/{3<o*3  sC·̙?Z����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000002264�13060755414�026015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs��'��'MT���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��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-0.9.8/pixmaps/dctheme/20x20/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020016� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000001404�13063505360�024540� 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-0.9.8/pixmaps/dctheme/20x20/apps/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017335� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020032� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000000472�13060755414�024611� 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-0.9.8/pixmaps/dctheme/20x20/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000000461�13060755414�024437� 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-0.9.8/pixmaps/dctheme/20x20/actions/view-refresh.png��������������������������������������0000644�0001750�0000144�00000002476�13603450555�023166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs��'��'MT���tEXtSoftware�www.inkscape.org<���tEXtTitle�View Refreshb���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��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-0.9.8/pixmaps/dctheme/20x20/actions/help-about.png����������������������������������������0000644�0001750�0000144�00000002132�13110277137�022601� 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-0.9.8/pixmaps/dctheme/20x20/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000001673�13060755414�021604� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs��'��'MT���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/��pIDAT8͓KHTQ;w=4Ĭ,"BjզU"h>hD hQHAD1y|_=7}pp? 㶜h۰5zH^3T# Cޚ佉6uZ]_մ-ysb?]rTEe( d$*Ũ!}37R#R:9㞾cWjE# c >Ѹj[pwm>oI@$<0VvVzS`ibۺ_s:D"Ą tam[U!36<Ydv F" L"&q [xo\뷾}>H~�w4wV3͵Yyo2vL'!KQwƍPs```J5~ȱgנ bWT[FYJ땞9 &_xUņcElfq o* OНqAQ"VQUƀrJ g&^iX8$s}(OJ if́>+43.:(J÷X7LF� DŬ Vh����IENDB`���������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/go-jump.png�������������������������������������������0000644�0001750�0000144�00000001643�13110302615�022113� 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-0.9.8/pixmaps/dctheme/20x20/actions/edit-undo.png�����������������������������������������0000644�0001750�0000144�00000001330�13110272020�022412� 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���tIME}U���IDATc` c 1c 2kcTWgfaeCc䂉qk730024777 [YY[[mlf9�0&;;u pusANQ1qO/od_/#w)i +`**)ci�U���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2006-07-26T14:21:08+04:00y`����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-select-all.png�����������������������������������0000644�0001750�0000144�00000001106�13110272020�023473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���uPLTE���֩תثڭۮ������tRNS�5���bKGD�H���tIME9r6���IDATӕa aE/RO7<bK:\"MCHRul`M cpZClėDRꜰ0K(ƘkY{KHc}¸hLpL!Z^Ӕw>y3aB e~æ�K~H5���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2006-02-21T16:57:07+03:005Hp���tEXtSoftware�www.inkscape.org<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-redo.png�����������������������������������������0000644�0001750�0000144�00000001320�13110272020�022375� 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���tIME' n���IDATc` h3bf"͌gaecA70D326C(?DL@JG"&dmciik3vptrvW6x =%4GHԖU0DU54 m�bpZF ���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2006-07-26T14:39:32+04:00b����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-paste.png����������������������������������������0000644�0001750�0000144�00000001404�13110272020�022563� 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�� �� ����tIME  V-���IDATc` 02#BEBRJZFFZJR "!+'Q-]=^>!M@`.HVf6vhN.hnH@A'/o4A_?�``PppYG삡a %;�f& z���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-10-14T04:32:10+04:00H ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-find.png�����������������������������������������0000644�0001750�0000144�00000001333�13110272020�022370� 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-0.9.8/pixmaps/dctheme/20x20/actions/edit-find-replace.png���������������������������������0000644�0001750�0000144�00000001527�13110272020�024006� 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-0.9.8/pixmaps/dctheme/20x20/actions/edit-delete.png���������������������������������������0000644�0001750�0000144�00000001521�13110272020�022711� 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�� �� ����tIME"2���IDATӕE@@ >  B*L’|Ջ#0&IOmȑNXDdDQl>!KWl ͧ5ƭ ?}q'C1ImHerRh3uzdX6;@[(9xLdskx;Ke<xT= 63p ���tEXtComment�id logow���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2006-06-19T19:34:15+04:00 "����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-cut.png������������������������������������������0000644�0001750�0000144�00000001742�13110272020�022247� 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�� �� ����tIME *n`�Y���IDATc` 021(VdA6vN ̓$ț #$(+, '&$(_ )%]X$#l\qBʼe*ʨRSDsVUu6BZz}$!C#cS3 K+kC#;TӋۇ׏* g`OHLMfgdƓ�.1#=!���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-10-29T02:42:25+04:00A����IENDB`������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/edit-copy.png�����������������������������������������0000644�0001750�0000144�00000001171�13110272020�022422� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���ǚ򏐋ÌԘ���q���tRNS�OS}ЫP̣$ʩ���bKGD�H��� pHYs�� �� ����tIME � )���IDATӕY0(X&mv_6L9\ cT*by%"Ol4k9RcK_6B!ue떄Axmq0&ZO,wYgJ)_c [gX^x@<*/vk}���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-10-27T00:10:15+04:00G=����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/document-save.png�������������������������������������0000644�0001750�0000144�00000002006�13110272020�023275� 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�� �� ����tIME ; ���IDATc` 021 s rrq# KHJIɃ XPAQIYEUHM]CSIIIK,o dhdlbjfnCkic wrtrrrvrus zyz 9:;{ xjuA~>v0@];`P0`hiED# @ &LNH+ @�TPP�4r 8���zTXtComment��M+-άJMQL㲅..dM#c$du̼"+}}^niqfrFbN^rWrQjb ̒ TwO�rt�*~ ���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-11-10T16:59:32+03:00U=����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/document-save-as.png����������������������������������0000644�0001750�0000144�00000001725�13110272020�023705� 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�� �� ����tIME ; ���IDATc` 021 s rrq# KHJIɃ XPAQIYEUHM]CSIIIK,o dhdlbjfnCkic wrtrrrvrus zyz 9:;{ xjuA~>v0@];`P0`xD8 FFEGDDGEBS 5>-=*J@/�!((I v�i1 *���zTXtComment��M+-άJMQL㲅..dM#c$du̼"+}}^niqfrFbN^rWrQjb ̒ TwO�rt�*~ ���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-11-10T16:59:32+03:00U=����IENDB`�������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/document-properties.png�������������������������������0000644�0001750�0000144�00000001065�13110272020�024537� 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-0.9.8/pixmaps/dctheme/20x20/actions/document-open.png�������������������������������������0000644�0001750�0000144�00000002052�13110272020�023301� 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���tIMEJ$r���IDATc` 021s8t y&fV6|AA;{sG' pu:{xzzyBuCBBBC!Q11>>qAĤ䔔ԴtiLFj&deA,XP. -7 E%0PZT,:eJ}RCcSsKk[{GGg*XP < jL<jґ)A�*YQAjx���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2008-01-03T20:08:19+03:00n�q���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/20x20/actions/document-new.png��������������������������������������0000644�0001750�0000144�00000001260�13110272020�023131� 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-0.9.8/pixmaps/dctheme/20x20/actions/application-exit.png����������������������������������0000644�0001750�0000144�00000002267�13110303146�024012� 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���tIME;wS#��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���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2007-01-17T22:08:59+03:00U���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�016404� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/places/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017653� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/places/link.png�����������������������������������������������0000644�0001750�0000144�00000001117�11323355446�021325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME '?!��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-0.9.8/pixmaps/dctheme/16x16/places/link-broken.png����������������������������������������0000644�0001750�0000144�00000000664�11361045050�022576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��{IDATxcd0܀l@_5G˻@Cm�PJb{C7 gb&]sS @)*JعX0ۗ ~9? uJ,BX4g/ ?Vv^ 0qV*?̀}Wz^> abce' <ζFV:{PjS}^6 x7|5u\LL_D0|e6&�k#Ͽwïb\#Ob `R,|,9 U'n|Larb¤d L~3L а8F$9A(6��ԔKj����IENDB`����������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/places/folder.png���������������������������������������������0000644�0001750�0000144�00000001003�11323355446�021635� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������ pHYs�� �� ����tIME 4Ґ ���tEXtComment�Created with GIMPW��^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-0.9.8/pixmaps/dctheme/16x16/places/folder-link.png����������������������������������������0000644�0001750�0000144�00000001227�11323355446�022600� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������ pHYs�� �� ����tIME $+TZ���tEXtComment�Created with GIMPW��IDAT8͑KUQG!@(IdPPD D EAҰ'hQ fADP$~ܤ(dfz9g7}*ԤI {ً[KS?6}^^ 0zn_I� m~ϮC:>%e<IXsw Y}F)7Woەˮ各TUf)o)͕ed5]Md އ $CSi04Y"YzG}]-L, 񵾅%:Iĸ Z 3$u;),|`6jkFyH gBT F({̏Mg~[WgR3Q%LFr%pO #(+ȡ^fqwbٶ +D<ێx8T;l;`- @1wKuxLd̯{r!ݤ9a搁!G?~LLq ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/places/folder-link-broken.png���������������������������������0000644�0001750�0000144�00000001265�11361045050�024045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��|IDATxڥkHTAsﮏtuIM%?="zB|@"1"!(mED 0qC0A\J3L-²L3Aw4;A9ys=g}m/ \U+<h++B(Hq 5 !z]*Nt0SyS_! ³]` 36QY-lrP0@q%s t$&;Ø9#KԢ11m \BxΩv|op!vt*1|0eG|A&H@ [ U tT[_^Vk<f`)̂K;008 xD%+jB)Ye kV-|Cl>RGa| a!l@7!fs O~}"ӝu P`;|tؐR 7W'žT8eEYxFYU\HZ*JȔ" Ob! GIj,<u|s#;*Yd/?=[))0qQad> fv]NM@<d-8YhQg5k E }����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020420� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/x-office-spreadsheet.png����������������������������0000644�0001750�0000144�00000000772�11323355446�025150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��wIDATxڕS=O0}EU*€:0Юl<AV u)DEJ "uɤDH<霳|qp �ÔϾN-D&ʈ:|߇@e$`^ӆki68[( XL>WǸu{4M4MeKɶ)(2yK2`WdBj!4y VAeIA,6g/>l@l9ۀ@BA~Z ( rr,+I c4i'J47b|2n sx( &l߻aU0AѓdJJl;ğgF\ }ȍ����IENDB`������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/x-office-document.png�������������������������������0000644�0001750�0000144�00000000610�11323355446�024446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME  )T��IDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,�2mj �[klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~����IENDB`������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/video-x-generic.png���������������������������������0000644�0001750�0000144�00000001321�11312762055�024113� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��NIDATxڅSMkQ=3iڅta-&~A[Z XUjq!.\(V(bQ7J*(HVnZu$fQlL65GE3wy$AӴC�h1xh-[SL yOsn&uuv�4:n`Zk@ Hvuww0H)es &ض:{ɫ]IBUdIr^L:Ocn.۰{B W.O H$}6԰ğk 6+R C4zůEܙMb*e*5x>Xyl8::A8qnݯul؎BqF1}k@USy|Jo_?RhOnJ%Χ,�  jTThh(BGOKS4;I##$y^U Z/>�/j^T;3R(d<һfP*, D>[4A0yvyЉS W2y,T,!uWYT6{7oxsy;|ߗrԵ�L1·dhX~m8|n����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/unknown.png�����������������������������������������0000644�0001750�0000144�00000001146�11323355446�022636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���sBITO��� pHYs����:���tEXtSoftware�www.inkscape.org<��PLTE������������������ik)p1v<}HIVZjrwy}҃چՇ܋ܣި:���tRNS�$)./Rh5���IDAT.DAM16064xd7`d!׺[Q��j3b E�kW0ro KmH0r5H`iCM N1�Hx&0D:P$I˿[0Ddya@eY|NoZ�U׵v EK� 9w8e����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/text-x-po.png���������������������������������������0000644�0001750�0000144�00000001256�11323355446�023006� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��+IDATxڕ=hA۽ݻLiLxD QJAP `VB 1ѐ(hS/pHTb4I.{;?q`F(Bt)O_zmU@hD<4@6hO:5@`_ < aP !KCM|aDb10-eH%pB`X'._t9_c3Zwt Efx!a,{�vu38ӷm>Z�U5[bgj#/8o;0d-qgۆ*6 Q!5Pg�`E�b$Ƨۛƣ,S\=%mfqz,O\;w�ˊ0($iodՇʾJ6pUW,g <rk�WuS؎d2fӧ+2�ɕbQIy|WRJU.U: Z�W2u�ŠT*Uk�P(ѱ9`O-r;.~r ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/text-x-pascal.png�����������������������������������0000644�0001750�0000144�00000001260�11312762055�023622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��-IDATxڅSMP=IM[RpppZ WҍɂH2*80 hN?IQ<p w޻iDMJ�ꀂ禒(8f_3"躮e.QQ s8-@Fb~G\Fev Jnf::4E$j㨄0 YѰmL3wt(5<fZU;*KD,$t(8Pp؁J e˲0L)w^( ^>xR8=<z>@Ӗ{Q‚zq`)&/q¾۔{$JLPM/ +@EXE۶N@#F4mwqY9Cl~N WA <~V&kaJxfGr$(Qtԭ:6>|wUI qCnsz&H܉qi<Sz8'ȋUf).L5'`\wp3nՎ,":jht&3&?3┈?3Ӏ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/text-x-log.png��������������������������������������0000644�0001750�0000144�00000001165�11323355446�023150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڕSn@'n8C%7n KT<HKVmP8.Os`O3;/qp.?=v%}2SJIQtrQy_!`QKe59[nAmtj4@pPCh6ch x4p=x,ϕbq�N")(DQ7ԪoJTBLۃs"̃hqm {p4VEKD8;9? x!|ݽީoF@탨 2hue0'<~8Y�fc YZ/0P 0Ur8j�8Zs@sb4"Y.//cW/Kphݮ,mtjy5$IQm~n)c]sg�JrY߹PvP |j HL6����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/text-x-generic.png����������������������������������0000644�0001750�0000144�00000001165�11312762055�023777� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڕSn@'n8C%7n KT<HKVmP8.Os`O3;/qp.?=v%}2SJIQtrQy_!`QKe59[nAmtj4@pPCh6ch x4p=x,ϕbq�N")(DQ7ԪoJTBLۃs"̃hqm {p4VEKD8;9? x!|ݽީoF@탨 2hue0'<~8Y�fc YZ/0P 0Ur8j�8Zs@sb4"Y.//cW/Kphݮ,mtjy5$IQm~n)c]sg�JrY߹PvP |j HL6����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/text-html.png���������������������������������������0000644�0001750�0000144�00000001272�11312762055�023061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��7IDATxڕKOQ�N[ҖEJyEQ* h@҅;/p;WDL(,ƅↇUk\N-L<If|9!Pw4�Y6 e>LF&ipx8`&"Reo#0/_ �ս/ fvF&H=]UTE ULFyWiv"<L"wBIY k8,|?5AKZW.%+xgfxTo/ 1a5B_ZEt>:pXG\nv7sd~ix|=xTc{ߦReu vo<zx8i� v0pS4֦xv'- R+$bdvyh_U'y8ތulg.[OK?4KE}|^e~~~X>Q>8xҮN6efff+VB�%t]r_Y(⢘@?Ȟ2qݓaĄWY>>Ηֲ-|Q?v }����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/package-x-generic.png�������������������������������0000644�0001750�0000144�00000000677�13063505653�024421� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs����S���tIME ;}l��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-0.9.8/pixmaps/dctheme/16x16/mimetypes/image-x-generic.png���������������������������������0000644�0001750�0000144�00000001056�11323355446�024100� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME 6��IDAT8˝MkA4ݘॅ\ĢSɃ@g(1 z @ ՞TD*C"&nٙab !{fgDQ[3ZyBQ3ZjQ31nKVWp�f,µM4(HakM0؂33sZ$(l~{?CR@4yò,.1SrzoD'S@)_@JNh'-\̟.@:} b}x{_ʧ|=({hmh9%_}z=oj%1@usIo?GN7.nքaQN&x3iv$ĉqǨLdk&|[Z? Ƚk^CrB0EJ�XᖋB����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/audio-x-generic.png���������������������������������0000644�0001750�0000144�00000001203�11312762055�024105� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<���IDATxڍSkAfdW֤HBNn%!+=#?" HC^KOH#h~$6 a7N=6&̬RB�@? 2h4Hq#! �]�}I 9R80&P0/ncq$>1q09(8O?=40UX)L]NmVs(}BRlvT iɶiaμ3Εe(fmXz4uIضVE >x<^]μ`D"9K#yub1"z, #ahL9~|;Ass98CT[01x!6 _{ W4Mt:`ۖO8 X{(zk<z]r赖J[3AJVdI$F˝]ml~#zroo\|Y\gb9EWMڦ{�V\5R����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-x-shellscript.png�����������������������0000644�0001750�0000144�00000001017�11312762055�026232� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڕS;nP\?-Ҥ&BPp z` 䤤Fhcő2->c 5q�w?ݢQ?%If d:+J˲h<bY@~ H\q-( eDu! TH5,v:*<k*kV+{=y33jQ�9`:r~/"fݦ y C>)Df0+*C=\2pk4HW@9v;~m۵px<FTV`ݲ@YxofyWjf&餓$єF!3 C>绔IZUBhƵ뺟�|AI<(_,^9Y([O$Y  !F����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-x-rpm.png�������������������������������0000644�0001750�0000144�00000001340�11312762055�024473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��]IDATxڥSMHQyOE|aDEqY+q鲶.h#HB(e"~|3oܿ7Ņ->ܙ{|92c .qg�W06�Xǯg: .90R?!ڐgdUxu4*=JłTe@E󮯯5W*O` <?z\>.)YQ*3#$|: ^z0qm\,T&B7B)V |w.`zy.~lkH�s\?ʹ`mw TLh%q/rJkHR4" H#H%fy ~t_G.MX 7R/8=e"Wޖm諔xzNam �4Jg kH%]T)W."NbiS<yu&~<Z Y =HF Fi|njt*n>S4!݋Wnߙ̼xrL6QZOV:zZx:,~#} h/m&5H8.HRL9ט{AY $5?\#A0{/N%����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-x-executable.png������������������������0000644�0001750�0000144�00000001060�11323355446�026021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME8rJ��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-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-x-deb.png�������������������������������0000644�0001750�0000144�00000001324�11312762055�024431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��QIDATxڥSMHTQ=SKS&~4B6.k]w%.[6[Hт~Bpa6::ͼw"w|{1W2$4slnpꕨ#MSHYC&<v0|GQ_s+X-RH)H,J4I,04t_5xt^_t^XXdҞ̛H{q$IyzgZLql2) JJ} F35Khk�lqqJilU{[ە(r qR)rL4VD cEBD8SI|]YGXȣgt"g:]Ç/q�6x/& ۅ2:�"Ra7sJN`zԴQn#vibW8-)Vj[k(b"<f/2:SvR8K1"L~82 @jʹ»oE 띝h ^7)o*b����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-x-cd-image.png��������������������������0000644�0001750�0000144�00000001205�11312762055�025343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڕjAͥg&Zĝo#t5\F"/\zfzVeu48C%!'9PZg<C錳hL= }'@@e)=<OmӨY)!Kv12 "FRAפϠ94ޠ堭9=6z= LH>׿TVL1 /"̼Cz4c6W,</9rf�OyykB\Vv�Bu}8")ablFQXTi�x0NOYIiRo0"<`!$ea ֫:8pU`Ý9=ע BRMZRṰ7=`DY:b|HgjY1O?c:W��/<J)YW,]1IQsۀZrk:Zk3LڏVʫyoM։ ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/mimetypes/application-pdf.png���������������������������������0000644�0001750�0000144�00000001260�11312762055�024202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��-IDATxڕKQǿoM%AzP,4!x*D<yI r&XA+JI/fN:02;+B�0 pLYqlSi}A4@�A4bUUiZ�lۆķ3 OOGa. b<\*HwvO_^v{DQ7 ]*T40> hmoC1M4FA�ׅ>b�wJ:~D"Adne0~P Rp`H& Ľ�`bsmmH#>6O@$ k5TqI ϳOHgpsB.,$2xyr7ߏ9]a!gF"GPx0"4rem.,|R[ڬt:{(voO$@)+ B 5%GKd8E$if2 7<JR-˽PxԩKaVlrga+3_qIBy����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/emblems/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020030� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/emblems/emblem-unreadable.png���������������������������������0000644�0001750�0000144�00000001511�11362134553�024101� 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-0.9.8/pixmaps/dctheme/16x16/emblems/emblem-symbolic-link.png������������������������������0000644�0001750�0000144�00000000723�11312762055�024556� 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-0.9.8/pixmaps/dctheme/16x16/dirhotlist/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020571� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/dirhotlist/submenuwithmissing.png�����������������������������0000644�0001750�0000144�00000001401�12405254001�025231� 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-0.9.8/pixmaps/dctheme/16x16/dirhotlist/submenu.png����������������������������������������0000644�0001750�0000144�00000001476�12405254001�022757� 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-0.9.8/pixmaps/dctheme/16x16/dirhotlist/newaddition.png������������������������������������0000644�0001750�0000144�00000001173�12405254001�023600� 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-0.9.8/pixmaps/dctheme/16x16/dirhotlist/dirmissing.png�������������������������������������0000644�0001750�0000144�00000001511�12405254001�023437� 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-0.9.8/pixmaps/dctheme/16x16/devices/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020026� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/devices/network-wired.png�������������������������������������0000644�0001750�0000144�00000001273�11323355446�023347� 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-0.9.8/pixmaps/dctheme/16x16/devices/media-optical.png�������������������������������������0000644�0001750�0000144�00000001643�11323355446�023257� 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-0.9.8/pixmaps/dctheme/16x16/devices/media-floppy.png��������������������������������������0000644�0001750�0000144�00000001061�11323355446�023127� 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-0.9.8/pixmaps/dctheme/16x16/devices/media-flash.png���������������������������������������0000644�0001750�0000144�00000001137�11323655670�022721� 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-0.9.8/pixmaps/dctheme/16x16/devices/drive-virtual.png�������������������������������������0000644�0001750�0000144�00000001370�13061022223�023322� 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-0.9.8/pixmaps/dctheme/16x16/devices/drive-removable-media.png�����������������������������0000644�0001750�0000144�00000000776�11633361331�024707� 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-0.9.8/pixmaps/dctheme/16x16/devices/drive-removable-media-usb.png�������������������������0000755�0001750�0000144�00000001240�11715671161�025472� 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-0.9.8/pixmaps/dctheme/16x16/devices/drive-optical.png�������������������������������������0000644�0001750�0000144�00000001320�11323355446�023301� 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-0.9.8/pixmaps/dctheme/16x16/devices/drive-harddisk.png������������������������������������0000644�0001750�0000144�00000001133�11323355446�023441� 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-0.9.8/pixmaps/dctheme/16x16/apps/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�017347� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/apps/utilities-terminal.png�����������������������������������0000644�0001750�0000144�00000001234�11323355446�023710� 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-0.9.8/pixmaps/dctheme/16x16/actions/������������������������������������������������������0000755�0001750�0000144�00000000000�13615241421�020044� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/view-sort-descending.png������������������������������0000644�0001750�0000144�00000000536�11323355446�024625� 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-0.9.8/pixmaps/dctheme/16x16/actions/view-sort-ascending.png�������������������������������0000644�0001750�0000144�00000000540�11323355446�024450� 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-0.9.8/pixmaps/dctheme/16x16/actions/view-refresh.png��������������������������������������0000644�0001750�0000144�00000001620�11323355446�023166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��"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-0.9.8/pixmaps/dctheme/16x16/actions/system-search.png�������������������������������������0000644�0001750�0000144�00000001647�11323654424�023356� 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-0.9.8/pixmaps/dctheme/16x16/actions/list-remove.png���������������������������������������0000644�0001750�0000144�00000000367�11323355446�023035� 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-0.9.8/pixmaps/dctheme/16x16/actions/list-add.png������������������������������������������0000644�0001750�0000144�00000000503�11323355446�022260� 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-0.9.8/pixmaps/dctheme/16x16/actions/help-about.png����������������������������������������0000644�0001750�0000144�00000001644�13110277137�022622� 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-0.9.8/pixmaps/dctheme/16x16/actions/go-up.png���������������������������������������������0000644�0001750�0000144�00000001214�11323355446�021606� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/16x16/actions/go-previous.png���������������������������������������0000644�0001750�0000144�00000001217�11416270327�023036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��!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-0.9.8/pixmaps/dctheme/16x16/actions/go-next.png�������������������������������������������0000644�0001750�0000144�00000001244�11416270327�022140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/16x16/actions/go-jump.png�������������������������������������������0000644�0001750�0000144�00000001323�13110302615�022120� 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-0.9.8/pixmaps/dctheme/16x16/actions/edit-undo.png�����������������������������������������0000644�0001750�0000144�00000001212�13110262523�022432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME �#!��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-0.9.8/pixmaps/dctheme/16x16/actions/edit-select-all.png�����������������������������������0000644�0001750�0000144�00000000671�11323355446�023535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/16x16/actions/edit-redo.png�����������������������������������������0000644�0001750�0000144�00000001117�13110262523�022422� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME '?!��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-0.9.8/pixmaps/dctheme/16x16/actions/edit-paste.png����������������������������������������0000644�0001750�0000144�00000001061�13110262523�022603� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ���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-0.9.8/pixmaps/dctheme/16x16/actions/edit-find.png�����������������������������������������0000644�0001750�0000144�00000001151�13110262523�022407� 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-0.9.8/pixmaps/dctheme/16x16/actions/edit-find-replace.png���������������������������������0000644�0001750�0000144�00000001410�13110262523�024016� 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-0.9.8/pixmaps/dctheme/16x16/actions/edit-delete.png���������������������������������������0000644�0001750�0000144�00000001250�13110262523�022731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���!~��� pHYs�� �� ����tIME H���tEXtComment�id logow��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-0.9.8/pixmaps/dctheme/16x16/actions/edit-cut.png������������������������������������������0000644�0001750�0000144�00000001447�13110262523�022272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ����tIME 1hAd^��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-0.9.8/pixmaps/dctheme/16x16/actions/edit-copy.png�����������������������������������������0000644�0001750�0000144�00000000762�13110262523�022450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ����tIME /4��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-0.9.8/pixmaps/dctheme/16x16/actions/document-save.png�������������������������������������0000644�0001750�0000144�00000001617�13110262523�023325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ����tIME 7*ؿ���tEXtComment�Menu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG��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-0.9.8/pixmaps/dctheme/16x16/actions/document-save-as.png����������������������������������0000644�0001750�0000144�00000001542�13110262523�023723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 8p���tEXtComment�Menu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG��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-0.9.8/pixmaps/dctheme/16x16/actions/document-properties.png�������������������������������0000644�0001750�0000144�00000000720�13110262523�024555� 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-0.9.8/pixmaps/dctheme/16x16/actions/document-open.png�������������������������������������0000644�0001750�0000144�00000001240�13110262523�023320� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/16x16/actions/document-new.png��������������������������������������0000644�0001750�0000144�00000000735�13110262523�023160� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_workwithdirectoryhotlist.png�����������������������0000644�0001750�0000144�00000002174�13016303343�026444� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_wipe.png�������������������������������������������0000644�0001750�0000144�00000002174�13013475730�022205� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_visithomepage.png����������������������������������0000644�0001750�0000144�00000001157�12110457565�024110� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_viewsearches.png�����������������������������������0000644�0001750�0000144�00000002174�13017704640�023730� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_viewlogfile.png������������������������������������0000644�0001750�0000144�00000002174�13013475730�023555� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_viewhistoryprev.png��������������������������������0000644�0001750�0000144�00000002174�13013475730�024532� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_viewhistorynext.png��������������������������������0000644�0001750�0000144�00000002174�13013475730�024534� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_viewhistory.png������������������������������������0000644�0001750�0000144�00000002174�13013475730�023635� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_view.png�������������������������������������������0000644�0001750�0000144�00000002174�13013475730�022213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  Œ��IDAT8/������������������������������������sqvU������������������������������������������������������������������������������������������������������������������)))����������������������������������)))������������������������������������������������������-7H� ���ʳ�stp\�����������������)))���'4H� ��#� �*K�mok1�������������������"+;��W= � ����,K�Ե�������������������)))����� � ����� ���������������������������������� ������������������������������ � �� �������������������NLM�ν� ������Բ��������\�����������2E\��� �а�"!#�����ٔ(������������������������lnjv������������ �+*+�������������������������������������������������������+*+�����������������������������������������������������������K����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentpath.png������������������������������0000644�0001750�0000144�00000002174�13016303343�025007� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentnameext.png���������������������������0000644�0001750�0000144�00000002174�13016303343�025514� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentname.png������������������������������0000644�0001750�0000144�00000002174�13016303343�024773� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentextension.png�������������������������0000644�0001750�0000144�00000002174�13016303343�026067� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_universalsingledirectsort.png����������������������0000644�0001750�0000144�00000002174�13015733506�026556� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_treeview.png���������������������������������������0000644�0001750�0000144�00000000426�12726722105�023072� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_transferright.png����������������������������������0000644�0001750�0000144�00000002174�13013475730�024123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  *_"��IDAT8 {M���������������������������������������� MN7���������������������������������������xM� ����������������������������@��� | | |����������&'(��������������***������������ ��������������R��a� � �������������������dcd��������������`@r��W� � ����������������������������?���� �M4U��R� ������������������egh��������k|�jG���P7[��G��������������������������n����$���������������������klk���������x���bU������ .�U��������������������������}��������W�S�����������������������cef���������������U�|Q�����������������������������������������̄��������������������������q >�������������������������$����������������������������������������������������������3N] i����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_transferleft.png�����������������������������������0000644�0001750�0000144�00000002174�13013475730�023740� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_togglefullscreenconsole.png������������������������0000644�0001750�0000144�00000002174�13015733506�026170� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_thumbnailsview.png���������������������������������0000644�0001750�0000144�00000001133�12110457565�024277� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_testarchive.png������������������������������������0000644�0001750�0000144�00000001214�12110457565�023557� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_targetequalsource.png������������������������������0000644�0001750�0000144�00000001044�12110457565�024776� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_taboptions.png�������������������������������������0000644�0001750�0000144�00000001202�12110457565�023415� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_syncdirs.png���������������������������������������0000644�0001750�0000144�00000002174�13013475730�023077� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_symlink.png����������������������������������������0000644�0001750�0000144�00000001165�12110457565�022731� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_switchignorelist.png�������������������������������0000644�0001750�0000144�00000002174�13013475730�024642� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_srcopendrives.png����������������������������������0000644�0001750�0000144�00000002174�13013475730�024127� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_sortbysize.png�������������������������������������0000644�0001750�0000144�00000001035�12110457565�023454� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_sortbyname.png�������������������������������������0000644�0001750�0000144�00000000742�12110457565�023426� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_sortbyext.png��������������������������������������0000644�0001750�0000144�00000000661�12110457565�023306� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_sortbydate.png�������������������������������������0000644�0001750�0000144�00000000740�12110457565�023421� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_sortbyattr.png�������������������������������������0000644�0001750�0000144�00000001025�12110457565�023453� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_showsysfiles.png�����������������������������������0000644�0001750�0000144�00000001447�12110457565�024010� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_showmainmenu.png�����������������������������������0000644�0001750�0000144�00000002174�13013742760�023753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  0tRY��IDAT8��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������? ���������������������������������������$�����������������������������������! ��������������qjf�����������|m��������������Gez��[^^���������������������������H*������������������������������������������������������������������������������������������3�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� x@����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_showcmdlinehistory.png�����������������������������0000644�0001750�0000144�00000002174�13013742760�025177� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_showbuttonmenu.png���������������������������������0000644�0001750�0000144�00000002174�13015733506�024342� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_shellexecute.png�����������������������������������0000644�0001750�0000144�00000002174�13014736012�023725� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_settaboptionpathresets.png�������������������������0000644�0001750�0000144�00000001275�12110457565�026063� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_settaboptionpathlocked.png�������������������������0000644�0001750�0000144�00000001245�12110457565�026014� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_settaboptionnormal.png�����������������������������0000644�0001750�0000144�00000000632�12110457565�025165� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_settaboptiondirsinnewtab.png�����������������������0000644�0001750�0000144�00000001352�12110457565�026366� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_setfileproperties.png������������������������������0000644�0001750�0000144�00000001311�12110457565�025004� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionpathresets.png���������������������0000644�0001750�0000144�00000002174�13014736012�026725� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionpathlocked.png���������������������0000644�0001750�0000144�00000002174�13014736012�026661� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionnormal.png�������������������������0000644�0001750�0000144�00000002174�13013742760�026041� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_setalltabsoptiondirsinnewtab.png�������������������0000644�0001750�0000144�00000002174�13014736012�027234� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_search.png�����������������������������������������0000644�0001750�0000144�00000001320�12110457565�022501� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_savetabs.png���������������������������������������0000644�0001750�0000144�00000002174�13013742760�023051� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_saveselectiontofile.png����������������������������0000644�0001750�0000144�00000001631�12110457565�025310� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_saveselection.png����������������������������������0000644�0001750�0000144�00000001640�12110457565�024105� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_savefavoritetabs.png�������������������������������0000644�0001750�0000144�00000002216�12656270711�024612� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_runterm.png����������������������������������������0000644�0001750�0000144�00000000773�12110457565�022743� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightthumbview.png���������������������������������0000644�0001750�0000144�00000002174�13015200640�024275� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightsortbysize.png��������������������������������0000644�0001750�0000144�00000002174�13014736012�024506� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightsortbyname.png��������������������������������0000644�0001750�0000144�00000002174�13014736012�024454� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightsortbyext.png���������������������������������0000644�0001750�0000144�00000002174�13014736012�024334� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightsortbydate.png��������������������������������0000644�0001750�0000144�00000002174�13014736012�024451� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightsortbyattr.png��������������������������������0000644�0001750�0000144�00000002174�13014736012�024506� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightreverseorder.png������������������������������0000644�0001750�0000144�00000002174�13015200640�024772� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightopendrives.png��������������������������������0000644�0001750�0000144�00000002174�13015200640�024441� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightflatview.png����������������������������������0000644�0001750�0000144�00000002174�13015200640�024104� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightequalleft.png���������������������������������0000644�0001750�0000144�00000002174�13013742760�024261� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightcolumnsview.png�������������������������������0000644�0001750�0000144�00000002174�13015200640�024636� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rightbriefview.png���������������������������������0000644�0001750�0000144�00000002174�13015200640�024245� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_reverseorder.png�����������������������������������0000644�0001750�0000144�00000000412�12110457565�023744� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_restoreselection.png�������������������������������0000644�0001750�0000144�00000001633�12110457565�024634� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_restorefromtray.png��������������������������������0000644�0001750�0000144�00000001243�12110457565�024507� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_resavefavoritetabs.png�����������������������������0000644�0001750�0000144�00000002216�12656270711�025141� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_renametab.png��������������������������������������0000644�0001750�0000144�00000000767�12110457565�023210� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_renameonly.png�������������������������������������0000644�0001750�0000144�00000002174�13014355224�023406� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_renamenoask.png������������������������������������0000644�0001750�0000144�00000002174�13015733506�023544� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_rename.png�����������������������������������������0000644�0001750�0000144�00000002174�13015733506�022510� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_reloadfavoritetabs.png�����������������������������0000644�0001750�0000144�00000002216�12656270711�025122� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_refresh.png����������������������������������������0000644�0001750�0000144�00000001444�12110457565�022701� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_quickview.png��������������������������������������0000644�0001750�0000144�00000001254�12110457565�023251� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_quicksearch.png������������������������������������0000644�0001750�0000144�00000002174�13014355224�023537� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_quickfilter.png������������������������������������0000644�0001750�0000144�00000002174�13014355224�023557� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_prevtab.png����������������������������������������0000644�0001750�0000144�00000001142�12110457565�022701� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_previousfavoritetabs.png���������������������������0000644�0001750�0000144�00000002174�13015733506�025527� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_pastefromclipboard.png�����������������������������0000644�0001750�0000144�00000002174�13015200640�025105� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_panelssplitterperpos.png���������������������������0000644�0001750�0000144�00000002174�13013742760�025543� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_packfiles.png��������������������������������������0000644�0001750�0000144�00000001526�12110457565�023205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME1T��IDAT8UMlTU;33 hZK5ƍ E*[bX,it!ʀ ;RqM*NSԐINvu{er99˹~AD\eewyY.͇/>“k=ى,�kWŵ확ӯ;LC'~nQ >TˆW]3s� zf+srCMj\X=CIgGXbzjw߸I6&2?qq]{zjh$@_OܓrYv`Y.Gk8r�#Gظ7Oc}z=|~[G/ "h.�r*OX5fA'~o9ɯ/qp=$yMU>-\#jRø<VW0_q#6$?@0#�޹NעCL%3<*$VBY ZUn/v{QClo J~ {R6Fk(:x)Xe!lb. yvl F,u#md;6@Oo7mY=m׵R eY -G"{]gOxo}`FKF +b_$.& }:qa �&X^yrSo3kyX"bRC7>; 06>o-E羘\"R=kk2 ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_options.png����������������������������������������0000644�0001750�0000144�00000001515�12110457565�022735� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_operationsviewer.png�������������������������������0000644�0001750�0000144�00000001251�12110457565�024644� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_openvirtualfilesystemlist.png����������������������0000644�0001750�0000144�00000001346�12110457565�026615� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_opendrivebyindex.png�������������������������������0000644�0001750�0000144�00000002216�13367456510�024623� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_opendirinnewtab.png��������������������������������0000644�0001750�0000144�00000001267�12110457565�024436� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_openbar.png����������������������������������������0000644�0001750�0000144�00000002174�13014355224�022663� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_openarchive.png������������������������������������0000644�0001750�0000144�00000002174�13013742760�023544� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_open.png�������������������������������������������0000644�0001750�0000144�00000002174�13014355224�022176� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_nexttab.png����������������������������������������0000644�0001750�0000144�00000001137�12110457565�022707� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_nextfavoritetabs.png�������������������������������0000644�0001750�0000144�00000002174�13015446652�024634� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_newtab.png�����������������������������������������0000644�0001750�0000144�00000001131�12110457565�022514� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_networkdisconnect.png������������������������������0000644�0001750�0000144�00000002174�13014355224�025000� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_networkconnect.png���������������������������������0000644�0001750�0000144�00000002174�13014355224�024300� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_multirename.png������������������������������������0000644�0001750�0000144�00000001410�12110457565�023556� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_minimize.png���������������������������������������0000644�0001750�0000144�00000002174�13013742760�023062� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markunmarkall.png����������������������������������0000644�0001750�0000144�00000002174�12723431627�024106� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markplus.png���������������������������������������0000644�0001750�0000144�00000001644�12110457565�023103� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markminus.png��������������������������������������0000644�0001750�0000144�00000001644�12110457565�023253� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markmarkall.png������������������������������������0000644�0001750�0000144�00000001633�12110457565�023541� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markinvert.png�������������������������������������0000644�0001750�0000144�00000001500�12110457565�023416� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markcurrentpath.png��������������������������������0000644�0001750�0000144�00000002174�13016303343�024444� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markcurrentnameext.png�����������������������������0000644�0001750�0000144�00000002174�13016303343�025151� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markcurrentname.png��������������������������������0000644�0001750�0000144�00000002174�13016303343�024430� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_markcurrentextension.png���������������������������0000644�0001750�0000144�00000002174�13016303343�025524� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_makedir.png����������������������������������������0000644�0001750�0000144�00000001404�12253356421�022650� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_loadtabs.png���������������������������������������0000644�0001750�0000144�00000002174�13014355224�023026� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_loadselectionfromfile.png��������������������������0000644�0001750�0000144�00000001604�12110457565�025612� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_loadselectionfromclip.png��������������������������0000644�0001750�0000144�00000001553�12110457565�025625� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_loadfavoritetabs.png�������������������������������0000644�0001750�0000144�00000002216�12656270711�024573� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftthumbview.png����������������������������������0000644�0001750�0000144�00000002174�13015200640�024112� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftsortbysize.png���������������������������������0000644�0001750�0000144�00000002174�13014736012�024323� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftsortbyname.png���������������������������������0000644�0001750�0000144�00000002174�13014736012�024271� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftsortbyext.png����������������������������������0000644�0001750�0000144�00000002174�13014736012�024151� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftsortbydate.png���������������������������������0000644�0001750�0000144�00000002174�13014736012�024266� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftsortbyattr.png���������������������������������0000644�0001750�0000144�00000002174�13014736012�024323� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftreverseorder.png�������������������������������0000644�0001750�0000144�00000002174�13015200640�024607� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftopendrives.png���������������������������������0000644�0001750�0000144�00000002174�13015200640�024256� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftflatview.png�����������������������������������0000644�0001750�0000144�00000002174�13015200640�023721� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftequalright.png���������������������������������0000644�0001750�0000144�00000002174�13013742760�024261� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftcolumnsview.png��������������������������������0000644�0001750�0000144�00000002174�13015200640�024453� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_leftbriefview.png����������������������������������0000644�0001750�0000144�00000002174�13015200640�024062� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_keyboard.png���������������������������������������0000644�0001750�0000144�00000001002�12110457565�023031� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_horizontalfilepanels.png���������������������������0000644�0001750�0000144�00000000561�12110457565�025476� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_helpindex.png��������������������������������������0000644�0001750�0000144�00000001371�12110457565�023222� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_hardlink.png���������������������������������������0000644�0001750�0000144�00000001145�12110457565�023035� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_gotolastfile.png�����������������������������������0000644�0001750�0000144�00000002174�13013742760�023735� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  E��IDAT8������������������������L��O�����s�P���������������������������������������������F�gG����������������������������������������������������ߙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������M��:81������������Ƴs�;�����������������������������:jPS�F1S�����F1S�iPS��:�����������������������������������3G�75��! ����������x�4����������������������������������ݼ� *�f������x�4�����������������������������������������������3K�K����3��������������������������������������������������������3���3����������������������������^T����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_gotofirstfile.png����������������������������������0000644�0001750�0000144�00000002174�13013742760�024121� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME   1b��IDAT8�����������������������������G�G������������������������������������������������������B�B����������������������������������������������D�ێ��ێD�������������������������������������J�T�r�����r�T�J���������������������������������G��29%�������������ι|�3��������������������������������&���3B�j�D����3���&������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������C��������������������������������������������������������"���������������������������������z\Gׂ]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_focustreeview.png����������������������������������0000644�0001750�0000144�00000005475�13377641504�024151� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_focusswap.png��������������������������������������0000644�0001750�0000144�00000002216�13112333276�023246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ����tIME!C��IDAT8M������������������������JNMN7���������������z�M6���������������xM����� ������������}?�� ������������@�������I" �I"$������������������K# �K#$�����������������������������������������***���8�c$�������������7�������������������������������������������������������������������������������� �����b$�;� � ���$� |�������������������� b��9��(�q����7������������������������ � �E�"� � �-8�$� |����������������� #���I$� �� )��7������������������������!:�#��,����۬� '�AY���������������������(4�Y�ݧ��&� ��I�(;������������������������ �B,a�7�J�^/���9O��������������������������������4*0�� 0�1#?����������u >��������������� ����X?���$������������������������������������������������������"Ŕ^����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_focuscmdline.png�����������������������������������0000644�0001750�0000144�00000002174�13014355224�023710� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_flatview.png���������������������������������������0000644�0001750�0000144�00000002174�13015200640�023046� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  K��IDAT8Д< 2@��.k������������������������������������޴n31@����@.k��������O��()),))T������ ,��������������OQOO������+((S�� � #?�1K� �� 4ʮ}����������������������S����� @���������� ��=<;������΍<=/s#(3!���  ��������� ��� ����glӧ� � �������nnn;��� � �������������� �������3�������񾯱B��������������������������������������3��������������������������������6A �����|�������������mmm����S��QOO����>?����������<���������f��������SQOO�RPP� �PNN������@�\_��9~�����777�������������������T����Z_������]a����mmm4��������� ��=<;������v ����������ʂ�������� ����������������������������3z������������3�������:���������������������������������������� ?������M%M?:����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_filespliter.png������������������������������������0000644�0001750�0000144�00000001244�12110457565�023563� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_fileproperties.png���������������������������������0000644�0001750�0000144�00000001334�12110457565�024275� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_filelinker.png�������������������������������������0000644�0001750�0000144�00000001150�12110457565�023361� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_fileassoc.png��������������������������������������0000644�0001750�0000144�00000001556�12110457565�023217� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_extractfiles.png�����������������������������������0000644�0001750�0000144�00000001563�12110457565�023742� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME dsfr���IDAT8˝]h[eyOSav[B)"^ntY^HY+L&;{! ܘM܅ ?[ktm&inisYr^/UD|=7}j>^ԣWt_Op7b#<0#{dzu pt{@Jl_xg-"4 M79Ecu±+l`{w[^AA.KKKN^z; SOvT u<+ˊ4gcut|8qIz~S:'/4ּjW23H]Pt\.z4ޝM>NpCMoS-�ܡu:'Gj-Fk gcF|<�Z:ϭG4&Yjj4lmT, ˬ,dY."5w ೯s,I$Rd粬.0>z]գ?Z&=%>5G,C'2pRԚeZS֪1=gs9\L}cu.J)�[Fv)4%!@]*Xr͝LLCN1^!pEt)Q@4un+><T;hY)U&^iKRiRY/xK}'Ef01Nj~\*Gf&cE̜f/hu116L7?<> $Ͽ&/4����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/16x16/actions/cm_exitfromtray.png�����������������������������������0000644�0001750�0000144�00000001405�12110457565�023775� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_exit.png�������������������������������������������0000644�0001750�0000144�00000001405�12110457565�022211� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_executescript.png����������������������������������0000644�0001750�0000144�00000002174�13015446652�024133� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_exchange.png���������������������������������������0000644�0001750�0000144�00000001221�12110457565�023016� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_editpath.png���������������������������������������0000644�0001750�0000144�00000002174�13015446652�023046� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_editnew.png����������������������������������������0000644�0001750�0000144�00000002174�13014355224�022674� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_editcomment.png������������������������������������0000644�0001750�0000144�00000001267�12110457565�023556� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_edit.png�������������������������������������������0000644�0001750�0000144�00000002174�13013742760�022166� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_doanycmcommand.png���������������������������������0000644�0001750�0000144�00000002174�13015446652�024235� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_dirhotlist.png�������������������������������������0000644�0001750�0000144�00000001476�12110457565�023435� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_dirhistory.png�������������������������������������0000644�0001750�0000144�00000002174�13014355224�023435� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_deletesearches.png���������������������������������0000644�0001750�0000144�00000002174�13017704640�024220� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_delete.png�����������������������������������������0000644�0001750�0000144�00000002174�13014355224�022477� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_debugshowcommandparameters.png���������������������0000644�0001750�0000144�00000002174�13015446652�026656� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_cuttoclipboard.png���������������������������������0000644�0001750�0000144�00000002174�13015200640�024243� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_countdircontent.png��������������������������������0000644�0001750�0000144�00000001157�12110457565�024466� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copytoclipboard.png��������������������������������0000644�0001750�0000144�00000002174�13015200640�024422� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copysamepanel.png����������������������������������0000644�0001750�0000144�00000002174�13014355224�024075� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copypathoffilestoclip.png��������������������������0000644�0001750�0000144�00000002174�13015446652�025656� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copypathnosepoffilestoclip.png���������������������0000644�0001750�0000144�00000002174�13015446652�026723� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copynoask.png��������������������������������������0000644�0001750�0000144�00000002174�13014355224�023243� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copynamestoclip.png��������������������������������0000644�0001750�0000144�00000001272�12110457565�024453� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copyfullnamestoclip.png����������������������������0000644�0001750�0000144�00000001355�12110457565�025340� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copyfiledetailstoclip.png��������������������������0000644�0001750�0000144�00000002174�13015446652�025637� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copyalltabstoopposite.png��������������������������0000644�0001750�0000144�00000002174�13014736012�025676� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_copy.png�������������������������������������������0000644�0001750�0000144�00000002174�13014355224�022207� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_contextmenu.png������������������������������������0000644�0001750�0000144�00000002174�13013742760�023612� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configtreeviewmenuscolors.png����������������������0000644�0001750�0000144�00000002174�13016303343�026544� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configtreeviewmenus.png����������������������������0000644�0001750�0000144�00000002174�13016303343�025322� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configtooltips.png���������������������������������0000644�0001750�0000144�00000002216�13340371272�024300� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configtoolbars.png���������������������������������0000644�0001750�0000144�00000001651�12451473236�024257� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configsearches.png���������������������������������0000644�0001750�0000144�00000002174�13017704640�024223� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configsavesettings.png�����������������������������0000644�0001750�0000144�00000002174�13013475730�025146� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configsavepos.png����������������������������������0000644�0001750�0000144�00000002216�13424361073�024104� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configplugins.png����������������������������������0000644�0001750�0000144�00000002216�13367401147�024110� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_confighotkeys.png����������������������������������0000644�0001750�0000144�00000002174�13017451256�024116� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configfoldertabs.png�������������������������������0000644�0001750�0000144�00000002216�12656270711�024555� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configfavoritetabs.png�����������������������������0000644�0001750�0000144�00000002216�12656270711�025121� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configdirhotlist.png�������������������������������0000644�0001750�0000144�00000002144�12405254001�024577� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_configarchivers.png��������������������������������0000644�0001750�0000144�00000002174�13310340103�024376� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_comparedirectories.png�����������������������������0000644�0001750�0000144�00000002174�12467744673�025145� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_comparecontents.png��������������������������������0000644�0001750�0000144�00000001147�12110457565�024447� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_columnsview.png������������������������������������0000644�0001750�0000144�00000001113�12110457565�023607� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_cmdlineprev.png������������������������������������0000644�0001750�0000144�00000002174�13015446652�023554� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_cmdlinenext.png������������������������������������0000644�0001750�0000144�00000002174�13015446652�023556� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_closetab.png���������������������������������������0000644�0001750�0000144�00000001122�12110457565�023030� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_closeduplicatetabs.png�����������������������������0000644�0001750�0000144�00000002174�13014736012�025105� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_closealltabs.png�����������������������������������0000644�0001750�0000144�00000001174�12110457565�023713� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_clearlogwindow.png���������������������������������0000644�0001750�0000144�00000002174�13015446652�024264� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_clearlogfile.png�����������������������������������0000644�0001750�0000144�00000002174�13013743363�023671� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_checksumverify.png���������������������������������0000644�0001750�0000144�00000001377�12110457565�024277� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_checksumcalc.png�����������������������������������0000644�0001750�0000144�00000001132�12110457565�023662� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_changedirtoroot.png��������������������������������0000644�0001750�0000144�00000002174�13015446652�024437� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_changedirtoparent.png������������������������������0000644�0001750�0000144�00000002174�13015446652�024745� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_changedirtohome.png��������������������������������0000644�0001750�0000144�00000002174�13013742760�024401� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_changedir.png��������������������������������������0000644�0001750�0000144�00000002174�13013742760�023165� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_calculatespace.png���������������������������������0000644�0001750�0000144�00000001516�12110457565�024214� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_briefview.png��������������������������������������0000644�0001750�0000144�00000001064�12110457565�023223� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_benchmark.png��������������������������������������0000644�0001750�0000144�00000002216�13302140730�023156� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_addpathtocmdline.png�������������������������������0000644�0001750�0000144�00000002174�13015446652�024550� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_addpathandfilenametocmdline.png��������������������0000644�0001750�0000144�00000002174�13016303343�026722� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_addnewsearch.png�����������������������������������0000644�0001750�0000144�00000002174�13014355224�023665� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_addfilenametocmdline.png���������������������������0000644�0001750�0000144�00000002174�13016303343�025362� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_activatetabbyindex.png�����������������������������0000644�0001750�0000144�00000002216�13367456510�025117� 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-0.9.8/pixmaps/dctheme/16x16/actions/cm_about.png������������������������������������������0000644�0001750�0000144�00000001374�12110457565�022357� 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-0.9.8/pixmaps/dctheme/16x16/actions/application-exit.png����������������������������������0000644�0001750�0000144�00000001437�13110303146�024022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��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-0.9.8/pixmaps/dctheme/128x128/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016553� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/mimetypes/��������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020567� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/mimetypes/unknown.png���������������������������������������0000644�0001750�0000144�00000005051�13175313470�023003� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<�� IDATxSIǿ3$$$@ėT<p]=ﶶںueRQVqE!$!3s?(+$id:ӟ2yLϓ<pL@;w4Ms(C̻˗/-BM###*ɂis(J��D"dnS+KUdf[( 4MQ' 4ۚ� B�Ͷ�6>Cy`rx�*~C� TS'~ȡ�5� <�L5E`8T`rx"A ^P`r0T3,őL*$d &CeH:Œ(7oak{h,o6U.TWԠ nWN!(<}` 8g(vQ~<vp1tp!3VWh P(?;<Gq1; jłL`8^,,x]b"8}?!twߏ#Zx1kҵ~0f~Sud G멆$IPUPZ ",?gg'?OWPi䌩59ܝȶփ>Z fSU˿o`6b8_AC;X[$mߙ^ CuM&A@ss#2{EQpm| V+opzi3AOvNjN;&&]Waj:�UWW nƍ?*/%Ŕ_8ޓb-/!dݺiϻ^=a*�։4N'NvխT)'%eumjmm'ag'K[Ђ) `)+#t8 Im,ORʔ$ۍvuur͇0 L@sQ"d2EX<EQliL@ggт "�V_(ZL- sU:qt7>hJ՗WKAbۆ#uoSv~z;ҎʝmhoV_JQbOd+ խM pqx3lm�nw%Z[OR'T>_3*+bfk EU1=yC�pLOACNim fga'"mooE]6`NE8lv Qa{H$Y$Q+_Z^Wa*KKA, ^p^`ISzH&1~lپ^twأܒB39yp8]oO'r|YxX-8׋s}:xTx&H%� To^nŐy�`p0|z�w;xt.J'pm'E vy}}-]M s~Fi\uu4\P@Ӏ҄rz%:567•+J&�??e1Q!Hh1pDc1+wu1 iKEQDoOg<* &8ExvX_w"x dIF1~(hll` 'Y㠝?\n =,%L�^U"xR|LcN'[Azʲ\O)E`*?�,E`K?󢫳vzXŽA6䡍)�1dÉ@~8T`r`,<OFX,pTQL @JQ/x>HdqQ؀3=)2a�G"]loXZ "\>tvf60(z@;H11`d\=4�SShjl0.0\"=_8},2c/~ȕd*td.J�?J &Da)mm=G3lőzÞM4ʨt&_ Bb`�#_|}+P__NF- �FGZq(+xR �558PXL$�L>4={΁&% 5 `N11K8t`rL'9yRp~.a>0!S<؃&`\>:t;oq ^[}>�ǩ x슣{m8)+ P.IbT�Гe"J%d�>O A,{N9yHĶ(EQ,>O 9s�.%IR @֭[\DTi@ p[/ ȫx<NM*V]QrMXP@A$IJ�؍!Av677C9C^!]$(e<� ˇ�H*WUuwcc#Wy}>_y4TUP@DQl6�r9p8Y --A.����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/mimetypes/package-x-generic.png�����������������������������0000644�0001750�0000144�00000005747�13175313470�024572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<�� dIDATx߫$Gǿ?{ܻ{PYŀAQ0"FI6>$,Iv!$He("D$B@XoF rwsgLwfzgzzzn}]zO:}`0 `0 `0 `0 `0 `04nV=TzؿE'_ʇ-.a`#HE*a[ %�c@4`&=[*nQ͇-{VqO�o+u. <OI `r"q?<<}{s/ޮRSY>ξ" VQOԙ(`Sj%Rh<-u<;oxJ]<j Nn^8׶QZɺ۩sQmQl1Ic}ykG*UՎ$bjDqh? ed�]Σ iE(D|<2?HvGAg\C^~ݞxL&YRGZ#7eD=9nD q:8hEjY=޼qw]:cY K�hg GC@8 [has}o}ƍtCr(5}sZe9=CFYC@{'"XqXx�(ZG)=wvsmHα}Fy5rtNN? x_lZX?yV8_Q}sx~%/p(h*{iRZ}w-l�Ģ綶wQzU_ijn6xvӏ1f]p{]:]{Np[>,X{oi!}uk{׋: +:98ۢKd�-'/G틗݊'K{I$sU"`_~ᵾLi{`kc6tDDWxu̲oGW�R`gov>�82?+À(vG!i�R_%p~͙{fOgϬ3Zem{_ʁ�e?MYMu!qAhwXޭ�wu cϴ;{<Ծ)}#顁*upvwUm z_y-uNjD@JXD~5iͷ?Q\V*�|?x̅4*VG^I;;1-Qmgr}Tr;/ws�㵯\|佖mrwn*xy`lA'DT $;Zg;{J^\-j/ʤ-|<MkYrj|=r7k\OmnB f�yW#)'}8~eEr ' 焢i I"x8KF3 M 9d ^QTr^LWD5h I|HDӚMa;*�$�QHYV3h$xm9�$$N7ew%�Lkr'"g:`H2m;$Tf:%"�DhmNiD}>\sn,42}&5 E 9Pap?}7p88Dwϫ1<jlIp;o F'4z5z7oh:47^)�t*;V-H.$<|e@OI@8]1,Ӵ8�)MDqV@h=E[+]`A!M׎֨R`#mGF�oPDZiRl\>N@MUA̒(~5T’|5�&{gHy8l2|ĖOC9HfX fC:$7qLIRBQB80:[)7k3HLKm bVM*9TZM/F4>Є85CQVImB  זL ݰI5%xdR(jWi1G.\-M*"o,LN(�` h@7TPJƵ2UAYcj#+.n+MN(hOvL :jl�_Śg�ΪBŷA͂0M sP�lL<@ E&Ѽp�=�I ӁZgvJ3^Q67-'>/?[.�Bհ[:to1ϔ2� #7.6|5,89Ix @\0Д|6nۉ#E`Mkf `l<&>懀DPd� yCJMy[-,D_hiR 7I%;?ShY\ KV5  m�`&+xMTU7M�ɧ_�nk&JV͠dK�0gDatPb3(@�?vi7dtZWtw1Sx,-Cyų< f8z<M44 4T p2�>-H&?K;B P<`Lf}, *!m!@c¢$d^F4s0u,O?AD4Y(6̑ D[~]pN�/dw�P; KlQ 3~|^5̞c66�@kr+0hM``�i@ӈ'}!J dc�bҡWhhqz;86x` y,>)4xI\ -14M4Œ����IENDB`�������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/mimetypes/application-x-executable.png����������������������0000644�0001750�0000144�00000022422�13175313470�026174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs��'_��'_j���tEXtSoftware�www.inkscape.org<���tEXtTitle�Executable���tEXtAuthor�Jakub Steiner/���"tEXtSource�http://jimmac.musichall.cz/i���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� �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)��IDAT*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ݶ  OA����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/actions/����������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020213� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/actions/view-sort-descending.png����������������������������0000644�0001750�0000144�00000005217�13175313470�024774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs��v��vx���tEXtSoftware�www.inkscape.org<�� IDATx\Uǿ ?bZ (A-fME!EV0H(!~Z(!) ;2dAښh PXi}scf){3w>fsν3λ}w�AAAAAAAAkРRl#5+"(9"#(9"#(9"S4y1n;L]f QR1} ިT*HC%"wj 3?`Q?"?RVi0(j&�K}/\+뺟݄nR �Q?OJYr@|,~"�qrB7))gV:޲"m^!_! P*e%AJjd*j�pVB7))�R�\OF钉�Ǝx)�(؄nR3 u8s /%ҟ `ll"W)�jZ%G�TJϐplR?)ْ�VZu6]ׇ1.}I|Rs�(1IQ(.W)9aL�>\I:ҟ3F6꫷љ2Tm3pp] DDgX�#$ #b9AB�J�JNaA*@@@@@@@@IFaܹDԲ$�8st -�{7NWf4XvoPJ` /�|e9(RjRj˘yFp5O>�,e[y8?B$c s�k2A||T90)ISzpRǘ�K�L]=-@<o*^*|WΎUlJZf;X_ǹ s�!;� `3? ? :G)4i]]CDj: ZfW "jt|�eMv:�@DN(vZttP�^?q.d1wEp^z�y8_i6j#u��xRLNLL481LZƌy9ݏwW [iYtf`?qJAc01tuwЂ/\%#�`~?3ؠҀŽ R7ts]ˋ2&3ߥa )(./pX fgB `ѢEqg=Z fjz 1j!fkB MZni>OA^�.YpC{MYshOdq;jvO"~oZT}yt^o߾[u2,pJէu]㼁6\d&�uOce�NpzZ5/u11SAɿTٟMjh4ݻN3j+)oPJY�an\}}?8RG(޵kK$}@a��inlG5L  S01A3Zk�̹<&g�3+�)apټƘ}+co%04Xr1͠c̓DfEQj{R*wJ)5k1 HZ뫐rC U ݼZ)mW:c1'^} [@~:==}[ gqb/&vN^uI3c^Dm\F茌%Nb&x65 lʍ.5f\u383?gh4۶/-ٶ}i^ ,v2ȶK!Gm۾(6zaB�qŝ <Bdž/3gTJ EA`A;AמbŊR~nOAp�nApQݞ6k`L6*6y\XqnT*/؀)v=dɒ <>@Ǘ,YraQx.[w43Of ~yvf 8"Xx͛7Oo`SJ�ryv?k;cKkzz"47�0}zn�; 4͛۶am+bCh6$�Lml"x<m۶fOA.g1¼BDkku:~yoGQ@nMOOqatGOm9+.oٶS|&Vk*5x@Ae6 ©)2f>30s$^�/N3ESzRpɁUׇ0�lVyAAAAAAAA('|+����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/actions/view-sort-ascending.png�����������������������������0000644�0001750�0000144�00000005215�13175313470�024622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs��v��vx���tEXtSoftware�www.inkscape.org<�� IDATxǿ�Keڴ6џLx})Z֤WJT+VTeC̬=rv폘wԐGKh?m;3I>ϓ<}fwyAAAAAAAaAa:|LRy�fͪ�pV׊0sL:u�L��|Eo6�)K6([�Rś|{XtCX>'p9J?._ ؠ;Xm8q�?,kAD&5P*<��7EkR鬳S�m`w�#�HD�י]`ps;;;_<|`tJ�ODCjuR9088wuu]0mڴu�r 7Xc`!�2 ch``>r."އˮvNR?Z;��UOi5V k췭5ЖT*~|?j" -_>Jm)Bp*Vm;y޼H 'OL* J�Wy9�ʫYj}�2]BwN~L�e-`,TjJT4͌y(�<R4][okB󩑑\Z]BDtq\׍F{a�'|48>>tppp,J�`5uH4>>": PJ] u�!ljmS (0 m}9k�5 ۶}o<ow@K\xk�2>CDTb?W*C9@)~E} rرyiqD40{e[n=Vn͠eN7_O~磿.��̼ttttWvA˗u>L__8bM4FGGׂLl8� p&~b`fw5v43BO[av:nLelv\Ȁ!Nض0wtt<k۶}A! O8R[+Š+<t4-#ϧ<{g|,uW#/qjy_a�n0O!ȀNݡ)?i+0o}l�`֨E#+>lQJm\.^\.0Xx)�X~_\n T+U"[l9P]4?`�3D4fkZ &f�W.J%ђdf&[Su~�Zo;#�I��k{.&Ȳ'C P*L&@[R[A'ra�t1f\.83~_\^NBp\.9%=EE�bD-P;�,"kw.H)i?PJmB"v8oq!>uor]dZ OFٵ䇦i Z뾚N?OD̩_~yL*q~Y#Eg~u,z>͟HTsν{8νL""ZNDO8HDox)�ok[9/ OpX3iuX<jRj�L i~ym{�9y=⺮3հ0,G\| SLkR늟(3:N"[` @) }G^:AEXo5�][AZmyx uݟm�b{XS,l5ޤ��8sm_VX��_ �go9*Dq銓�8/Qڸu&el#Q��uv/~f6]ݣVàՕI\> � �N~HH8"#H8"#H8"#H8-蚇[u38lI-:Rj.3?pq0JB "vi0N�Am)Al~�_ 8l80Iv�˲kՑ֯`ZtH~&�pia5�rM8sXT@鹌:NZ8D*�4T*xi�lW" 2'?\"@oo,�|:R<äG@r+,:NZ4*ˉ&J돈`QTv*?BB3J~�i�zzzѽM 1;t'? RlpqqA�ROJ m, �͜]'?FJmwO)Ѳ)ѣK͌eJc�r,DVG2B,�f~|B`BLf/"#H8"�AAAAAAAAI�I�f����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/dctheme/128x128/actions/go-up.png�������������������������������������������0000644�0001750�0000144�00000016152�13175313470�021763� 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-0.9.8/pixmaps/cursors/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015705� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/cursors/ArrowMove.cur�������������������������������������������������������0000644�0001750�0000144�00000004276�12512434150�020351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@��������������������������������r����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�>�� ��?�������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/cursors/ArrowLink.cur�������������������������������������������������������0000644�0001750�0000144�00000004276�12512434150�020340� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@�������������������������������]����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~>� ���������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/cursors/ArrowCopy.cur�������������������������������������������������������0000644�0001750�0000144�00000004276�12512434150�020355� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�>� ?�?�������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/pixmaps/archive_src.ico�������������������������������������������������������������0000644�0001750�0000144�00000017126�11226363660�017207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ���6������ ���������h����(��� ���@���� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������feeed d d c d b b b b a a ` ` _ _ _ ^ ^ ] ^ ] ] \ \ [��������s~|yvtqnlifda^[ \����s������}|zxwusrpnmkjhg^ \����s}|zxvusrpnmkih_ \����s������~|{yxvusqonmjia \����s~|zywutrpomljc \����s������}{yxwutrpnlke \����s~|{yxvusqomlh \����s������~|{ywutrqomi \����s���������������}|zxvutrpnk \����s���}{zxvtsrpm \����s���}|zyxvtrqn \����s������}|zywvtrq \����s������}|zxwutr \����s������������|{yxvtu \����s���~|zywuv \����s���~{zxwx \����s���~}{ywz \����s������}}{y| \����s������}|z~ \����s������~}{ \����s������ \����s������}zxvspppppppppppppp������������s���~|s������������������������������������������������������������������������ss��������������������������������������������������������������������������������ss����������������������������������������������������������������������������������������sssssssss�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(������,���� ������������������������������������������������������������������������������������������������������������������Cvggfeed c c b a a ` _ ^ ^ ] ] \ [��������k{wsokgc [����l~|zwusqnlih \����m������~{ywuronki \����n~{xvtrolj ]����o������|zxutqnl ^����pddddddddd~|zwtrpm _����r���~{yvsrp _����r���|zxvsq _����tddd���|zwvs `����uddd���{ywt a����vddddddddd���~zxv b����w���}zw b����x������~|y c�����y������~{ c�����z���rqpnnlkji�����Ky�����zu�����k�l�l�l�l�l�l�l�m�������������zu�F���������������������������������������������������������z�z�z�z�z�z����������������������������������������������������������������������������������������s������������������������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������� ��?����(������ ���������������������������������� \� \� ]� ^� ^� ^� `� `� b� b� c�d� d�e�g�j�l�n�n�o�q�s�t�u�w�x�y��z��W�\�]�`�d�e�i�j�m�q�r��v�w�z�~�����������y�{�|��|�~�}�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  ��E86420.,(&#!�Nd��ROIF@;9 �Wg**VQMHC?:"�^k��ZUPKFA=$�hm**]XRMKC>%�no��`[TPMGB'�sp*�*b_YSPKD)�ur*ca\VQOJ+�vtvL<7531/-�qq*ji���llfe�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/multiarc.ini������������������������������������������������������������������������0000644�0001750�0000144�00000011345�13603447456�015067� 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} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQU Test=%P t -y {%S} %AQA @%LQU Delete=%P d -y {%S} %AQA @%LQU Add=%P a -mx -y {-p%W} {-v%V} {%S} %AQA @%LQU AddSelfExtract=%P a -mx -y -sfx {-p%W} {-v%V} {%S} %AQA @%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} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQU Test=%P t -y {%S} %AQA @%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 %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQA ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQA Test=%P t -y %AQA Delete=%P d -y %AQA @%LQA Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQA AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%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=* nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn Format1=???????????? zzzzzzzzzz pppppppppp yy-tt-dd hh:mm:ss aaaaaa Format2=? Format3=? List=%P v %AQA Extract=%P x -y {-g%W} {%S} %AQA !%LQA ExtractWithoutPath=%P e -y {-g%W} {%S} %AQA !%LQA Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA !%LQA Add=%P a -y {-g%W} {-v%V} {%S} %AQA !%LQA Enabled=0 Output=0 Debug=0 [RAR] Description=RAR 4.00 - http://www.rarlab.com Extension=rar Archiver=rar Start=^----------- End=^----------- Format0=?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn Format1=zzzzzzzzzzzzzzzzzzzzzz pppppppp dd-tt-yy hh:mm aaaaaaa List=%P v -c- {-p%W} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQ ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQ Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA @%LQ Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQ AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQ PasswordQuery=Enter password Enabled=0 Output=0 Debug=0 [RAR (5)] Archiver=rar Description=RAR 5.x - http://www.rarlab.com ID=52 61 72 21 IDPos=<SeekID> IDSeekRange= Extension=rar Start=^----------- End=^----------- Format0=?aaaaaaaaaa $z+ yyyy tt dd hh:mm n+ List=%P l -c- {-p%W} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQA ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQA Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA @%LQA Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQA AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQA PasswordQuery=Enter password FormMode=0 Enabled=0 Output=0 Debug=0 [TXZ] Archiver=tar Description=Compressed tar file (tar.xz) Extension=txz Format0=aaaaaaaaaa zzzzzzz yyyy-tt-dd hh:mm n+ List=%P -tv --xz -f %AQA Extract=%P -x --xz --no-recursion {%S} -f %AQA -T %LFQA Add=%P -c --xz --no-recursion {%S} -f %AQA -T %LQA 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 nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P v --noarcext -- %AQA Extract=%P x {-p%W} -y --noarcext -sclANSI -- %AQA @%LA ExtractWithoutPath=%P e {-p%W} -y --noarcext -sclANSI -- %AQA @%LA Test=%P t --noarcext -sclANSI -- %AQA Delete=%P d --noarcext -sclANSI -- %AQA @%LA Add=%P a {-p%W} {-ap%RQA} --noarcext -sclANSI {%S} -- %AQA @%LA AddSelfExtract=%P a {-p%W} {-ap%RQA} -sfx --noarcext -sclANSI {%S} -- %AQA @%LA PasswordQuery= FormMode=0 Enabled=0 Output=0 Debug=0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/��������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�014500� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015267� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libssh2/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016635� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libssh2/build.bat�����������������������������������������������������0000644�0001750�0000144�00000000176�13130730552�020431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rem Build libssh2 library mkdir release copy NUL release\version.inc make dll WITH_WINCNG=1 LDFLAGS+=" -static -shared" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libssh2/Makefile.mbedTLS����������������������������������������������0000644�0001750�0000144�00000020222�13457076377�021611� 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-0.9.8/libraries/src/libssh2/Makefile.libgcrypt��������������������������������������������0000644�0001750�0000144�00000020736�13132464424�022310� 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-0.9.8/libraries/src/libbz2/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016453� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/readme.txt�����������������������������������������������������0000644�0001750�0000144�00000000120�12161267161�020447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libbzip2 http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz Version 1.0.6 (20/09/2010) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/randtable.c����������������������������������������������������0000644�0001750�0000144�00000007424�12161267161�020567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Table for randomising repetitive blocks ---*/ /*--- randtable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ Int32 BZ2_rNums[512] = { 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 }; /*-------------------------------------------------------------*/ /*--- end randtable.c ---*/ /*-------------------------------------------------------------*/ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/libbz2.vcxproj�������������������������������������������������0000644�0001750�0000144�00000034227�13005414745�021271� 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-0.9.8/libraries/src/libbz2/libbz2.def�����������������������������������������������������0000644�0001750�0000144�00000000273�12161267161�020326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS BZ2_bzCompressInit BZ2_bzCompress BZ2_bzCompressEnd BZ2_bzDecompressInit BZ2_bzDecompress BZ2_bzDecompressEnd BZ2_bzBuffToBuffCompress BZ2_bzBuffToBuffDecompress �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/huffman.c������������������������������������������������������0000644�0001750�0000144�00000015517�12161267161�020261� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Huffman coding low-level stuff ---*/ /*--- huffman.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ #define WEIGHTOF(zz0) ((zz0) & 0xffffff00) #define DEPTHOF(zz1) ((zz1) & 0x000000ff) #define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) #define ADDWEIGHTS(zw1,zw2) \ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) #define UPHEAP(z) \ { \ Int32 zz, tmp; \ zz = z; tmp = heap[zz]; \ while (weight[tmp] < weight[heap[zz >> 1]]) { \ heap[zz] = heap[zz >> 1]; \ zz >>= 1; \ } \ heap[zz] = tmp; \ } #define DOWNHEAP(z) \ { \ Int32 zz, yy, tmp; \ zz = z; tmp = heap[zz]; \ while (True) { \ yy = zz << 1; \ if (yy > nHeap) break; \ if (yy < nHeap && \ weight[heap[yy+1]] < weight[heap[yy]]) \ yy++; \ if (weight[tmp] < weight[heap[yy]]) break; \ heap[zz] = heap[yy]; \ zz = yy; \ } \ heap[zz] = tmp; \ } /*---------------------------------------------------*/ void BZ2_hbMakeCodeLengths ( UChar *len, Int32 *freq, Int32 alphaSize, Int32 maxLen ) { /*-- Nodes and heap entries run from 1. Entry 0 for both the heap and nodes is a sentinel. --*/ Int32 nNodes, nHeap, n1, n2, i, j, k; Bool tooLong; Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; for (i = 0; i < alphaSize; i++) weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; while (True) { nNodes = alphaSize; nHeap = 0; heap[0] = 0; weight[0] = 0; parent[0] = -2; for (i = 1; i <= alphaSize; i++) { parent[i] = -1; nHeap++; heap[nHeap] = i; UPHEAP(nHeap); } AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); while (nHeap > 1) { n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); nNodes++; parent[n1] = parent[n2] = nNodes; weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); parent[nNodes] = -1; nHeap++; heap[nHeap] = nNodes; UPHEAP(nHeap); } AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); tooLong = False; for (i = 1; i <= alphaSize; i++) { j = 0; k = i; while (parent[k] >= 0) { k = parent[k]; j++; } len[i-1] = j; if (j > maxLen) tooLong = True; } if (! tooLong) break; /* 17 Oct 04: keep-going condition for the following loop used to be 'i < alphaSize', which missed the last element, theoretically leading to the possibility of the compressor looping. However, this count-scaling step is only needed if one of the generated Huffman code words is longer than maxLen, which up to and including version 1.0.2 was 20 bits, which is extremely unlikely. In version 1.0.3 maxLen was changed to 17 bits, which has minimal effect on compression ratio, but does mean this scaling step is used from time to time, enough to verify that it works. This means that bzip2-1.0.3 and later will only produce Huffman codes with a maximum length of 17 bits. However, in order to preserve backwards compatibility with bitstreams produced by versions pre-1.0.3, the decompressor must still handle lengths of up to 20. */ for (i = 1; i <= alphaSize; i++) { j = weight[i] >> 8; j = 1 + (j / 2); weight[i] = j << 8; } } } /*---------------------------------------------------*/ void BZ2_hbAssignCodes ( Int32 *code, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 n, vec, i; vec = 0; for (n = minLen; n <= maxLen; n++) { for (i = 0; i < alphaSize; i++) if (length[i] == n) { code[i] = vec; vec++; }; vec <<= 1; } } /*---------------------------------------------------*/ void BZ2_hbCreateDecodeTables ( Int32 *limit, Int32 *base, Int32 *perm, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 pp, i, j, vec; pp = 0; for (i = minLen; i <= maxLen; i++) for (j = 0; j < alphaSize; j++) if (length[j] == i) { perm[pp] = j; pp++; }; for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; for (i = 0; i < alphaSize; i++) base[length[i]+1]++; for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; vec = 0; for (i = minLen; i <= maxLen; i++) { vec += (base[i+1] - base[i]); limit[i] = vec-1; vec <<= 1; } for (i = minLen + 1; i <= maxLen; i++) base[i] = ((limit[i-1] + 1) << 1) - base[i]; } /*-------------------------------------------------------------*/ /*--- end huffman.c ---*/ /*-------------------------------------------------------------*/ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/error.c��������������������������������������������������������0000644�0001750�0000144�00000004363�12161267161�017763� 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 me at: jseward@bzip.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. Julian Seward, 10 December 2007.\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-0.9.8/libraries/src/libbz2/decompress.c���������������������������������������������������0000644�0001750�0000144�00000050667�12161267161�021006� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Decompression machinery ---*/ /*--- decompress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ static void makeMaps_d ( DState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->seqToUnseq[s->nInUse] = i; s->nInUse++; } } /*---------------------------------------------------*/ #define RETURN(rrr) \ { retVal = rrr; goto save_state_and_return; }; #define GET_BITS(lll,vvv,nnn) \ case lll: s->state = lll; \ while (True) { \ if (s->bsLive >= nnn) { \ UInt32 v; \ v = (s->bsBuff >> \ (s->bsLive-nnn)) & ((1 << nnn)-1); \ s->bsLive -= nnn; \ vvv = v; \ break; \ } \ if (s->strm->avail_in == 0) RETURN(BZ_OK); \ s->bsBuff \ = (s->bsBuff << 8) | \ ((UInt32) \ (*((UChar*)(s->strm->next_in)))); \ s->bsLive += 8; \ s->strm->next_in++; \ s->strm->avail_in--; \ s->strm->total_in_lo32++; \ if (s->strm->total_in_lo32 == 0) \ s->strm->total_in_hi32++; \ } #define GET_UCHAR(lll,uuu) \ GET_BITS(lll,uuu,8) #define GET_BIT(lll,uuu) \ GET_BITS(lll,uuu,1) /*---------------------------------------------------*/ #define GET_MTF_VAL(label1,label2,lval) \ { \ if (groupPos == 0) { \ groupNo++; \ if (groupNo >= nSelectors) \ RETURN(BZ_DATA_ERROR); \ groupPos = BZ_G_SIZE; \ gSel = s->selector[groupNo]; \ gMinlen = s->minLens[gSel]; \ gLimit = &(s->limit[gSel][0]); \ gPerm = &(s->perm[gSel][0]); \ gBase = &(s->base[gSel][0]); \ } \ groupPos--; \ zn = gMinlen; \ GET_BITS(label1, zvec, zn); \ while (1) { \ if (zn > 20 /* the longest code */) \ RETURN(BZ_DATA_ERROR); \ if (zvec <= gLimit[zn]) break; \ zn++; \ GET_BIT(label2, zj); \ zvec = (zvec << 1) | zj; \ }; \ if (zvec - gBase[zn] < 0 \ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ RETURN(BZ_DATA_ERROR); \ lval = gPerm[zvec - gBase[zn]]; \ } /*---------------------------------------------------*/ Int32 BZ2_decompress ( DState* s ) { UChar uc; Int32 retVal; Int32 minLen, maxLen; bz_stream* strm = s->strm; /* stuff that needs to be saved/restored */ Int32 i; Int32 j; Int32 t; Int32 alphaSize; Int32 nGroups; Int32 nSelectors; Int32 EOB; Int32 groupNo; Int32 groupPos; Int32 nextSym; Int32 nblockMAX; Int32 nblock; Int32 es; Int32 N; Int32 curr; Int32 zt; Int32 zn; Int32 zvec; Int32 zj; Int32 gSel; Int32 gMinlen; Int32* gLimit; Int32* gBase; Int32* gPerm; if (s->state == BZ_X_MAGIC_1) { /*initialise the save area*/ s->save_i = 0; s->save_j = 0; s->save_t = 0; s->save_alphaSize = 0; s->save_nGroups = 0; s->save_nSelectors = 0; s->save_EOB = 0; s->save_groupNo = 0; s->save_groupPos = 0; s->save_nextSym = 0; s->save_nblockMAX = 0; s->save_nblock = 0; s->save_es = 0; s->save_N = 0; s->save_curr = 0; s->save_zt = 0; s->save_zn = 0; s->save_zvec = 0; s->save_zj = 0; s->save_gSel = 0; s->save_gMinlen = 0; s->save_gLimit = NULL; s->save_gBase = NULL; s->save_gPerm = NULL; } /*restore from the save area*/ i = s->save_i; j = s->save_j; t = s->save_t; alphaSize = s->save_alphaSize; nGroups = s->save_nGroups; nSelectors = s->save_nSelectors; EOB = s->save_EOB; groupNo = s->save_groupNo; groupPos = s->save_groupPos; nextSym = s->save_nextSym; nblockMAX = s->save_nblockMAX; nblock = s->save_nblock; es = s->save_es; N = s->save_N; curr = s->save_curr; zt = s->save_zt; zn = s->save_zn; zvec = s->save_zvec; zj = s->save_zj; gSel = s->save_gSel; gMinlen = s->save_gMinlen; gLimit = s->save_gLimit; gBase = s->save_gBase; gPerm = s->save_gPerm; retVal = BZ_OK; switch (s->state) { GET_UCHAR(BZ_X_MAGIC_1, uc); if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_2, uc); if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_3, uc) if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) if (s->blockSize100k < (BZ_HDR_0 + 1) || s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); s->blockSize100k -= BZ_HDR_0; if (s->smallDecompress) { s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); s->ll4 = BZALLOC( ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) ); if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); } else { s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); if (s->tt == NULL) RETURN(BZ_MEM_ERROR); } GET_UCHAR(BZ_X_BLKHDR_1, uc); if (uc == 0x17) goto endhdr_2; if (uc != 0x31) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_2, uc); if (uc != 0x41) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_3, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_4, uc); if (uc != 0x26) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_5, uc); if (uc != 0x53) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_6, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); s->currBlockNo++; if (s->verbosity >= 2) VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); s->storedBlockCRC = 0; GET_UCHAR(BZ_X_BCRC_1, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_2, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_3, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_4, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); s->origPtr = 0; GET_UCHAR(BZ_X_ORIGPTR_1, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_2, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_3, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); if (s->origPtr < 0) RETURN(BZ_DATA_ERROR); if (s->origPtr > 10 + 100000*s->blockSize100k) RETURN(BZ_DATA_ERROR); /*--- Receive the mapping table ---*/ for (i = 0; i < 16; i++) { GET_BIT(BZ_X_MAPPING_1, uc); if (uc == 1) s->inUse16[i] = True; else s->inUse16[i] = False; } for (i = 0; i < 256; i++) s->inUse[i] = False; for (i = 0; i < 16; i++) if (s->inUse16[i]) for (j = 0; j < 16; j++) { GET_BIT(BZ_X_MAPPING_2, uc); if (uc == 1) s->inUse[i * 16 + j] = True; } makeMaps_d ( s ); if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); alphaSize = s->nInUse+2; /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); if (nSelectors < 1) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { j = 0; while (True) { GET_BIT(BZ_X_SELECTOR_3, uc); if (uc == 0) break; j++; if (j >= nGroups) RETURN(BZ_DATA_ERROR); } s->selectorMtf[i] = j; } /*--- Undo the MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], tmp, v; for (v = 0; v < nGroups; v++) pos[v] = v; for (i = 0; i < nSelectors; i++) { v = s->selectorMtf[i]; tmp = pos[v]; while (v > 0) { pos[v] = pos[v-1]; v--; } pos[0] = tmp; s->selector[i] = tmp; } } /*--- Now the coding tables ---*/ for (t = 0; t < nGroups; t++) { GET_BITS(BZ_X_CODING_1, curr, 5); for (i = 0; i < alphaSize; i++) { while (True) { if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); GET_BIT(BZ_X_CODING_2, uc); if (uc == 0) break; GET_BIT(BZ_X_CODING_3, uc); if (uc == 0) curr++; else curr--; } s->len[t][i] = curr; } } /*--- Create the Huffman decoding tables ---*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } BZ2_hbCreateDecodeTables ( &(s->limit[t][0]), &(s->base[t][0]), &(s->perm[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); s->minLens[t] = minLen; } /*--- Now the MTF values ---*/ EOB = s->nInUse+1; nblockMAX = 100000 * s->blockSize100k; groupNo = -1; groupPos = 0; for (i = 0; i <= 255; i++) s->unzftab[i] = 0; /*-- MTF init --*/ { Int32 ii, jj, kk; kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); kk--; } s->mtfbase[ii] = kk + 1; } } /*-- end MTF init --*/ nblock = 0; GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); while (True) { if (nextSym == EOB) break; if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { es = -1; N = 1; do { /* Check that N doesn't get too big, so that es doesn't go negative. The maximum value that can be RUNA/RUNB encoded is equal to the block size (post the initial RLE), viz, 900k, so bounding N at 2 million should guard against overflow without rejecting any legitimate inputs. */ if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); if (nextSym == BZ_RUNA) es = es + (0+1) * N; else if (nextSym == BZ_RUNB) es = es + (1+1) * N; N = N * 2; GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); } while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); es++; uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; s->unzftab[uc] += es; if (s->smallDecompress) while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->ll16[nblock] = (UInt16)uc; nblock++; es--; } else while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->tt[nblock] = (UInt32)uc; nblock++; es--; }; continue; } else { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); /*-- uc = MTF ( nextSym-1 ) --*/ { Int32 ii, jj, kk, pp, lno, off; UInt32 nn; nn = (UInt32)(nextSym - 1); if (nn < MTFL_SIZE) { /* avoid general-case expense */ pp = s->mtfbase[0]; uc = s->mtfa[pp+nn]; while (nn > 3) { Int32 z = pp+nn; s->mtfa[(z) ] = s->mtfa[(z)-1]; s->mtfa[(z)-1] = s->mtfa[(z)-2]; s->mtfa[(z)-2] = s->mtfa[(z)-3]; s->mtfa[(z)-3] = s->mtfa[(z)-4]; nn -= 4; } while (nn > 0) { s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; }; s->mtfa[pp] = uc; } else { /* general case */ lno = nn / MTFL_SIZE; off = nn % MTFL_SIZE; pp = s->mtfbase[lno] + off; uc = s->mtfa[pp]; while (pp > s->mtfbase[lno]) { s->mtfa[pp] = s->mtfa[pp-1]; pp--; }; s->mtfbase[lno]++; while (lno > 0) { s->mtfbase[lno]--; s->mtfa[s->mtfbase[lno]] = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; lno--; } s->mtfbase[0]--; s->mtfa[s->mtfbase[0]] = uc; if (s->mtfbase[0] == 0) { kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; kk--; } s->mtfbase[ii] = kk + 1; } } } } /*-- end uc = MTF ( nextSym-1 ) --*/ s->unzftab[s->seqToUnseq[uc]]++; if (s->smallDecompress) s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); nblock++; GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); continue; } } /* Now we know what nblock is, we can do a better sanity check on s->origPtr. */ if (s->origPtr < 0 || s->origPtr >= nblock) RETURN(BZ_DATA_ERROR); /*-- Set up cftab to facilitate generation of T^(-1) --*/ /* Check: unzftab entries in range. */ for (i = 0; i <= 255; i++) { if (s->unzftab[i] < 0 || s->unzftab[i] > nblock) RETURN(BZ_DATA_ERROR); } /* Actually generate cftab. */ s->cftab[0] = 0; for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; /* Check: cftab entries in range. */ for (i = 0; i <= 256; i++) { if (s->cftab[i] < 0 || s->cftab[i] > nblock) { /* s->cftab[i] can legitimately be == nblock */ RETURN(BZ_DATA_ERROR); } } /* Check: cftab entries non-descending. */ for (i = 1; i <= 256; i++) { if (s->cftab[i-1] > s->cftab[i]) { RETURN(BZ_DATA_ERROR); } } s->state_out_len = 0; s->state_out_ch = 0; BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); s->state = BZ_X_OUTPUT; if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); if (s->smallDecompress) { /*-- Make a copy of cftab, used in generation of T --*/ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; /*-- compute the T vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->ll16[i]); SET_LL(i, s->cftabCopy[uc]); s->cftabCopy[uc]++; } /*-- Compute T^(-1) by pointer reversal on T --*/ i = s->origPtr; j = GET_LL(i); do { Int32 tmp = GET_LL(j); SET_LL(j, i); i = j; j = tmp; } while (i != s->origPtr); s->tPos = s->origPtr; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_SMALL(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_SMALL(s->k0); s->nblock_used++; } } else { /*-- compute the T^(-1) vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->tt[i] & 0xff); s->tt[s->cftab[uc]] |= (i << 8); s->cftab[uc]++; } s->tPos = s->tt[s->origPtr] >> 8; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_FAST(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_FAST(s->k0); s->nblock_used++; } } RETURN(BZ_OK); endhdr_2: GET_UCHAR(BZ_X_ENDHDR_2, uc); if (uc != 0x72) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_3, uc); if (uc != 0x45) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_4, uc); if (uc != 0x38) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_5, uc); if (uc != 0x50) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_6, uc); if (uc != 0x90) RETURN(BZ_DATA_ERROR); s->storedCombinedCRC = 0; GET_UCHAR(BZ_X_CCRC_1, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_2, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_3, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_4, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); s->state = BZ_X_IDLE; RETURN(BZ_STREAM_END); default: AssertH ( False, 4001 ); } AssertH ( False, 4002 ); save_state_and_return: s->save_i = i; s->save_j = j; s->save_t = t; s->save_alphaSize = alphaSize; s->save_nGroups = nGroups; s->save_nSelectors = nSelectors; s->save_EOB = EOB; s->save_groupNo = groupNo; s->save_groupPos = groupPos; s->save_nextSym = nextSym; s->save_nblockMAX = nblockMAX; s->save_nblock = nblock; s->save_es = es; s->save_N = N; s->save_curr = curr; s->save_zt = zt; s->save_zn = zn; s->save_zvec = zvec; s->save_zj = zj; s->save_gSel = gSel; s->save_gMinlen = gMinlen; s->save_gLimit = gLimit; s->save_gBase = gBase; s->save_gPerm = gPerm; return retVal; } /*-------------------------------------------------------------*/ /*--- end decompress.c ---*/ /*-------------------------------------------------------------*/ �������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/crctable.c�����������������������������������������������������0000644�0001750�0000144�00000011322�12161267161�020402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Table for doing CRCs ---*/ /*--- crctable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*-- I think this is an implementation of the AUTODIN-II, Ethernet & FDDI 32-bit CRC standard. Vaguely derived from code by Rob Warnock, in Section 51 of the comp.compression FAQ. --*/ UInt32 BZ2_crc32Table[256] = { /*-- Ugly, innit? --*/ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L }; /*-------------------------------------------------------------*/ /*--- end crctable.c ---*/ /*-------------------------------------------------------------*/ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/compress.c�����������������������������������������������������0000644�0001750�0000144�00000050121�12161267161�020456� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Compression machinery (not incl block sorting) ---*/ /*--- compress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- changed setting of nGroups in sendMTFValues() so as to do a bit better on small files */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Bit stream I/O ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ void BZ2_bsInitWrite ( EState* s ) { s->bsLive = 0; s->bsBuff = 0; } /*---------------------------------------------------*/ static void bsFinishWrite ( EState* s ) { while (s->bsLive > 0) { s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); s->numZ++; s->bsBuff <<= 8; s->bsLive -= 8; } } /*---------------------------------------------------*/ #define bsNEEDW(nz) \ { \ while (s->bsLive >= 8) { \ s->zbits[s->numZ] \ = (UChar)(s->bsBuff >> 24); \ s->numZ++; \ s->bsBuff <<= 8; \ s->bsLive -= 8; \ } \ } /*---------------------------------------------------*/ static __inline__ void bsW ( EState* s, Int32 n, UInt32 v ) { bsNEEDW ( n ); s->bsBuff |= (v << (32 - s->bsLive - n)); s->bsLive += n; } /*---------------------------------------------------*/ static void bsPutUInt32 ( EState* s, UInt32 u ) { bsW ( s, 8, (u >> 24) & 0xffL ); bsW ( s, 8, (u >> 16) & 0xffL ); bsW ( s, 8, (u >> 8) & 0xffL ); bsW ( s, 8, u & 0xffL ); } /*---------------------------------------------------*/ static void bsPutUChar ( EState* s, UChar c ) { bsW( s, 8, (UInt32)c ); } /*---------------------------------------------------*/ /*--- The back end proper ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ static void makeMaps_e ( EState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->unseqToSeq[i] = s->nInUse; s->nInUse++; } } /*---------------------------------------------------*/ static void generateMTFValues ( EState* s ) { UChar yy[256]; Int32 i, j; Int32 zPend; Int32 wr; Int32 EOB; /* After sorting (eg, here), s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, and ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] holds the original block data. The first thing to do is generate the MTF values, and put them in ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. Because there are strictly fewer or equal MTF values than block values, ptr values in this area are overwritten with MTF values only when they are no longer needed. The final compressed bitstream is generated into the area starting at (UChar*) (&((UChar*)s->arr2)[s->nblock]) These storage aliases are set up in bzCompressInit(), except for the last one, which is arranged in compressBlock(). */ UInt32* ptr = s->ptr; UChar* block = s->block; UInt16* mtfv = s->mtfv; makeMaps_e ( s ); EOB = s->nInUse+1; for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; wr = 0; zPend = 0; for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; for (i = 0; i < s->nblock; i++) { UChar ll_i; AssertD ( wr <= i, "generateMTFValues(1)" ); j = ptr[i]-1; if (j < 0) j += s->nblock; ll_i = s->unseqToSeq[block[j]]; AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); if (yy[0] == ll_i) { zPend++; } else { if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } { register UChar rtmp; register UChar* ryy_j; register UChar rll_i; rtmp = yy[1]; yy[1] = yy[0]; ryy_j = &(yy[1]); rll_i = ll_i; while ( rll_i != rtmp ) { register UChar rtmp2; ryy_j++; rtmp2 = rtmp; rtmp = *ryy_j; *ryy_j = rtmp2; }; yy[0] = rtmp; j = ryy_j - &(yy[0]); mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; } } } if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; s->nMTF = wr; } /*---------------------------------------------------*/ #define BZ_LESSER_ICOST 0 #define BZ_GREATER_ICOST 15 static void sendMTFValues ( EState* s ) { Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; Int32 nGroups, nBytes; /*-- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; is a global since the decoder also needs it. Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; are also globals only used in this proc. Made global to keep stack frame size small. --*/ UInt16 cost[BZ_N_GROUPS]; Int32 fave[BZ_N_GROUPS]; UInt16* mtfv = s->mtfv; if (s->verbosity >= 3) VPrintf3( " %d in block, %d after MTF & 1-2 coding, " "%d+2 syms in use\n", s->nblock, s->nMTF, s->nInUse ); alphaSize = s->nInUse+2; for (t = 0; t < BZ_N_GROUPS; t++) for (v = 0; v < alphaSize; v++) s->len[t][v] = BZ_GREATER_ICOST; /*--- Decide how many coding tables to use ---*/ AssertH ( s->nMTF > 0, 3001 ); if (s->nMTF < 200) nGroups = 2; else if (s->nMTF < 600) nGroups = 3; else if (s->nMTF < 1200) nGroups = 4; else if (s->nMTF < 2400) nGroups = 5; else nGroups = 6; /*--- Generate an initial set of coding tables ---*/ { Int32 nPart, remF, tFreq, aFreq; nPart = nGroups; remF = s->nMTF; gs = 0; while (nPart > 0) { tFreq = remF / nPart; ge = gs-1; aFreq = 0; while (aFreq < tFreq && ge < alphaSize-1) { ge++; aFreq += s->mtfFreq[ge]; } if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups-nPart) % 2 == 1)) { aFreq -= s->mtfFreq[ge]; ge--; } if (s->verbosity >= 3) VPrintf5( " initial group %d, [%d .. %d], " "has %d syms (%4.1f%%)\n", nPart, gs, ge, aFreq, (100.0 * (float)aFreq) / (float)(s->nMTF) ); for (v = 0; v < alphaSize; v++) if (v >= gs && v <= ge) s->len[nPart-1][v] = BZ_LESSER_ICOST; else s->len[nPart-1][v] = BZ_GREATER_ICOST; nPart--; gs = ge+1; remF -= aFreq; } } /*--- Iterate up to BZ_N_ITERS times to improve the tables. ---*/ for (iter = 0; iter < BZ_N_ITERS; iter++) { for (t = 0; t < nGroups; t++) fave[t] = 0; for (t = 0; t < nGroups; t++) for (v = 0; v < alphaSize; v++) s->rfreq[t][v] = 0; /*--- Set up an auxiliary length table which is used to fast-track the common case (nGroups == 6). ---*/ if (nGroups == 6) { for (v = 0; v < alphaSize; v++) { s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; } } nSelectors = 0; totc = 0; gs = 0; while (True) { /*--- Set group start & end marks. --*/ if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; /*-- Calculate the cost of this group as coded by each of the coding tables. --*/ for (t = 0; t < nGroups; t++) cost[t] = 0; if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ register UInt32 cost01, cost23, cost45; register UInt16 icv; cost01 = cost23 = cost45 = 0; # define BZ_ITER(nn) \ icv = mtfv[gs+(nn)]; \ cost01 += s->len_pack[icv][0]; \ cost23 += s->len_pack[icv][1]; \ cost45 += s->len_pack[icv][2]; \ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); # undef BZ_ITER cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { UInt16 icv = mtfv[i]; for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; } } /*-- Find the coding table which is best for this group, and record its identity in the selector table. --*/ bc = 999999999; bt = -1; for (t = 0; t < nGroups; t++) if (cost[t] < bc) { bc = cost[t]; bt = t; }; totc += bc; fave[bt]++; s->selector[nSelectors] = bt; nSelectors++; /*-- Increment the symbol frequencies for the selected table. --*/ if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); # undef BZ_ITUR } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) s->rfreq[bt][ mtfv[i] ]++; } gs = ge+1; } if (s->verbosity >= 3) { VPrintf2 ( " pass %d: size is %d, grp uses are ", iter+1, totc/8 ); for (t = 0; t < nGroups; t++) VPrintf1 ( "%d ", fave[t] ); VPrintf0 ( "\n" ); } /*-- Recompute the tables based on the accumulated frequencies. --*/ /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See comment in huffman.c for details. */ for (t = 0; t < nGroups; t++) BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), alphaSize, 17 /*20*/ ); } AssertH( nGroups < 8, 3002 ); AssertH( nSelectors < 32768 && nSelectors <= (2 + (900000 / BZ_G_SIZE)), 3003 ); /*--- Compute MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; for (i = 0; i < nGroups; i++) pos[i] = i; for (i = 0; i < nSelectors; i++) { ll_i = s->selector[i]; j = 0; tmp = pos[j]; while ( ll_i != tmp ) { j++; tmp2 = tmp; tmp = pos[j]; pos[j] = tmp2; }; pos[0] = tmp; s->selectorMtf[i] = j; } }; /*--- Assign actual codes for the tables. --*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); AssertH ( !(minLen < 1), 3005 ); BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); } /*--- Transmit the mapping table. ---*/ { Bool inUse16[16]; for (i = 0; i < 16; i++) { inUse16[i] = False; for (j = 0; j < 16; j++) if (s->inUse[i * 16 + j]) inUse16[i] = True; } nBytes = s->numZ; for (i = 0; i < 16; i++) if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); for (i = 0; i < 16; i++) if (inUse16[i]) for (j = 0; j < 16; j++) { if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); } /*--- Now the selectors. ---*/ nBytes = s->numZ; bsW ( s, 3, nGroups ); bsW ( s, 15, nSelectors ); for (i = 0; i < nSelectors; i++) { for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( "selectors %d, ", s->numZ-nBytes ); /*--- Now the coding tables. ---*/ nBytes = s->numZ; for (t = 0; t < nGroups; t++) { Int32 curr = s->len[t][0]; bsW ( s, 5, curr ); for (i = 0; i < alphaSize; i++) { while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; bsW ( s, 1, 0 ); } } if (s->verbosity >= 3) VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); /*--- And finally, the block data proper ---*/ nBytes = s->numZ; selCtr = 0; gs = 0; while (True) { if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; AssertH ( s->selector[selCtr] < nGroups, 3006 ); if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ UInt16 mtfv_i; UChar* s_len_sel_selCtr = &(s->len[s->selector[selCtr]][0]); Int32* s_code_sel_selCtr = &(s->code[s->selector[selCtr]][0]); # define BZ_ITAH(nn) \ mtfv_i = mtfv[gs+(nn)]; \ bsW ( s, \ s_len_sel_selCtr[mtfv_i], \ s_code_sel_selCtr[mtfv_i] ) BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); # undef BZ_ITAH } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { bsW ( s, s->len [s->selector[selCtr]] [mtfv[i]], s->code [s->selector[selCtr]] [mtfv[i]] ); } } gs = ge+1; selCtr++; } AssertH( selCtr == nSelectors, 3007 ); if (s->verbosity >= 3) VPrintf1( "codes %d\n", s->numZ-nBytes ); } /*---------------------------------------------------*/ void BZ2_compressBlock ( EState* s, Bool is_last_block ) { if (s->nblock > 0) { BZ_FINALISE_CRC ( s->blockCRC ); s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); s->combinedCRC ^= s->blockCRC; if (s->blockNo > 1) s->numZ = 0; if (s->verbosity >= 2) VPrintf4( " block %d: crc = 0x%08x, " "combined CRC = 0x%08x, size = %d\n", s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); BZ2_blockSort ( s ); } s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); /*-- If this is the first block, create the stream header. --*/ if (s->blockNo == 1) { BZ2_bsInitWrite ( s ); bsPutUChar ( s, BZ_HDR_B ); bsPutUChar ( s, BZ_HDR_Z ); bsPutUChar ( s, BZ_HDR_h ); bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); } if (s->nblock > 0) { bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); /*-- Now the block's CRC, so it is in a known place. --*/ bsPutUInt32 ( s, s->blockCRC ); /*-- Now a single bit indicating (non-)randomisation. As of version 0.9.5, we use a better sorting algorithm which makes randomisation unnecessary. So always set the randomised bit to 'no'. Of course, the decoder still needs to be able to handle randomised blocks so as to maintain backwards compatibility with older versions of bzip2. --*/ bsW(s,1,0); bsW ( s, 24, s->origPtr ); generateMTFValues ( s ); sendMTFValues ( s ); } /*-- If this is the last block, add the stream trailer. --*/ if (is_last_block) { bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); bsPutUInt32 ( s, s->combinedCRC ); if (s->verbosity >= 2) VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); bsFinishWrite ( s ); } } /*-------------------------------------------------------------*/ /*--- end compress.c ---*/ /*-------------------------------------------------------------*/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/bzlib_private.h������������������������������������������������0000644�0001750�0000144�00000031674�12161267161�021500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Private header file for the library. ---*/ /*--- bzlib_private.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_PRIVATE_H #define _BZLIB_PRIVATE_H #include <stdlib.h> #ifndef BZ_NO_STDIO #include <stdio.h> #include <ctype.h> #include <string.h> #endif #include "bzlib.h" /*-- General stuff. --*/ #define BZ_VERSION "1.0.6, 6-Sept-2010" typedef char Char; typedef unsigned char Bool; typedef unsigned char UChar; typedef int Int32; typedef unsigned int UInt32; typedef short Int16; typedef unsigned short UInt16; #define True ((Bool)1) #define False ((Bool)0) #ifndef __GNUC__ #define __inline__ /* */ #endif #ifndef BZ_NO_STDIO extern void BZ2_bz__AssertH__fail ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } #if BZ_DEBUG #define AssertD(cond,msg) \ { if (!(cond)) { \ fprintf ( stderr, \ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ exit(1); \ }} #else #define AssertD(cond,msg) /* */ #endif #define VPrintf0(zf) \ fprintf(stderr,zf) #define VPrintf1(zf,za1) \ fprintf(stderr,zf,za1) #define VPrintf2(zf,za1,za2) \ fprintf(stderr,zf,za1,za2) #define VPrintf3(zf,za1,za2,za3) \ fprintf(stderr,zf,za1,za2,za3) #define VPrintf4(zf,za1,za2,za3,za4) \ fprintf(stderr,zf,za1,za2,za3,za4) #define VPrintf5(zf,za1,za2,za3,za4,za5) \ fprintf(stderr,zf,za1,za2,za3,za4,za5) #else extern void bz_internal_error ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) bz_internal_error ( errcode ); } #define AssertD(cond,msg) do { } while (0) #define VPrintf0(zf) do { } while (0) #define VPrintf1(zf,za1) do { } while (0) #define VPrintf2(zf,za1,za2) do { } while (0) #define VPrintf3(zf,za1,za2,za3) do { } while (0) #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) #endif #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) /*-- Header bytes. --*/ #define BZ_HDR_B 0x42 /* 'B' */ #define BZ_HDR_Z 0x5a /* 'Z' */ #define BZ_HDR_h 0x68 /* 'h' */ #define BZ_HDR_0 0x30 /* '0' */ /*-- Constants for the back end. --*/ #define BZ_MAX_ALPHA_SIZE 258 #define BZ_MAX_CODE_LEN 23 #define BZ_RUNA 0 #define BZ_RUNB 1 #define BZ_N_GROUPS 6 #define BZ_G_SIZE 50 #define BZ_N_ITERS 4 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) /*-- Stuff for randomising repetitive blocks. --*/ extern Int32 BZ2_rNums[512]; #define BZ_RAND_DECLS \ Int32 rNToGo; \ Int32 rTPos \ #define BZ_RAND_INIT_MASK \ s->rNToGo = 0; \ s->rTPos = 0 \ #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) #define BZ_RAND_UPD_MASK \ if (s->rNToGo == 0) { \ s->rNToGo = BZ2_rNums[s->rTPos]; \ s->rTPos++; \ if (s->rTPos == 512) s->rTPos = 0; \ } \ s->rNToGo--; /*-- Stuff for doing CRCs. --*/ extern UInt32 BZ2_crc32Table[256]; #define BZ_INITIALISE_CRC(crcVar) \ { \ crcVar = 0xffffffffL; \ } #define BZ_FINALISE_CRC(crcVar) \ { \ crcVar = ~(crcVar); \ } #define BZ_UPDATE_CRC(crcVar,cha) \ { \ crcVar = (crcVar << 8) ^ \ BZ2_crc32Table[(crcVar >> 24) ^ \ ((UChar)cha)]; \ } /*-- States and modes for compression. --*/ #define BZ_M_IDLE 1 #define BZ_M_RUNNING 2 #define BZ_M_FLUSHING 3 #define BZ_M_FINISHING 4 #define BZ_S_OUTPUT 1 #define BZ_S_INPUT 2 #define BZ_N_RADIX 2 #define BZ_N_QSORT 12 #define BZ_N_SHELL 18 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) /*-- Structure holding all the compression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* mode this stream is in, and whether inputting */ /* or outputting data */ Int32 mode; Int32 state; /* remembers avail_in when flush/finish requested */ UInt32 avail_in_expect; /* for doing the block sorting */ UInt32* arr1; UInt32* arr2; UInt32* ftab; Int32 origPtr; /* aliases for arr1 and arr2 */ UInt32* ptr; UChar* block; UInt16* mtfv; UChar* zbits; /* for deciding when to use the fallback sorting algorithm */ Int32 workFactor; /* run-length-encoding of the input */ UInt32 state_in_ch; Int32 state_in_len; BZ_RAND_DECLS; /* input and output limits and current posns */ Int32 nblock; Int32 nblockMAX; Int32 numZ; Int32 state_out_pos; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; UChar unseqToSeq[256]; /* the buffer for bit stream creation */ UInt32 bsBuff; Int32 bsLive; /* block and combined CRCs */ UInt32 blockCRC; UInt32 combinedCRC; /* misc administratium */ Int32 verbosity; Int32 blockNo; Int32 blockSize100k; /* stuff for coding the MTF values */ Int32 nMTF; Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; /* second dimension: only 3 needed; 4 makes index calculations faster */ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; } EState; /*-- externs for compression. --*/ extern void BZ2_blockSort ( EState* ); extern void BZ2_compressBlock ( EState*, Bool ); extern void BZ2_bsInitWrite ( EState* ); extern void BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); extern void BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); /*-- states for decompression. --*/ #define BZ_X_IDLE 1 #define BZ_X_OUTPUT 2 #define BZ_X_MAGIC_1 10 #define BZ_X_MAGIC_2 11 #define BZ_X_MAGIC_3 12 #define BZ_X_MAGIC_4 13 #define BZ_X_BLKHDR_1 14 #define BZ_X_BLKHDR_2 15 #define BZ_X_BLKHDR_3 16 #define BZ_X_BLKHDR_4 17 #define BZ_X_BLKHDR_5 18 #define BZ_X_BLKHDR_6 19 #define BZ_X_BCRC_1 20 #define BZ_X_BCRC_2 21 #define BZ_X_BCRC_3 22 #define BZ_X_BCRC_4 23 #define BZ_X_RANDBIT 24 #define BZ_X_ORIGPTR_1 25 #define BZ_X_ORIGPTR_2 26 #define BZ_X_ORIGPTR_3 27 #define BZ_X_MAPPING_1 28 #define BZ_X_MAPPING_2 29 #define BZ_X_SELECTOR_1 30 #define BZ_X_SELECTOR_2 31 #define BZ_X_SELECTOR_3 32 #define BZ_X_CODING_1 33 #define BZ_X_CODING_2 34 #define BZ_X_CODING_3 35 #define BZ_X_MTF_1 36 #define BZ_X_MTF_2 37 #define BZ_X_MTF_3 38 #define BZ_X_MTF_4 39 #define BZ_X_MTF_5 40 #define BZ_X_MTF_6 41 #define BZ_X_ENDHDR_2 42 #define BZ_X_ENDHDR_3 43 #define BZ_X_ENDHDR_4 44 #define BZ_X_ENDHDR_5 45 #define BZ_X_ENDHDR_6 46 #define BZ_X_CCRC_1 47 #define BZ_X_CCRC_2 48 #define BZ_X_CCRC_3 49 #define BZ_X_CCRC_4 50 /*-- Constants for the fast MTF decoder. --*/ #define MTFA_SIZE 4096 #define MTFL_SIZE 16 /*-- Structure holding all the decompression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* state indicator for this stream */ Int32 state; /* for doing the final run-length decoding */ UChar state_out_ch; Int32 state_out_len; Bool blockRandomised; BZ_RAND_DECLS; /* the buffer for bit stream reading */ UInt32 bsBuff; Int32 bsLive; /* misc administratium */ Int32 blockSize100k; Bool smallDecompress; Int32 currBlockNo; Int32 verbosity; /* for undoing the Burrows-Wheeler transform */ Int32 origPtr; UInt32 tPos; Int32 k0; Int32 unzftab[256]; Int32 nblock_used; Int32 cftab[257]; Int32 cftabCopy[257]; /* for undoing the Burrows-Wheeler transform (FAST) */ UInt32 *tt; /* for undoing the Burrows-Wheeler transform (SMALL) */ UInt16 *ll16; UChar *ll4; /* stored and calculated CRCs */ UInt32 storedBlockCRC; UInt32 storedCombinedCRC; UInt32 calculatedBlockCRC; UInt32 calculatedCombinedCRC; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; Bool inUse16[16]; UChar seqToUnseq[256]; /* for decoding the MTF values */ UChar mtfa [MTFA_SIZE]; Int32 mtfbase[256 / MTFL_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 minLens[BZ_N_GROUPS]; /* save area for scalars in the main decompress code */ Int32 save_i; Int32 save_j; Int32 save_t; Int32 save_alphaSize; Int32 save_nGroups; Int32 save_nSelectors; Int32 save_EOB; Int32 save_groupNo; Int32 save_groupPos; Int32 save_nextSym; Int32 save_nblockMAX; Int32 save_nblock; Int32 save_es; Int32 save_N; Int32 save_curr; Int32 save_zt; Int32 save_zn; Int32 save_zvec; Int32 save_zj; Int32 save_gSel; Int32 save_gMinlen; Int32* save_gLimit; Int32* save_gBase; Int32* save_gPerm; } DState; /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8; #define SET_LL4(i,n) \ { if (((i) & 0x1) == 0) \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ } #define GET_LL4(i) \ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) #define SET_LL(i,n) \ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ SET_LL4(i, n >> 16); \ } #define GET_LL(i) \ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/ extern Int32 BZ2_indexIntoF ( Int32, Int32* ); extern Int32 BZ2_decompress ( DState* ); extern void BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, Int32, Int32, Int32 ); #endif /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ #ifdef BZ_NO_STDIO #ifndef NULL #define NULL 0 #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib_private.h ---*/ /*-------------------------------------------------------------*/ ��������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/bzlib.h��������������������������������������������������������0000644�0001750�0000144�00000014145�12161267161�017740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Public header file for the library. ---*/ /*--- bzlib.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_H #define _BZLIB_H #ifdef __cplusplus extern "C" { #endif #define BZ_RUN 0 #define BZ_FLUSH 1 #define BZ_FINISH 2 #define BZ_OK 0 #define BZ_RUN_OK 1 #define BZ_FLUSH_OK 2 #define BZ_FINISH_OK 3 #define BZ_STREAM_END 4 #define BZ_SEQUENCE_ERROR (-1) #define BZ_PARAM_ERROR (-2) #define BZ_MEM_ERROR (-3) #define BZ_DATA_ERROR (-4) #define BZ_DATA_ERROR_MAGIC (-5) #define BZ_IO_ERROR (-6) #define BZ_UNEXPECTED_EOF (-7) #define BZ_OUTBUFF_FULL (-8) #define BZ_CONFIG_ERROR (-9) typedef struct { char *next_in; unsigned int avail_in; unsigned int total_in_lo32; unsigned int total_in_hi32; char *next_out; unsigned int avail_out; unsigned int total_out_lo32; unsigned int total_out_hi32; void *state; void *(*bzalloc)(void *,int,int); void (*bzfree)(void *,void *); void *opaque; } bz_stream; #ifndef BZ_IMPORT #define BZ_EXPORT #endif #ifndef BZ_NO_STDIO /* Need a definitition for FILE */ #include <stdio.h> #endif #ifdef _WIN32 # include <windows.h> # ifdef small /* windows.h define small to char */ # undef small # endif # ifdef BZ_EXPORT # define BZ_API(func) WINAPI func # define BZ_EXTERN extern # else /* import windows dll dynamically */ # define BZ_API(func) (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API(func) func # define BZ_EXTERN extern #endif /*-- Core (low-level) library functions --*/ BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzCompress) ( bz_stream* strm, int action ); BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( bz_stream *strm, int verbosity, int small ); BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ); /*-- High(er) level library functions --*/ #ifndef BZ_NO_STDIO #define BZ_MAX_UNUSED 5000 typedef void BZFILE; BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ); BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( int* bzerror, BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ); BZ_EXTERN int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ); #endif /*-- Utility functions --*/ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ); /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( void ); #ifndef BZ_NO_STDIO BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ); BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ); BZ_EXTERN int BZ_API(BZ2_bzread) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzwrite) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzflush) ( BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzclose) ( BZFILE* b ); BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( BZFILE *b, int *errnum ); #endif #ifdef __cplusplus } #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib.h ---*/ /*-------------------------------------------------------------*/ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/bzlib.c��������������������������������������������������������0000644�0001750�0000144�00000131653�12161267161�017737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Library top-level functions. ---*/ /*--- bzlib.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). fixed bzWrite/bzRead to ignore zero-length requests. fixed bzread to correctly handle read requests after EOF. wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Compression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ #ifndef BZ_NO_STDIO void BZ2_bz__AssertH__fail ( int errcode ) { fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" "Please report it to me at: jseward@bzip.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. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() ); if (errcode == 1007) { fprintf(stderr, "\n*** 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" ); } exit(3); } #endif /*---------------------------------------------------*/ static int bz_config_ok ( void ) { if (sizeof(int) != 4) return 0; if (sizeof(short) != 2) return 0; if (sizeof(char) != 1) return 0; return 1; } /*---------------------------------------------------*/ static void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) { void* v = malloc ( items * size ); return v; } static void default_bzfree ( void* opaque, void* addr ) { if (addr != NULL) free ( addr ); } /*---------------------------------------------------*/ static void prepare_new_block ( EState* s ) { Int32 i; s->nblock = 0; s->numZ = 0; s->state_out_pos = 0; BZ_INITIALISE_CRC ( s->blockCRC ); for (i = 0; i < 256; i++) s->inUse[i] = False; s->blockNo++; } /*---------------------------------------------------*/ static void init_RL ( EState* s ) { s->state_in_ch = 256; s->state_in_len = 0; } static Bool isempty_RL ( EState* s ) { if (s->state_in_ch < 256 && s->state_in_len > 0) return False; else return True; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ) { Int32 n; EState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL || blockSize100k < 1 || blockSize100k > 9 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(EState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; s->arr1 = NULL; s->arr2 = NULL; s->ftab = NULL; n = 100000 * blockSize100k; s->arr1 = BZALLOC( n * sizeof(UInt32) ); s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); if (s != NULL) BZFREE(s); return BZ_MEM_ERROR; } s->blockNo = 0; s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; s->combinedCRC = 0; s->blockSize100k = blockSize100k; s->nblockMAX = 100000 * blockSize100k - 19; s->verbosity = verbosity; s->workFactor = workFactor; s->block = (UChar*)s->arr2; s->mtfv = (UInt16*)s->arr1; s->zbits = NULL; s->ptr = (UInt32*)s->arr1; strm->state = s; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; init_RL ( s ); prepare_new_block ( s ); return BZ_OK; } /*---------------------------------------------------*/ static void add_pair_to_block ( EState* s ) { Int32 i; UChar ch = (UChar)(s->state_in_ch); for (i = 0; i < s->state_in_len; i++) { BZ_UPDATE_CRC( s->blockCRC, ch ); } s->inUse[s->state_in_ch] = True; switch (s->state_in_len) { case 1: s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 2: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 3: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; default: s->inUse[s->state_in_len-4] = True; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = ((UChar)(s->state_in_len-4)); s->nblock++; break; } } /*---------------------------------------------------*/ static void flush_RL ( EState* s ) { if (s->state_in_ch < 256) add_pair_to_block ( s ); init_RL ( s ); } /*---------------------------------------------------*/ #define ADD_CHAR_TO_BLOCK(zs,zchh0) \ { \ UInt32 zchh = (UInt32)(zchh0); \ /*-- fast track the common case --*/ \ if (zchh != zs->state_in_ch && \ zs->state_in_len == 1) { \ UChar ch = (UChar)(zs->state_in_ch); \ BZ_UPDATE_CRC( zs->blockCRC, ch ); \ zs->inUse[zs->state_in_ch] = True; \ zs->block[zs->nblock] = (UChar)ch; \ zs->nblock++; \ zs->state_in_ch = zchh; \ } \ else \ /*-- general, uncommon cases --*/ \ if (zchh != zs->state_in_ch || \ zs->state_in_len == 255) { \ if (zs->state_in_ch < 256) \ add_pair_to_block ( zs ); \ zs->state_in_ch = zchh; \ zs->state_in_len = 1; \ } else { \ zs->state_in_len++; \ } \ } /*---------------------------------------------------*/ static Bool copy_input_until_stop ( EState* s ) { Bool progress_in = False; if (s->mode == BZ_M_RUNNING) { /*-- fast track the common case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; } } else { /*-- general, uncommon case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; /*-- flush/finish end? --*/ if (s->avail_in_expect == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; s->avail_in_expect--; } } return progress_in; } /*---------------------------------------------------*/ static Bool copy_output_until_stop ( EState* s ) { Bool progress_out = False; while (True) { /*-- no output space? --*/ if (s->strm->avail_out == 0) break; /*-- block done? --*/ if (s->state_out_pos >= s->numZ) break; progress_out = True; *(s->strm->next_out) = s->zbits[s->state_out_pos]; s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } return progress_out; } /*---------------------------------------------------*/ static Bool handle_compress ( bz_stream* strm ) { Bool progress_in = False; Bool progress_out = False; EState* s = strm->state; while (True) { if (s->state == BZ_S_OUTPUT) { progress_out |= copy_output_until_stop ( s ); if (s->state_out_pos < s->numZ) break; if (s->mode == BZ_M_FINISHING && s->avail_in_expect == 0 && isempty_RL(s)) break; prepare_new_block ( s ); s->state = BZ_S_INPUT; if (s->mode == BZ_M_FLUSHING && s->avail_in_expect == 0 && isempty_RL(s)) break; } if (s->state == BZ_S_INPUT) { progress_in |= copy_input_until_stop ( s ); if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { flush_RL ( s ); BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); s->state = BZ_S_OUTPUT; } else if (s->nblock >= s->nblockMAX) { BZ2_compressBlock ( s, False ); s->state = BZ_S_OUTPUT; } else if (s->strm->avail_in == 0) { break; } } } return progress_in || progress_out; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) { Bool progress; EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; preswitch: switch (s->mode) { case BZ_M_IDLE: return BZ_SEQUENCE_ERROR; case BZ_M_RUNNING: if (action == BZ_RUN) { progress = handle_compress ( strm ); return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; } else if (action == BZ_FLUSH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FLUSHING; goto preswitch; } else if (action == BZ_FINISH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FINISHING; goto preswitch; } else return BZ_PARAM_ERROR; case BZ_M_FLUSHING: if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FLUSH_OK; s->mode = BZ_M_RUNNING; return BZ_RUN_OK; case BZ_M_FINISHING: if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (!progress) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FINISH_OK; s->mode = BZ_M_IDLE; return BZ_STREAM_END; } return BZ_OK; /*--not reached--*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) { EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } /*---------------------------------------------------*/ /*--- Decompression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressInit) ( bz_stream* strm, int verbosity, int small ) { DState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL) return BZ_PARAM_ERROR; if (small != 0 && small != 1) return BZ_PARAM_ERROR; if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(DState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; strm->state = s; s->state = BZ_X_MAGIC_1; s->bsLive = 0; s->bsBuff = 0; s->calculatedCombinedCRC = 0; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; s->smallDecompress = (Bool)small; s->ll4 = NULL; s->ll16 = NULL; s->tt = NULL; s->currBlockNo = 0; s->verbosity = verbosity; return BZ_OK; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_FAST ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { /* restore */ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; UChar c_state_out_ch = s->state_out_ch; Int32 c_state_out_len = s->state_out_len; Int32 c_nblock_used = s->nblock_used; Int32 c_k0 = s->k0; UInt32* c_tt = s->tt; UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out; Int32 ro_blockSize100k = s->blockSize100k; /* end restore */ UInt32 avail_out_INIT = cs_avail_out; Int32 s_save_nblockPP = s->save_nblock+1; unsigned int total_out_lo32_old; while (True) { /* try to finish existing run */ if (c_state_out_len > 0) { while (True) { if (cs_avail_out == 0) goto return_notr; if (c_state_out_len == 1) break; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); c_state_out_len--; cs_next_out++; cs_avail_out--; } s_state_out_len_eq_one: { if (cs_avail_out == 0) { c_state_out_len = 1; goto return_notr; }; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); cs_next_out++; cs_avail_out--; } } /* Only caused by corrupt data stream? */ if (c_nblock_used > s_save_nblockPP) return True; /* can a new run be started? */ if (c_nblock_used == s_save_nblockPP) { c_state_out_len = 0; goto return_notr; }; c_state_out_ch = c_k0; BZ_GET_FAST_C(k1); c_nblock_used++; if (k1 != c_k0) { c_k0 = k1; goto s_state_out_len_eq_one; }; if (c_nblock_used == s_save_nblockPP) goto s_state_out_len_eq_one; c_state_out_len = 2; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; c_state_out_len = 3; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; BZ_GET_FAST_C(k1); c_nblock_used++; c_state_out_len = ((Int32)k1) + 4; BZ_GET_FAST_C(c_k0); c_nblock_used++; } return_notr: total_out_lo32_old = s->strm->total_out_lo32; s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); if (s->strm->total_out_lo32 < total_out_lo32_old) s->strm->total_out_hi32++; /* save */ s->calculatedBlockCRC = c_calculatedBlockCRC; s->state_out_ch = c_state_out_ch; s->state_out_len = c_state_out_len; s->nblock_used = c_nblock_used; s->k0 = c_k0; s->tt = c_tt; s->tPos = c_tPos; s->strm->next_out = cs_next_out; s->strm->avail_out = cs_avail_out; /* end save */ } return False; } /*---------------------------------------------------*/ __inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) { Int32 nb, na, mid; nb = 0; na = 256; do { mid = (nb + na) >> 1; if (indx >= cftab[mid]) nb = mid; else na = mid; } while (na - nb != 1); return nb; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_SMALL ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); s->nblock_used++; } } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) { Bool corrupt; DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; while (True) { if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; if (s->state == BZ_X_OUTPUT) { if (s->smallDecompress) corrupt = unRLE_obuf_to_output_SMALL ( s ); else corrupt = unRLE_obuf_to_output_FAST ( s ); if (corrupt) return BZ_DATA_ERROR; if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { BZ_FINALISE_CRC ( s->calculatedBlockCRC ); if (s->verbosity >= 3) VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, s->calculatedBlockCRC ); if (s->verbosity >= 2) VPrintf0 ( "]" ); if (s->calculatedBlockCRC != s->storedBlockCRC) return BZ_DATA_ERROR; s->calculatedCombinedCRC = (s->calculatedCombinedCRC << 1) | (s->calculatedCombinedCRC >> 31); s->calculatedCombinedCRC ^= s->calculatedBlockCRC; s->state = BZ_X_BLKHDR_1; } else { return BZ_OK; } } if (s->state >= BZ_X_MAGIC_1) { Int32 r = BZ2_decompress ( s ); if (r == BZ_STREAM_END) { if (s->verbosity >= 3) VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", s->storedCombinedCRC, s->calculatedCombinedCRC ); if (s->calculatedCombinedCRC != s->storedCombinedCRC) return BZ_DATA_ERROR; return r; } if (s->state != BZ_X_OUTPUT) return r; } } AssertH ( 0, 6001 ); return 0; /*NOTREACHED*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) { DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->tt != NULL) BZFREE(s->tt); if (s->ll16 != NULL) BZFREE(s->ll16); if (s->ll4 != NULL) BZFREE(s->ll4); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ /*--- File I/O stuff ---*/ /*---------------------------------------------------*/ #define BZ_SETERR(eee) \ { \ if (bzerror != NULL) *bzerror = eee; \ if (bzf != NULL) bzf->lastErr = eee; \ } typedef struct { FILE* handle; Char buf[BZ_MAX_UNUSED]; Int32 bufN; Bool writing; bz_stream strm; Int32 lastErr; Bool initialisedOk; } bzFile; /*---------------------------------------------*/ static Bool myfeof ( FILE* f ) { Int32 c = fgetc ( f ); if (c == EOF) return True; ungetc ( c, f ); return False; } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ) { Int32 ret; bzFile* bzf = NULL; BZ_SETERR(BZ_OK); if (f == NULL || (blockSize100k < 1 || blockSize100k > 9) || (workFactor < 0 || workFactor > 250) || (verbosity < 0 || verbosity > 4)) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->bufN = 0; bzf->handle = f; bzf->writing = True; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; if (workFactor == 0) workFactor = 30; ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = 0; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (len == 0) { BZ_SETERR(BZ_OK); return; }; bzf->strm.avail_in = len; bzf->strm.next_in = buf; while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); if (ret != BZ_RUN_OK) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (bzf->strm.avail_in == 0) { BZ_SETERR(BZ_OK); return; }; } } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ) { BZ2_bzWriteClose64 ( bzerror, b, abandon, nbytes_in, NULL, nbytes_out, NULL ); } void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; if ((!abandon) && bzf->lastErr == BZ_OK) { while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (ret == BZ_STREAM_END) break; } } if ( !abandon && !ferror ( bzf->handle ) ) { fflush ( bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = bzf->strm.total_in_lo32; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = bzf->strm.total_in_hi32; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = bzf->strm.total_out_lo32; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = bzf->strm.total_out_hi32; BZ_SETERR(BZ_OK); BZ2_bzCompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ) { bzFile* bzf = NULL; int ret; BZ_SETERR(BZ_OK); if (f == NULL || (small != 0 && small != 1) || (verbosity < 0 || verbosity > 4) || (unused == NULL && nUnused != 0) || (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->handle = f; bzf->bufN = 0; bzf->writing = False; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; while (nUnused > 0) { bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; unused = ((void*)( 1 + ((UChar*)(unused)) )); nUnused--; } ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) { bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (bzf->initialisedOk) (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; if (len == 0) { BZ_SETERR(BZ_OK); return 0; }; bzf->strm.avail_out = len; bzf->strm.next_out = buf; while (True) { if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { n = fread ( bzf->buf, sizeof(UChar), BZ_MAX_UNUSED, bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; bzf->bufN = n; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; } ret = BZ2_bzDecompress ( &(bzf->strm) ); if (ret != BZ_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return 0; }; if (ret == BZ_OK && myfeof(bzf->handle) && bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; if (ret == BZ_STREAM_END) { BZ_SETERR(BZ_STREAM_END); return len - bzf->strm.avail_out; }; if (bzf->strm.avail_out == 0) { BZ_SETERR(BZ_OK); return len; }; } return 0; /*not reached*/ } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ) { bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (bzf->lastErr != BZ_STREAM_END) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (unused == NULL || nUnused == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; BZ_SETERR(BZ_OK); *nUnused = bzf->strm.avail_in; *unused = bzf->strm.next_in; } #endif /*---------------------------------------------------*/ /*--- Misc convenience stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || blockSize100k < 1 || blockSize100k > 9 || verbosity < 0 || verbosity > 4 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzCompressInit ( &strm, blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzCompress ( &strm, BZ_FINISH ); if (ret == BZ_FINISH_OK) goto output_overflow; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzCompressEnd ( &strm ); return BZ_OK; output_overflow: BZ2_bzCompressEnd ( &strm ); return BZ_OUTBUFF_FULL; errhandler: BZ2_bzCompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || (small != 0 && small != 1) || verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzDecompress ( &strm ); if (ret == BZ_OK) goto output_overflow_or_eof; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzDecompressEnd ( &strm ); return BZ_OK; output_overflow_or_eof: if (strm.avail_out > 0) { BZ2_bzDecompressEnd ( &strm ); return BZ_UNEXPECTED_EOF; } else { BZ2_bzDecompressEnd ( &strm ); return BZ_OUTBUFF_FULL; }; errhandler: BZ2_bzDecompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ /*-- return version like "0.9.5d, 4-Sept-1999". --*/ const char * BZ_API(BZ2_bzlibVersion)(void) { return BZ_VERSION; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ #if defined(_WIN32) || defined(OS2) || defined(MSDOS) # include <fcntl.h> # include <io.h> # define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) #else # define SET_BINARY_MODE(file) #endif static BZFILE * bzopen_or_bzdopen ( const char *path, /* no use when bzdopen */ int fd, /* no use when bzdopen */ const char *mode, int open_mode) /* bzopen: 0, bzdopen:1 */ { int bzerr; char unused[BZ_MAX_UNUSED]; int blockSize100k = 9; int writing = 0; char mode2[10] = ""; FILE *fp = NULL; BZFILE *bzfp = NULL; int verbosity = 0; int workFactor = 30; int smallMode = 0; int nUnused = 0; if (mode == NULL) return NULL; while (*mode) { switch (*mode) { case 'r': writing = 0; break; case 'w': writing = 1; break; case 's': smallMode = 1; break; default: if (isdigit((int)(*mode))) { blockSize100k = *mode-BZ_HDR_0; } } mode++; } strcat(mode2, writing ? "w" : "r" ); strcat(mode2,"b"); /* binary mode */ if (open_mode==0) { if (path==NULL || strcmp(path,"")==0) { fp = (writing ? stdout : stdin); SET_BINARY_MODE(fp); } else { fp = fopen(path,mode2); } } else { #ifdef BZ_STRICT_ANSI fp = NULL; #else fp = fdopen(fd,mode2); #endif } if (fp == NULL) return NULL; if (writing) { /* Guard against total chaos and anarchy -- JRS */ if (blockSize100k < 1) blockSize100k = 1; if (blockSize100k > 9) blockSize100k = 9; bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, verbosity,workFactor); } else { bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, unused,nUnused); } if (bzfp == NULL) { if (fp != stdin && fp != stdout) fclose(fp); return NULL; } return bzfp; } /*---------------------------------------------------*/ /*-- open file for read or write. ex) bzopen("file","w9") case path="" or NULL => use stdin or stdout. --*/ BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ) { return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); } /*---------------------------------------------------*/ BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ) { return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) { int bzerr, nread; if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; nread = BZ2_bzRead(&bzerr,b,buf,len); if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { return nread; } else { return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) { int bzerr; BZ2_bzWrite(&bzerr,b,buf,len); if(bzerr == BZ_OK){ return len; }else{ return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzflush) (BZFILE *b) { /* do nothing now... */ return 0; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; FILE *fp; if (b==NULL) {return;} fp = ((bzFile *)b)->handle; if(((bzFile*)b)->writing){ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ BZ2_bzWriteClose(NULL,b,1,NULL,NULL); } }else{ BZ2_bzReadClose(&bzerr,b); } if(fp!=stdin && fp!=stdout){ fclose(fp); } } /*---------------------------------------------------*/ /*-- return last error code --*/ static const char *bzerrorstrings[] = { "OK" ,"SEQUENCE_ERROR" ,"PARAM_ERROR" ,"MEM_ERROR" ,"DATA_ERROR" ,"DATA_ERROR_MAGIC" ,"IO_ERROR" ,"UNEXPECTED_EOF" ,"OUTBUFF_FULL" ,"CONFIG_ERROR" ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ }; const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) { int err = ((bzFile *)b)->lastErr; if(err>0) err = 0; *errnum = err; return bzerrorstrings[err*-1]; } #endif /*-------------------------------------------------------------*/ /*--- end bzlib.c ---*/ /*-------------------------------------------------------------*/ �������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/blocksort.c����������������������������������������������������0000644�0001750�0000144�00000073746�12161267161�020647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /*-------------------------------------------------------------*/ /*--- Block sorting machinery ---*/ /*--- blocksort.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ /*--- Fallback O(N log(N)^2) sorting ---*/ /*--- algorithm, for repetitive blocks ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ void fallbackSimpleSort ( UInt32* fmap, UInt32* eclass, Int32 lo, Int32 hi ) { Int32 i, j, tmp; UInt32 ec_tmp; if (lo == hi) return; if (hi - lo > 3) { for ( i = hi-4; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) fmap[j-4] = fmap[j]; fmap[j-4] = tmp; } } for ( i = hi-1; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) fmap[j-1] = fmap[j]; fmap[j-1] = tmp; } } /*---------------------------------------------*/ #define fswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define fvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ fswap(fmap[yyp1], fmap[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } #define fmin(a,b) ((a) < (b)) ? (a) : (b) #define fpush(lz,hz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ sp++; } #define fpop(lz,hz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; } #define FALLBACK_QSORT_SMALL_THRESH 10 #define FALLBACK_QSORT_STACK_SIZE 100 static void fallbackQSort3 ( UInt32* fmap, UInt32* eclass, Int32 loSt, Int32 hiSt ) { Int32 unLo, unHi, ltLo, gtHi, n, m; Int32 sp, lo, hi; UInt32 med, r, r3; Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; r = 0; sp = 0; fpush ( loSt, hiSt ); while (sp > 0) { AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); fpop ( lo, hi ); if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { fallbackSimpleSort ( fmap, eclass, lo, hi ); continue; } /* Random partitioning. Median of 3 sometimes fails to avoid bad cases. Median of 9 seems to help but looks rather expensive. This too seems to work but is cheaper. Guidance for the magic constants 7621 and 32768 is taken from Sedgewick's algorithms book, chapter 35. */ r = ((r * 7621) + 1) % 32768; r3 = r % 3; if (r3 == 0) med = eclass[fmap[lo]]; else if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else med = eclass[fmap[hi]]; unLo = ltLo = lo; unHi = gtHi = hi; while (1) { while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unLo]] - (Int32)med; if (n == 0) { fswap(fmap[unLo], fmap[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unHi]] - (Int32)med; if (n == 0) { fswap(fmap[unHi], fmap[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); if (gtHi < ltLo) continue; n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; if (n - lo > hi - m) { fpush ( lo, n ); fpush ( m, hi ); } else { fpush ( m, hi ); fpush ( lo, n ); } } } #undef fmin #undef fpush #undef fpop #undef fswap #undef fvswap #undef FALLBACK_QSORT_SMALL_THRESH #undef FALLBACK_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > 0 eclass exists for [0 .. nblock-1] ((UChar*)eclass) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)eclass) [0 .. nblock-1] holds block All other areas of eclass destroyed fmap [0 .. nblock-1] holds sorted order bhtab [ 0 .. 2+(nblock/32) ] destroyed */ #define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) #define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) #define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) #define WORD_BH(zz) bhtab[(zz) >> 5] #define UNALIGNED_BH(zz) ((zz) & 0x01f) static void fallbackSort ( UInt32* fmap, UInt32* eclass, UInt32* bhtab, Int32 nblock, Int32 verb ) { Int32 ftab[257]; Int32 ftabCopy[256]; Int32 H, i, j, k, l, r, cc, cc1; Int32 nNotDone; Int32 nBhtab; UChar* eclass8 = (UChar*)eclass; /*-- Initial 1-char radix sort to generate initial fmap and initial BH bits. --*/ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); for (i = 0; i < 257; i++) ftab[i] = 0; for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; for (i = 0; i < nblock; i++) { j = eclass8[i]; k = ftab[j] - 1; ftab[j] = k; fmap[k] = i; } nBhtab = 2 + (nblock / 32); for (i = 0; i < nBhtab; i++) bhtab[i] = 0; for (i = 0; i < 256; i++) SET_BH(ftab[i]); /*-- Inductively refine the buckets. Kind-of an "exponential radix sort" (!), inspired by the Manber-Myers suffix array construction algorithm. --*/ /*-- set sentinel bits for block-end detection --*/ for (i = 0; i < 32; i++) { SET_BH(nblock + 2*i); CLEAR_BH(nblock + 2*i + 1); } /*-- the log(N) loop --*/ H = 1; while (1) { if (verb >= 4) VPrintf1 ( " depth %6d has ", H ); j = 0; for (i = 0; i < nblock; i++) { if (ISSET_BH(i)) j = i; k = fmap[i] - H; if (k < 0) k += nblock; eclass[k] = j; } nNotDone = 0; r = -1; while (1) { /*-- find the next non-singleton bucket --*/ k = r + 1; while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (ISSET_BH(k)) { while (WORD_BH(k) == 0xffffffff) k += 32; while (ISSET_BH(k)) k++; } l = k - 1; if (l >= nblock) break; while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (!ISSET_BH(k)) { while (WORD_BH(k) == 0x00000000) k += 32; while (!ISSET_BH(k)) k++; } r = k - 1; if (r >= nblock) break; /*-- now [l, r] bracket current bucket --*/ if (r > l) { nNotDone += (r - l + 1); fallbackQSort3 ( fmap, eclass, l, r ); /*-- scan bucket and generate header bits-- */ cc = -1; for (i = l; i <= r; i++) { cc1 = eclass[fmap[i]]; if (cc != cc1) { SET_BH(i); cc = cc1; }; } } } if (verb >= 4) VPrintf1 ( "%6d unresolved strings\n", nNotDone ); H *= 2; if (H > nblock || nNotDone == 0) break; } /*-- Reconstruct the original block in eclass8 [0 .. nblock-1], since the previous phase destroyed it. --*/ if (verb >= 4) VPrintf0 ( " reconstructing block ...\n" ); j = 0; for (i = 0; i < nblock; i++) { while (ftabCopy[j] == 0) j++; ftabCopy[j]--; eclass8[fmap[i]] = (UChar)j; } AssertH ( j < 256, 1005 ); } #undef SET_BH #undef CLEAR_BH #undef ISSET_BH #undef WORD_BH #undef UNALIGNED_BH /*---------------------------------------------*/ /*--- The main, O(N^2 log(N)) sorting ---*/ /*--- algorithm. Faster for "normal" ---*/ /*--- non-repetitive blocks. ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ Bool mainGtU ( UInt32 i1, UInt32 i2, UChar* block, UInt16* quadrant, UInt32 nblock, Int32* budget ) { Int32 k; UChar c1, c2; UInt16 s1, s2; AssertD ( i1 != i2, "mainGtU" ); /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 9 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 10 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 11 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 12 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; k = nblock + 8; do { /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; if (i1 >= nblock) i1 -= nblock; if (i2 >= nblock) i2 -= nblock; k -= 8; (*budget)--; } while (k >= 0); return False; } /*---------------------------------------------*/ /*-- Knuth's increments seem to work better than Incerpi-Sedgewick here. Possibly because the number of elems to sort is usually small, typically <= 20. --*/ static Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, 9841, 29524, 88573, 265720, 797161, 2391484 }; static void mainSimpleSort ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 lo, Int32 hi, Int32 d, Int32* budget ) { Int32 i, j, h, bigN, hp; UInt32 v; bigN = hi - lo + 1; if (bigN < 2) return; hp = 0; while (incs[hp] < bigN) hp++; hp--; for (; hp >= 0; hp--) { h = incs[hp]; i = lo + h; while (True) { /*-- copy 1 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 2 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 3 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; if (*budget < 0) return; } } } /*---------------------------------------------*/ /*-- The following is an implementation of an elegant 3-way quicksort for strings, described in a paper "Fast Algorithms for Sorting and Searching Strings", by Robert Sedgewick and Jon L. Bentley. --*/ #define mswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define mvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ mswap(ptr[yyp1], ptr[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } static __inline__ UChar mmed3 ( UChar a, UChar b, UChar c ) { UChar t; if (a > b) { t = a; a = b; b = t; }; if (b > c) { b = c; if (a > b) b = a; } return b; } #define mmin(a,b) ((a) < (b)) ? (a) : (b) #define mpush(lz,hz,dz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ stackD [sp] = dz; \ sp++; } #define mpop(lz,hz,dz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; \ dz = stackD [sp]; } #define mnextsize(az) (nextHi[az]-nextLo[az]) #define mnextswap(az,bz) \ { Int32 tz; \ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } #define MAIN_QSORT_SMALL_THRESH 20 #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) #define MAIN_QSORT_STACK_SIZE 100 static void mainQSort3 ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 loSt, Int32 hiSt, Int32 dSt, Int32* budget ) { Int32 unLo, unHi, ltLo, gtHi, n, m, med; Int32 sp, lo, hi, d; Int32 stackLo[MAIN_QSORT_STACK_SIZE]; Int32 stackHi[MAIN_QSORT_STACK_SIZE]; Int32 stackD [MAIN_QSORT_STACK_SIZE]; Int32 nextLo[3]; Int32 nextHi[3]; Int32 nextD [3]; sp = 0; mpush ( loSt, hiSt, dSt ); while (sp > 0) { AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); mpop ( lo, hi, d ); if (hi - lo < MAIN_QSORT_SMALL_THRESH || d > MAIN_QSORT_DEPTH_THRESH) { mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); if (*budget < 0) return; continue; } med = (Int32) mmed3 ( block[ptr[ lo ]+d], block[ptr[ hi ]+d], block[ptr[ (lo+hi)>>1 ]+d] ); unLo = ltLo = lo; unHi = gtHi = hi; while (True) { while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unLo]+d]) - med; if (n == 0) { mswap(ptr[unLo], ptr[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unHi]+d]) - med; if (n == 0) { mswap(ptr[unHi], ptr[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "mainQSort3(2)" ); if (gtHi < ltLo) { mpush(lo, hi, d+1 ); continue; } n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); mpush (nextLo[0], nextHi[0], nextD[0]); mpush (nextLo[1], nextHi[1], nextD[1]); mpush (nextLo[2], nextHi[2], nextD[2]); } } #undef mswap #undef mvswap #undef mpush #undef mpop #undef mmin #undef mnextsize #undef mnextswap #undef MAIN_QSORT_SMALL_THRESH #undef MAIN_QSORT_DEPTH_THRESH #undef MAIN_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > N_OVERSHOOT block32 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)block32) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)block32) [0 .. nblock-1] holds block All other areas of block32 destroyed ftab [0 .. 65536 ] destroyed ptr [0 .. nblock-1] holds sorted order if (*budget < 0), sorting was abandoned */ #define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) #define SETMASK (1 << 21) #define CLEARMASK (~(SETMASK)) static void mainSort ( UInt32* ptr, UChar* block, UInt16* quadrant, UInt32* ftab, Int32 nblock, Int32 verb, Int32* budget ) { Int32 i, j, k, ss, sb; Int32 runningOrder[256]; Bool bigDone[256]; Int32 copyStart[256]; Int32 copyEnd [256]; UChar c1; Int32 numQSorted; UInt16 s; if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); /*-- set up the 2-byte frequency table --*/ for (i = 65536; i >= 0; i--) ftab[i] = 0; j = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; quadrant[i-1] = 0; j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); ftab[j]++; quadrant[i-2] = 0; j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); ftab[j]++; quadrant[i-3] = 0; j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); ftab[j]++; } for (; i >= 0; i--) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; } /*-- (emphasises close relationship of block & quadrant) --*/ for (i = 0; i < BZ_N_OVERSHOOT; i++) { block [nblock+i] = block[i]; quadrant[nblock+i] = 0; } if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); /*-- Complete the initial radix sort --*/ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; s = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; s = (s >> 8) | (block[i-1] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-1; s = (s >> 8) | (block[i-2] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-2; s = (s >> 8) | (block[i-3] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-3; } for (; i >= 0; i--) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; } /*-- Now ftab contains the first loc of every small bucket. Calculate the running order, from smallest to largest big bucket. --*/ for (i = 0; i <= 255; i++) { bigDone [i] = False; runningOrder[i] = i; } { Int32 vv; Int32 h = 1; do h = 3 * h + 1; while (h <= 256); do { h = h / 3; for (i = h; i <= 255; i++) { vv = runningOrder[i]; j = i; while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { runningOrder[j] = runningOrder[j-h]; j = j - h; if (j <= (h - 1)) goto zero; } zero: runningOrder[j] = vv; } } while (h != 1); } /*-- The main sorting loop. --*/ numQSorted = 0; for (i = 0; i <= 255; i++) { /*-- Process big buckets, starting with the least full. Basically this is a 3-step process in which we call mainQSort3 to sort the small buckets [ss, j], but also make a big effort to avoid the calls if we can. --*/ ss = runningOrder[i]; /*-- Step 1: Complete the big bucket [ss] by quicksorting any unsorted small buckets [ss, j], for j != ss. Hopefully previous pointer-scanning phases have already completed many of the small buckets [ss, j], so we don't have to sort them at all. --*/ for (j = 0; j <= 255; j++) { if (j != ss) { sb = (ss << 8) + j; if ( ! (ftab[sb] & SETMASK) ) { Int32 lo = ftab[sb] & CLEARMASK; Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; if (hi > lo) { if (verb >= 4) VPrintf4 ( " qsort [0x%x, 0x%x] " "done %d this %d\n", ss, j, numQSorted, hi - lo + 1 ); mainQSort3 ( ptr, block, quadrant, nblock, lo, hi, BZ_N_RADIX, budget ); numQSorted += (hi - lo + 1); if (*budget < 0) return; } } ftab[sb] |= SETMASK; } } AssertH ( !bigDone[ss], 1006 ); /*-- Step 2: Now scan this big bucket [ss] so as to synthesise the sorted order for small buckets [t, ss] for all t, including, magically, the bucket [ss,ss] too. This will avoid doing Real Work in subsequent Step 1's. --*/ { for (j = 0; j <= 255; j++) { copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; } for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyStart[c1]++ ] = k; } for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyEnd[c1]-- ] = k; } } AssertH ( (copyStart[ss]-1 == copyEnd[ss]) || /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. Necessity for this case is demonstrated by compressing a sequence of approximately 48.5 million of character 251; 1.0.0/1.0.1 will then die here. */ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), 1007 ) for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; /*-- Step 3: The [ss] big bucket is now done. Record this fact, and update the quadrant descriptors. Remember to update quadrants in the overshoot area too, if necessary. The "if (i < 255)" test merely skips this updating for the last bucket processed, since updating for the last bucket is pointless. The quadrant array provides a way to incrementally cache sort orderings, as they appear, so as to make subsequent comparisons in fullGtU() complete faster. For repetitive blocks this makes a big difference (but not big enough to be able to avoid the fallback sorting mechanism, exponential radix sort). The precise meaning is: at all times: for 0 <= i < nblock and 0 <= j <= nblock if block[i] != block[j], then the relative values of quadrant[i] and quadrant[j] are meaningless. else { if quadrant[i] < quadrant[j] then the string starting at i lexicographically precedes the string starting at j else if quadrant[i] > quadrant[j] then the string starting at j lexicographically precedes the string starting at i else the relative ordering of the strings starting at i and j has not yet been determined. } --*/ bigDone[ss] = True; if (i < 255) { Int32 bbStart = ftab[ss << 8] & CLEARMASK; Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; Int32 shifts = 0; while ((bbSize >> shifts) > 65534) shifts++; for (j = bbSize-1; j >= 0; j--) { Int32 a2update = ptr[bbStart + j]; UInt16 qVal = (UInt16)(j >> shifts); quadrant[a2update] = qVal; if (a2update < BZ_N_OVERSHOOT) quadrant[a2update + nblock] = qVal; } AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); } } if (verb >= 4) VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", nblock, numQSorted, nblock - numQSorted ); } #undef BIGFREQ #undef SETMASK #undef CLEARMASK /*---------------------------------------------*/ /* Pre: nblock > 0 arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)arr2) [0 .. nblock-1] holds block arr1 exists for [0 .. nblock-1] Post: ((UChar*)arr2) [0 .. nblock-1] holds block All other areas of block destroyed ftab [ 0 .. 65536 ] destroyed arr1 [0 .. nblock-1] holds sorted order */ void BZ2_blockSort ( EState* s ) { UInt32* ptr = s->ptr; UChar* block = s->block; UInt32* ftab = s->ftab; Int32 nblock = s->nblock; Int32 verb = s->verbosity; Int32 wfact = s->workFactor; UInt16* quadrant; Int32 budget; Int32 budgetInit; Int32 i; if (nblock < 10000) { fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } else { /* Calculate the location for quadrant, remembering to get the alignment right. Assumes that &(block[0]) is at least 2-byte aligned -- this should be ok since block is really the first section of arr2. */ i = nblock+BZ_N_OVERSHOOT; if (i & 1) i++; quadrant = (UInt16*)(&(block[i])); /* (wfact-1) / 3 puts the default-factor-30 transition point at very roughly the same place as with v0.1 and v0.9.0. Not that it particularly matters any more, since the resulting compressed stream is now the same regardless of whether or not we use the main sort or fallback sort. */ if (wfact < 1 ) wfact = 1; if (wfact > 100) wfact = 100; budgetInit = nblock * ((wfact-1) / 3); budget = budgetInit; mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); if (verb >= 3) VPrintf3 ( " %d work, %d block, ratio %5.2f\n", budgetInit - budget, nblock, (float)(budgetInit - budget) / (float)(nblock==0 ? 1 : nblock) ); if (budget < 0) { if (verb >= 2) VPrintf0 ( " too repetitive; using fallback" " sorting algorithm\n" ); fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } } s->origPtr = -1; for (i = 0; i < s->nblock; i++) if (ptr[i] == 0) { s->origPtr = i; break; }; AssertH( s->origPtr != -1, 1003 ); } /*-------------------------------------------------------------*/ /*--- end blocksort.c ---*/ /*-------------------------------------------------------------*/ ��������������������������doublecmd-0.9.8/libraries/src/libbz2/README���������������������������������������������������������0000644�0001750�0000144�00000016636�12161267161�017354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ This is the README for bzip2/libzip2. This version is fully compatible with the previous public releases. ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in this file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ Complete documentation is available in Postscript form (manual.ps), PDF (manual.pdf) or html (manual.html). A plain-text version of the manual page is available as bzip2.txt. HOW TO BUILD -- UNIX Type 'make'. This builds the library libbz2.a and then the programs bzip2 and bzip2recover. Six self-tests are run. If the self-tests complete ok, carry on to installation: To install in /usr/local/bin, /usr/local/lib, /usr/local/man and /usr/local/include, type make install To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type make install PREFIX=/xxx/yyy If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do make -n install or make -n install PREFIX=/xxx/yyy respectively. The -n instructs make to show the commands it would execute, but not actually execute them. HOW TO BUILD -- UNIX, shared library libbz2.so. Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims that it works for any other platform, though I suspect it probably will work for most platforms employing both ELF and gcc. bzip2-shared, a client of the shared library, is also built, but not self-tested. So I suggest you also build using the normal Makefile, since that conducts a self-test. A second reason to prefer the version statically linked to the library is that, on x86 platforms, building shared objects makes a valuable register (%ebx) unavailable to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. Important note for people upgrading .so's from 0.9.0/0.9.5 to version 1.0.X. All the functions in the library have been renamed, from (eg) bzCompress to BZ2_bzCompress, to avoid namespace pollution. Unfortunately this means that the libbz2.so created by Makefile-libbz2_so will not work with any program which used an older version of the library. I do encourage library clients to make the effort to upgrade to use version 1.0, since it is both faster and more robust than previous versions. HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them on the master web site (http://www.bzip.org). Look there. However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. At least using MS Visual C++ 6, you can build from the unmodified sources by issuing, in a command shell: nmake -f makefile.msc (you may need to first run the MSVC-provided script VCVARS32.BAT so as to set up paths to the MSVC tools correctly). VALIDATION Correct operation, in the sense that a compressed file can always be decompressed to reproduce the original, is obviously of paramount importance. To validate bzip2, I used a modified version of Mark Nelson's churn program. Churn is an automated test driver which recursively traverses a directory structure, using bzip2 to compress and then decompress each file it encounters, and checking that the decompressed data is the same as the original. Please read and be aware of the following: WARNING: This program and library (attempts to) compress data by performing several non-trivial transformations on it. Unless you are 100% familiar with *all* the algorithms contained herein, and with the consequences of modifying them, you should NOT meddle with the compression or decompression machinery. Incorrect changes can and very likely *will* lead to disastrous loss of data. DISCLAIMER: I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. Great efforts in design, coding and testing have been made to ensure that this program works correctly. However, the complexity of the algorithms, and, in particular, the presence of various special cases in the code which occur with very low but non-zero probability make it impossible to rule out the possibility of bugs remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. That is not to say this program is inherently unreliable. Indeed, I very much hope the opposite is true. bzip2/libbzip2 has been carefully constructed and extensively tested. PATENTS: To the best of my knowledge, bzip2/libbzip2 does not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement. WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? * Approx 10% faster compression, 30% faster decompression * -t (test mode) is a lot quicker * Can decompress concatenated compressed files * Programming interface, so programs can directly read/write .bz2 files * Less restrictive (BSD-style) licensing * Flag handling more compatible with GNU gzip * Much more documentation, i.e., a proper user manual * Hopefully, improved portability (at least of the library) WHAT'S NEW IN 0.9.5 ? * Compression speed is much less sensitive to the input data than in previous versions. Specifically, the very slow performance caused by repetitive data is fixed. * Many small improvements in file and flag handling. * A Y2K statement. WHAT'S NEW IN 1.0.0 ? See the CHANGES file. WHAT'S NEW IN 1.0.2 ? See the CHANGES file. WHAT'S NEW IN 1.0.3 ? See the CHANGES file. WHAT'S NEW IN 1.0.4 ? See the CHANGES file. WHAT'S NEW IN 1.0.5 ? See the CHANGES file. WHAT'S NEW IN 1.0.6 ? See the CHANGES file. I hope you find bzip2 useful. Feel free to contact me at jseward@bzip.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this feedback. I thank you for your comments. bzip2's "home" is http://www.bzip.org/ Julian Seward jseward@bzip.org Cambridge, UK. 18 July 1996 (version 0.15) 25 August 1996 (version 0.21) 7 August 1997 (bzip2, version 0.1) 29 August 1997 (bzip2, version 0.1pl2) 23 August 1998 (bzip2, version 0.9.0) 8 June 1999 (bzip2, version 0.9.5) 4 Sept 1999 (bzip2, version 0.9.5d) 5 May 2000 (bzip2, version 1.0pre8) 30 December 2001 (bzip2, version 1.0.2pre1) 15 February 2005 (bzip2, version 1.0.3) 20 December 2006 (bzip2, version 1.0.4) 10 December 2007 (bzip2, version 1.0.5) 6 Sept 2010 (bzip2, version 1.0.6) ��������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/src/libbz2/Makefile�������������������������������������������������������0000644�0001750�0000144�00000001250�13005414745�020116� 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-0.9.8/libraries/src/libbz2/LICENSE��������������������������������������������������������0000644�0001750�0000144�00000003555�12161267161�017475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ -------------------------------------------------------------------------- This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2010 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.6 of 6 September 2010 -------------------------------------------------------------------------- ���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/bin/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015250� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/bin/x86_64-win64/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017153� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/libraries/bin/i386-win32/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016701� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�014307� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015061� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.zh_TW.po��������������������������������������������������0000644�0001750�0000144�00000114066�12250635767�021237� 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 msgid "Browser %s%s%s not executable." msgstr "瀏覽 %s%s%s 不是可執行程式." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "瀏覽 %s%s%s 未找到." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "The help database %s%s%s was unable to find file %s%s%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_accept msgid "Accept" msgstr "接受" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "應用程式快捷鍵" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "後退" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "大寫" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "清除" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "控制" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "轉換" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "刪除" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "下" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "執行" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "幫助" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "插入" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "滑鼠左鍵" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "左" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Win 鍵" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "滑鼠中鍵" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "目錄" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "模式更改" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "下一個" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "不轉換" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "數字鎖定" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "數字鍵盤 %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "暫停鍵" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "列印" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "優先" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "滑鼠右鍵" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "返回" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "右" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Win 鍵" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "滾動" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "選擇" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "快照" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "空格鍵" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "上" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "未找到資源 %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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.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.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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "建立 GDB 可以捕捉的錯誤" #: 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.rsdocking msgid "Docking" 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "在 %s %s地址 %s%s 框架 %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "目錄 \"%s\" 不存在." #: lclstrconsts.rsfdfilealreadyexists 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.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 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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.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 msgid "Help context %s not found in Database %s%s%s." msgstr "沒有找到 %s 的幫助內容在資料庫 %s%s%s 中." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "幫助資料庫 %s%s%s 未找到瀏覽器可以閱讀幫助頁 %s 的類型" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "未找到幫助資料庫 %s%s%s" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "關鍵字 %s%s%s 未找到幫助." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "關鍵字 %s 的幫助在資料庫 %s%s%s 中沒有找到." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "幫助節點 %s%s%s 沒有幫助資料庫" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "There is no viewer for help type %s%s%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.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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.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.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.snomdiform msgid "No MDI form present." msgstr "沒有 MDI 窗體出現" #: lclstrconsts.snotimers msgid "No timers available" 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 #| 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" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.zh_CN.po��������������������������������������������������0000644�0001750�0000144�00000123653�13434447371�021204� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.4 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-05-18 10:00+0800\n\n" "PO-Revision-Date: 2018-08-20 20:00+0800\n" "Last-Translator: iYoung <iyoung@126.com>\n" "Language-Team: Chinese <iyoung@126.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 简体中文\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "浏览器 %s%s%s 不是可执行程序." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "浏览器 %s%s%s 未找到." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "执行 %s%s%s 时发生错误:%s%s " #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "无法找到网页浏览器" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "未找到网页浏览器。%s请在 工具 -> 选项 -> 帮助 -> 帮助选项 中定义一个" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "帮助数据库 %s%s%s 无法找到文件 %s%s%s。" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "浏览框里的宏 %s 将被网址所替代." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "接受" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "应用程序快捷键" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "大写" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "清除" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "命令" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "控件" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "转换" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "删除" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "执行" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "帮助" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "鼠标左键" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "左" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Win 键" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "鼠标中键" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "菜单" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "模式更改" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "下一个" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "不转换" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "数字键盘 %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "暂停键" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "打印" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "鼠标右键" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "右" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Win 键" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "选择" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "快照" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "空格键" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "上方向键" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "无法执行 %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(过滤器)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "未找到资源 %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" 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 msgid "All files (%s)|%s|%s" msgstr "所有文件 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "程序工作区" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" 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 msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "'%s' 类的控件不能带有作为子项的 '%s' 类的控件" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "'%s' 控件没有父窗口" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' 不是 '%s' 的父项" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "奶油色" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "创建可捕捉的 GDB 时出错" #: 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.rsdocking msgid "Docking" 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 "为 %s.%s 创建设备上下文菜单时出错。" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL 中的错误:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s 中 %s 处发生错误 地址 %s%s 窗体 %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "文件夹 \"%s\" 不存在。" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "文件 \"%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.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 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 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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 建立 Xserver 连接后, 调用 XSynchronize (display, True) 。这使得调试 X 协议错误更容易,因为 X 请求缓冲将被禁用,并且在 X 服务器处理了生成错误的协议请求之后,将立即接收到 X 错误。" #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "未找到帮助上下文 %s。" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "没有找到 %s 的帮助内容(在数据库 %s%s%s 中)。" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "帮助数据库 %s%s%s 中未找到可以阅读帮助页中 %s 类型的查看器" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "未找到帮助数据库 %s%s%s" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "未找到指令 %s%s%s 的帮助。" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "未找到关于指令 %s%s%s 的帮助(在数据库 %s%s%s 中)。" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "未找到帮助中的关键字 %s%s%s。" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "未找到帮助中的关键字 %s%s%s(在数据库 %s%s%s 中)。" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "帮助节点 %s%s%s 没有帮助数据库" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: 未注册" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "帮助选择器错误" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "没有用于帮助类型 %s%s%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 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 "列表索引超出界限 (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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 "-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,设置应用程序 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 或 -stylesheet=stylesheet 设置应用程序样式表。该值必须是包含样式表的文件的路径。注意:样式表文件中的相对网址与样式表文件的路径有关。" #: 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 display,设置 X 显示(默认为 $DISPLAY)。" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg 或 -foreground 颜色,设置默认的前景色。" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -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 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,则使用 6×6×6 彩色立方体(即 6 级红色,6 个绿色和 6 个蓝色);对于其他值,使用与 2x3x1 立方体大致成比例的立方体。" #: 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 位显示器上使用 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 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.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 " 警告: 有 %d 个未发布的 DC,详细转储如下:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " 警告:有 %d 个未发布的 GDI 对象,详细转储如下:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " 警告: 队列中留有 %d 条消息!将会释放他们" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " 警告:还剩下 %d 个 TimerInfo 结构,我将释放它们" #: lclstrconsts.rswarningunremovedpaintmessages 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "在掩码 \"%s\" 中设置的 char 无效!" #: 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 "" #: 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.snomdiform msgid "No MDI form present." msgstr "没有 MDI 表单。" #: lclstrconsts.snotimers msgid "No timers available" 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 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 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" �������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.uk.po�����������������������������������������������������0000644�0001750�0000144�00000145112�12573770736�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" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Браузер %s%s%s не є виконуваним." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Браузер %s%s%s не знайдено." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "База даних довідки %s%s%s не змогла знайти файл %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Прийняти" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "кнопка програми" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Великі літери" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Очистити" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Керування" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Перетворити" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Видалити" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Кінець" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Вихід" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Виконати" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Кінцевий" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Китайська" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Допомога" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Дім" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Вставити" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Кенійська" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Японська" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ліва клавіша миші" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Вліво" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ліва клавіша Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Середня клавіша миші" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Меню" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Зміна режиму" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Наступний" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Неконвертоване" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавіша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Друкувати" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Попередній" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Права клавіша миші" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "права клавіша Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Вибрати" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Скріншот" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробіл" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невідомий" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Вверх" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "неможливо виконати %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурс %s не знайдено" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "програмний файл %s не знайдено" #: 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 "Елемент управління не може бути сам собі предком" #: 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.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 msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Елемент управління класу '%s' не може мати наслідником елемент класу '%s'" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Елемент управління '%s' не має батьківського вінка" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовий" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Створення помилки кешування gdb:" #: 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.rsdocking msgid "Docking" 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 "Помилка створення контексту пристроїв для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ПОМИЛКА в LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Сталась помилка в %s за %s адресою %s%s Кадр %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Теки \"%s\" не існує." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Такий файл \"%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.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 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 "Помилка потоків форм \"%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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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 #, 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 Виклик XSynchronize (display, True) після встановлення з'єднання з X-сервером. Це полегшує налагодження помилок протоколу X через те, що запити буферування X будуть вимкнені і помилки X будуть одержані одразу після запиту протоколу, який викликав цю помилку, яка була оброблена X-сервером." #: 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 msgid "Help context %s not found in Database %s%s%s." msgstr "Контекст довідки %s не знайдено в базі %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "База даних довідки %s%s%s не знайшла програму перегляду для сторінки довідки типу %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Базу даних довідки %s%s%s не знайдено" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ключове слово довідки %s%s%s не знайдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Ключове слово довідки %s%s%s не знайдено в базі даних %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Вузол довідки %s%s%s не має відповідної бази даних" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: Не зареєстрований" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Помилка відбірника довідки" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 "Індекс поза діапазоном 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 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 "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Остання" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелений" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Індекс списку поза діапазоном (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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 "-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, задає стиль GUI програми. Можливі значення: 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: Відносні URLs в файлі Списку Стилів сприймаються відносно шляху до файлу Списку Стилів." #: 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 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.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 " УВАГА: Знайдено %d не звільнених контекстів пристроїв, список див. нижче:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених GDIObject, список див. нижче:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: В черзі залишилось %d повідомлень! Я їх видаляю" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: Залишилось %d структур TimerInfo, я їх звільняю" #: lclstrconsts.rswarningunremovedpaintmessages 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.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 "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.snomdiform msgid "No MDI form present." msgstr "Немає MDI форми." #: lclstrconsts.snotimers msgid "No timers available" 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 #| 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" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.ua.po�����������������������������������������������������0000644�0001750�0000144�00000133151�12250635767�020605� 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 msgid "Browser %s%s%s not executable." msgstr "Браузер %S%S%S не є виконавчим." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Браузер %S%S%S не знайдено." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "База даних довідки %s%s%s не змогла знайти файл %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Прийняти" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "кнопка програми" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Відміна" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Великі літери" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Очистити" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Керування" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Перетворити" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Видалити" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Кінець" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Вихід" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Виконати" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Кінцевий" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Корейська" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Допомога" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Дім" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Вставити" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Кенійська" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Японська" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ліва клавіша миші" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Вліво" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ліва клавіша Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Середня клавіша миші" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Меню" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Зміна режиму" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Наступний" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Неконвертоване" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавіша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Друкувати" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Права клавіша миші" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "права клавіша Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Вибрати" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Скріншот" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробіл" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невідомий" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Вверх" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурсу %s не знайдено" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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 "Елемент управління не може бути сам собі предком" #: 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.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 msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Створення помилки кешування gdb:" #: 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.rsdocking msgid "Docking" 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 "Помилка створення контексту пристроїв для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ПОМИЛКА в LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Сталась помилка в %s за %s адресою %s%s Кадр %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Теки \"%s\" не існує." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Такий файл \"%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.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 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 "Помилка потоків \"%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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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 Зв'язатись із вказаним сервером іксів, де \"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 Заборонити використання розширень Х-пам'яті, що розділяється." #: 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 Виклик XSynchronize (display, True) після встановлення з'єднання з Xserver'ом. Це полегшує налагодження помилок протокола X через те, що запити буферування X будуть вимкнені і помилки X будуть одержані одразу після запиту протоколу, який викликав цю помилку, яка була оброблена сервером X." #: 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 msgid "Help context %s not found in Database %s%s%s." msgstr "Контекст довідки %s не знайдено в базі %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "База даних довідки %s%s%s не знайла програму перегляду для сторінки довідки типу %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Базу даних довідки %s%s%s не знайдено" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ключове слово довідки %s%s%s не знайдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Ключове слово довідки %s%s%s не знайдено в базі даних %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Вузол довідки %s%s%s не має відповідної бази даних" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: Не зареєстрований" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Помилка відбірника довідки" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 "Індекс поза діапазоном 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 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 "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Остання" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелений" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Індекс списку поза діапазоном (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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 "Команда 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 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.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 " УВАГА: Знайдено %d не звільнених контекстів пристроїв, список див. нижче:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених GDIObject, список див. нижче:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: В черзі залишилось %d повідомлень! Я їх видаляю" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: Залишилось %d структур TimerInfo, я їх звільняю" #: lclstrconsts.rswarningunremovedpaintmessages 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.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 "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вверх" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Немає MDI форми" #: lclstrconsts.snotimers msgid "No timers available" 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 #| 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" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.tr.po�����������������������������������������������������0000644�0001750�0000144�00000130771�12250635767�020632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator:Ahmet Çağlar <ahmetcaglar111@hotmail.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: 2013-08-11 00:06+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Tarayıcı %s%s%s çalıştırılabilir değil." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Tarayıcısı %s%s%s bulunamadı." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Yürütülürken hata oluştu %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML tarayıcı bulunamıyor." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Yardım veritabanı %s%s%s dosyası bulamadı %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "TarayıcıDeğişkenleri içindeki %s makro(komut dizisi) URL ile değiştirilecek." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Kabul et" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "uygulama tuşu" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Geri Al" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "İptal" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Büyük harf" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Temizle" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Denetim" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Dönüştür" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Sil" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Aşağı" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Bitiş" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Çık" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Çalıştır" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Son" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Yardım" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Başa git" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Ekle" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Sol fare düğmesi" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Sol" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Sol pencere tuşu" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "fare orta düğmesi" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modu Değiştir" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Sonraki" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Dönüştürülmez" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Sayısal tuş takımı %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Durdurma tuşu" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Yazdır" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Önceki" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Sağ fare düğmesi" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Giriş" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Sağ" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "sağ pencere tuşu" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Kaydırma" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Seçim" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Üstkarakter" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Anlık görüntü" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Boşluk tuşu" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Sekme" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Bilinmeyen" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Yukarı" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "yürütemez" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Kaynak %s bulunamadı" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "program dosyası bulunamadı %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Koyu gölge" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D ışık" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Bir denetim, kendikendini üstdenetim(parent) olarak gösteremez" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Etkin kenarlık" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Etkin resim yazısı" #: lclstrconsts.rsallfiles 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 #, fuzzy #| msgid "White" msgctxt "lclstrconsts.rsaquacolorcaption" msgid "Aqua" msgstr "Beyaz" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Masaüstü" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Geriye" #: 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üğme 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 "Resim yazısı metni" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Büyük/küçük harfe duyarlı" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Sınıfın denetimini '%s' bir alt sınıf '%s' kontrol edemez" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Hiçbir üst pencere '%s' denetimi yok" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krem rengi" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "gdb (hata ayıklama) yakalanabilir yaratma hatası:" #: 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.rsdocking msgid "Docking" msgstr "Yerleştir" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Çift simge biçimi" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Düzenle" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Tüm dosya ara" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Hata" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "için aygıt içerik oluşturma hatası %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL'de HATA:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Adres Çerçeve %s de %s Hata %s%s oluştu %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Okunurken hata %s%s%s: %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 mevcut olmalıdır" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Dizin \"% s\" mevcut değil." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Bu dosya \"%s\" zaten var. Üzerine yazılsın mı?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Dosya mevcut olmalıdır" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Bu dosya \"%s\" mevcut değil." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Bu dosya \"%s\" 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 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 msgid "The path \"%s\" does not exist." msgstr "Bu yol \"%s\" mevcut değil." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Dizin seç" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(dosya bulunamadı: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dosya bilgisi" #: lclstrconsts.rsfind msgid "Find" msgstr "Bul" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Daha fazla bul" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "İlk" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "Sabit Sütunlar olamaz >= Sütun sayısı" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "Sabit satır olamaz >= Satır sayısı" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Biçim" #: 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 "Biçim akışı \"%s\" hatası: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "İleri doğru" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuşya(eflatun)" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-hata ayıklama göstergeleri 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-hata ayıklama göstergelerini gösterme 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-Önemli-uyarılar Gtk+/GDK tarafından üretilen hatalar ve uyarılar uygulamayı sonlandıracak." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Etkin Alt başlık geçişi" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Etkin olmayan Alt başlık geçişi" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Izgara dosyası mevcut değil" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Izgara dizini sınırın dışında." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "Grupdizin değeri, önceki menü bileşeninin Grupdizin 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 "--sınıf 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 --sınıf 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-hata ayıklama göstergeleri 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 "--gösterici 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 --gösterici belirtilmezse, GÖSTERİCİ ortam değişkeni kullanılır." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-Modül 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 "--Program adı Program adı olarak ayarlayın \"progname\".Eğer belirtilmezse,Program adı StrUTF8(0) değişkenine ayarlanır." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-hayır-hata ayıklama işaretleri 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-hayır-geçici Kalıcı formlar için geçici komut ayarlı değil" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--hayır-xshm X paylaşımlı bellek genişletmesini kullanmayı kapatır." #: 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 Xserver bağlantısı sağlandıktan sonra Xeşzamanlama (Gerçek,görüntü) 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.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Zaten kaydedilmiş" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Yardım bağlamı bulunamadı" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Yardım veritabanı bulunamadı" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Yardım hatası" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Yardım bağlamı %s bulunamadı." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Yardım bağlamı %s veritabanı içinde bulunamadı %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr " Yardım veritabanı %s%s%s türündeki yardım sayfası için bir görüntüleyici bulamadı %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "%s%s%s Yardım veritabanı bulunamadı" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "%s%s%s yardım anahtar sözcüğü bulunamadı." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "%s%s%s Yardım anahtar sözcüğü %s%s%s veritabanı içinde bulunamadı." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "%s%s%s yardım düğümü yardım veritabanına sahip değil" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "%s'nin satır %d, sütun %d için yardım bulunamadı." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Kullanılabilir yardım düğümü yok" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Yardım bulunamadı" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: kaydedilmemiş" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Yardım seçici hatası" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "%s%s%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 #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Yardım görüntüleyici bulunamadı" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Vurgula" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Metni vurgula" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Güçlü Vurgula" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX Simge Kaynağı" #: lclstrconsts.rsicon msgid "Icon" msgstr "Simge" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Simge görüntüsünü boş olamaz" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Simge görüntüsü aynı biçimde olmalıdır" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Simge görüntüsünün biçimini değiştiremezsiniz" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Simge görüntüsü aynı boyutta olmalıdır" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Simge resminin boyutunu değiştiremezsiniz" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Hiçbir geçerli görüntü simgesi yok" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Etkin olmayan kenarlık" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Etkin olmayan renk resim yazısı" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Etkin olmayan resim yazısı" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Dizin %d sınırların dışında 0.. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Dizin hücre aralıği dışında Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Arkapalan bilgisi" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Metin bilgisi" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Ekle" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Geçersiz tarih : %s" #: lclstrconsts.rsinvaliddaterangehint 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 Biçim 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 msgid "%s is already associated with %s" msgstr "%s zaten %s ile birleştirilmiş durumda" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Ortak resim uzman grubu" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Sonuncu" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Açık yeşil" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Liste dizini sınırları aşıyor (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Liste boş olmak zorunda" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kestane rengi" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Vazgeç" #: 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 "&Tekrar dene" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Kaydet" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Kilidi aç" #: 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üyü Vurgula" #: 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 "Kimlik Doğrula" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Onayla" #: 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 "Uyarı" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Lacivert" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Sonraki" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Hiçbiri" #: 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 \"arayüzleri\" biriminin programın kullanır 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 "Piksel haritası" #: 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 "Postala" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s Yoksaymak ve verinin bozulması riskiyle devam etmek için Tamam'a basın. %s Programı sonlandırmak için İptal'e basın." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Önceki" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Özelliği %s mevcut değil" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Mor(erguvan)" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-yakalama (Sadece altında X11),yakalayamamaya bir hata ayıklayıcı altında çalışan örtülü içerik neden olabilir,kullanın - geçersiz kılmak için yakala.onarmak için (QT_DEBUG)ihtiyaç var." #: 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 "-grafiksistemdeğişkenleri,ekranda kullanılmak üzere arka uç ayar grafik bileşenleri ve QPixmaps.Yerel kullanılabilir seçenekler,tarama örüntüsü ve opengl.OpenGL hala kararsız." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-yakalama yok,QT bunu asla yakalayamadığını fare veya klavye gerektiğini söyler. QT_DEBUG lazım." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-tersine, Qt::RightToLeft için uygulamanın düzeni yönünü ayarlar" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-Oturum oturum, uygulamayı bir önceki oturumdan 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 "-Tarzı tarzı veya -tarzı=tarzı,uygulama grafik stilini ayarlar.Olası değerler motifi mümkündür,pencere,ve platin.eğer ek tarzla ile Qt derlenmiş ise veya ek olarak tarz eklentileri varsa bunlar tarzlar komut satırı seçeneğinde sunulacak.NOT:Tüm tarzlar tüm platformlarda mevcut.Tarz değişkenleri(parametreler) yoksa Qt bir uygulama başlatacak Varsayılan ortak stil ile (pencereler)." #: 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 "-tarzsayfası tarzsayfası veya -tarzsayfası=tarzsayfası, tarzsayfası uygulama ayarları.Bu değer için bir yol, Stil sayfasını içeren dosya yolu olmalıdır. Not: Bağıntılı Stil sayfası URL'leri dosya şuna bağlıdır Stil sayfası dosyasının yoluna" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-senkronize (Sadece altında X11), hata ayıklama için eşzamanlı moduna 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 "-grafikbileşen sayısı hata ayıklama iletisi sonunda yazdırır, bozulmamış grafik bileşen sonu hakkında ve en fazla sayıda grafik bileşen aynı anda var." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg veya arka plan rengi,varsayılan arka plan rengini ayarlar ve bir uygulama paleti (açık ve koyu tonları hesaplanır)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn veya -buton rengi, 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, uygulama 8-bitlik bir ekranda özel bir renk haritası yüklemeye neden olur." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-ekran ekran,x ekran ayarları ($EKRAN varsayılandır)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg veya -ön plan rengi, 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 veya -yazı tipi yazı tipi, Uygulama yazı tipini tanımlar.Yazı tipi bir X mantıksal bir yazı tipi açıklaması kullanılarak belirtilmelidir." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometri geometri,gösterilen ilk pencerenin geometrisini istemci ayarlar." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, sunucuya giriş yöntemi ayarları\"(X DEĞİŞTİRİCİLER ortam değişkeni ayarına eşdeğerdir" #: 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 "-giriştarzı,nasıl girileceğini tanımlar verilen grafik bileşen içine eklenir,Örneğin Nokta üzerindeki giriş grafik bileşenin doğrudan görünmesini sağlar,Nokta üzerinde giriş görünmesini sağlar iken grafik bileşen üzerinde kayan bir kutu ve düzenleme bitene kadar eklenmez." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "adı adı, Uygulama adı 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 "-nsutunları sayısı,Ayrılmış renklerin sayısını sınırlar 8-bitlik ekranda bir renkli küp, eğer uygulama Q Uygulama kullanıyorsa:Birçok renk renk belirtimi.eğer 216 sayısı daha sonra ise, 6x6x6 bir renk küpün kullanıldığı(Yani 6 seviye kırmızı, 6 yeşil ve 6 mavi);diğer değerler için,bir küp yaklaşık 2 x 3 x 1 küp ile orantılı kullanılır." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-başlık başlık, Uygulama başlığı ayarlar." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-görsel GerçekRenk, gerçekrenkli görüntü 8 bit görüntü üzerinde kullanmak için uygulamayı zorlar." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Güncelleştirme yapılırken sonlandı, devam etmeyen bir güncelleştirme" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Güncelleştirme devam ederken görüntü kaydedemezsiniz" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Tümünü güncelle,tuval(canvas) güncellemesi devam ettiğinden başlayamaz" #: 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 msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "adlı kaynak %s bulunamadı" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Kaydırma çubuğu" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Kaydırma çubuğu ö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 "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Deniz mavisi" #: lclstrconsts.rstext msgid "Text" msgstr "Metin" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Etiketli Resim dosyası biçimi" #: 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 "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 msgid "Unsupported clipboard format: %s" msgstr "Desteklenmeyen pano biçimi: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UYARI: serbest %d bırakılmamış DCs var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UYARI: serbest %d bırakılmamış GDINesne var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UYARI: Kuyrukta %d mesaj kaldı! Onları serbest bırak" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UYARI: Saat Bilgisi %d yapısı kaldı, onları serbest bırak" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UYARI: kaldırılmamış %s LM_PAINT/LM_GtkBOYA mesaj bağlantısı kaldı." #: lclstrconsts.rswhitecolorcaption msgctxt "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 "Uyarı:" #: 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 kaydı" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Geçersiz eylem kayıt silme işlemi" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "maskede \"%s\" ile gösterilen karakter geçerli değil!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Geçersiz görüntü boyutu" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Geçersiz GörüntüListesi dizini" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menü dizini sınırın dışında" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menüöğesi yok" #: 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 "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Aşağı" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Bitiş" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Başa git" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Sol" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Sağ" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Sekme" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Yukarı" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "MDI Pencere mevcut değil." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Kullanılabilir zamanlayıcı yok" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Yanlış belirteç tipi: % s bekleniyor" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Geçersiz kayan nokta sayısı: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Geçersiz tamsayı: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (at %d,%d, Akış uzaklığı %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Sonlandırılmamış bayt değeri" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sonlandırılmamış dizgi" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Yanlış simge sembolü: %s bekleniyor ama %s bulundu" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Yanlış tip sembolü: %s bekleniyor ama %s bulundu" �������doublecmd-0.9.8/language/lcl/lclstrconsts.sl.po�����������������������������������������������������0000644�0001750�0000144�00000130037�13032164413�020576� 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@svn.gnome.org>, 2011–2016. # msgid "" msgstr "" "Project-Id-Version: double-commander-lclstrconsts master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2016-12-26 18:56+0100\n" "Last-Translator: Matej Urbančič <mateju@svn.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 1.8.9\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Brskalnik %s%s%s ni izvedljiv." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Brskalnika %s%s%s ni mogoče najti." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Napaka med zaganjanjem %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Ni mogoče najti brskalnika HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone 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 msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Podatkovni zbirki %s%s%s manjka datoteka %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Sprejmi" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "ključ programa" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Povratna tipka" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Velike črke" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Počisti" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Ukaz" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Tipka" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Pretvori" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Izbriši" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Navzdol" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Konec" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Ubežna tipka" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Izvedi" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Končna različica" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoč" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Domov" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Vstavi" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Levi gumb miške" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Levo" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Leva tipka Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Srednji gumb miške" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Meni" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Sprememba načina" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Naslednji" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nepretvorjeno" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Zaklep številčnice" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Številčnica %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tipka za premor" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Natisni" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Predhodni" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Desni gumb miške" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Vnosna tipka" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Desno" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Desna tipka Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Drsnik" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Izbor" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Dvigalka" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Zaslonske slike" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Preslednica" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznano" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Navzgor" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "ni mogoče izvesti ukaza %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filter)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Vira %s ni mogoče najti" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "datoteke programa ni mogoče najti %s" #: 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 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.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 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.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Nadzorno okno '%s' je brez nadrejenega okna" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' ni nadrejen '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kremasta" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Ustvarjanje napake predpomnjenja gdb:" #: 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.rsdocking msgid "Docking" msgstr "Sidrišče" #: 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 msgid "Error creating device context for %s.%s" msgstr "Napaka med ustvarjanjem vsebine naprave za %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Napaka v LCL:" #: lclstrconsts.rserroroccurredinataddressframe 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Napaka med branjem %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Mapa \"%s\" ne obstaja!" #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Datoteka \"%s\" ne obstaja." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Pot \"%s\" ne obstaja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Izbor mape" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(datoteke ni mogoče najti: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Podrobnosti datoteke" #: 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 "Predmet stalnega števila stolpcev ne more bi >= števcu stolpcev" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "Predmet stalnega števila vrstic ne more bi >= števca vrstic" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Obrazec" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew 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 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Datoteka mreže ne obstaja." #: 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.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "Pomoči vsebine %s ni mogoče najti." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Pomoči vsebine %s v podatkovni zbirki %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" "Podatkovni zbirki %s%s%s ni mogoče pripisati pregledovalnika za pomoč vrste " "%s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Podatkovne zbirke %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Datoteke pomoči za %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Datoteke pomoči za %s%s%s ni mogoče najti v podatkovni zbirki %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ključne besede pomoči %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" "Ključne besede pomoči %s%s%s v podatkovni zbirki %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Vozlišče pomoči %s%s%s je brez pripadajoče podatkovne zbirke pomoči" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: ni vpisano" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Napaka izbirnika pomoči" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Ni pregledovalnika za vrsto pomoči %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s. Določilo %d je izven veljavnih meja 0 - %d" #: lclstrconsts.rsindexoutofrange 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 msgid "Invalid Date : %s" msgstr "Neveljaven datum: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "Določilo seznama presega dovoljene meje (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Seznam mora biti prazen" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 msgid "Property %s does not exist" msgstr "Lastnost %s ne obstaja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Škrlatna" #: 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 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.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 msgid "Unsupported clipboard format: %s" msgstr "Nepodprta oblika odložišča: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" " Opozorilo: obstaja neobljavljenih primerkov programa DCs; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" " Opozorilo: obstaja %d neobjavljenih predmetov GDIObjects; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedmessagesinqueue 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 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 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Znakovni nabor v maski \"%s\" ni veljaven!" #: 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 "Vnosna tipka" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Domov" #: lclstrconsts.smkcins msgid "Ins" msgstr "Vrivalka" #: 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 "Dvigalka+" #: 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.snomdiform msgid "No MDI form present." msgstr "Ni veljavne oblike MDI." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Na voljo ni nobenega časomera." #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neveljavno število s plavajočo vejico: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neveljavna celoštevilčna vrednost: %s" #: lclstrconsts.sparlocinfo 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 msgid "Wrong token symbol: %s expected but %s found" msgstr "Napačen simbol žetona: pričakovan je %s, prejet pa %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s; vrnjena pa je %s" #~ msgid "Help Context not found" #~ msgstr "Pomoči vsebine ni mogoče najti" #~ msgid "Help Database not found" #~ msgstr "Podatkovne zbirke pomoči ni mogoče najti" #~ msgid "Help not found" #~ msgstr "Pomoči ni mogoče najti" #~ msgid "Help Viewer not found" #~ msgstr "Pregledovalnika pomoči ni mogoče najti" #~ msgid "OSX Icon Resource" #~ msgstr "Vir ikon OSX" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.sk.po�����������������������������������������������������0000644�0001750�0000144�00000113601�12250635767�020613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ translation of lclstrconsts.po to Slovenský Slavko <slavino@slavino.sk>, 2008. 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: 2008-11-16 19:50+0100\n" "Last-Translator: Slavko <slavino@slavino.sk>\n" "Language-Team: Slovenský <sk@li.org>\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: KBabel 1.11.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Prehliadač %s%s%s nie je spustiteľný." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Prehliadač %s%s%s nenájdený." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Chyba·pri·vykonávaní·%s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "nemožno nájsť prehliadač HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Databáza pomocníka %s%s%s nemohla nájsť súbor %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Veľkým" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Vyčistiť" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Prvok" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konvertovať" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Zmazať" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Dole" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Spustiť" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ľavé tlačítko myši" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ľavý Win kláves" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Stredné tlačítko·myši" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Ďalej" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerická klávesnica %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Kláves Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Tlačiť" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Pred" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Pravé tlačítko·myši" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "pravý Win kláves" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Vybrať" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snímka" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Medzerník" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznámy" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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 "Prvok nemôže mať sám seba za rodiča" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Všetky súbory (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Spätný" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmapy" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prázdne" #: 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 "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 "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Citlivé na veľkosť" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Vlastné ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: 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 "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Smer" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "A&dresár" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Dokovanie" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zdvojený formát ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Upraviť" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Chyba vytvárania kontextu zariadenie pre %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Chyba v LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Chyba čítania %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Adresár \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Súbor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Výber adresára" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(súbor nenájdený: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Súborové informácie" #: 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 "" #: 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 "Chyba streamovania formulára \"%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 "" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Súbor mriežky neexistuje" #: 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 "" #: 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.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Už je registrovaný" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Kontextová pomoc nenájdená" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" 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 msgid "Help context %s not found." msgstr "Kontextová pomoc %s nenájdená." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Kontextová pomoc %s nenájdená v databáze %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Databáza pomoci %s%s%s nenašla zobrazovač pre stránku pomocníka typu %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Databáza pomoci %s%s%s nenájdená" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Kľúčové slovo pomoci %s%s%s nenájdené." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Kľúčové·slovo·pomoci·%s%s%s nenájdené v databáze %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Uzol pomocníka %s%s%s nemá databázu pomocníka" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nie sú dostupné žiadne uzly pomoci" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Pomoc nenájdená" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Neregistrovaný" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba selektora pomoci" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Nie je zobrazovač pre pomoc typu %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba zobrazovača pomoci" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Zobrazovač pomoci nenájdený" #: 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 "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 "" #: 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 Index %d presahuje hranicu 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index mimo rozsahu Bunka[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 msgid "Invalid Date : %s" msgstr "Neplatný dátum: %s" #: lclstrconsts.rsinvaliddaterangehint 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 msgid "%s is already associated with %s" msgstr "%s už je priradený k %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Posledný" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Index zoznamu prekračuje hranice (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Zoznam musí byť prázdny" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: 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 "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opakovať" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "Án&o" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Án&o pre všetky" #: 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 ".. zmenené" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: 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 "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Ďalší" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: 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 "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Výber dátumu" #: 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 "za" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sStlačte OK pre ignorovanie a risk porušenia dát.%sStlačte Zrušiť pre zabitie programu." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Pred" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Vlastnosť %s neexistuje" #: 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 "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 "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Obnoviť" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Nahradiť" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Nahradiť všetko" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: 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 "" #: lclstrconsts.rssize msgid " size " msgstr "..veľkosť " #: 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.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 "Nemožno načítať predvolený font" #: 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 "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodporovaný formát bitmapy" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UPOZORNENIE: Ostáva %s neodstránených správ LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: 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 "" #: 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 "Nemôžem zamerať vypnuté alebo neviditeľné okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikované menu" #: 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Množina znakov v maske \"%s\" nei je platná!" #: 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 "" #: 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 "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Dole" #: 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 "" #: 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 "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nie je MIDI formulár" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nie sú dostupné žiadne časovače" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Zlý typ tokenu: očakávaný %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neplatné číslo s pohyblivou rádovou čiarkou: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Neukončená bytová hodnota" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený reťazec" #: lclstrconsts.sparwrongtokensymbol 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 msgid "Wrong token type: %s expected but %s found" msgstr "Zlý typ tokenu: očakávaný bol %s , ale nájdený bol %s" �������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.ru.po�����������������������������������������������������0000644�0001750�0000144�00000152676�13022744765�020640� 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: 2016-07-19 23:11+0400\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Language: ru\n" "X-Generator: Poedit 1.7.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser \"%s\" not executable." msgstr "Браузер \"%s\" не является исполнимым файлом." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser \"%s\" not found." msgstr "Браузер \"%s\" не найден." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing \"%s\":%s%s" msgstr "Ошибка при выполнении \"%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 "Браузер HTML не найден.%sЗадайте его в меню Сервис -> Параметры -> Параметры справки" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "База данных справки \"%s\" не смогла найти файл \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "клавиша Application" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "CapsLock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Стрелка вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Справка" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Левая клавиша мыши" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Стрелка влево" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Левая клавиша Windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Средняя клавиша мыши" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Изменение режима" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Next" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "NumLock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "%d цифровой клавиатуры" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавиша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Page Up" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Правая клавиша мыши" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Ввод" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Стрелка вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Правая клавиша Windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "ScrollLock" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробел" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Неизвестная" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" 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 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.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 msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "У элемента управления класса '%s' не может быть дочернего элемента управления класса '%s'" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Элемент управления '%s' не имеет родительского окна" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' не является родителем '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовый" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Создание ошибки, захватываемой GDB:" #: 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.rsdocking msgid "Docking" 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 msgid "Error creating device context for %s.%s" msgstr "Ошибка создания контекста устройства для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ОШИБКА в LCL:" #: 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 "Ошибка при сохранении точечного рисунка (bitmap)." #: 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 msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Файл \"%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 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 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 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 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 Вызвать XSynchronize (display, True) после установления соединения с сервером X. Это облегчает отладку ошибок протокола X, так как запросы буферизации X будут отключены, и ошибки X будут получаться сразу после обработки сервером X запроса протокола, который вызвал ошибку." #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "Контекст справки %s не найден." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database \"%s\"." msgstr "Контекст справки %s не найден в базе данных \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "База данных справки \"%s\" не нашла программу просмотра для страницы справки типа %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database \"%s\" not found" msgstr "База данных справки \"%s\" не найдена" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive \"%s\" not found." msgstr "Справка для директивы \"%s\" не найдена." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Справка для директивы \"%s\" в базе данных \"%s\" не найдена." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword \"%s\" not found." msgstr "Ключевое слово справки \"%s\" не найдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ключевое слово справки \"%s\" не найдено в базе данных \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node \"%s\" has no Help Database" msgstr "Элемент справки \"%s\" не имеет соответствующей базы данных" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: Не зарегистрирован" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Ошибка переключателя справки" #: lclstrconsts.rshelpthereisnoviewerforhelptype 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 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 "Индекс вне диапазона 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 msgid "Invalid Date : %s" msgstr "Неверная дата: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "Индекс списка вне диапазона (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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 "-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 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.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 "Невозможно загрузить шрифт по умолчанию" #: 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 " ВНИМАНИЕ: Найдено %d неосвобождённых контекстов устройств, список см. ниже:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ВНИМАНИЕ: Найдено %d неосвобождённых GDIObject, список см. ниже:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ВНИМАНИЕ: В очереди осталось %d сообщений! Они будут удалены" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ВНИМАНИЕ: Осталось %d структур TimerInfo, они будут освобождены" #: lclstrconsts.rswarningunremovedpaintmessages 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.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 указывает на нуль" #: 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.snomdiform msgid "No MDI form present." msgstr "Отсутствует форма MDI." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Таймеры недоступны" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "Элемент управления \"%s\" не имеет родительского окна." #: 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 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 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 "%s байт" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "Некорректный путь:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" "Некорректный путь:\n" "\"%s\"\n" "относительно корневого:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "Некорректный путь:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "%s кБ" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "%s МБ" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Имя" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists 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-0.9.8/language/lcl/lclstrconsts.ro.po�����������������������������������������������������0000644�0001750�0000144�00000113420�13034422443�020577� 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 msgid "Browser %s%s%s not executable." msgstr "Browser-ul %s%s%s nu este executabil." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser-ul %s%s%s nu a fost găsit." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "The help database %s%s%s was unable to find file %s%s%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_accept msgid "Accept" msgstr "Acceptă" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tastă aplicație" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Revocare" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Capital" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Golește" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convertește" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Șterge" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Jos" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Sfârșit" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execută" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajutor" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Acasă" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserează" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Butonul stâng al mouse-ului" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Stânga" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tasta windows din stânga" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Butonul din mijloc al mouse-ului" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Meniu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Schimbare mod" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Următorul" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Ne-convertit" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "NumLock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Tastatură numerică %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tasta pauză" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Tipărește" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Precedent" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Butonul din dreapta al mouse-ului" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Dreapta" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tasta windows din dreapta" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selectează" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Captură" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tasta spațiu" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Necunoscut" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Sus" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "nu s-a putut executa %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filtru)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resursa %s nu a fost găsită" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "nu a fost găsit fișierul prgram %s" #: 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.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.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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Se creează eroare ce poate fi captată de către gdb:" #: 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.rsdocking msgid "Docking" msgstr "Andocare" #: 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "EROARE în LCL: " #: 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Eroare la citirea %s%s%s: %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 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.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 msgid "FixedCols can't be >= ColCount" msgstr "FixedCols nu poate fi >= ColCount" #: lclstrconsts.rsfixedrowstoobig 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Fișierul grilă nu există" #: 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.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 msgid "Help context %s not found in Database %s%s%s." msgstr "Contextul ajutor %s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found 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 msgid "Help Database %s%s%s not found" msgstr "Baza de date ajutor %s%s%s nu a fost găsită" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Ajutorul pentru directiva %s%s%s nu a fost găsit." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Ajutorul pentru directiva %s%s%s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Cuvântul cheie ajutor %s%s%s nu a fost găsit." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Cuvântul cheie ajutor %s%s%s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%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 msgid "There is no viewer for help type %s%s%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.rslistmustbeempty msgid "List must be empty" msgstr "Lista trebuie să fie vidă" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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.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.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.snomdiform msgid "No MDI form present." msgstr "Nici un formular MDI nu este prezent." #: lclstrconsts.snotimers msgid "No timers available" 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 "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.pt.po�����������������������������������������������������0000644�0001750�0000144�00000126441�13045653746�020627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lclstrconst - tradução para Português - Portugal # Pedro Albuquerque <palbuquerque73@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: lclstrconst.pt_PT\n" "Report-Msgid-Bugs-To: palbuquerque73@gmail.com\n" "PO-Revision-Date: 2017-01-25 18:12+0000\n" "Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.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.7\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s não executável." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s não encontrado." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 "" "Sem navegador HTML. %s Por favor, defina-o em Ferramentas -> Opções -> Ajuda " "-> Opções da ajuda" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "A base de dados da ajuda %s%s%s não conseguiu encontrar %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A macro %s em BrowserParams será substituída pelo URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Aceitar" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "chave da aplicação" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Maiúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Limpar" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converter" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Eliminar" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Abaixo" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Executar" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botão esquerdo do rato" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Esquerda" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Tecla Windows esquerda" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Botão central do rato" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Alterar modo" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Seguinte" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Não converter" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numérico %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimir" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Anterior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botão direito do rato" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Direita" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Tecla Windows direita" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rolar" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Seleccionar" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Instantâneo" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tecla de espaço" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecida" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Acima" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "impossível executar %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "ficheiro de programa %s não encontrado" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D sombra escura" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D claro" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Um controlo não pode ser pai de si próprio" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Contorno activo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Legenda activa" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Todos os ficheiros (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espaço de trabalho da aplicação" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Área de trabalho" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Recuar" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Mapas de bits" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Preto" #: lclstrconsts.rsblank msgid "Blank" msgstr "Vazio" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face do botão" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Realce do botão" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra do botão" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto do 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 "A tela não permite desenhar" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto da legenda" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensível a maiúsculas" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" "Controlo da classe \"%s\" não pode ter controlo da classe \"%s\" como filho" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Controlo \"%s\" não tem janela-mãe" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "\"%S\" não é mãe de \"%s\"" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "A criar erro capturável gdb" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizar..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predefinição" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissões utilizador grupo tamanho data hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Eliminar registo?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Eliminar" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direcção" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Pasta" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Ancorar" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Formato de ícone duplicado." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Procurar todo o ficheiro" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erro" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Erro ao criar o contexto para %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERRO no LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Ocorreu um erro em %s em %sAddress %s%s moldura %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Erro ao ler %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erro ao gravar mapa de bits." #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepção" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "A pasta tem de existir" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "A pasta \"%s\" não existe." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "O ficheiro \"%s\" já existe. Sobrescrever?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "O ficheiro tem de existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "O ficheiro \"%s\" não existe." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "O ficheiro \"%s\" não se pode escrever." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "O ficheiro não se pode escrever." #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Gravar ficheiro como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir ficheiro existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescrever ficheiro?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "O caminho tem de existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "O caminho \"%s\" não existe." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Seleccione a pasta" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(ficheiro não encontrado:\"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informação do ficheiro" #: 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 msgid "" "Form resource %s not found. For resourceless forms CreateNew constructor " "must be used. See the global variable RequireDerivedFormResource." msgstr "" "Recurso de formulário %s não encontrado. Para formulários sem recursos tem " "de usar CreateNew. Veja a variável global RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Erro no streaming de formulário \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Seguinte" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" "--gdk-debug flags Ligar mensagens específicas de rastreio/depuração GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" "--gdk-no-debug flags Desligar mensagens específicas de rastreio/depuração " "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 Avisos e erros gerados por Gtk+/GDK terminam a " "aplicação." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradação da legenda activa" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradação da legenda inactiva" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Imagem" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Cinzento" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto cinzento" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Sem ficheiro de grelha" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice da grelha fora dos limites." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex não pode ser menor que o item de menu GroupIndex anterior" #: 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 nomeclasse Seguindo as convenções Xt, a classe de um programa é " "o nome do programa com o carácter inicial maiúsculo. Por exemplo, o nome de " "classe para o gimp é \"Gimp\". Se --class for especificado, a classe do " "programa será \"nomeclasse\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" "--gtk-debug flags Ligar mensagens específicas de rastreio/depuração 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 Ligar ao servidor X especificado, onde \"h\" é o nome " "da máquina, \"s\" é o nº do servidor (normalmente 0), e \"d\" é o nº de " "exibição (tipicamente omitido). Se --display não for especificado, será " "usada a variável de ambiente DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module carregar o módulo module no arranque." #: lclstrconsts.rsgtkoptionname msgid "" "--name programe Set program name to \"progname\". If not specified, " "program name will be set to ParamStrUTF8(0)." msgstr "" "--name nomeprog Definir o nome do programa para \"nomeprog\". Se não " "for especificado, o nome do programa será definido como ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" "--gtk-no-debug flags Desligar mensagens específicas de rastreio/depuração " "Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" "--lcl-no-transient Não definir ordem de transição em formulários modais" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm desactivar uso de 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 Chamar XSynchronize (display, True) após a ligação " "Xserver estar estabelecida. Isto torna a depuração do protocolo X mais " "fácil, porque os pedidos de buffering de X estarão inactivos e os erros X " "serão imediatamente recebidos após o pedido do protocolo que gerou o erro " "ser processado pelo servidor X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: já registado" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Foram encontrados dados para o tópico mas o tópico não foi encontrado" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Não há dados de ajuda para este tópico" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erro de ajuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Ajuda contextual %s não encontrada." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Ajuda contextual %s não encontrada na base de dados %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" "Base de dados de ajuda %s%s%s não encontrou visualizador de página de ajuda " "do tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de dados de ajuda %s%s%s não encontrada" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Ajuda para a directiva %s%s%s não encontrada." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Ajuda para a directiva %s%s%s não encontrada na base de dados %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Palavra chave %s%s%s não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Palavra chave %s%s%s não encontrada na base de dados %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Nó de ajuda %s%s%s não tem base de dados de ajuda" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nenhuma ajuda para a linha %d, coluna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Sem entradas de ajuda para este tópico" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Sem ajuda para este tópico" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: não registado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erro no selector de ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Não há visualizador para ajuda do tipo %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erro do visualizador de ajuda" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Não se encontrou visualizador para este tipo de conteúdo de ajuda" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Realce" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Realce de 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 "A imagem não pode estar vazia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "A imagem tem de ter o mesmo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossível alterar formato da imagem" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "A imagem tem de ter o mesmo tamanho" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossível alterar o tamanho da imagem" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "O ícone não tem imagem" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Contorno inactivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Legenda inactiva" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Legenda inactiva" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s: índice fora dos limites 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fora dos limites Célula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fundo da informação" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texto da informação" #: 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. Tem de estar entre %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Objecto 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 de stream inválido" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s já está associado a %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lime" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Índice da lista excede os limites (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "A lista tem de estar vazia" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maroon" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tudo" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Fe&char" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "A&juda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Não" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Não a tudo" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Aceitar" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Repetir" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Gravar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Desbloquear" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sim" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sim &a tudo" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Cinzento médio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra de menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Realce de menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto do menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificou " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dólar" #: 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 "Marinha" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Seguinte" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nada" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Ficheiro de grelha inválido" #: lclstrconsts.rsnowidgetset msgid "" "No widgetset object. Please check if the unit \"interfaces\" was added to " "the programs uses clause." msgstr "" "Sem objecto de widgetset. Por favor, verifique se a unit \"interfaces\" foi " "adicionada à cláusula uses do programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Azeitona" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Seleccione uma data" #: 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 "Publicar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the " "program." msgstr "" "%s%sClique Aceitar para ignorar e arriscar corrupção dos dados.%sClique em " "Cancelar para matar o programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Perguntar ao substituir" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "A propriedade %s não existe" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Púrpura" #: 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ó sob X11), executado sob um depurador pode causar um -nograb " "implícito, use -dograb para ignorar. Necessita 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, define o motor a usar para widgets no ecrã e " "QPixmaps. As 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, informa o Qt que nunca deve capturar o rato ou o teclado. Necessita " "QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, define a disposição da aplicação como Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sess, restaura a aplicação da sessão sess 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. Valores possíveis " "são motif, windows e platinum. Se compilou o Qt com estilos adicionais o " "dispõe deles como extensões, estarão disponíveis para a opção -style. NOTA: " "nem todos os estilos estão disponíveis em todas as plataformas. Se ESTILO " "não existir, o Qt reinicia a aplicação com o estilo predefinido (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 FOLHAESTILO ou -stylesheet=FOLHAESTILO, define a FOLHAESTILO da " "aplicação. O valor deve ser um caminho para um ficheiro que contenha a folha " "de estilo. Nota: URLs relativos na folha de estilo são relativos ao caminho " "da FOLHAESTILO." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (só sob X11), muda para 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º de widgets " "por destruir e o máximo de widgets existentes nessa altura." #: 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 COR, predefine a cor de fundo e uma paleta da aplicação " "(são calculadas sombras claras e escuras)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ou -button-COR, predefine a cor do botão." #: lclstrconsts.rsqtoptionx11cmap msgid "" "-cmap, causes the application to install a private color map on an 8-bit " "display." msgstr "" "-cmap, faz com que a aplicação instale um mapa de cores privado num ecrã 8-" "bit." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display ECRÃ, define o ecrã X (predefinição é $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ou -foregroud COR, predefine a cor de 1º 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 LETRA, define a letra da aplicação. A LETRA deve ser " "especificada usando uma descrição X lógica." #: 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 " "mostrada." #: lclstrconsts.rsqtoptionx11im msgid "" "-im, sets the input method server (equivalent to setting the XMODIFIERS " "environment variable)." msgstr "" "-im, define o servidor do método de inserção (equivalente a definir a " "vará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 é feita a entrada no widget indicado, e.g. " "onTheSpot faz com que a entrada apareça directamente no widget, enquanto " "overTheSpot faz com que a entrada apareça numa caixa flutante acima do " "widget e não é inserida até que termine a inserçã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 TOTAL, limita o número de cores alocadas no cubo de cores num ecrã 8-" "bit, se a aplicação estiver a usar QApplication::ManyColor. Se TOTAL for " "216, será usado um cubo de 6x6x6 (i.e. 6 níveis de vermelho, 6 de verde e 6 " "de azul); para outros valores, é usado um cubo aproximadamente proporcional " "a 2x3x1." #: 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 TrueColornum ecrã 8-bit." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate sem actualização em curso" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossível gravar imagem com actualização em curso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" "Impossível iniciar actualização de tudo enquanto a tela estiver a actualizar" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Vermelho" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Actualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substituir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substituir tudo" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de rolamento" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriedade Barra de rolamento fora do limite" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Escolha a cor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Escolha uma letra" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Prateado" #: lclstrconsts.rssize msgid " size " msgstr " tamanho " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Um controlo com separadores" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Verde" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: 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 punho para controlar que 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 a letra predefinida" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erro desconhecido, por favor reporte-o" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensão de imagem desconhecida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato de imagem desconhecido" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato de mapa de bits não suportado." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato de área 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 por libertar! Segue-se um despejo detalhado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: há %d GDIObjects por libertar! Segue-se 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! Serão removidas" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: há %d estruturas TimerInfo restantes! Serão libertadas" #: lclstrconsts.rswarningunremovedpaintmessages msgid "" " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" " AVISO: há %s ligações de mensagem LM_PAINT/LM_GtkPAINT restantes por " "remover." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Branco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Só palavras completas" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erro:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Aviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Janela" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Moldura da janela" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto da janela" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarelo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossível focar uma janela desactivada ou invisível" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menus duplicados" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Criação de acção inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeração de acção inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registo de acção inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Remover registo de acção inválida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "O conjunto de caracteres na máscara \"%s\" é invá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 "O texto actual não corresponde à máscara especificada." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice de menu fora do limite" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem é nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-menu 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 "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Acima" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Sem formulário MDI." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Sem temporizadores disponíveis" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo de token errado: esperado %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Nº de vírgula flutuante inválido: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Nº inteiro inválido: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (em %d,%d, desvio de stream %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor de byte indeterminado" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Cadeia indeterminada" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo de token errado: esperado %s, obtido %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo de token errado: esperado %s, obtido %s" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.po��������������������������������������������������������0000644�0001750�0000144�00000100417�12250635767�020200� 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 msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" 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 msgid "All files (%s)|%s|%s" msgstr "" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" 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 msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" 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.rsdocking msgid "Docking" 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "" #: 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 "" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "" #: lclstrconsts.rsfileinformation msgid "File information" 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 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 "" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange 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 msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 "" #: 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 "" #: 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.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 msgid "Unsupported clipboard format: %s" msgstr "" #: 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.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 "" #: 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.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: 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 "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.pl.po�����������������������������������������������������0000644�0001750�0000144�00000111375�12250635767�020617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: AlbercikCD\n" "PO-Revision-Date: 2007-01-14 00:01+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: KBabel 1.3\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" "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konwertuj" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Lewy przycisk myszy" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Środkowy przycisk myszy" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Prawy przycisk myszy" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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 "Kontrolka nie może być sama swoim rodzicem" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Wszystkie pliki (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" 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 "Pusty" #: 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 "Anuluj" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nie można ustawić ogniska." #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas nie pozwala na rysowanie" #: 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.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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Błąd przy tworzeniu \"gdb catchable\":" #: 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 "uprawnienia użytkownik grupa rozmiar data czas" #: 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.rsdocking msgid "Docking" 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 "Błąd" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Błąd przy tworzeniu \"device context\" dla %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "BŁĄD w LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Błąd w %s przy %sAdres %s%s Ramka %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Błąd odczytu %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "Wyjątek" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Katalog musi istnieć" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Katalog \"%s\" nie istnieje." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Plik \"%s\" nie istnieje." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Ścieżka \"%s\" nie istnieje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Wybierz katalog" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(nie znaleziono pliku: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacja o pliku" #: 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 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 "" #: 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 "Błąd przy zapisie formularza do strumienia \"%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 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 "" #: 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 "" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Plik siatki nie istnieje" #: 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 nie może być mniejszy niż poprzedniego elementu menu" #: 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 podany mserwerem X; \"h\" jest nazwą hosta, \"s\" jest numerem serwera (zwykle 0), a \"d\" jest numerem ekranu (zwyle pomijanym). Jeśli --display nie jet podane, użyję zmienna środowiaka 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 "" #: 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 #, 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 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łączonei błędy X będą odbierane natychmiast po przetworzeniu przez serwer X żądania, które spowodowało błąd." #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Nie znaleziono pomocy" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d przekracza zakres 0 .. %d" #: lclstrconsts.rsindexoutofrange 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 "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: 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 msgid "%s is already associated with %s" msgstr "%s jest już skojarzony z %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 "Indeks listy poza zakresem (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Lista musi być pusta" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: 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 "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Ponów próbę" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Tak" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Tak na &wszystkie" #: 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 " zmodyfikowany" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potwierdzenie" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Inny" #: 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 "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: 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 "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Wybierz datę" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 "Właściwość %s nie istnieje" #: 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 "Odśwież" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Zamień" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Zamień wszystko" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Właściwość ScrollBar'u poza zakresem" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Wybierz kolor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Wybierz czcionkę" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " rozmiar " #: 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.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 "Nie można załadować domyślnej czcionki" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Nieznane rozszerzenie pliku obrazka" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nieobsługiwany format bitmapy." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nieobsługiwany format schowka: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UWAGA: Pozostało %d struktur TimerInfo zostaną usunięte" #: lclstrconsts.rswarningunremovedpaintmessages 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 "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Błąd:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Ostrzeżenie:" #: 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 "Nie można ustawić ogniska na wyłączone lub niewidzialne okno" #: 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: 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 "" #: 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 "" #: 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.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Brak dostępnych timerów" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: 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 "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.pb.po�����������������������������������������������������0000644�0001750�0000144�00000130317�12250635767�020602� 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 msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s não é executável" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s não encontrado" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "The help database %s%s%s was unable to find file %s%s%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_accept msgid "Accept" msgstr "Aceitar" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tecla da aplicação" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "\"Backspace\"" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Maiúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Limpar" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converter" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Excluir" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Abaixo" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Executar" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserir" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botão Esquerdo do Mouse" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Esquerda" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tecla windows esquerda" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Botão Central do Mouse" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modo Alterar" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Próximo" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Não converter" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimir" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Anterior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botão Direito do Mouse" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retorno" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Direita" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla windows direita" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rolar" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecionar" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Instantâneo" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tecla espaço" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecido" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Acima" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "impossível executar %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "arquivo programa não encontrado %s" #: 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.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.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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Criando erro \"gdb\" capturável:" #: 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.rsdocking msgid "Docking" msgstr "Aportar" #: 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERRO na LCL: " #: 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Erro na leitura %s%s%s: %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.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 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Arquivo de grade não existe" #: 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 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 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.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 msgid "Help context %s not found in Database %s%s%s." msgstr "Ajuda contextual %s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found 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 msgid "Help Database %s%s%s not found" msgstr "Banco de dados de ajuda %s%s%s não encontrado" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Palavra-chave Ajuda %s%s%s não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Palavra-chave Ajuda %s%s%s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%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 msgid "There is no viewer for help type %s%s%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 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.rslistmustbeempty msgid "List must be empty" msgstr "Lista deve estar vazia" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPressione Ok para ignorar e correr o risco de corrupção de dados.%sCancelar para finalizar o programa." #: 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.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 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.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.snomdiform msgid "No MDI form present." msgstr "Nenhum formulário MDI presente." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nenhum temporizador disponível" #: 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 #| 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" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.nl.po�����������������������������������������������������0000644�0001750�0000144�00000125376�12516753065�020620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-10-03 22:04+0100\n" "Last-Translator: fer <connect37@yopmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s niet uitvoerbaar" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s niet gevonden" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Fout tijdens uitvoeren van %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Geen HTML browser kunnen vinden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Geen HTML browser gevoden.%sBepaal een in Gereedschappen -> Opties -> Help -> Help opties" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "De help database %s%s%s heeft bestand %s%s%s niet kunnen vinden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Accepteer" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "toepassing sleutel" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuleer" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Hoofdletter" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Wissen" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Controleer" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converteer" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Verwijder" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Neer" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Eind" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Voer uit" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Laatste" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Voeg in" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Muisknop Links" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Links" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "linker Windows toets" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Muisknop midden" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modus wijziging" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Volgend" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Niet converteren" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Nummeriek deel %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pauze toets" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Druk af" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Voordien" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Muisknop Rechts" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Rechts" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "rechter windows toets" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Schuif" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecteer" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Spatiebalk" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Onbekend" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Omhoog" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "kan %s niet uitvoeren" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filter)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Bron %s is niet gevonden" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "programmabestand niet gevonden %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D donkere schaduw" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Een controle kan niet zijn eigen ouder zijn" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Actieve rand" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Actieve kop" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Alle bestanden (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Toepassing werkruimte" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: 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 "Knop gezicht" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Knop highlight" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Knop schaduw" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Knop tekst" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Rekenmachine" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Annuleer" #: 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 "Kop tekst" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Hoofd/kleine letter gevoelig" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle van klassse '%s' kan geen controle van klasse '%s' als kind hebben" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Controle '%s' heeft geen oudervenster" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' ia geen oude van '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crme" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Maak een fout die door gdb opgevangen kan worden" #: 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 "&Directory" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Verankeren" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplikaat icoon formaat" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Bewerk" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Zoek gehele bestand" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fout" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Fout tijdens het maken van een DC voor %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "FOUT in LCL" #: lclstrconsts.rserroroccurredinataddressframe 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Fout tijdens lezen %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Fout tijdens opslaan bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Uitzondering" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Directory moet bestaan" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "De directory \"%s\" bestaat niet." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Het bestand \"%s\" bestaat niet." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Het pad \"%s\" bestaat niet." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Kies directory" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(bestand niet gevonden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Bestandsinformatie" #: lclstrconsts.rsfind msgid "Find" msgstr "Vind" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Vind meer" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Eerst" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols kan niet >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows kan niet >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Vorm" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Vorm bron %s niet gevonden. Voor bronloze vormen moet CreateNew constructor gebruikt worden. Zie de globale variabele RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror 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-feen-debug flags Zet bepaalde GDK trace/debug berichten uit." #: 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-fatale-waarschuwingen De applicatie stop bij waarschuwingen en fouten gegenereerd door GtK+/GDK." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Hellingshoek actieve kop" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Hellingshoek inactieve kop" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafisch" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grijs" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Grijze tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Groen" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Rasterlijnbestand bestaat niet" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Rasterlijn-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 "Geschiedenis:" #: 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 hoofdletter. 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 Stelt programmanaam in op \"progname\". Indien niet opgegeven, zal programmanaam ingesteld 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 #, 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 Roep XSynchronize (display, True) aan na verbinding met de Xserver. Dit maakt het debuggen van X protocol fouten eenvoudiger, doordat X aanvragen buffering uitstaat en X fouten direct ontvangen worden nadat de aanvraag door de Xserver is behandeld." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Reeds vastgelegd" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Een help database was gevonden voor dit onderwerp, maar dit onderwerp was niet gevonden" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Er is heen help database genstalleerd voor dit onderwerp" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Help fout" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Help context %s niet gevonden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Help context %s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Help database %s%s%s heeft geen viewer gevonden voor helppagina van type %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Help database %s%s%s niet gevonden" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Help voor instructie %s%s%s niet gevonden" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Help voor instructie %s%s%s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Help sleutelwoord %s%s%s niet gevonden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Help sleutelwoord %s%s%s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Help node %s%s%s heeft geen help database" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Geen help gevonden voor regel %d, kolom %d van %s. " #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Geen help voor dit item beschikbaar" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Help voor dit item niet gevonden" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Niet vastgelegd" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Help selectie fout" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Er is geen viewer voor help type %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Help viewer fout" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Help viewer niet gevonden" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Highlight" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Highlight tekst" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hotlight" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X icoon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icoon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Icoon afbeelding kan niet leeg zijn" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Icoon afbeelding moet hetzelfde formaat hebben" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kan formaat icoon afbeelding niet wijzigen" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Icoon afbeelding moet dezelfde grootte hebben" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kan grootte icoon afbeelding niet wijzigen" #: 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 kop" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inactieve kop" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d valt buiten de grenzen 0 .. %d" #: lclstrconsts.rsindexoutofrange 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 "Voeg in" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Ongeldige datum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ongeldige datum: %s. Het 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 msgid "%s is already associated with %s" msgstr "%s is al verbonden met %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG (Joint Picture Expert Group)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Laatste" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citroengeel" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Lijst index overschrijdt grenzen (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Lijst moet leeg zijn" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kastanjebruin" #: 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 "&Open" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opnieuw" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Opslaan" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Deblokkeer" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja op &alles" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Medium 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 "Menu tekst" #: lclstrconsts.rsmodified msgid " modified " msgstr " gewijzigd " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Geldgroen" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Verificatie" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bevestiging" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Aangepast" #: 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 "Marine blauw" #: 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 rasterlijnbestand" #: 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 "PBM (Portable BitMap)" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "PGM (Portable GrayMap)" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PPM (Portable PixMap)" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sDruk op OK om te negeren, hierbij kunnen gegevens verloren gaan.%sDruk op Annuleren om het programma te annuleren." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorige" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Geheugensteun bij vervangen" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Eigenschap %s bestaat niet" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Paars" #: 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), lopen onder een debugger kan een impliciete -nograb, gebruik -dograb om te overrulen. Benodigd 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, stelt de te gebruiken backend in voor on-screen widgets en QPixmaps. Beschikbare opties zijn inheems, raster en 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, zegt QT dat deze nooit de muis of het toetsenbord moet grijpen. Benodigd QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, stelt de toepassing's layout richting in naar QT::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, herstelt de toepassing naar 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 "" #: 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 (only under X11), schakelt naar synchroon modus voor 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 "" #: 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, stelt de standaard achtergrondkleur en een toepassingpalet (lichte en donkere schaduwen zijn berekend) in" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn or -button color, stelt de standaard knopkleur in." #: 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 persoonlijke kleurmap installeert op een 8-bit scherm." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, stelt het X beeld in (standaard is $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg or -foreground color, stelt de standaard voorgrondkleur in." #: 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, bepaalt het toepassingslettrtype. Het lettertype moet opgegeven worden met gebruik van een X ligische lettertypeomschrijving." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, stelt de client geometrie in van het eerste getoonde venster" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, stelt de input methode server in "(gelijk aan instelling 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 "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, stelt de toepassingsnaam 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 "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, stelt de toepassings titel in." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, forceert de toepassing een TrueColor visueel te gebruiken op een 8-bit beeld." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Einde update omdat geen update bezig is" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kan afbeelding niet opslaan omdat update bezig is" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kan niet beginnen met updaten als alleen canvas update bezig is" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rood" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Ververs" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Vervang" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Vervang alles" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Bron %s 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 msgid "Silver" msgstr "Zilver" #: lclstrconsts.rssize msgid " size " msgstr " grootte " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Hemelsblauw" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Een controle met tabs" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Blauwachtig groen" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF (Tagged Image File Format)" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "Een handvat om te controleren hoeveel ruimte te geven aan twee delen van een gebied." #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "Een items-boom" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kan het standaard lettertype niet laden" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Onbekende fout, rapporteer deze fout" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Onbekende extensie voor afbeelding" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Onbekend afbeeldingsformaat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Niet ondersteund bitmap formaat." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Niet ondersteund klembord formaat: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 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 uitgeschakeld scherm" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Dubbele menu's" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ongeldige actie aangemaakt" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ongeldige actie opsomming" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ongeldige actie registratie" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ongeldige actie de-registratie" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "De karakterset in masker \"%s\" is ongeldig!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ongeldig afbeeldingsformaat" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ongeldige index van ImageList index" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "De huidige tekst komt niet overeen met het opgegeven masker" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menu index buiten de grenzen" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menu item 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 "Spatie" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Omhoog" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Geen MDI formulier aanwezig" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Geen timers beschikbaar" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Verkeerd genomen type: %s verwacht" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ongeldig floating nummer: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ongeldig integer nummer: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (op %d,%d, stream offset %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Niet klare byte waarde" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Niet klare string" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Verkeerd genomen symbool: %s verwacht maar %s gevonden" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Verkeerd genomen type: %s verwacht maar %s gevonden" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.lt.po�����������������������������������������������������0000644�0001750�0000144�00000122363�12250635767�020622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ translation of lclstrconsts.po to Valdas Jankūnas <zmuogs@gmail.com>, 2008, 2009, 2010. msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2010-05-23 21:32+0300\n" "Project-Id-Version: lclstrconsts\n" "Language-Team: Lietuvių <kde-i18n-lt@kde.org>\n" "X-Generator: Lokalize 1.0\n" "MIME-Version: 1.0\n" "Last-Translator: Valdas Jankūnas <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" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Naršyklė %s%s%s nėra vykdomasis failas." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Naršyklė %s%s%s nerasta." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Įvyko klaida startuojant %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepavyko rasti HTML naršyklės." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Žinyno duomenų bazė %s%s%s neranda failo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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 "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Programos klavišas" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Caps Lock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ctrl" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Down" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Esc" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Kairys peles klavišas" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Left" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Kairysis windows klavišas" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Vidurinis pelės klavišas" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Mode Change" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Next" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Dešinys pelės klavišas" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Right" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Dešinysis windows klavišas" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Space" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Nežinomas" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Up" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resursas %s nerastas" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tamsumos šešėlis" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D šviesuma" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" 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 "Veikiamoji antraštė" #: lclstrconsts.rsallfiles 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.rsbackgroundcolorcaption msgid "Desktop" msgstr "Darbalaukis" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atgal" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap" #: 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 "Suaktyvinti negalima" #: 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 "Paisyti raidžių lygio" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" 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 "Kreminė" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Kuriama GDB aptinkama klaida:" #: 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 "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Kryptis" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Aplankas" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Pritvirtinimas" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Piktogramos formatai dubliuojasi." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Keisti" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Ieškoti visame faile" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Klaida" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Įvyko klaida kuriant įrenginio turinį, skirtą %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL klaida:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s įvyko klaida:%sadresas %s%s, kadras %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Įvyko klaida skaitant %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Aplankas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Toks failas „%s“ jau yra. Rašyti ant viršaus?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Failas turi egzistuoti" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Failas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Failas „%s“ nėra skirtas rašymui." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Failas ne 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 msgid "The path \"%s\" does not exist." msgstr "Kelias „%s“ neegzistuoja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Nurodykit aplanką" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(failas nerastas: „%s“)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacija apie failą" #: 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 "„FixedCols“ reikšmė negali būti lygi ar didesnė nei „ColCount“" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "„FixedRows“ reikšmė negali būti lygi ar didesnė nei „RowCount“" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Forma" #: 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 "Formą siunčiant srautu „%s“ įvyko klaida: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Pirmyn" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpurinė" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug žymės Įjungiami nurodyti GDK sekimo/derinimo pranešimai." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug žymės Išjungiami nurodyti GDK sekimo/derinimo pranešimai." #: 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+ ar GDK sugeneravus perspėjimą arba klaidą, programa bus sustabdyta." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Veikiamosios antraštės gradientas" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Įprastos antraštės gradientas" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Pilka" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Neveiksnus tekstas" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Žalia" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Tinklelio failas neegzistuoja" #: 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 „classname“." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug žymės Įjungiami nurodyti GTK+ sekimo/derinimo pranešimai." #: 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 DISPLAY aplinkos kintamasis." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulis Starto 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šjungiami nurodyti GTK+ sekimo/derinimo pranešimai." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Modalinių formų eilę nedaryti trumpalaikę." #: 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 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 Kai XServer ryšys sukurtas, vykdyti „XSynchronize (display, True)“. Tai padarys lengvesnį X protokolo klaidų derinimą, nes bus išjungtas X kreipinių buferis ir X serveriui apdorojant protokolo kreipinį įvykusi klaida bus gauta iškart." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: jau yra registruotas" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Žinyno turinys nerastas" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Žinyno duomenų bazė nerasta" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Žinyno klaida" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Žinyno turinys %s nerastas." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Žinyno turinys %s duomenų bazėje %s%s%s nerastas." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Žinyno duomenų bazė %s%s%s nerado žiūryklės %s tipo žinyno lapui." #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Žinyno duomenų bazė %s%s%s nerasta." #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Žinyno raktažodis %s%s%s nerastas." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Žinyno raktažodis %s%s%s duomenų bazėje %s%s%s nerastas." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Žinyno mazgas %s%s%s neturi žinyno duomenų bazės." #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Žinyne nėra duomenų eilutei %d, stulpeliui %d šio %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Žinyno nėra" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Žinynas nerastas" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: neregistruotas" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Žinyno išrinkėjo klaida" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Nerasta žiūryklė %s%s%s žinyno tipui." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Žinyno žiūryklės klaida" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Žinyno žiūryklė nerasta" #: 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 #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX piktogramos resursas" #: lclstrconsts.rsicon msgid "Icon" msgstr "Piktograma" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Piktogramos paveikslėlis neturi būti tuščias" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Piktogramos ir naujasis paveikslėliai turi būti to paties formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Neina pakeisti piktogramos paveikslo formato" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Piktogramos ir naujasis paveikslėliai turi būti to paties dydžio" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Neina pakeisti piktogramos paveikslo dydžio" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Veikiamoji piktograma neturi 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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indeksas %d peržengia ribas 0 .. %d" #: lclstrconsts.rsindexoutofrange 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 "Insert" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Klaidinga data: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Klaidinga data: %s. Ji turi būti tarp %s ir %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "klaidingas formos objekto srautas" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Klaidinga savybės reikšmė" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Klaidingas srauto formatas" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s jau yra asocijuotas 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 "Citrininė" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Sąrašo indeksas peržengė ribas (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Sąrašas turi būti tuščias" #: 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 "&Tinka" #: 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 "Menu" #: 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 "Perspėjimas" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Tamsiai mėlyna" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Kitas" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Jokia" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Klaidingas 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“ yra paminėtas programos naudojamų modulių sąraše." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Alyvuogių" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Nurodykite datą" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portatyvus BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portatyvus GreyMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portatyvus PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Tolesnis" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPaspaudę „Tinka“ ignoruosite, tačiau rizikuosite duomenimis.%sPaspaudę „Atsisakyti“ sustabdysite programą." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Ankstesnis" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Savybė %s neegzistuoja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpurinė" #: 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 "„Endupdate“, tačiau niekas neatnaujinama" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Neina įrašyti paveikslo, nes 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 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 "Nurodykit spalvą" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Nurodykit š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 "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Tamsiai žydra" #: lclstrconsts.rstext msgid "Text" msgstr "Tekstas" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "„Tagged Image File Format“" #: 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 "Nepavyko įkelti numatytą šriftą" #: 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 msgid "Unsupported clipboard format: %s" msgstr "Nepalaikomas iškarpinės formatas: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Perspėjimas: liko %d neatlaisvinti „DC“, išsamiau:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Perspėjimas: liko %d neatlaisvinti „GDIObject“, išsamiau:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Perspėjimas: eilėje dar yra %d pranešimų, jie bus pašalinti." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Perspėjimas: dar liko %d „TimerInfo“ struktūrų, jos bus sunaikintos." #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " Perspė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 visų žodžių" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Klaida:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Perspė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 "Neįgalintą arba nematomą langą suaktyvinti negalima" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Meniu dubliuojasi" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Klaidingas veiksmo kūrimas" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Klaidinga veiksmo enumeracija" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Klaidingas veiksmo registravimas" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Klaidingas veiksmo išregistravimas" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Klaidinga kaukės „%s“ koduotė!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Klaidingas paveikslo dydis" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Klaidingas„ImageList“ indeksas" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: 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 "Pomeniu nėra įdėtas į menių" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: 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.snomdiform msgid "No MDI form present." msgstr "MDI formos nėra." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nėra laikmačių" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Klaidingas leksemos tipas: tikėtasi %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Klaidingas slankaus kablelio skaičius: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Klaidingas sveikasis skaičius: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (ties %d,%d, srauto poslinkis %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Neužbaigta bitų vertė" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neužbaigta eilutė" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Klaidingas leksemos simbolis: tikėtasi %s, tačiau rasta %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Klaidingas leksemos tipas: tikėtasi %s, tačiau rasta %s" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.ko.po�����������������������������������������������������0000644�0001750�0000144�00000131130�12733037530�020572� 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 msgid "Browser %s%s%s not executable." msgstr "브라우저 %s%s%s 실행 불가" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "브라우저 %s%s%s 찾지 못함" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 "HTML 브라우저 찾을 수 없음. %s 도구->옵션->도움말->도움말 옵션에서 브라우저를 지정해주세요." #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "도움말 데이타베이스 %s%s%s가 %s%s%s를 찾지 못함." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "수용" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "어플리케이션 키" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "취소" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "대문자" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "지우기" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "컨트롤" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "변환" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "삭제" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Down" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "실행" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "마지막" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "한자" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "도움말" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "한자" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "카나" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "마우스 왼쪽버튼" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Left" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "왼쪽 윈도키" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "마우스 중간 버튼" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "메뉴" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "메타정보" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "모드 변경" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "다음" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "변환없음" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "NUmpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause 키" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Page up" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "마우스 오른쪽 버튼" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Right" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "오른쪽 윈도키" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "선택" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Print Screen" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "스페이스키" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "알수없음" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Up" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "%s 실행할 수 없음" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(필터)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "%s 리소스를 찾을 수 없음" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" 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 msgid "All files (%s)|%s|%s" msgstr "모든 파일 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "어플리케이션 작업공간" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" 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 msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "'%s'클래스 컨트롤은 '%s'를 상속으로 가질 수 없음" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr " '%s' 컨트롤 부모 윈도우를 가지고 있지 않음" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s'는 '%s'의 부모가 아님" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "크림색" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "캐치할 수 있는 gdb 오류 생성:" #: 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.rsdocking msgid "Docking" 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 "%s를 위한 디바이스 컨텍스트 생성 오류. %s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL 오류" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s 어드레스 %s%s 프레임 %s 오류 발생" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "\"%s\"폴더(디렉토리)가 존재하지 않습니다." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "\"%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.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 msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "폼 리소트 %s 찾지 못함. 리소스 없을 때는 CreateNew 생성자(creator) 사용해야 함. 전역변수 RequireDerivedFormResource 참고." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "폼 스트리밍 \"%s\" 오류: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "앞으로" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-디버그 플래그 특정 GDK 추적(trace)/디버그(debug) 메시지를 켜세요." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-디버그 플래그 특정 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)-경고 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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 Following Xt conventions, 프로그램 클래스는 프로그램 이름과 함께 첫글자는 대문자로 표시됨. 예를 들어, gimp 클래스명은 \"Gimp\". --class가 지정되면 프로그램 클래스는 \"classname\"로 설정됩니다." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 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 지정 X 서버에 접속, \"h\"는 호스트 네임(hostname), \"s\" 는 서버 번호(보통 0번), \"d\" 는 디스플레이 번호 (통상적으로 빠뜨림). 만약 --디스플레이가 지정되지 않으면, 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+ trace/debug 메시지를 끄세요." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "-lcl-no-transient 일시적인 명령을 반드시 해야하는 형태(modal forms)로 설정하지 마세요" #: 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) 호출. 이것은 debugging X protocol 오류를 쉽게 만드는데 X request 버퍼링이 불가하게 되고 프로토콜 요청이 X server의 진행에 따라 오류를 생성한 후 X errors가 즉각적으로 수신되기 때문입니다. " #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "%s 도움말 찾지 못함" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "%s 도움말 %s%s%s 데이터베이스에서 찾지 못함" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "도움말 데이터베이스 %s%s%s 가 %s 도움말 페이지 뷰어를 찾지 못함." #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "도움말 데이터베이스 %s%s%s 찾지 못함" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "%s%s%s 명령에 대한 도움말 찾지 못함." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "%s%s%s 명령에 대한 도움말을 %s%s%s데이터베이스에서 찾을 수 없음." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "도움말 키워드 %s%s%s 찾지 못함." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "도움말 키워드 %s%s%s %s%s%s 데이타베이스에서 찾지 못함." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "도움말 노드 %s%s%s가 도움말 데이터베이스를 갖고 있지 않음" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: 등록 안됨" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "도움말 선택 오류" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "도움말 형태 %s%s%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 "맥 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 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 "셀을 벗어나는 인덱스 [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 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 "JPEG(Joint Picture Expert Group)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "마지막" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "라임색(Lime)" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "리스트 인덱스가 (%d) 경계를 벗어남" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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 "위젯모음 오브젝트 없음. \"interfaces\" 유닛이 문장절(clause)을 사용하는 프로그램에 추가되었는지 체크하세요." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "올리브색" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "날짜 선택" #: 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 "포터블 픽스맵" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "게시" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel 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 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 "-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 and 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, 이전 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, and platinum. 만약 Qt를 추가적인 스타일 또는 플러그인 명령 프롬프트 -style을 사용가능함. 참고: 모든 스타일이 모든 플랫폼에 사용할 수 있는 것은 아님. 스타일 변수(style param)이 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)값과 경로를 갖고 있어야 함. 참고: 스타일 시트에 상대경로는 스타일 시트 경로에 대한 상대 경로이다." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (only under X11) 디버깅을 위해 싱크로너스 모드(synchronous mode)로 변경(switch)" #: 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비트 디스플레이로 응용프로그램이 개인색상(private color)으로 설치되게 함." #: 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 description 로 지정해야 함. " #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "geometry 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 color specification 을 사용한다면 8비트 디스플레이 컬러 큐브에 할당된 색상 수를 제한. 만약 카운트가 216이면 6x6x6 컬러큐브 (즉, 6 레벨의 red, green과 blue)가 사용됨: 다른 값을 위해 큐브는 대략 비례하는 큐브가 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 visual) 강제 사용하게 함." #: 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 msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "%s 리소스 찾지 못함" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "ScrollBar" #: 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.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 msgid "Unsupported clipboard format: %s" msgstr "지원되지 않는 클립보드 포맷: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " 경고: %d 출시되지 않은 DC가 있습니다. 상세한 덤프는 다음과 같음:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " 경고: %d 출시되지 않은 GDIObject가 있습니다. 상세한 덤프는 다음과 같음:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " 경고: %d 메시지가 작업대기열에 있습니다. 그것들을 풀어주겠습니다. " #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " 경고: %d TimeInfo 스트럭쳐(Structure)가 있습니다. 그것들을 풀어주겠습니다." #: lclstrconsts.rswarningunremovedpaintmessages 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 "윈도우 프레임" #: 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.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 "잘못된 이미지리시트 인덱스" #: 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 "Down" #: 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 "페이지다운키" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Right" #: 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 "Up" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "MDI형태 존재하지 않음" #: lclstrconsts.snotimers msgid "No timers available" 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 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 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가 발견됨" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.ja.po�����������������������������������������������������0000644�0001750�0000144�00000145464�12601454423�020570� 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: Kazunari Sekigawa <kazunari.sekigawa@gmail.com>\n" "Language-Team: Japanese Lazarus ML\n" "X-Generator: Poedit 1.8.4\n" "Language: ja\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser \"%s\" not executable." msgstr "ブラウザ \"%s\" が起動できません。" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser \"%s\" not found." msgstr "ブラウザ \"%s\" が見つかりません。" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing \"%s\":%s%s" msgstr "\"%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 "HTMLブラウザが見つかりません。\"%s\" 何か1つを「ツール→オプション→ヘルプ→ヘルプオプション」で設定して下さい。" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "ヘルプデータベース\"%s\"はファイル\"%\"を見つけることができませんでした。" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "アプリケーションキー" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Caps Lock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ctrl" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "変換" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "↓" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja(韓国における漢字)" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "カタカナ ひらがな" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "マウスの左ボタン" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "←" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Windows キー" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "マウスの中ボタン" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Alt" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "モード変更" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Page Down" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "無変換" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Num Lock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "テンキーの %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Page Up" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "マウスの右ボタン" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "→" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Windows キー" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll Lock" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Print Screen" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "スペースキー" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "不明" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "↑" #: lclstrconsts.lislclresourcesnotfound 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 msgid "All files (%s)|%s|%s" msgstr "すべてのファイル (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "アプリケーションの作業領域色" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua(水色)" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "デスクトップの背景色" #: lclstrconsts.rsbackward msgid "Backward" msgstr "後方へ" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "ビットマップファイル" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Black(黒色)" #: lclstrconsts.rsblank msgid "Blank" msgstr "空欄" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blue(青色)" #: 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 msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "クラス\"%s\"のコントロールが、クラス\"%s\"のコントロールを子とすることはできません" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "コントール\"%d\"には親となるウィンドウがありません" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "\"%s\"は\"%s\"の親ではありません" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Cream(クリーム色)" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "GDBが補足可能なエラーを生成中:" #: 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.rsdocking msgid "Docking" 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 "%s.%s のデバイスコンテキスト生成中のエラー" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL 内エラー:" #: lclstrconsts.rserroroccurredinataddressframe 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 msgid "The directory \"%s\" does not exist." msgstr "ディレクトリ\"%s\"が存在しません。" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "ファイル\"%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 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 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 msgid "Form streaming \"%s\" error: %s" msgstr "フォームストリーム \"%s\" エラー:%s" #: lclstrconsts.rsforward msgid "Forward" msgstr "前方へ" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia(鮮やかな赤紫色)" #: 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 "Gray(灰色)" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "淡色文字の色" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Green(みどり色)" #: 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>はサーバ番号(通常ゼロ)、<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: プログラム名を「programe」に設定します。もし、このオプションが指定されないと、プログラム名は、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のエラーを発生させたプロトコルリクエストの直後にそのエラーが受信され、Xサーバにより処理されるからです。" #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "ヘルプコンテキスト\"%s\"が見つかりません。" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database \"%s\"." msgstr "ヘルプコンテキスト\"%s\"はデータベース\"%s\"にありません。" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "ヘルプデータベース\"%s\"のヘルプページタイプ\"%s\"に対するビューアが見つかりません" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database \"%s\" not found" msgstr "ヘルプデータベース\"%s\"が見つかりません" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive \"%s\" not found." msgstr "指令\"%s\"に対するヘルプが見つかりません。" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "指令\"%s\"に対するヘルプがデータベース\"%s\"の中に見つかりません。" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword \"%s\" not found." msgstr "ヘルプキーワード\"%s\"が見つかりません。" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "ヘルプキーワード\"%s\"をデータベース\"%s\"から見つけることができませんでした。" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node \"%s\" has no Help Database" msgstr "ヘルプノード\"%s\"にヘルプデータベースはありません" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "%2:s の行 %0:d、列 %1:d のヘルプが見つかりませんでした。" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "このトピックスで利用できるヘルプエントリがありません" #: lclstrconsts.rshelpnotfound 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 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 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 "セルインデックスが範囲を超えています [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 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 "JPEG ファイル" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "最後へ" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lime(ライム色)" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "リストインデックスが範囲外です (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "ハッシュリストは空でなくてはなりません" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maroon(栗色)" #: 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 "Medium Gray(中位の灰色)" #: 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 "Money Green(マネーグリーン;深緑色)" #: 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 "Navy(濃紺色)" #: 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 "Olive(オリーブ色)" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "" "%s%s OKを押して無視するとデータが壊れる危険性があります。\n" "%s キャンセルを押すとプログラムは強制終了します。" #: 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 "Purple(紫色)" #: 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 "Red(赤色)" #: 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 "Silver(銀色)" #: lclstrconsts.rssize msgid " size " msgstr " サイズ " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Sky Blue(空色)" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "タブ付きコントロール" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Teal(暗青緑色)" #: lclstrconsts.rstext msgid "Text" 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 msgid "Unsupported clipboard format: %s" msgstr "サポートしていないクリップボード形式:%s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "警告:解放されていないデバイスコンテキストが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "警告:解放されてない GDI オブジェクトが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "警告:キューに %d 個のメッセージが残っています!それらを解放します" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "警告:%d 個のタイマー情報が残っています!それらを解放します" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "警告:LM_PAINT/LM_GtkPAINT メッセージリンクが %s 個削除されずに残っています。" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "White(白色)" #: 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 "Yellow(黄色)" #: 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.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 "無効なイメージリストインデックス" #: 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.snomdiform msgid "No MDI form present." msgstr "MDI フォームが存在しません。" #: lclstrconsts.snotimers msgid "No timers available" msgstr "利用できるタイマーがありません" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "コントロール\"%s\"には親ウィンドウがありません。" #: 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 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 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 "%s バイト" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" "ルートパス:\n" "\"%1:s\"に関連した\n" "無効な相対パス名:\n" "\"%0:s\"\n" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "名前" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists 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-0.9.8/language/lcl/lclstrconsts.it.po�����������������������������������������������������0000644�0001750�0000144�00000127774�12250635767�020632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: 0.9.2\n" "POT-Creation-Date: 2009-11-29 13:59+0200\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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Il browser %s%s%s non è eseguibile." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Il browser %s%s%s non è stato trovato." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Errore eseguendo %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossibile trovare un browser HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Il database d'aiuto %s%s%s non riesce a trovare il file %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s nei BrowserParams verrà sostituita dall'URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accetta" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Tasto dell'applicazione" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancella" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Maiuscolo" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Azzera" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converti" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Elimina" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Giù" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fine" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Esegui" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Finale" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Aiuto" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserisci" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Tasto sinistro del mouse" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Sinistra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tasto windows sinistro" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Tasto centrale del mouse" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Cambiamento di modalità" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Successivo" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Non convertire" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "BlocNum" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "TastNum %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tasto pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Stampa" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Precedente" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Tasto destro del mouse" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Invio" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Destra" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tasto windows destro" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scorrimento" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selezione" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Istantanea" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tasto spazio" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Sconosciuto" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Su" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "Non posso eseguire %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Risorsa %s non trovata" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "Programma non trovato %s" #: 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ò avere se stesso come genitore" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bordo attivo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Caption attivo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tutti i file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Area di lavoro dell'applicazione" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Acqua" #: 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 "Evidendiazione 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 spostare il focus" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Le canvas non permettono il disegno" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Testo caption" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Distingui maiusc./minusc." #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Il controllo della classe '%s' non può avere il controllo della classe '%s' come processo figlio" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Il controllo '%s' non ha finestre genitore" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creazione di errore gdb intercettabile:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursore" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizzato ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predefinito" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permessi del gruppo utente in formato 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.rsdocking msgid "Docking" msgstr "Aggancia" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicare formato icona." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Modifica" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Cerca il file intero" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Errore" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Errore nella creazione del contesto dispositivo per %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Errore nell'LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Errore occorso in %s all' %sIndirizzo %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Errore nella lettura di %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Errore durante il salvataggio del bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Eccezione" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "La cartella deve esistere" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "La cartellla \"%s\" non esiste." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Il file \"%s\" Esiste già. Sovrascriverlo?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Il file deve esistere" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Il file \"%s\" non esiste." #: lclstrconsts.rsfdfilereadonly 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 esistente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sovrascrivere il file?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Il percorso deve esistere" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Il percorso \"%s\" non esiste." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selezionare una directory" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(file non trovato: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informazioni sul file" #: 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 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 "Form streaming \"%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 "Graphics Interchange Format" #: 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 "Gradient Caption attivo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient Caption disattivo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafica" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grigio" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Testo in grigio" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Il file di griglia non esiste" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indice della griglia fuori dal range." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex non può essere minore del GroupIndex della precedente voce di menu" #: 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 Secondo 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 \"classname\"." #: 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, dove \"h\" è il nome host, \"s\" è il numero di server (solitamente 0), e \"d\" è il numero di display (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 all'avvio del programma." #: 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 temporaneo per i 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) dopo che è stata stabilita la connessione al server X. Ciò rende più semplice la correzione degli errori del protocollo X, poiché la richiesta di bufferizzazione di X sarà disabilitata e quindi gli errori di X saranno ricevuti immediatamente dopo che la richiesta di protocollo che ha generato l'errore è stata elaborata dal server X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Già registrato" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Aiuto contestuale non trovato" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Database di aiuto non trovato" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Errore nell'aiuto" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Aiuto contestuale %s non trovato." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Aiuto contestuale %s non trovato nel Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Il Database di aiuto %s%s%s non trova un visualizzatore per le pagine di aiuto di tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Database di aiuto %s%s%s non trovato" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Aiuto sulla parola chiave %s%s%s non trovato." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Aiuto sulla parola chiave %s%s%s non trovato nel Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Il nodo di aiuto %s%s%s non ha un Database di aiuto" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nessun aiuto disponibile" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Aiuto non trovato" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Non registrato" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Errore nella selezione dell'aiuto" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Non c'è nessun visualizzatore per aiuti di tipo %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Errore nel visualizzatore dell'aiuto" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visualizzatore dell'aiuto non trovato" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Evidenzia" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Evidenzia testo" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luce calda" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "isorsa di icone OSX" #: 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'immagine dell'icona deve avere le stesse dimensioni" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossibile cambiare le dimensioni dell'immagine dell'icona" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icona non ha nessuna immagine" #: 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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indice %d fuori dai limiti 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indice fuori dal range della Cella[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 msgid "Invalid Date : %s" msgstr "Data non valida: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data non valida: %s. Deve essere compresa tra %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Form object stream non valido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valore della proprietà non valido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato stream non valido" #: lclstrconsts.rsisalreadyassociatedwith 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 "Lime" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "L'elenco dell'indice eccede i limiti (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "L'elenco deve essere vuoto" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maroon" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Interrompi" #: 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 &tutti" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Grigio medio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Evidenziare Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Testo Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificato " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Denaro Verde" #: 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 "Avviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marina" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Successivo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nessuno" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Non è un file di griglia valido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nessun oggetto widgetset. Verifica se l'unità \"interfaces\" was added to the programs uses clause." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Seleziona una data" #: 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 "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPremi Ok per ignorare il messaggio e rischiare di corrompere i dati.%sPremi Annulla per terminare l'esecuzione del programma." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Precedente" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La proprietà %s non esiste" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Viola" #: 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 ambiente X11), l'esecuzione di un debugger può causare un implicito -nograb, usare -dograb per bypassare. Necessita di 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 da usare per widget su schermo e QPixmaps. Le opzioni disponibili sono native, raster e opengl. OpenGL è ancora instabile." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, dice a Qt che non deve mai acquisire input dal mouse o dalla tastiera. Necessita di QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, imposta la direzione del layout dell'applicazione su Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessione, ripristina l'applicazione da una sessione precedente." #: 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 dell'interfaccia grafica (GUI) dell'applicazione. I valori possibili sono motif, windows, e platinum. Se hai compilato Qt con stili aggiuntivi o ne hai aggiunti sotto forma plugin, essi saranno disponibili come opzioni per il comando -style. NOTA: Non tutti gli stili sono disponibili su tutte le piattaforme. Se un parametro di stile non esiste, Qt avvierà l'applicazione con lo stile predefinito (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 foglio di stile oppure -stylesheet=foglio di stile, imposta l'applicazione foglio di stile. Il valore deve essere un percorso che punta a un file contenente il foglio di stile. Nota: Gli indirizzi relativi (URL) all'interno del foglio di stile sono relativi a un percorso di file." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (solo sotto ambiente X11), commuta nel modo sincrono per operazioni di 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 alla fine un messaggio riguardo al numero di widget che non sono stati distrutti e al numero massimo di widget che sono esistiti nello stesso 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 oppure -background colore, imposta il colore di background predefinito e una applicazione tavolozza (le tonalità chiare e scure saranno calcolate)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn oppure -button color, imposta il colore del pulsante predefinito" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "cmpa, causa che l'applicazione installi una mappa di colore privata su un display a 8-bit." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, imposta il display X (il predefinito è $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg oppure -foreground colore, imposta il colore di primo piano predefinito." #: 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 font, definisce il font dell'applicazione. Il font dovrebbe essere specificato usando una X logical font description." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, imposta la geometria del client della prima finestra che viene visualizzata." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, imposta il metodo di input server (equivalente all'impostazione della 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 come l'input è inserito in un dato widget, ad esempio onTheSpot fa in modo che l'input appaia direttamente nel widget, mentre overTheSpot fa in modo che l'input appaia in una casella flottante sul widget e non sia inserito finché la fase di modifica non è conclusa." #: 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 conteggio, limita il numero di colori allocati nel cubo di colori di un display a 8-bit, se l'applicazione sta usando la specifica di colore di QApplication::ManyColor. Se il conteggio è 216 allora il cubo di colori 6x6x6 sarà usato (cioè 6 levelli di rosso, 6 di verde, e 6 di blu); per altri valori, sarà usato un cubo approsimativamente proporzionale a 2x3x1" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titolo, imposta il titolo dell'applicazione" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, forza l'applicazione a usare TrueColor visual su un display a 8-bit." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate mentre nessun aggiornamento era in corso" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Non posso salvare l'immagine mentre l'aggiornamento è in corso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Non è possibile iniziare l'aggiornamento quando l'aggiornamento delle canvas è in corso" #: 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 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 barra di scorrimento fuori dal range" #: 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 " dimensione " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Cielo blu" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Teal" #: lclstrconsts.rstext msgid "Text" msgstr "Testo" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: 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 "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 di immagine sconosciuto" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "ormato bitmap non supportato." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato degli appunti non supportato %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "AVVISO: esistono %s DC non rilasciati, segue un dump dettagliato:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "AVVISO: ci sono %d GDIObjects non rilasciati, segue un dump dettagliato:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "AVVISO: ci sono %d messaggi lasciati in coda! Li sto liberando" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "AVVISO: Ci sono ancora %d strutture TimerInfo, le sto liberando" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "AVVISO: Ci sono ancora %s collegamenti a messaggi M_PAINT/LM_GtkPAINT non rimossi." #: 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 "Avviso:" #: 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 spostare il focus su una finestra disabilitata o invisibile" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menu dupicati" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creazione dell'azione non valida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerazione dell'azione non valida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registrazione dell'azione non valida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Deregistrazione dell'azione non valida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Il set di caratteri nella maschera \"%s\" non è valido!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Dimensione dell'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 "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indice del menu fuori dal range" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "La voce del menu è nulla" #: 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 "Meta+" #: 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 "Shift+" #: 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.snomdiform msgid "No MDI form present." msgstr "Nessun form MDI presente" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nessun temporizzatore disponibile" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo di token sbagliato: %s previsto" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Numero in virgola mobile non valido: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Numero intero non valido: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(at %d,%d, stream offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valore in byte incompleto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Stringa incompleta" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Simbolo token sbagliato: %s previsto ma %s trovato" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo di token sbagliato: %s previsto ma %s trovato" ����doublecmd-0.9.8/language/lcl/lclstrconsts.id.po�����������������������������������������������������0000644�0001750�0000144�00000115070�12250635767�020574� 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 msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s bukan eksekutabel." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s tidak ditemukan." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Database bantuan %s%s%s tidak bisa menemukan file %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Terima" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tombol aplikasi" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Kapital" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Kontrol" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konversi" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Turun" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Jalankan" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Panduan" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Tombol Mouse Kiri" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Left" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tombol kiri windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Tombol Mouse Tengah" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Ubah Mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonkonversi" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tombol pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Cetak" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Tombol Mouse Kanan" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Right" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tombol kanan windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Pilih" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tombol Spasi" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Tidak dikenal" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Up" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Sumber %s tidak ditemukan" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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 msgid "All files (%s)|%s|%s" msgstr "Semua file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" 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 msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: 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 msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Pembuatan cachable salah: " #: 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.rsdocking msgid "Docking" msgstr "Docking" #: 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 "Kesalahan pembuatan konteks device untuk %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "KESALAHAN dalam LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Kesalahan terjadi dalam %s at %sAlamat %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Kesalahan pembacaan %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Directori \"%s\" tidak ada." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "File \"%s\" tidak ada." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Path \"%s\" tidak ada." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Pilih Direktori" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(file tidak ditemukan: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informasi file" #: lclstrconsts.rsfind msgid "Find" msgstr "Cari" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Cari lagi" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols tidak bisa >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows tidak bisa >= 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 "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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "File grid tidak ada" #: 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.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "Konteks Bantuan %s tidak ditemukan." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Konteks Bantuan %s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found 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 msgid "Help Database %s%s%s not found" msgstr "Database Bantuan %s%s%s tidak ditemukan" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Node Bantuan %s%s%s tidak mempunyai Database Bantuan" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: Tidak teregistrasi" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Selektor Bantuan Salah" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d di luar jangkauan 0 .. %d" #: lclstrconsts.rsindexoutofrange 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 msgid "Invalid Date : %s" msgstr "Tanggal tidak benar : %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "Indeks List melebihi jangkauan (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "List harus kosong" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sTekan Ok untuk mengabaikan dan resiko kerusakan data.%sTekan Batal untuk mematikan program" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Sebelumnya" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Properti %s tidak ada" #: 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 "Ganti" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Ganti semua" #: lclstrconsts.rsresourcenotfound 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.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 "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 msgid "Unsupported clipboard format: %s" msgstr "Format clipboard tidak didukung: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " PERINGATAN: Ada %d DCs tidak dilepas, dump detil sebagai berikut:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " PERINGATAN: Ada %d GDIObjects tidak dilepas, detil dump sebagai berikut:" #: lclstrconsts.rswarningunreleasedmessagesinqueue 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 msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " PERINGATAN: Ada %d struktur TimerInfo tersisa, Saya akan membebaskannya" #: lclstrconsts.rswarningunremovedpaintmessages 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "set karakter dalam mask \"%s\" 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.snomdiform msgid "No MDI form present." msgstr "Tidak ada form MDI" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Tidak tersedia timer" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: 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 "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.hu.po�����������������������������������������������������0000644�0001750�0000144�00000123217�12354033623�020602� 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.5.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "A böngésző nem végrehajtható: \"%s\"" #: lclstrconsts.hhshelpbrowsernotfound #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "A böngésző nem található: \"%s\"" #: lclstrconsts.hhshelperrorwhileexecuting #| msgid "Error while executing %s%s%s:%s%s" 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 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 #| 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 "A(z) \"%s\" súgóadatbázishoz hiányzik a \"%s\" fájl." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Elfogadás" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Alkalmazás billentyű" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Nagy betűk" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Törlés" #: lclstrconsts.ifsvk_cmd #, fuzzy msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control #, fuzzy msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Átalakítás" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Le" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Végrehajtás" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Végső" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Súgó" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Bal egérgomb" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Balra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "bal windows billentyű" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Középső egérgomb" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Módváltás" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Következő" #: lclstrconsts.ifsvk_nonconvert #, fuzzy msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause billentyű" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Nyomtatás" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Előző" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Jobb egérgomb" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Jobbra" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "jobb windows billentyű" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Görgetés" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Kijelölés" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Pillanatkép" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Szóköz" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ismeretlen" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Fel" #: lclstrconsts.lislclresourcesnotfound 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 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.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 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.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "A(z) '%s' vezérlőnek nincs szülő ablaka" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' nem szülője ennek: '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krém" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "GDB által feldolgozható hiba készítése:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Saját ..." #: 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.rsdocking msgid "Docking" msgstr "Dokkolá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 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "HIBA az LCL-ben:" #: lclstrconsts.rserroroccurredinataddressframe 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 msgid "The directory \"%s\" does not exist." msgstr "A(z) \"%s\" könyvtár nem létezik." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "A(z) \"%s\" fájl nem létezik." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "A(z) \"%s\" útvonal nem tezik." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Könyvtár kiválasztása" #: lclstrconsts.rsfileinfofilenotfound 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 "További keresés" #: 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 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 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "A táblafájl nem létezik" #: 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 "" #: 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 "" #: 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 "" #: lclstrconsts.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "A(z) %s súgó témakör nem található" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #| msgid "Help context %s not found in Database %s%s%s." 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 msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" "A(z) %s%s%s súgó adatbázis nem talált megjelenítőt a(z) %s típusú súgó " "oldalhoz" #: lclstrconsts.rshelphelpdatabasenotfound #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "A(z) \"%s\" súgó adatbázis nem található" #: lclstrconsts.rshelphelpfordirectivenotfound #| msgid "Help for directive %s%s%s not found." msgid "Help for directive \"%s\" not found." msgstr "Nem található súgó a(z) \"%s\" direktívához." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #| 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 "Nem található súgó a(z) \"%s\" direktívához a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpkeywordnotfound #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "A(z) \"%s\" súgó kulcsszó nem található." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #| msgid "Help keyword %s%s%s not found in Database %s%s%s." 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 #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "A(z) \"%s\" elemhez nincs súgó adatbázis" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "%s: Nincs regisztrálva" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Súgó kiválasztó hiba" #: lclstrconsts.rshelpthereisnoviewerforhelptype #| msgid "There is no viewer for help type %s%s%s" 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 ikonnak nincs jelenleg képe" #: 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 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 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 msgid "Invalid Date : %s" msgstr "Hibás dátum: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "A lista indexe a határon kívül esik (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "A listának üresnek kell lennie" #: 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" #: 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 #, fuzzy msgid "Post" msgstr "Elküldés" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the " "program." msgstr "" "%s%sAz OK-t választva figyelmen kívül hagyja és adatsérülést kockáztat. %sA " "Mégsem 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 msgid "Property %s does not exist" msgstr "A tulajdonság nem létezik: %s" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Lila" #: 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 "" #: 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 "" #: 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 (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 "" #: 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 "" #: 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 "" #: 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 #, fuzzy 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 #, fuzzy msgid "Cannot begin update all when canvas only update in progress" msgstr "" "Nem kezdhető el az összes frissítése amikor helyi frissítés van folyamatban" #: 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 "Mindet cseréli" #: lclstrconsts.rsresourcenotfound 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.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 msgid "Unsupported clipboard format: %s" msgstr "Nem támogatott vágólap-formátum: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 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 "Többszörös menük" #: lclstrconsts.sinvalidactioncreation #, fuzzy msgid "Invalid action creation" msgstr "Érvénytelen művelet létrehozás" #: lclstrconsts.sinvalidactionenumeration #, fuzzy msgid "Invalid action enumeration" msgstr "Érvénytelen művelet felsorolás" #: lclstrconsts.sinvalidactionregistration #, fuzzy msgid "Invalid action registration" msgstr "Érvénytelen művelet regisztrálás" #: lclstrconsts.sinvalidactionunregistration #, fuzzy msgid "Invalid action unregistration" msgstr "Érvénytelen művelet kiregisztrálás" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "A karakterkészlet a \"%s\" maszkban érvénytelen!" #: 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.snomdiform msgid "No MDI form present." msgstr "Nincs MDI form." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nincsenek elérhető időzítők" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Rossz token típus: %s az elvárt" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Érvénytelen lebegőpontos szám: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Érvénytelen egész szám: %s" #: lclstrconsts.sparlocinfo 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 msgid "Wrong token symbol: %s expected but %s found" msgstr "Rossz token szimbólum: %s az elvárt, de %s található" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Rossz token típus: %s az elvárt, de %s található" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.fr.po�����������������������������������������������������0000644�0001750�0000144�00000124640�12250635767�020612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\n" "PO-Revision-Date: 2011-12-14 14:37+0100\n" "Language-Team: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\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: Double Commander 0.5.1 beta\n" "X-Poedit-Bookmarks: -1,190,-1,-1,-1,-1,-1,-1,-1,-1\n" "X-Poedit-Language: French\n" "X-Poedit-Country: BELGIUM\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navigateur %s%s%s non exécutable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navigateur %s%s%s non trouvé." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Erreur en exécutant %s%s%s : %s%s" Le chemin défini pour la config n'existe pas dans la version 0.5.1 pour linux !!! #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossible de trouver un navigateur HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de données d'aide %s%s%s ne trouve pas le fichier %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Accepter" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "touche application" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Retour arrière" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuler" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Majuscule" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Effacer" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Contrôle" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convertir" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Supprimer" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Bas" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fin" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Echappement" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Exécuter" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" Je préfère traduire par "Origine" plutôt que par "Maison"... #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Aide" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Origine" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insérer" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Bouton gauche de la souris" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Gauche" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Touche Windows gauche" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Bouton central de la souris" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Changement de mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Suivant" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Non converti" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Verr num." #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "%d pav num." #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Touche pause" Dans quel contexte ??? #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimer" #: lclstrconsts.ifsvk_prior #, fuzzy msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prioritaire" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Bouton droit de la souris" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retour" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Droite" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Touche Windows droite" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Défilement" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Sélectionner" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Maj." #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Capture d'écran" ??? #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Barre d'espace" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Étiquette" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Inconnu" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Haut" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "impossible d'exécuter %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s non trouvée" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "fichier du programme non trouvé %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Dark Shadow" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Light" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" 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 "Bordure active" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Champ actif" Dans quel contexte ??? #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tous les fichiers (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espace de travail de l'application" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Bureau" ??? Attention car c'es t un mode de représentation des images... #: lclstrconsts.rsbackward msgid "Backward" msgstr "Arrière" #: lclstrconsts.rsbitmaps #, fuzzy 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 du bouton" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Bouton en surbrillance" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Ombre du bouton" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texte du bouton" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculateur" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Anuler" #: 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 "Texte du champ" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Respecter la casse" #: lclstrconsts.rscontrolclasscantcontainchildclass 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 avoir le contrôle sur la classe '%s' comme enfant" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Le contrôle '%s' n'a pas de fenêtre parente" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crême" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Créer une erreur d'arrêt de gdb :" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Curseur" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personnaliser..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Défaut" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permission utilisateur groupe taille date heure" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Supprimer l'enregistrement ?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Supprimer" Je pense que "Dossier" est maintenant plus utilisé que "Répertoire"... #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direction" ??? #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Dossier" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Amarrage" #: lclstrconsts.rsduplicateiconformat #, fuzzy msgid "Duplicate icon format." msgstr "Dupliquer le format d'icône." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editer" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Rechercher dans tout le fichier" ??? Quel est le contexte de ce message ? #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erreur" #: lclstrconsts.rserrorcreatingdevicecontext #, fuzzy msgid "Error creating device context for %s.%s" msgstr "Erreur en créant le contexte du périphérique pour %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Erreur dans LCL :" #: lclstrconsts.rserroroccurredinataddressframe #, fuzzy msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Une erreur s'est produite dans %s à l'adresse %s%s de la page %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Erreur de lecture %s%s%s : %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erreur en sauvegardant l'image." Je pense que "Dossier" est maintenant plus utilisé que "Répertoire"... #: lclstrconsts.rsexception msgid "Exception" msgstr "Exception" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Le dossier doit exister" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Le dossier \"%s\" n'existe pas." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Le fichier \"%s\" existe déjà. L'écraser ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Le fichier doit exister" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Le fichier \"%s\" n'existe pas." #: lclstrconsts.rsfdfilereadonly 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 "Ecraser le fichier ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Le chemin doit exister" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Le chemin \"%s\" n'existe pas." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Choisir un dossier" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(Fichier \"%s\" non trouvé)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informations sur le fichier" #: 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 supérieur \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "\"FixedRows\" ne peut pas être supérieur \"RowCount\"" ??? Flux de "fiche" ? #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulaire" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, fuzzy msgid "Form streaming \"%s\" error: %s" msgstr "Dans le flux de fiche \"%s\" : erreur %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "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écifique GDK+ trace/debug." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Arrêter les messages spécifique GDK+ trace/debug." #: 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 Les avertissements et les erreurs produits par Gtk+/GDK stopperont l'application." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient du champ inactif" Dans quel contexte ??? #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient du champ inactif" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Graphique" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gris" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texte gris" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Vert" #: lclstrconsts.rsgridfiledoesnotexists #, fuzzy msgid "Grid file doesn't exists" msgstr "Le fichier \"Grid\" n'existe pas" #: lclstrconsts.rsgridindexoutofrange #, fuzzy msgid "Grid index out of range." msgstr "Index de grille hors limite." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" ne peut pas être inférieur au \"GroupIndex\" des éléments précédents" #: 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 Suivre la convention Xt, la classe d'un programme est le nom de 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é sur \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Activer les messages spécifique 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 Se connecter à X serveur, où \"h\" est le nom d'hôte, \"s\" est le nombre de serveur (habituellement 0), et \"d\" est le nombre d'affichage (typiquement omis). Si --l'affichage n'est pas indiqué, la variable d'environnement DISPLAY est employé." #: 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 Ensemble pour le nom du programme \"progname\". Si non spécifiée, le nom du programme sera fixée à 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écifique Gtk+ trace/debug." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Ne mettez pas d'ordre transitoire pour les formes modales" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Désactive l'utilisation de la mémoire étendu partagée par X." #: 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 Appel XSynchronize (affichage, Vrai) après que le raccordement au serveur X ait été établi. Ceci rend le déboguage des erreurs du protocole X plus faciles, parce que les demandes de buffer par X sont désactivé et les erreurs de X seront reçu immédiatement après la demande de protocole qui a produit l'erreur traité par le serveur X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s : Déjà enregistré" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Contexte d'aide non trouvé" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Base de données d'aide non trouvée" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erreur d'aide" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Contexte d'aide %s non trouvé." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Contexte d'aide %s non trouvé dans la base de données %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "La base de données d'aide %s%s%s n'a pas trouvé une visionneuse pour une page d'aide du type %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de données d'aide %s%s%s non trouvée" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Mot-clé d'aide %s%s%s non trouvé." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Mot-clé d'aide %s%s%s non trouvé dans la base de données %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Le nœud d'aide %s%s%s n'a aucune base de données" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Aucuns nœuds d'aide disponibles" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Aide non trouvée" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s : Non enregistré" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erreur de sélecteur d'aide" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Il n'y a aucune visionneuse pour ce type d'aide %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erreur de la visionneuse d'aide" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visionneuse d'aide non trouvée" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Surbrillance" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texte en surbrillance" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "\"Lumière chaude\"" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" 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 de l'icône ne peut pas être vide" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "L'image de l'icône doit avoir le même format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossible de modifier le format de l'image de l'icône" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "L'image de l'icône doit avoir la même taille" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossible de modifier la taille de l'image de l'icône" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icône n'a pas d'image" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bordure innactive" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Champ inactif" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Champ inactif" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d hors des limites 0 .. %d " #: lclstrconsts.rsindexoutofrange 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 "Arrière-plan de l'info" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texte d'information" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insérer" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Date invalide : %s" ??? Objet "fiche" ? #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Date invalide : %s. Doit être entre %s et %s" #: lclstrconsts.rsinvalidformobjectstream #, fuzzy msgid "invalid Form object stream" msgstr "Flux d'objet fiche invalide" #: 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 msgid "%s is already associated with %s" msgstr "%s est déjà associé avec %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Dernier" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citron" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Index de liste hors limites (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "La liste doit être vide" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maron" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abandonner" #: 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 "&Enregistrer" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Déverouiller" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Oui" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Oui pour &tout" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gris moyen" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barre du menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu en surbrillance" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texte des menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modifié " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Vert de gris" #: 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 "Navy" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Suivant" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Aucune" #: 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érifier si l'unité \"interfaces\" a bien été ajoutée à la clause \"uses\" du programme." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olive" ??? Pas de meilleure traduction ? #: 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" Dans quel contexte ??? #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint #, fuzzy msgid "Post" msgstr "Message" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s Pressez OK pour ignorer et risquer des données corruption.%s Pressez Annuler pour fermer le programme. " #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Précédent" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propriété %s n'existe pas" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Pourpre" #: 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 "" ??? Dans quel contexte ? #: 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 "Impossible de sauvegarder l'image pendant la mise à jour" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossible de démarrer la mise à jour compète pendant la mise à jour du canevas" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rouge" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Rafraichir" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Remplacer" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Tout remplacer" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s non trouvée" #: 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 "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Sarcelle" #: lclstrconsts.rstext msgid "Text" msgstr "Texte" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: 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 "Impossible de charger la police par défaut" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erreur inconnue, merci de rapporter ce bogue svp" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Type d'image inconnu" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Format d'image inconnu" Dans quelle contexte ? #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format bitmap non supporté." #: lclstrconsts.rsunsupportedclipboardformat #, fuzzy msgid "Unsupported clipboard format: %s" msgstr "Format %s de presse-papiers non supporté" #: lclstrconsts.rswarningunreleaseddcsdump 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 msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ATTENTION : Il y a %d GDIObjects non libres, en voici le détail : " #: lclstrconsts.rswarningunreleasedmessagesinqueue 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 msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ATTENTION : Il y a %d structures TimerInfo, elles seront supprimées." #: lclstrconsts.rswarningunremovedpaintmessages 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 enlevé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 "Cadre de la fenêtre" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texte de la 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 "Doublons dans les menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Création d'action non valide" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumration d'action non valide" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Référencement d'action non valide" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Déréférencement d'action non valide" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Le caractère placé dans le masque \"%s\" n'est pas valide !" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Taille d'image non valide" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Index de liste d'images non valide" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: 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 "Retour arrière" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Sup." #: 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" Je préfère traduire par "Origine" plutôt que par "Maison"... #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Origine" #: 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 "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Droite" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" ??? #: lclstrconsts.smkcspace msgid "Space" msgstr "Espace" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Étiquette" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Haut" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Aucune fiche MDI présente" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Aucun temporisateur disponible" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Mauvais type de jeton : %s attendu" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Nombre à virgule flottante non valide : %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Nombre entier non valide : %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (à %d,%d, stream offset %.8x)" #: 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 msgid "Wrong token symbol: %s expected but %s found" msgstr "Mauvais symbole de jeton : %s attendu mais %s trouvé" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Mauvais type de jeton : %s attendu mais %s trouvé" ������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.fi.po�����������������������������������������������������0000644�0001750�0000144�00000102267�12250635767�020602� 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 msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Hyväksy" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" 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 msgid "All files (%s)|%s|%s" msgstr "Kaikki tiedostot (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Taaksepäin" #: 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 "Laskin" #: 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 "Sama kirjainkoko" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" 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 "oikeudet käyttäjä ryhmä koko päivä aika" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Suunta" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocking msgid "Docking" 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "" #: 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 "" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Tiedosto täytyy olla olemassa" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Tiedostoa \"%s\" ei ole olemassa." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Tallenna nimellä" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Avaa tiedosto" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Tallennetaanko vanhan päälle ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Valitse kansio" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(tiedostoa ei löytynyt: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Tiedoston tietoja" #: lclstrconsts.rsfind msgid "Find" msgstr "Etsi" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols ei voi olla suurempi kuin kaikkien sarakkeiden määrä (ColCount)" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows ei voi olla suurempi kuin kaikkien rivien määrä (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 "Eteenpäin" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" 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 "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 "" #: 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.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Ideksi osoittaa taulukon ulkopuolella olevaa solua [saraketta(col)=%d ja riviä(row)=%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 "Laiton päivämäärä: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" 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 "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Uudelleen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Kyllä" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Kyllä, kaikki" #: 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 " muokattu " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Vahvistus" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "" #: 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 "" #: 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 "Valitse päivä" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPaina 'Ok'-näppäintä jos haluat ohittaa varoituksen ja ottaa riskin tietojen (datan) sekoamisesta.%sPaina 'Peru'-näppäintä poistuaksesi ohjelmasta." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "" #: 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 "Etsi ja korvaa" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Korvaa kaikki" #: lclstrconsts.rsresourcenotfound 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 "Valitse väri" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Valitse fontti" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " koko " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Teksti" #: 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 "" #: 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 "Etsi vain kokonaisia sanoja" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Virhe:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Varoitus:" #: 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" 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.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: 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 "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.es.po�����������������������������������������������������0000644�0001750�0000144�00000131402�13054062335�020570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2017-02-24 09: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" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s no ejecutable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s no encontrado." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Error al ejecutar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "No se puede encontrar un navegador HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "No se ha encontrado un navegador HTML.%sPor favor, define uno en Herramientas -> Opciones -> Ayuda -> Opciones de ayuda" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de datos de ayuda %s%s%s no pudo encontrar el archivo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Aceptar" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "clave de la aplicación" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Retroceso" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Mayúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Limpiar" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convertir" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Borrar" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Abajo" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fin" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Ejecutar" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ayuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Inicio" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insertar" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botón izquierdo del ratón" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Izquierdo" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Tecla windows izquierda" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Botón central del ratón" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menú" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modo Cambio" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Siguiente" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Sin convertir" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "BloqNúm" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "TeclaNúm %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla Pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimir" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Anterior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botón derecho del ratón" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Entrar" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Derecha" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla windows derecha" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Desplazar" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Seleccionar" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Mayús" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Capturar pantalla" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tecla espaciadora" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Súper" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconocido" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Arriba" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "no puede ejecutar %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s no encontrado" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "archivo de programa no encontrado %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Sombra oscura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luz 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un control no puede tenerse a sí mismo como padre" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borde activo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Título activo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Todos los archivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Área de trabajo de aplicaciones" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Agua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Escritorio" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Negro" #: lclstrconsts.rsblank msgid "Blank" msgstr "Vacío" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Cara del botón" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Botón resaltado" #: 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 título" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensible a capitalización" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "El control de la clase '%s' no puede tener el control de la clase '%s' como secundaria" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "El control '%s' no tiene ventana padre" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' no es un padre de '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creando un error capturable por gdb" #: 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 "Eliminar" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Dirección" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "Carpeta" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Anclado" #: 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 msgid "Error creating device context for %s.%s" msgstr "Error creando contexto de dispositivo para %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERROR en LCL" #: lclstrconsts.rserroroccurredinataddressframe 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Error leyendo %s%s%s: %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 "La carpeta debe existir" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "La carpeta «%s» no existe." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "El archivo «%s» ya existe. ¿Sobrescribirlo?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "El archivo debe existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "No existe el archivo «%s»" #: lclstrconsts.rsfdfilereadonly 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 "¿Sobrescribir archivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "La ruta debe existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "La ruta «%s» no existe" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Escoja carpeta" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(archivo no encontrado: «%s»)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Información de archivo" #: 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 msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "No se encontró el recurso de formulario %s. Para formularios sin recursos se debe utilizar el constructor CreateNew. Ve la variable global RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror 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 "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Alertas y errores generados por Gtk+/GDK con interrupción de la aplicación." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Degradado del título activo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Degradado del título inactivo" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "No existe el archivo de rejilla" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice de rejilla 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ú 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 classname Siguiendo las convenciones Xt, la clase de un programa es el nombre del programa con el carácter inicial en mayúsculas. Por ejemplo, el nombre de clase para gimp es «Gimp». Si se especifica --class, la clase del programa se establecerá a \"classname\"." #: 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 pantalla (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 module Carga el módulo especificado 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 programe Define el nombre del programa como \"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 establece el orden transitorio para los formularios modales" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desactiva el uso de Extensión de Memoria Extendida 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 solicite ese error generado que ha sido procesado por el servidor X." #: lclstrconsts.rshelpalreadyregistered 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 encontró una base de datos de ayuda para este tema, pero este tema no se encontró" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "No hay instalada ninguna base de datos de ayuda para este tema" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Error de la ayuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Contexto de ayuda %s no encontrado." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Contexto de ayuda %s no encontrado en la base de datos %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "La base de datos de ayuda %s%s%s no encontró un visor para el tipo de página de ayuda %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de datos de ayuda %s%s%s no encontrada" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "No se ha encontrado ayuda para la directriz %s%s%s." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "No se ha encontrado ayuda para la directriz %s%s%s en la base de datos %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Clave de ayuda %s%s%s no encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Clave de ayuda %s%s%s no encontrada en la base de datos %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "El nodo de ayuda %s%s%s no tiene base de datos de ayuda" #: lclstrconsts.rshelpnohelpfoundforsource 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 entradas de ayuda disponibles para este tema" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ayuda no encontrada" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: No registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector de ayuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "No hay visor para el tipo de ayuda %s%s%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 "No se ha encontrado ningún visor para este tipo de contenido de ayuda" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Resaltado" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texto resaltado" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz caliente" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "OSX recurso de icono" #: 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" #: 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 presente" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borde inactivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Título inactivo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Título inactivo" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %d fuera de límites 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fuera de rango celda[Col.=%d Fila=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Antecedentes" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texto informativo" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insertar" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Fecha no válida : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Fecha no válida: %s. Debe estar entre %s y %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Flujo de objetos de formulario no válido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propiedad no válido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato de flujo no válido" #: lclstrconsts.rsisalreadyassociatedwith 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 msgid "List index exceeds bounds (%d)" msgstr "El índice de lista excede los límites (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "La lista debe estar vacía" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Granate" #: 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 "Ayuda" #: 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 dinero" #: 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 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, comprueba que la unidad «interfaces» ha sido añadida a las condiciones de uso del programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Verde oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Escoge 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPulsa «Aceptar» para ignorar y correr el riesgo de corromper datos.%sPulsa «Cancelar» para terminar el programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Prioridad" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Confirmar cada reemplazo" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propiedad %s no existe" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Púrpura" #: 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 en X11), ejecutándose bajo un depurador puede causar un -nograb implícito, usa -dograb para anular. 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 param, establece el backend que se utilizará para widgets en pantalla y QPixmaps. Las opciones disponibles son native, raster y opengl. OpenGL sigue siendo 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 nunca debe capturar el ratón o el teclado. Necesita QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, establece la dirección de diseño de la aplicación a Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, 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 style o -style=style, define el estilo GUI de la aplicación. Los posibles valores son motif, windows y platinum. Si has compilado Qt con estilos adicionales o tienes estilos adicionales como complementos estos estarán disponibles con -style en la línea de comandos. NOTA: No todos los estilos están disponibles en todas las plataformas. Si el parámetro de estilo no existe, Qt iniciará una aplicación con el estilo común predeterminado (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 o -stylesheet=stylesheet, establece la hoja de estilo de la aplicación. El valor debe ser una ruta de acceso a un archivo que contenga la hoja de estilos. NOTA: Las URL relativas en el archivo de hoja de estilo son relativas a la ruta del archivo de hoja de estilos." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (sólo en X11), cambia al modo síncrono para 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 quedaron sin destruir y el número máximo de widgets existieron a la vez." #: 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 de aplicaciones (se calculan sombras claras y oscuras)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn o -button color, establece el color del botón predeterminado." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, hace que la aplicación instale 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 display, 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 de primer plano predeterminado." #: 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 font, define la tipografía de la aplicación. El tipo de letra debe especificarse usando una descripción de la tipografía lógica de X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, 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étodo 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 "-insetstyle, define cómo se inserta la entrada en el widget dado, por ejemplo, onTheSpot hace que la entrada aparezca directamente en el widget, mientras que overTheSpot hace que la entrada aparezca en una caja flotando sobre el widget y no se inserte hasta que se termine la edición." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, define 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 count, limita el número de colores asignados en el cubo de color en una pantalla de 8 bits, si la aplicación está utilizando 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 utiliza un cubo aproximadamente proporcional a un cubo 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, 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, obliga a la aplicación a usar un visual TrueColor en una pantalla de 8 bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Finalizar la actualización mientras no se está actualizando" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "No se puede guardar la imagen mientras la actualizacion está en progreso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "No se puede empezar a actualizar todo cuando solo la actualización de lienzo está en curso" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rojo" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Actualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Reemplazar" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Reemplazar todo" #: lclstrconsts.rsresourcenotfound 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 "La propiedad de ScrollBar está fuera de rango" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Escoge color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Escoge una tipografía" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Plateado" #: lclstrconsts.rssize msgid " size " msgstr " tamaño " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "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.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 "Un control para manejar cuánto tamaño dar a dos partes de un área" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Un árbol de elementos" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "No se ha podido cargar la tipografía predeterminada" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Error desconocido. Por favor, informa 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 msgid "Unsupported clipboard format: %s" msgstr "Formato del portapapeles no soportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVISO: Hay %d DCs sin liberar, sigue un volcado detallado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: Hay %d GDIObjects sin liberar, sigue un volcado detallado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVISO: ¡Quedan %d mensajes en la cola! Se liberarán" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: Quedan %d estructuras TimerInfo, se liberarán" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVISO: Hay %s mensajes de enlaces LM_PAINT/LM_GtkPAINT sin eliminar." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Blanco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Solo 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 acción inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeración de acción inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de acción inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de información inválida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "¡La máscara «%s» no es válida!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamaño de imagen inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice de lista de imágenes inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "El texto actual no coincide con la selección especificada." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice de menú fuera de rango" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "El elemento de menú es nulo" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenú 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 "Entrar" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Inicio" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Izquierdo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "RePág" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "AvPág" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Derecha" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Mayús+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espacio" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Arriba" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "No hay formulario MDI presente." #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hay temporizadores disponibles" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo de token incorrecto: %s esperado" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Número de coma flotante no válido : %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Número entero no válido: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (en %d,%d, flujo de desplazamiento %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor de byte no finalizado" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Cadena de texto no finalizada" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo de token incorrecto: %s esperado pero %s encontrado" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo de token incorrecto: %s esperado pero %s encontrado" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.de.po�����������������������������������������������������0000644�0001750�0000144�00000121700�12250635767�020565� 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: 2010-08-25 23:51+0100\n" "Last-Translator: Swen Heinig <swen.heinig@freenet.de>\n" "Language-Team: Deutsch <lazarus@miraclec.com>\n" "MIME-Version: 1.0\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" "X-Poedit-SourceCharset: utf-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s nicht ausführbar." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s nicht gefunden." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Fehler beim Ausführen von %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Kann den HTML-Browser nicht finden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Die Hilfedatenbank %s%s%s konnte die Datei %s%s%s nicht finden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Übernehmen" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Programmtaste" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Rückschritt" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Großbuchstabe" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Löschen" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Steuerelement" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konvertiert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Löschen" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Hinunter" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Ende" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Ausführen" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Schluß" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Hilfe" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Pos1" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Einfügen" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Linke Maustaste" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Links" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Linke Windows-Taste" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Mittlere Maustaste" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modusänderung" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Weiter" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nichtkonvertiert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "NumLock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Zahlenblock %s" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause-Taste" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Druck" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Zurück" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Rechte Maustaste" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Eingabe" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Rechts" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Rechte Windows-Taste" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rollen" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Auswählen" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Umsch" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Auszug" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Leertaste" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Unbekannt" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Hoch" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "Kann %s nicht ausführen" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s nicht gefunden" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "Programmdatei nicht gefunden %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Dunkl. 3D-Schatten" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D-Licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" 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 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.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 msgid "Control of class '%s' can't have control of class '%s' as a child" 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 "Cremefarbig" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Erzeuge GDB-fangbaren Fehler:" #: 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.rsdocking msgid "Docking" msgstr "Andocken" #: 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 msgid "Error creating device context for %s.%s" msgstr "Fehler beim Erzeugen des Gerätekontexts für %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "FEHLER in der LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fehler aufgetreten in %s bei %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Fehler beim Lesen %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Das Verzeichnis \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Die Datei \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilereadonly 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 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 msgid "(file not found: \"%s\")" msgstr "(Datei nicht gefunden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dateiinformation" #: 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/gleich ColCount sein" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows kann nicht größer/gleich RowCount sein" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: 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 "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 "" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Grid-Datei fehlt" #: 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 #, 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 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.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Bereits registriert" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Hilfekontext nicht gefunden" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Hilfedatenbank nicht gefunden" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hilfefehler" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Hilfekontext %s nicht gefunden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Hilfekontext %s nicht in der Datenbank %s%s%s gefunden." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Die Hilfedatenbank %s%s%s fand keinen Betrachter für eine Hilfeseite des Typs %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Hilfedatenbank %s%s%s nicht gefunden" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Hilfeschlüsselwort %s%s%s nciht gefunden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Hilfeschlüsselwort %s nicht in der Datenbank %s%s%s gefunden." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Hilfeknoten %s%s%s besitzt keine Hilfedatenbank" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Keine Hilfeknoten verfügbar" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Hilfe nicht gefunden" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Nicht registriert" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hilfeauswahlfehler" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Es gibt keinen Viewer für den Hilfetyp %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hilfebetrachterfehler" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" 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 #, fuzzy #| msgid "OSX Icon Resource" 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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %s außerhalb des Bereichs 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index außerhalb des Bereichs Zelle[Spalte=%s 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 msgid "Invalid Date : %s" msgstr "Ungültiges Datum: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "Listenindex überschreitet Grenzen (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Zeile muß leer sein" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sOk übergeht und riskiert Dateninkonsistenz.%sMit Abbrechen wird das Programm abgebrochen." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorher" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Eigenschaft %s fehlt" #: 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 "" #: 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 "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 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ürkiss" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: 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 "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 msgid "Unsupported clipboard format: %s" msgstr "Nicht unterstütztes Clipboard-Format: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Der Zeichensatz in der Maske \"%s\" ist ungültig!" #: 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 "" #: 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 "" #: 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 "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Rechts" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Hoch" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Kein MDI-Formular vorhanden" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Keine Timer verfügbar" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Falscher Token-Typ: %s erwartet" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ungültige Gleitkommazahl: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ungültiger Integerzahl: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (bei %d,%d, Stream-Offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nicht abgeschlossener Byte-Wert" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nicht abgeschlossene Zeichenkette " #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Falscher Token: %s erwartet, %s gefunden" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Falscher Token-Typ: %s erwartet, %s gefunden" ����������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.da.po�����������������������������������������������������0000644�0001750�0000144�00000122624�12673237427�020567� 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 msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s kan ikke åbnes." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s kan ikke findes." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 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 msgid "The help database %s%s%s was unable to find file %s%s%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_accept msgid "Accept" msgstr "OK" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "programtast" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Store" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Ryd" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Kontrol" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konveter" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Slet" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Ned" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Udfør" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Endelig" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Hjælp" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Indsæt" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ventre musetast" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Venstre" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "venstre windowstast" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Miderste musetast" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Tilstandsændring" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Næste" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Ikke-konverteret" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerisk tastatur %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause-tast" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Tilbage" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Højre musetast" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Højre" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "højre windowstast" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rul" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Markér" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Mellemrumtast" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ukendt" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Op" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "kan ikke udføre %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s ikke fundet" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "programfil ikke fundet %s" #: 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.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.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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Opretter en GDB-fangbar fejl:" #: 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.rsdocking msgid "Docking" 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.rserrorinlcl msgid "ERROR in LCL: " msgstr "FEJL i LCL" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fejl i %s på %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Kunne ikke læse %s%s%s: %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.rsfind msgid "Find" msgstr "Søg" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Søg igen" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Første" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols kan ikke være >=ColCount" #: lclstrconsts.rsfixedrowstoobig 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Mønsterfil findes ikke" #: 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.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 msgid "Help context %s not found in Database %s%s%s." msgstr "Hjælpekontekst %s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found 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 msgid "Help Database %s%s%s not found" msgstr "Hjælpedatabase %s%s%s ikke fundet" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet i database %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Søgeord %s%s%s ikke fundet." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Søgeord %s%s%s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%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 msgid "There is no viewer for help type %s%s%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.rslistmustbeempty msgid "List must be empty" msgstr "Listen skal være tom" #: 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 msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sTryk OK for at ignorere og risikere ødelagt data.%sTryk Annuller for at afslutte programmet." #: 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 onTheSpot viser input direkte i widget, mens overTheSpot viser input i en boks flydende over widget og indsættes ikke før redigeringen er færdig." #: 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.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.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.snomdiform msgid "No MDI form present." msgstr "Ingen MDI-formular til stede" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Ingen timer til rådighed" #: 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 msgid " (at %d,%d, stream offset %.8x)" 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"������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.cs.po�����������������������������������������������������0000644�0001750�0000144�00000115472�12250635767�020613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2010-07-27 17:12+0100\n" "Last-Translator: Chronos <robie@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-Poedit-Language: Czech\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Prohlížeč %s%s%s není spustitelný." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Prohlížeč %s%s%s nenalezen." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Chyba během spouštění %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepodařilo se nalézt HTML prohlížeč." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Databáze nápovědy %s%s%s nemůže najít soubor %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Přijmout" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "aplikační klávesa" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Velké písmena" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Vyčistit" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ovládání" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Převést" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Smazat" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Dolů" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Konec" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Vykonat" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Konečný" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Nápověda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Domů" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Vložit" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Levé tlačítko myši" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Doleva" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "levá klávesa windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Prostřední tlačítko myši" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Nabídka" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Změna režimu" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Další" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nepřevedeitelné" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerická klávesa %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Klávesa pouza" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Tisknout" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Předchozí" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Pravé tlačítko myši" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Návrat" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Doprava" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "pravá klávesa windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Posouvat" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Vybrat" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snímek" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Mezerník" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznámé" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Nahoru" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "nelze spustit %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenalezen" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "soubor programu %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 parent" 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 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.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 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.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Prvek '%s' nemá rodičovské okno" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krémová" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Vytvářím chytatelnou chybu gdb:" #: 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.rsdocking msgid "Docking" msgstr "Ukotvení" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zdvojený 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 msgid "Error creating device context for %s.%s" msgstr "Chyba vytváření kontextu zařízení %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "CHYBA v LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Chyba čtení %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "Adresář \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "Soubor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Vybrat adresář" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(soubor nenalezen: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informace o souboru" #: 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 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 "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 "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: 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 "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: 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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Soubor mřížky neexistuje" #: 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 menu" #: 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 "" #: 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.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Již zaregistrováno" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Kontext nápovědy nenalezen" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" 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 msgid "Help context %s not found." msgstr "Kontext nápovědy %s nenalezen." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Kontext nápovědy %s nenalezen v databázi %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Databáze nápovědy %s%s%s nenalezla prohlížeč pro stránku nápovědy typu %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Databáze nápovědy %s%s%s nenalezena" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Klíčové slovo %s%s%s nenalezeno." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Klíčové slovo %s%s%s nebylo nalezeno v Databázi %s%s%s" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Uzel nápovědy %s%s%s nemá Databázi nápovědy" #: lclstrconsts.rshelpnohelpfoundforsource 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 #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Uzly nápovědy nejsou dostupné" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Nápověda nenalezena" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Neregistrováno" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba výběru nápovědy" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Pro typ %s%s%s není prohlížeč" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba prohlížeče nápovědy" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Prohlížeč nápovědy nenalezen" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Zvýraznění" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Zvýrazněný text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Zdroj ikony OSX" #: 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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d mimo rozsahy 0 .. %d" #: lclstrconsts.rsindexoutofrange 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 msgid "Invalid Date : %s" msgstr "Neplatný Datum: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "Index seznamu překročil meze (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Seznam musí být prázdný" #: 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 menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Nabídka" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Zvýraznění menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Text menu" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sStiskněte OK k ignorování a riskování poškození dat.%sStiskněte Zrušit k zabití programu." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Předchozí" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Vlastnost %s neexistuje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Fialová" #: 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 "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 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 "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Hluboká zelenomodrá" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Označkovaný obrazový formát souboru" #: 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 "Nelze načíst výchozí písmo" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Neznámá chyba, prosíme 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 msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 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 "Zdvojené menu" #: 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Znaková sada v masce \"%s\" není platná!" #: 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 "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index menu mimo rozsah" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Položka menu je nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu není 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 "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.snomdiform msgid "No MDI form present." msgstr "Nepřítomno žádné MDI okno." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nedostupné žádné časovače" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Nesprávný typ symbolu: očekáváno %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neplatné desetinné číslo: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (u %d,%d, posun proudu %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nepřerušená bajtová hodnoty" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený řetězec" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Nesprávný symbol: Očekáváno %s, ale nalezeno %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Nesprávný typ symbolu: Očekáváno %s, ale nalezeno %s" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/lcl/lclstrconsts.ca.po�����������������������������������������������������0000644�0001750�0000144�00000116365�12250635767�020573� 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 msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s no executable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s no trobat." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%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 msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de dades de l'ajuda %s%s%s no ha pogut trobar el fitxer %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl 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_accept msgid "Accept" msgstr "Accepta" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tecla d'aplicació" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Espai enrere" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Majúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Neteja" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converteix" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Esborra" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Avall" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fi" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escapa" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Executa" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Inici" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insereix" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botó esquerre del ratolí" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Esquerra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tecla windows esquerra" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Butó del mig del ratolí" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menú" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Canvi de mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Pròxim" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "No convertible" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Teclat numèric" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Teclat numèric %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla de pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimeix" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Previ" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botó dret del ratolí" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retorn" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Dreta" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla windows dreta" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Explora" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecciona" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Majúsc." #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Captura" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Espaiador" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconegut" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Amunt" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurs %s no trobat" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: 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 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.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 msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: 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 msgid "Control of class '%s' can't have control of class '%s' as a child" 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.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creant un error gdb capturable:" #: 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.rsdocking msgid "Docking" msgstr "Fixa" #: 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 "Error en crear dispositiu de context per a %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERROR en LCL" #: lclstrconsts.rserroroccurredinataddressframe 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.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Error en llegir %s%s%s: %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 msgid "The directory \"%s\" does not exist." msgstr "El directori \"%s\" no existeix." #: lclstrconsts.rsfdfilealreadyexists 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 msgid "The file \"%s\" does not exist." msgstr "El fitxer \"%s\" no existeix." #: lclstrconsts.rsfdfilereadonly 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 msgid "The path \"%s\" does not exist." msgstr "El camí \"%s\" no existeix." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecciona directori" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(fitxer no trobat: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informació del fitxer" #: lclstrconsts.rsfind msgid "Find" msgstr "Busca" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Busca més" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols (columnes fixades) no poden ser>= ColCount (recompte de columnes)" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows (files fixades) no poden ser >= RowCount (recompte de files)" #: 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 "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.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "No existeix fitxer de la graella" #: 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.rshelpalreadyregistered 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 msgid "Help context %s not found." msgstr "Context d'ajuda %s no trobat." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Context d'ajuda %s no trobat en la base de dades %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found 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 msgid "Help Database %s%s%s not found" msgstr "Base de dades de l'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Paraula clau d'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Paraula clau d'ajuda %s%s%s no trobada en la base de dades %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "El node d'ajuda %s%s%s no té base de dades d'ajuda" #: lclstrconsts.rshelpnohelpfoundforsource 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 msgid "%s: Not registered" msgstr "No enregistrat" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector d'ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%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 msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s índex %d fora de límits 0-%d" #: lclstrconsts.rsindexoutofrange 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 msgid "Invalid Date : %s" msgstr "Data no vàlida: %s" #: lclstrconsts.rsinvaliddaterangehint 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 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 msgid "List index exceeds bounds (%d)" msgstr "L'índex de la llista excedeix els límits (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Cal que la llista sigui buida" #: 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.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s%sPolseu Ok per ignorar, tot arriscant de corrompre les dades.%sPolseu Cancel per interrompre el programa" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Previ" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propietat %s no existeix" #: 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 "Substitueix" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substitueix-ho tot" #: lclstrconsts.rsresourcenotfound 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.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 "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 msgid "Unsupported clipboard format: %s" msgstr "Format del portaretalls no suportat: %s" #: lclstrconsts.rswarningunreleaseddcsdump 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 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 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 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 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.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "El caràcter de la màscara \"%s\" no és vàlid!" #: 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.snomdiform msgid "No MDI form present." msgstr "No hi ha cap forma MDI present" #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hi ha rellotges disponibles" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: 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 "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.zh_TW.po���������������������������������������������������������0000644�0001750�0000144�00001237745�13424362040�017662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2013-04-17 19:07+0800\n" "Last-Translator: Kne luo\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: 繁體中文\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: 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 "" #: 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 msgid "Fo&llow links" msgstr "允許連結 (&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "預留空間 (&R)" #: 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 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.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 #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "加密 (&E)" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "隱藏 (&H)" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "唯讀 (&N)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" 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 #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "符號連結 (&S)" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "系統 (&Y)" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" 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 #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "當成文字檔 (&X):" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption 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 "計算驗證碼..." #: 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 "為每個檔案建立單獨的驗證碼檔案 (&R)" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "儲存驗證碼檔案到 (&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "校驗驗證碼..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "加入 (&D)" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "連線 (&O)" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "連線管理" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "連線到:" #: tfrmcopydlg.btnaddtoqueue.caption #, fuzzy #| msgid "Add To Queue" msgid "A&dd To Queue" msgstr "加入佇列" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "選項 (&P)" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "將目前設定儲存為預設值 (&V)" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "複製檔案" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新增佇列" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "佇列 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "佇列 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "佇列 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "佇列 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "佇列 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" 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 #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "編輯註解 (&D):" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" 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 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.acteditselectall.caption msgid "Select &All" msgstr "全選 (&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "復原" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "離開 (&X)" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "第一個不同點" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" 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 #, fuzzy #| msgid "Reload" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "左邊 (&L)" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "右邊 (&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "動作 (&A)" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" 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 #, fuzzy #| msgid "Parameters (each in a separate line):" 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 #, fuzzy #| msgid "&Find " 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 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 #, fuzzy 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 #, fuzzy 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 #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "另存新檔 (&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "另存新檔" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "儲存所有檔案 (&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" 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 #, fuzzy #| msgid "Cancel" msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大小寫視為相異 (&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" 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 "方向" #: 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 #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "覆寫已存在檔案 (&V)" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "解壓路徑 (&D):" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "解壓檔案遮罩 (&E):" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" 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.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "設定內容 (&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "設置到所有已選取的檔案 (&A)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "略過這個檔案 (&P)" #: 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 "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路徑:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "群組 (&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "上次存取:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "上次修改:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "上次修改狀態:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進制:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "擁有者 (&W)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "符號連結:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "類別:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "名稱" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "值" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "內容" #: tfrmfileunlock.btnclose.caption #, fuzzy 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 "取消 (&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 "" #: 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 "開始 (&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 #, fuzzy #| msgid "Save" 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 #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "開始日期 (&D):" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "結束日期 (&E):" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "最小容量 (&I):" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "最大容量 (&Z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "在檔案中尋找文字 (&T)" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" 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 #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "不早於 (&O):" #: 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 "搜尋部分檔名 (&H)" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" 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 "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "開始時間 (&T):" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "結束時間 (&M):" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "使用搜尋插件 (&U):" #: tfrmfinddlg.chkhex.caption msgid "Hexadecimal" 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.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 #, fuzzy #| msgid "Encoding:" 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 #, fuzzy #| msgid "&Start in directory" 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 "" #: 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 "選項" #: 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 #, fuzzy 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 #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "尋找 (&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "尋找" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "大小寫視為相異 (&A)" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" 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 #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "連結目標 (&D)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" 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 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 "合併器" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "另存新檔..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "項目" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "檔案名稱 (&F)" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下移 (&W)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下移" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "刪除" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" 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.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" 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 #, fuzzy 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 #, fuzzy #| msgid "Copy" 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 "複製檔案名稱到剪貼簿 (&F)" #: 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 #, fuzzy #| msgid "Delete" 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 "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" 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 #, fuzzy #| msgid "File &Associations..." 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 "" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "移到清單中第一個檔案" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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 "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "建立資料夾" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" 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.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 #, fuzzy #| msgid "Move" 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 #, fuzzy #| msgid "Re&name Tab" 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.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 "" #: 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 #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "選單" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "顯示/隱藏系統檔案 (&H)" #: 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.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 "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" 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 #, fuzzy #| msgid "View" 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 #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "離開" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "資料夾" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "終端機" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" 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 #, fuzzy 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 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 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 #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "選項 (&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "分頁 (&T)" #: tfrmmain.tbchangedir.caption #, fuzzy 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 #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "熱鍵" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "說明 (&H)" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "定義... (&D)" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: 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 #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "選擇預先定義好的類型 (&R) :" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "建立新資料夾" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" 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.rbbmp.caption #, fuzzy msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption #, fuzzy msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text #, fuzzy msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高度" #: tfrmmodview.tequality.text #, fuzzy msgid "80" msgstr "&20/80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "寬度" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmmultirename.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "載入 (&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "全部重置 (&A)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "多重命名工具" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "啟用 (&B)" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" 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.extension.caption msgid "[E] Extension" msgstr "[E] 副檔名" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "計數器" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "尋找 && 取代" #: tfrmmultirename.gblog.caption msgid "Log Result" 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 #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "間隔 (&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "檔案名稱 (&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "取代 (&P)" #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "初始編號 (&T)" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "寬度 (&W)" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] 計數器" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 日" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 日 (2位數)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 每週日數 (縮寫, 例: \"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 每週日數 (整字, 例: \"monday\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 位置 x 的字元" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 從 x 到 y 位置的字元" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 小時" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 小時 (2位數)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 分" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 分 (2位數)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 月" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 月 (2位數)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 月份名稱 (縮寫, 例: \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 月份名稱 (整字, 例: \"january\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] 名稱" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] x 位置的字元" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] 從 x 到 y 位置的字元" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "時間..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "副檔名..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名稱..." #: tfrmmultirename.miplugin.caption #, fuzzy msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "插件" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 秒" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 秒 (2位數)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 年 (2位數)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 年 (4位數)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 #, 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 msgid "File type to be opened: %s" msgstr "檔案類型已開啟: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "多重檔案名稱" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "多重網址" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "單一檔案名稱" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "單一網址" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "套用 (&A)" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: 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 #, fuzzy #| msgid "When files are &created, deleted or renamed" 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 #, fuzzy #| msgid "Always show tray icon" 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 #, fuzzy #| msgid "Drives blacklist" 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 "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" 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 #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "水平列 (&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "垂直列 (&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" 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 #, fuzzy #| msgid "Auto size column:" msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "自動大小欄位 (&Z):" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "指令行歷史記錄 (&M)" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "資料夾歷史記錄 (&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "檔案遮罩歷史記錄 (&F)" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "資料夾分頁" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "儲存設置 (&V)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "搜尋/取代歷史記錄 (&H)" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy 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 #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "程式資料夾 (可攜版) (&R)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "個人資料夾 (&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全部" #: 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 "全部" #: 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 "全部" #: 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 "全部" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "說明 (&H)" #: 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 "" #: 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.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.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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "使用漸層指示器 (&G)" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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 msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "非現用面板的亮度級別 (&B):" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "指示器背景色彩 (&D):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "指示器前景色彩 (&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "標記色彩 (&M):" #: 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 #, fuzzy 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "編輯器字型 (&E)" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "記錄器字型 (&L)" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "主要字型 (&F)" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "檢視器閱讀模式字型 (&B)" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "檢視器字型 (&V)" #: 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "平面按鈕 (&U)" #: 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.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.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.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.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 "" #: 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\" 等)" #: 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.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 標籤或圖片屬性等延伸的檔案詳細資料, 或是在搜尋和多重命名工具中使用" #: 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 等外部裝置" #: 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 "檢視器插件可允許顯示圖片,試算表,資料庫等檔案格式在檢視器" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "參數:" #: tfrmoptionstoolbar.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "複製按鈕 (&L)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "編輯熱鍵 (&K)" #: tfrmoptionstoolbar.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "插入新按鈕 (&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "其它..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "移除熱鍵 (&Y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平面按鈕 (&F)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "輸入指令參數 (每指令一行)" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "外觀" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "工具列大小 (&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "指令 (&D):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "參數 (&S):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "熱鍵:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "圖示 (&N):" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "圖示大小 (&Z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "指令 (&M):" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "參數 (&P):" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始路徑 (&H):" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "工具提示 (&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "檢視器閱讀模式" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "範例" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "閱讀模式背景色彩 (&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "閱讀模式字型色彩 (&F)" #: 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 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 "時間:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "選擇要插入的字元: (&S)" #: 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 msgid "Accessed:" msgstr "存取日期:" #: 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 "寫入" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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 #, 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "圖像" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "放大" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "縮小" #: tfrmviewer.btncuttuimage.hint #, fuzzy msgid "Crop" msgstr "裁剪" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "全螢幕" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "高亮" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "繪圖" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "紅眼" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "調整大小" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "復原" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "檢視器" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "投影片放映" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "鉛筆" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption #, fuzzy msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "高亮" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "繪圖" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "投影片放映" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "檢視" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: 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 "當檔案存在時" #: 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 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" 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 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 msgid "Copy (%d) %s" msgstr "複製 (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "速度 %s/秒" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "%s 級" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全部 (不限層次)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "僅目前資料夾" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "資料夾 %s 不存在!" #: ulng.rsfindfound msgid "Found: %d" msgstr "找到: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "儲存搜尋範本" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "範本名稱:" #: 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "可用 %s,容量 %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "動作" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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 #, fuzzy msgctxt "ulng.rsmnunew" msgid "New" msgstr "新增" #: ulng.rsmnunomedia msgid "No media available" msgstr "沒有可用的媒體" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "開啟" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "開啟..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "其它..." #: ulng.rsmnupackhere msgid "Pack here..." 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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "你不能複製/移動檔案【%s】到相同目錄" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "無法刪除資料夾【%s】" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "變更目錄到資料夾【%s】失敗!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "你確定要關閉所有非現用的分頁嗎?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "這個分頁【%s】已鎖定! 仍要關閉嗎?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "你確定要退出嗎?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "你確定要複製這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "你確定要複製所選擇的【%s】嗎?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾到資源回收筒嗎?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "你確定要刪除所選擇的【%s】嗎?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "你確定要刪除所選擇的【%s】到資源回收筒嗎?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "無法連接到伺服器:【%s】" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "無法複製檔案 %s 到 %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "目標已存在名稱為【%s】的資料夾。" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "日期 %s 不被支援" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "無法替【%s】設置屬性" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "無法替【%s】設置日期/時間" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "無法替【%s】設置擁有者/群組" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "檔案 %s 已變更, 是否要儲存?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "檔案 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "這個檔案【%s】的容量對於目標檔案系統來說太大!" #: ulng.rsmsgfolderexistsrwrt #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "資料夾 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "你確定要允許符號連結【%s】嗎?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無效的路徑" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "路徑 %s 包含禁用字元 " #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "這不是可用的插件!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "複製檔案 %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "解壓縮檔案 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "資訊: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "建立連結 %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "建立資料夾 %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "移動檔案 %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "壓縮檔案 %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "移除資料夾 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "建立符號連結 %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "測試檔案完整性 %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "移除【%s】(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "預先配置檔【%s】已存在。是否要覆蓋?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "你確定要重新命名/移動這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "你確定要抹除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "你確定要抹除所選擇的【%s】嗎?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "正在【%s】計算驗證碼" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "正在計算【%s】的驗證碼" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "正在計算" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "正在計算【%s】" #: ulng.rsopercombining msgid "Joining" msgstr "正在合併" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "正在【%s】合併檔案到【%s】" #: ulng.rsopercopying msgid "Copying" msgstr "正在複製" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "正在從【%s】複製到【%s】" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "正在複製【%s】到【%s】" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "正在建立資料夾" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "正在建立資料夾【%s】" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "正在刪除" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "正在【%s】刪除" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "正在刪除【%s】" #: ulng.rsoperexecuting msgid "Executing" msgstr "正在執行" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "正在執行【%s】" #: ulng.rsoperextracting msgid "Extracting" msgstr "正在解壓縮" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "正在從【%s】解壓縮到【%s】" #: ulng.rsoperfinished msgid "Finished" msgstr "已完成" #: ulng.rsoperlisting msgid "Listing" msgstr "正在列表" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "正在列表【%s】" #: ulng.rsopermoving msgid "Moving" msgstr "正在移動" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "正在從【%s】移動到【%s】" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "正在移動【%s】到【%s】" #: ulng.rsopernotstarted msgid "Not started" msgstr "尚未開始" #: ulng.rsoperpacking msgid "Packing" msgstr "正在壓縮" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "正在從【%s】壓縮到【%s】" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "正在【%s】設置內容" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "正在設置【%s】的內容" #: ulng.rsopersplitting msgid "Splitting" msgstr "正在分離" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "正在【%s】測試" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "正在測試【%s】" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "正在校驗驗證碼" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "正在【%s】校驗驗證碼" #: ulng.rsoperverifyingchecksumof #, 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 msgid "Wiping in \"%s\"" msgstr "正在【%s】抹除" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "快速鍵 %s 將登錄給 cm_Delete 使用,它會視這個設定的狀態而執行相反的刪除動作。" #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "快速鍵 %s 已被使用。" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "你要將它變更給 %s 使用嗎?" #: ulng.rsopthotkeysusedby 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.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 #, fuzzy 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "檔案: %d, 資料夾: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "無法變更【%s】的存取權限" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "選擇資料夾" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������doublecmd-0.9.8/language/doublecmd.zh_CN.po���������������������������������������������������������0000644�0001750�0000144�00001247042�13441172312�017617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.9.1 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-05-18 10:00+0800\n" "PO-Revision-Date: 2019-02-22 22:00+0800\n" "Last-Translator: iYoung <iyoung@126.com>\n" "Language-Team: Chinese <iyoung@126.com>\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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "正在比较... %d%%(按下 ESC 键可取消)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "右侧:删除 %d 个文件" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "找到文件:%d(相同:%d,不同:%d,仅左侧有:%d,仅右侧有:%d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "左侧到右侧:复制 %d 个文件,合计大小:%d 字节" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "右侧到左侧:复制 %d 个文件,合计大小:%d 字节" #: 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 msgid "Fo&llow links" msgstr "保留链接(&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "保留空间(&R)" #: 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 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.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 "取消(&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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "保存校验和文件为(&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "选择全部(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "撤销" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "退出(&X)" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "第一处差异" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左侧(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右侧(&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "全部保存(&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "区分大小写(&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "从插入处搜索(&C)" #: 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 "方向" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "设置属性(&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "设置所有选定的文件(&A)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "跳过此文件(&P)" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路径:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "组(&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "最后访问:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "最后修改:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "符号链接:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "类型:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "可写入" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "名称" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "区分大小写(&A)" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "将光标置于列表中的第一个文件" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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 "锁定在新标签中打开的文件夹" #: 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.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.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 "" #: 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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmmkdir.caption msgid "Create new directory" 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 "" #: 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.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高度" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "宽度" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "删除(&D)" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "编辑(&E)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "载入(&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "重命名(&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "全部重置(&A)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmmultirename.caption msgid "MultiRename" msgstr "批量重命名" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "启用(&B)" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] 扩展名" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "计数器" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "查找与替换" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] 计数器" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 日期" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 日期(二位数字)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 星期几(缩写,例如:\"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 星期几(完整,例如:\"monday\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 位于 x 处的字符" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 从位置 x 到 y 的字符" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 时" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 时(二位数字)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 分" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 分(二位数字)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 月份" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 月份(二位数字" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 月份名(缩写,例如:\"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 月份名(完整,例如:\"january\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] 名称" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] 位于 x 处的字符" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] 从位置 x 到 y 的字符" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "时间..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "扩展名..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名称..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "插件" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 秒" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 秒(二位数字)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 年(二位数字)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 年(四位数字)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "编辑名称..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "从文件加载名称..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "要打开的文件类型:%s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "多个文件名" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "多个 URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "单一文件名" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "单一 URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "应用(&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: 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 "固定列宽" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 msgid "Background 2:" msgstr "背景色 2:" #: tfrmoptionscustomcolumns.lblFileSystem.caption msgid "&File system:" msgstr "文件系统(&F):" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "配置详细信息视图(&V)" #: 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.lblfontname.caption msgid "Font:" msgstr "字体:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "大小:" #: 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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "帮助(&H)" #: 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 "从主面板添加" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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 "使用窗体光标(&F)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "使用渐变指示器(&G)" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "指示器背面颜色(&D):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "指示器前端颜色(&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "标记颜色(&M):" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "吉字节(&G):" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr "" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "控制台字体(&C)" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "编辑器字体(&E)" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "日志字体(&L)" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "主要字体(&F)" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "路径字体" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "搜索结果字体" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "查看器和书籍字体" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "查看器字体(&V)" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "扁平按钮(&U)" #: 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.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.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.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.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 "单击(打开文件夹,双击打开文件)" #: 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\" 等)" #: 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.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 标签或图片属性,或者在搜索和重命名工具中使用" #: 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 等外部设备中无法访问的磁盘。" #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "参数:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "克隆按钮(&L)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "编辑热键(&K)" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "插入新的按钮(&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "选择" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "其他..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "移除热键(&Y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "建议" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "包含 DC 根据按钮类型、命令和参数建议的工具提示" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "扁平按钮" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "使用命令报告错误" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "输入命令参数,每个命令参数单独一行。按 F1 查看参数帮助。" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "外观" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "工具栏大小(&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "命令(&D):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "参数(&S):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "帮助" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "热键:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "图标(&N):" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "图标大小(&Z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "命令(&M):" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "参数(&P):" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "开始路径(&S)" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "工具提示(&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "添加带有所有 DC 命令的工具栏" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "用于外部命令" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "用于内部命令" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "用于分隔符" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "用于子工具栏" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "备份..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "导出..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "当前工具栏..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "到工具栏文件 (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "到 TC .BAR 文件(保留现有文件)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "到 TC .BAR 文件(删除现有文件)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(保留现有文件)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(删除现有文件)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "顶部工具栏..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "保存工具栏备份" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "到工具栏文件 (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "到 TC .BAR 文件(保留现有文件)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "到 TC .BAR 文件(删除现有文件)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(保留现有文件)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(删除现有文件)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "作为最后的元素" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "导入..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "恢复工具栏备份" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "从工具栏文件 (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "从单个 TC .BAR 文件" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "从 TC 的 \"wincmd.ini\" 文件" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "搜索并替换..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "在所有上述中..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "在所有命令中..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "在所有图标名称中..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "在所有参数中..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "在所有的开始路径..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "书籍查看器模式" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "例如" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "书籍查看器背景颜色(&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "书籍查看器字体颜色(&F)" #: 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 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 "时间:" #: 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 msgid "Field" msgstr "字段" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "选择要插入的字符(&S):" #: 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 msgid "Created:" msgstr "创建日期:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "隐藏" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "访问:" #: 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 "可写入" #: 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 "" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" 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 "取消(&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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr "" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "图形" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "拉伸" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "拉伸图像" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "拉伸时仅放大" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "缩放" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "放大" #: tfrmviewer.actzoomout.caption msgid "Zoom Out" msgstr "缩小" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "裁剪" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "全屏显示" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "高亮" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "画图" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "红眼" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "调整大小" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "撤销" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "查看器" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "幻灯显示" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "画笔" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "高亮" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "画图" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "幻灯显示" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "视图" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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)" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "复制日期/时间(&A)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "在后台工作(单独连接)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 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" msgstr "" "无法找到此文件,并有助于验证文件的最终组合:\n" "%s\n" "\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 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 msgid "Copy (%d) %s" msgstr "复制 (%d) %s" #: 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 "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " 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.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.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 msgid "Speed %s/s" msgstr "速度 %s/秒" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "行 %s 中找不到 \"]\"" #: ulng.rsextscommandwithnoext 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 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.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 msgid "%s level(s)" msgstr "%s 级" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全部(不限深度)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "仅当前文件夹" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "文件夹 %s 不存在!" #: ulng.rsfindfound msgid "Found: %d" msgstr "找到:%d 个" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "保存搜索模板" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "模板名称:" #: 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.rsfreemsg msgid "%s of %s free" msgstr "可用 %s ,总共 %s" #: ulng.rsfreemsgshort 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 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.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?\n" msgstr "" "警告!在还原 .hotlist 备份文件时,将以导入的列表替换清除现有列表。\n" "\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.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?\n" msgstr "" "已存在具有该名称的安装程序。\n" "是否要覆盖它?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "确定要还原默认值吗?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "确实要删除安装程序 \"%s\" 吗?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "\"%s\" 安装程序已被修改。\n" "需要立即保存吗?\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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "操作" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<默认>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "八进制" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "结果文件的 CRC32 错误:\n" "\"%s\"\n" "\n" "是否保留造成损坏的文件?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "您不能将文件 \"%s\" 复制/移动到它自身!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "无法删除文件夹 %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "无法覆盖使用不是文件夹的 \"%s\" 覆盖文件夹 \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "将当前目录更改为 \"%s\" 失败!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "确定要移除所有非活动标签吗?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "此标签页 (%s) 已锁定!仍要关闭吗?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "确认参数" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "您确定要退出吗?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "确定要复制 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "确定要复制选中的 \"%s\" 吗?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "确定婪删除 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "确定要删除 %d 个选中的文件/文件夹到回收站吗?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "确定要删除选中的 \"%s\" 吗?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "确定要删除选中的文件 \"%s\" 到回收站吗?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "无法连接到服务器:\"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "无法将文件 %s 复制到 %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "已经有一个名为 \"%s\" 的文件夹。" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "不支持日期 %s" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "无法设置 \"%s\" 的属性" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "无法设置 \"%s\" 的日期/时间" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "无法设置 \"%s\" 的所有者/组" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "这将加载收藏夹标签:\"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "将当前标签保存在现有的收藏夹标签条目上" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "文件 %s 已修改,是否保存?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s 字节,%s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "覆盖:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "文件 %s 已存在,是否覆盖?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "用文件:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "目标名称长度 (%d) 超过 %d 个字符!\n" "%s\n" "大多数程序将无法使用这么长的名称访问文件/文件夹!\n" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr " \"%s\" 的文件大小对于目标文件系统来说太大了!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "文件夹 %s 已存在,覆盖吗?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "允许符号链接 \"%s\" 吗?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "选择要导入的文本格式" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "保存的条目总数:%d\n" "\n" "备份文件名:%s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "导出的条目总数:" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "您想要删除子菜单 [%s] 内的所有元素吗?\n" "回答 <否> 将只删除菜单分隔符,但会将子元素保存在子菜单内。\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "输入希望保存常用文件夹列表的位置和文件名" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "文件的结果文件长度不正确: \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "请插入下一个磁盘或类似东西。\n" "\n" "它允许编写入这个文件:\n" "\"%s\"\n" "\n" "还要写入的字节数:%d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "无效的十六进制数:\"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "路径无效" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "路径 %s 包含禁止的字符。" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "这不是一个有效的插件!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "复制文件 %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "提取文件 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "信息:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "创建硬链接 %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "创建文件夹 %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "移动文件 %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "压缩到文件 %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "程序关闭" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "程序启动" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "移除文件夹 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "创建符号链接 %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "测试文件完整性 %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "擦除文件 %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "删除 %s(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "\"%s\" 已存在。覆盖吗?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "执行命令出现问题 (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "重命名/移动 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "选择要添加扩展名 \"%s\" 的文件类型" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "错误!找不到 TC 配置文件:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "错误!找不到 TC 配置可执行文件:\n" "%s\n" #: 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.\n" msgstr "" "错误!TC 仍在运行,执行此操作应该关闭它。\n" "按 <确定> 按钮关闭并或按 <取消> 按钮取消。\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "错误!无法找到想要的 TC 工具栏输出文件夹:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "输入要保存的 TC 工具栏文件的位置和文件名" #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "已保存!\n" "工具栏文件名:%s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "擦除 %d 个选择的文件/文件夹?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "擦除选中的文件 \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "使用" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "密码错误!\n" "请重新输入!\n" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "自动重命名为 \"name (1).ext\"、\"name (2).ext\" 等等吗?" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "不修改;大写;小写;首字大写;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "警告,重名!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "正在 \"%s\" 中计算校验和" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "正在计算 \"%s\" 的检验和" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "正在计算" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "正在计算 \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "正在合并" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "正在 \"%s\" 中合并文件到 \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "正在复制" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 复制到 \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "正在复制 \"%s\" 到 \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "正在创建文件夹" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "正在创建文件夹 \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "正在删除" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "正在 \"%s\" 中删除" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "正在删除 \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "正在执行" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "正在执行 \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "正在提取" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 提取到 \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "已结束" #: ulng.rsoperlisting msgid "Listing" msgstr "列表" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "正在列表 \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "正在移动" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 移动到 \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 移动到 \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "未开始" #: ulng.rsoperpacking msgid "Packing" msgstr "正在压缩" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 压缩到 \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "正在 \"%s\" 中设置属性" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "正在设置 \"%s\" 的属性" #: ulng.rsopersplitting msgid "Splitting" msgstr "正在分割" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "正在 \"%s\" 中测试" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "正在测试 \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "正在验证校验和" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "正在验证 \"%s\" 中的校验和" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "正在擦除 \"%s\" 中内容" #: ulng.rsoperwipingsomething 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 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 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 msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "已完成从文件 \"%s\" 中导入 %d 个元素。" #: 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "cm_Delete 的快捷键 %s 将被注册,因此可用于反转此设置。" #: ulng.rsopthotkeysaddhotkey 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 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 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 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.rsopthotkeyscontrols msgctxt "ulng.rsopthotkeysparameters" msgid "Controls" msgstr "控件" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "设置删除文件的快捷键" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned 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 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 msgid "Shortcut %s is already used." msgstr "快捷键 %s 已被使用。" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "是否将其更改为 %s?" #: ulng.rsopthotkeysusedby 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.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 msgid "Fonts" msgstr "字体" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "文本高亮" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "热键" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "选项已在 \"%s\" 中更改\n" "\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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "\"%s\" 已经存在!" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "已完成从文件 \"%s\" 中导入 %d 个元素。" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "找不到插件 \"%s\"!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "单位 \"%s\" 未找到(字段 \"%s\")!" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "文件:%d 个,文件夹:%d 个" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "无法更改 \"%s\" 的访问权限" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "无法更改 \"%s\" 的所有者" #: ulng.rspropsfile msgid "File" msgstr "文件" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" 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.\n" msgstr "" "使用 DSX 插件的文件搜索已经在进行中。\n" "我们需要在它完成之后才能开始一个新的项目。\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.\n" msgstr "" "使用 WDX 插件的文件搜索已经在进行中。\n" "我们需要在它完成之后才能开始一个新的项目。\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "选择文件夹" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "选择窗口" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "替换次数:%d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "没有发生替换。" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.uk.po������������������������������������������������������������0000644�0001750�0000144�00001533735�13424362040�017244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.9.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Порівняння... %d%% (ESC щоб скасувати)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Справа: Видалити %d файл(и) " #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Знайдено файлів: %d (Однакових: %d, Різних: %d, Унікальних зліва: %d, Унікальних справа: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Справа на ліво: Копіювати %d файлів, загальним розміром: %d байт" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "Перейти за поси&ланнями" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Зберегти файл(и) контрольних сум &як:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmchecksumverify.caption #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "Виділити в&се" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Вернути" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ви&хід" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Перша відмінність" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "З&ліва" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Сп&рава" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 #| msgid "&Find " 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 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.." msgid "Save &As..." msgstr "Зберегти &як.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Зберегти як" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Зберегти все" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.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 "Напрямок" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "В&становити властивості" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Встановити для &всіх вибраних файлів" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Шлях:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Гру&па" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Останній доступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Остання зміна:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Розмір:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. посилання для:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" 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.actbenchmark.caption msgid "&Benchmark" msgstr "&Тест продуктивності" #: tfrmmain.actbriefview.caption #| msgid "Brief" 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.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 "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 "File &Associations..." 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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Помістити курсор на перший у списку файл" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 #| msgid "Directory hotlist" 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 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 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 "&Options" 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Висота" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Р&едагувати" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Завантажити" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Перейменувати" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Відн&овити все" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "З&берегти" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Групове перейменування" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] Розширення" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Лічильник" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Знайти &та замінити" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Лічильник" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] День" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] День (2 цифри)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] День тижня (коротко, \"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] День тижня (довге, \"monday\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Символ на позиції x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Символи між позиціями x і y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Година" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Години (2 цифри)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Хвилина" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Хвилини (2 цифри)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Місяць" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Місяць (2 цифри)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Назва місяця (коротко, \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Назва місяця (довга, \"грудень\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ім’я" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Символ на позиції x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Символи між позиціями x і y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Час..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Розширення..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ім’я..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Плагін" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунди (2 цифри)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Рік (2 цифри)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Рік (4 цифри)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "&Редагувати імена..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "&Завантажити імена з файлу..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "Відкривати тип файлу: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Кілька імен файлів" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Кілька посилань" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Одиночне ім’я" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Одиночне посилання" #: tfrmopenwith.misingleurl.hint 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.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 "Стала ширниа колонок" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" 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 "Додавання з головної панелі:" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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 msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Рівень &яскравості неактивної панелі" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Колір віл&ьного місця:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Колір заповненн&я:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гігабайт:" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Шрифт &консолі" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Шрифт &редактора" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Шрифт &логу" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Основний &шрифт" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Поточний &шлях" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Результати пошуку" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Шрифт переглядача &книг" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" 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 #| msgid "Show &button bar" 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.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.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 #| msgid "View log file content" 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.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.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 "Одним клацанням відкривати папки і подвійним файли" #: 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\", та інші)" #: 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.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 теги або атрибути зображення, або використовувати їх для пошуку або у інструменті масового перейменування." #: 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, тощо." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "Параметри:" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "К&лонувати кнопку" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "Ви&далити кнопку" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Реда&гувати" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "В&ставити нову кнопку" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Виділення" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Інше..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Видалит&и гар.кл." #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Пропозиції" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC буде пропонувати підказки на основі типу кнопки, команди і параметрів" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "П&ласкі кнопки" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Звітувати про помилки з командами" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Введіть параметри команди, кожен в окремому рядку. Натисніть F1, щоб отримати довідку по параметрах." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Вигляд кнопок" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Розмір п&анелі:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Коман&да:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметр&и:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Довідка" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Гаряча клавіша:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Іко&нка:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Р&озмір іконки:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Коман&да:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Параметри:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Шля&х запуску:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Під&казка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Додати панель інструментів зі всіма командами DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для зовнішньої команди" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для внутрішньої команди" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для роздільника" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для підпанелі інструментів" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Резервне копіювання..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Поточна панель інстументів..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Головна панель інструментів..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Зберегти резервну копію Панелі інструментів" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Імпортувати..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Відновити з резервної копії Панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "з файлу Панель інструментів (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "з одного файлу ТС .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "з файлу \"wincmd.ini\" від ТС..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Знайти і замінити..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "в усіх усіх вищезгаданих..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "у всіх командах..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "у всіх іменах іконок..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "у всіх параметрах..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "у всіх шляхах запуску..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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 #| msgid "Show tool tip" 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Режим перегляду книг" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Приклад" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Колір ф&ону в переглядачі книг" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" 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 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 "Час:" #: 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 msgid "Field" msgstr "Поле" #: 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 (будь-яке правило)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "До&відка" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Доступний:" #: 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 "Запис" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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.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.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.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перезавантажити" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перезавантажити поточний файл" #: tfrmviewer.actrotate180.caption #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Повернути на 180" #: tfrmviewer.actrotate180.hint #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Повернути на 180" #: tfrmviewer.actrotate270.caption #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Повернути на 270" #: tfrmviewer.actrotate270.hint #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Повернути на 270" #: tfrmviewer.actrotate90.caption #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Повернути на 90" #: tfrmviewer.actrotate90.hint #| msgid "Rotate 90" 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графіка" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "Збільшення" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Збільшити" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Редагувати" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Малювати" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Червоні очі" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Змінити розмір" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Вернути" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Переглядач" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд-шоу" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Ручка" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Редагувати" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Малювати" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд-шоу" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Перегляд" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "&Пауза для всіх" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "Якщо файл існує" #: 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 #, 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?\n" msgstr "" "Цей файл не може бути знайдений проте може допомогти, щоб перевірити остаточну комбінацію файлів:\n" "%s\n" "\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 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 msgid "Copy (%d) %s" msgstr "Копіювати (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "Видалено:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Ці два файли ідентичні!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Співпадінь:" #: ulng.rsdiffmodifies msgid " Modifies: " 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Скасувати" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Порівняти" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Продов&жити" #: ulng.rsdlgbuttoncopyinto #| msgid "Copy &Into" msgid "&Merge" msgstr "&Об'єднати в" #: ulng.rsdlgbuttoncopyintoall #| msgid "Copy Into &All" 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 msgid "Speed %s/s" msgstr "Швидкість %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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;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 "Підказки 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.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 msgid "%s level(s)" msgstr "%s рівень(і)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Всюди (необмежена глибина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Тільки поточному каталогозі" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Каталог %s не існує!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Знайдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Зберегти шаблон пошуку" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ім'я шаблону" #: ulng.rsfindscanned 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.rsfreemsg msgid "%s of %s free" msgstr "Вільно %s з %s" #: ulng.rsfreemsgshort 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 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.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?\n" msgstr "" "Увага! При відновленні файлу .hotlist з резервної копії, буде стерто існуючий список.\n" "\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.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?\n" msgstr "" "Файл з такою назвою вже існує.\n" "Хочете переписати його?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Ви впевнені, що хочете відновити значення за замовчуванням?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Ви впевнені, що хочете видалити набір \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Файл \"%s\" був змінений.\n" "Хочете зберегти його зараз?\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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команди" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<За замовчуванням>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Восьмирічний" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Копіювати в буфер імена з UNC-шляхом" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Не збігається контрольна сума для файлу:\n" "\"%s\"\n" "\n" "Бажаєте зберегти пошкоджений файл в будь-якому разі?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ви не можете скопіювати/перемістити файл \"%s\" в самого себе!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Не вдається видалити каталог %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Неможливо перезаписати каталог \"%s\" файлом, не є каталогом \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Перехід в каталог [%s] не вдався!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Видалити всі неактивні вкладки?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Закладка (%s) заблокована. Закрити?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Підтвердження параметра" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ви впевнені, що хочете вийти?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Копіювати %d обраних файлів/каталогів?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Копіювати виділене \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Видалити %d обраних файлів/каталогів?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Видалити %d обраних файлів/каталогів у смітник?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Видалити вибрані \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Видалити вибрані \"%s\" в смітник" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Неможливо з'єднатися з серевером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Помилка при копіюванні файлу %s в %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Там вже існує каталог з ім'ям \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Дата %s не підтримується" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Неможливо встановити атрибути для \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Неможливо встановити дату/час для \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Не вдається встановити права/групу для \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Будуть завантажені обрані вкладки: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Зберегти поточні вкладки поверх існуючих обраних вкладок" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файл %s змінено, зберегти?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Перезаписати:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Файл %s існує, перезаписати?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "З файлу:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "Довжина цільового шляху (%d) перевищує %d символів!\n" "%s\n" "Більшість програм не зможуть звернутися до файлу/каталогу з таким довгим ім'ям!\n" #: ulng.rsmsgfilereadonly 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" "Продовжити?\n" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Розмір файлу \"%s\" є занадто великим для цільової файлової системи!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "Тека %s існує, перезаписати?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Прямувати за посиланням \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Виберіть текстовий формат для імпорту" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Всього об’єктів збережено: %d\n" "\n" "Ім’я резервного файла: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всього записів експортовано:" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Ви хочете видалити всі елементи всередині підменю [%s]?\n" "Відповідь НІ видалить тільки роздільники і залишить елементи всередині підменю.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Введіть розташування і ім’я файла, куди зберегти файл Обраних каталогів" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Невірна довжина файла : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Будь ласка, вставте наступний диск чи щось подібне.\n" "\n" "Це дозволить запис цього файла:\n" "\"%s\"\n" "\n" "Кількість вільних байт для запису:%d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "Неприпустиме шістнадцяткове число: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некоректний шлях" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Шлях %s містить недопустимі символи." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Цей плагін недопустимий!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Копіювання файлу %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Розпакування файлу %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Інформація: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Створення посилання %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Створення каталогу %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Переміщення файлу %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Упакування в файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Завершення програми" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Запуск програми" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Видалення каталогу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Виконано: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Створення символьного посилання %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Перевірка цілістності файлу %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Знищення файлу %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Видалити %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" вже існує. Перезаписати?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Проблема виконання команди (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Перейменувати/перемістити %d вибраних файлів/каталогів?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Виберіть тип файлу до якого треба додати розширення \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Помилка! Відсутній файл конфігурації ТС:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Помилка! Відсутній виконуваний файл ТС:\n" "%s\n" #: 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.\n" msgstr "" "Помилка! ТС має бути закритий для цієї операції.\n" "Закрийте його і натисніть Гаразд або натисніть Скасувати.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Помилка! Відсутня необхідна тека для Панелі інструментів ТС:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Збережено!\n" "Назва панелі інструментів: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Стерти %d обраних файлів/каталогів?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Стерти обраний \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "з" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Неправильний пароль!\n" "Будь ласка, спробуйте ще раз!\n" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Автоматично перейменовувати в \"name (1).ext\", \"name (2).ext\" і т.д.?" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без змін;ПРОПИСНІ;рядкові;З Прописної;Кожне Слово З Прописної;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Увага, однакові імена!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Розрахунок контрольної суми в \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Розрахунок контрольної суми \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Підрахунок" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Розрахунок \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "З’єднання" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Додавання файлів in \"%s\" to \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копіювання" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Копіювання з \"%s\" до \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Копіювання \"%s\" до \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Створення каталогу" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Створення каталогу \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Видалення" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Видалення в \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Видалення \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Розпакування" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Виконання \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Розпакування" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Видобування з \"%s\" до \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Створення списку" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Складання списку \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Переміщення" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Переміщення з \"%s\" до \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Переміщення \"%s\" до \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упакування" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Упакування з \"%s\" до \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Встановлення властивостей в \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Встановлення властивостей на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Розрізання" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Тестування в \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Тестування \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Перевірка контрольної суми" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Перевірка контрольної суми в \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Стирання в \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Буде зареєстровано гар.клавішу %s для cm_Delete , таким чином вона буде використана для реверсінгу налаштування." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Гаряча клавіша %s вже використовується для %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Змінити на %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Опції \"%s\" змінені.\n" "\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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "\"%s\" вже існує!" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "Плагін \"%s\" не знайден!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "рег. вираз." #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Значення \"%s\" поля \"%s\" не знайдено!" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлів: %d, папок: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Не можу змінити права доступу для \"%s\"" #: ulng.rspropserrchown 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.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.\n" msgstr "" "Пошук файлів з DSX-плагіном вже запущений.\n" "Необхідно завершити його, перш ніж почати новий.\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.\n" msgstr "" "Пошук файлів з WDX-плагіном вже запущений.\n" "Необхідно завершити його, перш ніж почати новий.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Виберіть каталог" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Виберіть вікно" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 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.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, with ending delimiter" 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.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 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 msgid "Number of replacement: %d" msgstr "Кількість замін: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Заміна не відбулася." �����������������������������������doublecmd-0.9.8/language/doublecmd.tr.po������������������������������������������������������������0000644�0001750�0000144�00001172357�13424362040�017251� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.46 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-20 12:40+0300\n" "PO-Revision-Date: 2013-08-27 11:34+0100\n" "Last-Translator: Ahmet Çağlar <ahmetcaglar111@hotmail.com>\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: Türk\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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" msgid "Fo&llow links" msgstr "Bağlantıları İzle" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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" 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.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 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.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Sağlama toplamı dosya(lar)ını kaydet:" #: 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..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Tümünü &Seç" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Geri Al" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ç&ıkış" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "Sol" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "Sağ" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "&Tümünü Kaydet" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "" #: 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.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" #: 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.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Kapat" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: 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.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Son erişim" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Son değişiklik:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Son durum değişikliği:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Boyutu:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sembolik link için:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Yaz" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Adı" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Büyük/küçük harf duyarlı" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Listedeki ilk öğeye ekleme noktasını(imleç) ayarla" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Listedeki son madde için imleci ayarlayın" #: 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.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.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.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.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.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 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 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 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.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Yeni dizin oluştur" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Yükseklik" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Genişlik" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Sil" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Düzenle" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Yükle" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Tümünü geri yükle" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Kaydet" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Çoklu yeniden adlandırma" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Etkinleştir" #: 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.extension.caption msgid "[E] Extension" msgstr "[E]Uzantı" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Sayaç" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Bul ve Yerine Koy" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Günlük sonuç" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Yöntem sayma" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Gün" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Gün (2 basamaklı)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Haftanın günü (kısa, Örneğin, \"Prtesi\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Haftanın günü (uzun, Örneğin, \"Pazartesi\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex]Karakter konumu x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y]Karakter konumu x ile y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h]Saat" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Saat (2 basamaklı)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Dakika" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Dakika (2 basamaklı)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Ay" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Ay (2 basamaklı)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ay Adı (kısa, Örneğin, \"Şbat\")" #: tfrmmultirename.mimonth3.caption #, fuzzy #| msgid "[MMMM] Month name (long, e.g. \"january\")" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ay Adı (Uzun, Örneğin, \"Şubat\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Adı" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx]Karakter konumu x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Karakter konumu x ile y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tarih..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Uzantı..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Adı..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Eklenti" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[S] Saniye " #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Saniye (2 basamaklı)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Yıl (2 basamaklı)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Yıl (4 basamaklı)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "&Yardım" #: 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 "" #: 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.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.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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 "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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "" #: 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Yassı düğmeler" #: 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.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.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.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.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 "" #: 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)" #: 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.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ı" #: 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" #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Yeni düğme ekle" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Görünüm" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Değişkenler:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Değişkenler" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Araç İpucu" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Kitap Modu Görünümü" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Örnek" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "İptal" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Kapat" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Yardım" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Giriş:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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 #, 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Teknik çizim" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Yakınlaştır" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Uzaklaştır" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Vurgula" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Boya" #: tfrmviewer.btnprevgifframe.caption msgid "<||" 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.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Geri al" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Göster" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Resimleri otomatik olarak sırayla göster(Slayt Gösterisi)" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Kalem" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Vurgula" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Boya" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Resimleri otomatik olarak sırayla göster(Slayt Gösterisi)" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Göster" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: 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.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.miprint.caption msgid "Print..." msgstr "Yazdır..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Tümünü Seç" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: 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" #: 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 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" 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 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 msgid "Copy (%d) %s" msgstr "Kopyala (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Hız %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "Dizin %s mevcut değil!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s %s içermez" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Eylemler" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Çıkmak istediğinizden emin misiniz?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Seçilen %d dosyalar/dizinleri kopyala?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopyalanacakları\"%s\"seç?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Seçili %d dosyaları/dizinleri sil ?" #: ulng.rsmsgdelfldrt #, 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 msgid "Delete selected \"%s\"?" msgstr "Seçilenleri sil \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Seçilenleri sil\"%s\" çöp kutusuna at?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Sunucuya bağlanamıyor \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Dosya %s kopyalanamıyor %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, fuzzy,badformat msgid "There already exists a directory named \"%s\"." msgstr "Orada zaten o adda bir dizin var" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Tarih %s desteklenmiyor" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Öznitelikleri ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Tarih/saat ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Dosya %s değişikliğini,kaydet?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Dosya %s zaten var üzerine yazılsın mı?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Klasör %s zaten var, üzerine yazılsın mı?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Sembolik bağlantıyı izle\"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Dosyayı kopyala %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Dosya ayıkla %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Bilgi" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Bağlantı oluştur %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Dizin oluştur %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Dosyayı Taşı %s" #: ulng.rsmsglogpack 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 msgid "Remove directory %s" msgstr "Dizini Kaldır %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Bitmiş:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Sembolik bağlantı oluştur %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Dosya bütünlüğünü sına %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir 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 #, fuzzy,badformat msgid "Can not delete file %s" msgstr "Dosya silinemiyor" #: 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 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 msgid "&Delete %s" msgstr "&Sil %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Ön ayar \"%s\" zaten var.Üzerine yazılsın mı?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Seçilen %d dosya(ları)/Dizinleri/Yeniden adlandır?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Tam sil %d Seçilen dosya/dizinler?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Tam silme Seçili \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Hesaplama" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sil" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "Bitmiş" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "Başlatılmadı" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 #, fuzzy,badformat #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Kısayol %s zaten kullanılıyor %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Bunu değiştir %s?" #: ulng.rsopthotkeysusedby #, 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Erişim haklarını değiştirmek mümkün değil \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Bir dizin seçin" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.sr@latin.po������������������������������������������������������0000644�0001750�0000144�00001235555�13424362040�020400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Upoređujem... %d%% (ESC za otkazivanje)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Sa leva na desno: Umnoži %d datoteka, ukupne veličine %d bajta" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "S&ledi veze" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Čuvaj slobodan prostor" #: 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 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.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 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.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Sačuvaj zbirnu(e) proveru(e) u:" #: 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..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Označi &sve" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Izlaz" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Sač&uvaj sve" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "_Sačuvaj sve" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Podesite svojstva" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Dodeli svim odabranim datotekama" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Preskoči& ovu datoteku " #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Sadrži:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Putanja:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Udruženje" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Poslednji pristup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Poslednja izmena:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Poslednja izmena stanja:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Veza ka:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "O&setljivo na veličinu slova" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi pokazivač na prvu datoteku spiska" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi pokazivač na poslednju datoteku spiska" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Napravi novu fasciklu" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Visina" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zatvori&" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Izbriši&" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Uredi&" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Učitaj&" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Pre&imenuj" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Poništi sve&" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Sačuvaj&" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Višestruko preimenovanje" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Omogući&" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] nastavak" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Brojač" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Nađi i zameni" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Izlazi dnevnika" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Brojač" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] dan" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] dan (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] dan u nedelji (kratko, npr. „pon“)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] dan u nedelji (potpuno, npr. „ponedeljak“)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] znak na položaju x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] znaci od položaja x do položaja y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] čas" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Čas (2 znaka)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (2 znaka)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mesec" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesec (2 znaka)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ime meseca (kratko, npr., „jan“)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ime meseca (puno, npr., „januar“)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ime" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] znak na položaju x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] znaci od položaja x do položaja y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Vreme..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Nastavak..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ime..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Priključak" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (2 znaka)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Godina (2 znaka)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Godina (4 znaka)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Višestruke adrese" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jedno ime datoteke" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jedna adresa" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Pomoć" #: 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:" #: 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.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.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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Koristi ukazivač sa prelivom" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazivač slobodnog mesta na uređajima" #: 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 msgid "&Brightness level of inactive panel" msgstr "Osvetljenje neradne kartice" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Pozadinska boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Čeona boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Boja označavanja&:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Slovni lik uređivača" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Slovni lik dnevnika&" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Glavni slovni lik&" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Slovni lik preglednika& knjiga" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Slovni lik preglednika&" #: 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Ravna dugmad&" #: 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.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.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.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.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 "" #: 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.)" #: 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.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" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Dugme potpuno istih umnožaka" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi &prečicu" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Unesi novo dugme" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Drugo..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Ukloni &prečicu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Prikaz" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Veličina &trake:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Naredba:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Prečica:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ikonica&:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veličina& ikonice:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Naredba&:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Odrednice&:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Napomena:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta dugmeta" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Način prikaza preglednika knjiga" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Primer" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Pozadinska boja u pregledniku knjiga" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Slovni lik u pregledniku knjiga" #: 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Izaberite znakove za unos:" #: 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 msgid "Accessed:" msgstr "Pristupano:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklađene fascikle" #: 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 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Priključci" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Udalji" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Oboji" #: tfrmviewer.btnprevgifframe.caption msgid "<||" 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.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Vrati" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Preglednik" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretne slike" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Olovka" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Bojenje" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretni prikaz" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Pregled" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: 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.miprint.caption msgid "Print..." msgstr "Štampaj..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: 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" #: 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 #, 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?\n" 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?\n" #: 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 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 msgid "Copy (%d) %s" msgstr "Umnoži (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Brzina %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "Fascikla %s ne postoji. " #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Slobodno je %s od %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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?\n" #: 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Radnje" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 #, 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?\n" msgstr "" "Izlazna datoteka CRC32 je neispravna:\n" "„%s“\n" "\n" "Da li želite da zadržite neispravnu datoteku?\n" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Ne možete izbrisati %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite napustiti program?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Da li da umnožim %d odabranih datoteka/fascikli?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Da umnožim odabrano „%s“?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Da li da izbrišem %d odabranih datoteka/fascikli?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Da li da premestim %d odabrane datoteke/fascikle u smeće?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Da li da izbrišem odabrani „%s“?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Da li da premestim odabrano „%s“ u smeće?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Nisam uspeo da se povežem sa služiteljem „%s“" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nisam uspeo da umnožim datoteku %s u %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Datoteka pod imenom „%s“ već postoji." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s nije podržan" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nisam uspeo da postavim svojstva datoteci „%s“" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nisam uspeo da postavim datum i vreme datoteci „%s“" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nisam uspeo da postavim vlasnika/udruženje datoteci %s“" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Datoteka %s je izmenjena. Da li da je sačuvam?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajta, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt 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 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Datoteka %s postoji. Da li da je prepišem?" #: ulng.rsmsgfollowsymlink 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 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 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 #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Ukupan broj sačuvanih stavki: %d\n" "\n" "Ime ostave: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Ukupna broj izvezenih stavki: " #: ulng.rsmsghotdirwhattodelete #, 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.\n" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Netačna je izlazna dužina datoteke : „%s“" #: ulng.rsmsginsertnextdisk #, 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\n" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neispravna putanja" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Umnoži datoteku %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Raspakujem datoteku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podaci: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Napravi fasciklu %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Premesti datoteku %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Putanja do datoteke %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Ukloni fasciklu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Urađeno: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Proveri ispravnost datoteke %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Izbriši potpuno datoteku %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Obriši %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Datoteka „%s“ već postoji. Da je prepišem?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Preimenuj/premesti %d označenih datoteka/fascikli?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Da li da potpuno izbrišem %d označenih datoteka/fascikli?" #: ulng.rsmsgwipesel 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!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Računam zbirnu proveru u „%s“" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Računam zbirnu proveru „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Računam" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Računam „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Spajam" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spajam datoteke iz „%s“ na „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Umnožavam" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Umnožavam iz „%s“ u „%s“ " #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Umnožavam „%s“ na „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Stvaram fasciklu" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Stvaram fasciklu „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brišem" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Brišem iz „%s“" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Brišem „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvršavam" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Izvršavam „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Izdvajam" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Listam „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Premeštam" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Premeštam iz „%s“ u „%s“" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Sažimam iz „%s“ u „%s“" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Postavljam svojstva u „%s“" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Postavljam svojstva datoteci „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Deljenje" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Probam u „%s“" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Probam „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Proveravam zbir" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Proveravam zbir u „%s“" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Brisanje u „%s“" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 #, 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 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 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 #, 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 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 msgid "Shortcut %s is already used." msgstr "Prečica %s već postoji." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Da li je dodeliti %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Datoteka: %d, fascikli: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nisam uspeo da promenim prava pristupa za „%s“" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izaberite fasciklu" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.sr.po������������������������������������������������������������0000644�0001750�0000144�00001327464�13424362040�017251� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-01-06 18:04+0100\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 1.5.4\n" "X-Language: sr_RS\n" "X-Source-Language: C\n" "X-Native-Language: српски\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Упоређујем... %d%% (ЕСЦ за отказивање)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Пронађено је датотека: %d (истоветних: %d, различитих: %d, јединствених лево: %d, јединствених десно: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Са лева на десно: Умножи %d датотека, укупне величине %d бајта" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "С&леди везе" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 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 "Израчунај збирну проверу" #: 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.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Сачувај збирну(е) проверу(е) у:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ново заказивање" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Заказано 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Заказано 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Заказано 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Заказано 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy 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 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.acteditselectall.caption msgid "Select &All" msgstr "Означи &све" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Поништи" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Излаз" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Прва разлика" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Лево" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Десно" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 #, fuzzy #| msgid "&Find " 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 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 #, fuzzy 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 #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Сачувај &као..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Сачувај као" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Сач&увај све" #: tfrmeditor.actsaveall.hint msgid "Save All" 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 #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" 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 "Смер" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Подесите својства" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Додели свим одабраним датотекама" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путања:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Удружење" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последњи приступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последња измена:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Величина:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Веза ка:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Врста:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Писање" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Вредност" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Прикљуци" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Својства" #: tfrmfileunlock.btnclose.caption #, fuzzy 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 #, fuzzy 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 #, fuzzy 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.cbcasesens.caption msgid "C&ase sensitive" 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 #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Уклони&" #: tfrmlinker.spbtnrem.hint #, fuzzy 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.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" 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 #, fuzzy 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.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 "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 #, fuzzy #| msgid "File &Associations..." 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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Постави показивач на прву датотеку списка" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 #, fuzzy #| msgid "Directory hotlist" 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 #, fuzzy 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 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 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 #, fuzzy #| msgid "&Options" 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 #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помоћ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Пречица" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Додај&" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Висина" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Затвори&" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Избриши&" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Уреди&" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Учитај&" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Пре&именуј" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Поништи све&" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Сачувај&" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Вишеструко преименовање" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] наставак" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Бројач" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Нађи и замени" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Бројач" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] дан" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] дан (2 цифре)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] дан у недељи (кратко, нпр. „пон“)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] дан у недељи (потпуно, нпр. „понедељак“)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] знак на положају x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] знаци од положаја x до положаја y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Час (2 знака)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Минут" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Минут (2 знака)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месец" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месец (2 знака)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Име месеца (кратко, нпр., „јан“)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Име месеца (пуно, нпр., „јануар“)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Име" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] знак на положају x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] знаци од положаја x до положаја y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Време..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Наставак..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Име..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Прикључак" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунд" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунд (2 знака)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Година (2 знака)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Година (4 знака)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 #, fuzzy 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 msgid "File type to be opened: %s" msgstr "Врста датотеке која ће бити отворена: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Вишеструка имена датотека" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Вишеструке адресе" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Једно име датотеке" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Једна адреса" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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 #, fuzzy 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 #, fuzzy 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 #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Све" #: 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 "Све" #: 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 "Све" #: 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 "Све" #: 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 "&Избриши" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Р" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy 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 "Сачувај као" #: 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:" msgid "Con&figure columns view:" msgstr "Подеси ступце за систем датотека:" #: 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.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 #, fuzzy 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 #, fuzzy 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 #, fuzzy 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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" 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 #, fuzzy,badformat #| msgid "Show only valid environment variables" msgid "Show only &valid environment variables" msgstr "Приказуј само исправне %env_var%" #: 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 "Додатак из главне површи:" #: 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.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.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 #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Додавање..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Брисање..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Уметање..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Разврставање..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy 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 #, fuzzy 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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "раздвајач" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "подизборник" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додај подизборник" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Скупи све" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "обриши све!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "подизборник и сви његови чиниоце" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "само подизборник, али задржи чиниоце" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "означена ставка" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy 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 #, fuzzy 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...све, од А до Ш!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...појединачни скуп ставки искључиво" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Разврстај појединачни скуп ставки искључиво" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...садржај означеног подизборника, без поднивоа" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...садржај означеног подизборника и све његове поднивое" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Одредница&:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Користи трепћући показивач" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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 "Оквир показивача" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Позадинска боја &указивача:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Чеона боја &указивача:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark 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 #, fuzzy 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Словни лик уређивача" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Словни лик дневника&" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Главни словни лик&" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Словни лик прегледника& књига" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Словни лик прегледника&" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Додај пречицу&" #: 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 msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Избриши& пречицу" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy 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 "Преименуј" #: 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 #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Наредба" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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 #, fuzzy 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" 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 #, fuzzy #| msgid "Show &button bar" 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.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.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.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.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 "" #: 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“, итд.)" #: 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.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 "Прикључци за садржаје се употребљавају за проширење приказа појединости датотека као што су мп3 ознаке или својства слика у списковима датотека, или се користе у прикључцима претраге и алатима за вишеструко преимановање" #: 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 "Прикључци система датотека& омогућавају приступ радњама са дисковима које нису доступне из оперативног система или спољњим уређајима ко што су Палм и џепни рачунар." #: 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, Ктрл+Ку)" #: 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 #, 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "Одреднице:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Дугме потпуно истих умножака" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Уреди &пречицу" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Унеси ново дугме" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Друго..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Уклони &пречицу" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Равна& дугмад" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Унесите одреднице наредбе, сваку у посебној линији. Притисните Ф1 за преглед помоћи за одреднице." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Приказ" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Величина &траке:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Наредба:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Одредница&:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помоћ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Пречица:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Иконица&:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Величина& иконице:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Наредба&:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Одреднице&:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Почетна &путања:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Напомена:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Остава..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Врста дугмета" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy 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 #, fuzzy #| msgid "Show tool tip" 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Начин приказа прегледника књига" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Позадинска боја у прегледнику књига" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" 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 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 "Време:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Помоћ" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Приступано:" #: 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 #, fuzzy 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 "Пиши" #: 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 "Двоструки наредник" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" 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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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 #, 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 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.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 "Излаз&" #: 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.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 #, 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.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 "Прикажи бинарно&" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Прикажи као књигу&" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Прикажи хексадецимално&" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Прикажи као &текст" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Прикажи као &увучен текст" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графика" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Приближи" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "С" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Истицање" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Обоји" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Црвене очи" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Промени величину" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Врати" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Прегледник" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Покретне слике" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Оловка" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Истицање" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Бојење" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Покретни приказ" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Означи све" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Почетак&" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: 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 "Умножи в&реме и датум" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Ради у позадини (посебна веза)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 #, 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?\n" msgstr "" "Нисам успео да пронађем датотеку и да помогнем при провери коначног склопа датотека:\n" "%s\n" "\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 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 msgid "Copy (%d) %s" msgstr "Умножи (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Откажи" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Настави" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Умножи &у" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" 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 msgid "Speed %s/s" msgstr "Брзина %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "%s ступањ(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "све (неограничена дубина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само тренутну фасциклу" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Фасцикла %s не постоји. " #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Пронашао сам: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сачувај образац претраге" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Име обрасца:" #: ulng.rsfindscanned 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Слободно је %s од %s" #: ulng.rsfreemsgshort #, 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 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.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 #, 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?\n" msgstr "" "Упозорење: При враћању датотеке .hotlist из оставе, тренутни списак ће бити избрисан и замењен увезеним.\n" "\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 #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Уређивач" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Нађи датотеке" #: ulng.rshotkeycategorymain msgid "Main" 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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Радње" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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 #, fuzzy 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.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 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 #, 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?\n" msgstr "" "Излазна датотека CRC32 је неисправна:\n" "„%s“\n" "\n" "Да ли желите да задржите неисправну датотеку?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Не можете умножавати и премештати у саму датотеку „%s“!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Не можете избрисати %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Нисам успео да пређем на фасциклу [%s]." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Да ли да уклоним све картице које се не користе?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Картица (%s) је закључана. Да ли да је упркос томе затворим?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Да ли сте сигурни да желите напустити програм?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Да ли да умножим %d одабраних датотека/фасцикли?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Да умножим одабрано „%s“?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Да ли да избришем %d одабраних датотека/фасцикли?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Да ли да преместим %d одабране датотеке/фасцикле у смеће?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Да ли да избришем одабрани „%s“?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Да ли да преместим одабрано „%s“ у смеће?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Нисам успео да се повежем са служитељем „%s“" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Нисам успео да умножим датотеку %s у %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Датотека под именом „%s“ већ постоји." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Датум %s није подржан" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Нисам успео да поставим својства датотеци „%s“" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Нисам успео да поставим датум и време датотеци „%s“" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Нисам успео да поставим власника/удружење датотеци %s“" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 "Име подизборника" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Датотека %s је измењена. Да ли да је сачувам?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s бајта, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Препиши:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Датотека %s већ постоји, да ли да је препишем?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Датотеком:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Датотека величине „%s“ је превелика за одредишни систем датотека." #: ulng.rsmsgfolderexistsrwrt #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Датотека %s постоји. Да ли да је препишем?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Да ли да пратим симболичку везу „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Укупан број сачуваних ставки: %d\n" "\n" "Име оставе: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Укупна број извезених ставки: " #: ulng.rsmsghotdirwhattodelete #, 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.\n" msgstr "" "Да ли желите да избришете све чиниоце подизборника [%s]?\n" "Одговором НЕ ћете избрисати само ограничење изборника, али ће се задржати чинилац унутар подизборника.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Унесите путању и име места за чување датотеке брзог списка фасцикли" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Нетачна је излазна дужина датотеке : „%s“" #: ulng.rsmsginsertnextdisk #, 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\n" msgstr "" "Молим, убаците следећи диск или нешто слично.\n" "\n" "То ће вам омогућити да упишете следећу датотеку:\n" "„%s“\n" "\n" "Број бајта преостао за упис: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Неисправна путања" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Путања %s садржи недозвољене знакове" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ово није исправан прикључак." #: ulng.rsmsginvalidpluginarchitecture 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 "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Умножи датотеку %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Распакујем датотеку %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Подаци: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Направи везу %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Направи фасциклу %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Премести датотеку %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Путања до датотеке %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Уклони фасциклу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Урађено: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Направи везу %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Провери исправност датотеке %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Избриши потпуно датотеку %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Обриши %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Датотека „%s“ већ постоји. Да је препишем?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Преименуј/премести %d означених датотека/фасцикли?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Да ли да потпуно избришем %d означених датотека/фасцикли?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Да ли да потпуно избришем одабрано „%s“?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без измена;ВЕЛИКА СЛОВА;мала слова;Први знак велики;Први Знак Сваке Речи Велики;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum" msgstr "Израчунавам збирну проверу" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Рачунам збирну проверу у „%s“" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Рачунам збирну проверу „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Рачунам" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Рачунам „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Спајам" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Спајам датотеке из „%s“ на „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Умножавам" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Умножавам из „%s“ у „%s“ " #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Умножавам „%s“ на „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Стварам фасциклу" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Стварам фасциклу „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Бришем" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Бришем из „%s“" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Бришем „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Извршавам" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Извршавам „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Издвајам" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Издвајам из „%s“ у „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Готово" #: ulng.rsoperlisting msgid "Listing" msgstr "Листам" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Листам „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Премештам" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Премештам из „%s“ у „%s“" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Премештам „%s“ на „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Није покренуто" #: ulng.rsoperpacking msgid "Packing" msgstr "Сажимам" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Сажимам из „%s“ у „%s“" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Постављам својства у „%s“" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Постављам својства датотеци „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Дељење" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Пробам у „%s“" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Пробам „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверавам збир" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Проверавам збир у „%s“" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Брисање у „%s“" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Пречица %s за „cm_Delete“ ће бити пријављена, тако да може бити коришћена за враћање ове поставке." #: ulng.rsopthotkeysaddhotkey 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 #, 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 "Пречица за „cm_Delete“ има одредницу која заобилази ове поставке. Да ли желите да измените одредницу и користите опште поставке?" #: ulng.rsopthotkeysdeletetrashcanparameterexists 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 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 #, 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 "Да би ове поставке радиле са пречицом %s, пречица мора да буде додељена „cm_Delete“, али је већ додељена за %s. Да ли желите да је промените?" #: ulng.rsopthotkeysshortcutfordeleteissequence 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 msgid "Shortcut %s is already used." msgstr "Пречица %s већ постоји." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Да ли је доделити %s?" #: ulng.rsopthotkeysusedby 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.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 #, fuzzy 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 #, fuzzy #| msgid "&Hide filter panel when not focused" 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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Датотека: %d, фасцикли: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Нисам успео да променим права приступа за „%s“" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Изаберите фасциклу" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Наредба" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Нова величина" #: ulng.rsviewnotfound 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.sl.po������������������������������������������������������������0000644�0001750�0000144�00001256111�13424362040�017231� 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@svn.gnome.org>, 2011–2017. msgid "" msgstr "" "Project-Id-Version: double-commander master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2017-09-25 21:39+0200\n" "Last-Translator: Matej Urbančič <mateju@svn.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 2.0.1\n" "X-Native-Language: Slovenščina\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Poteka primerjava ... %d%% (s tipko ESC se opravilo prekliče)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Desno: izbriši %d datotek" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Z leve na desno: kopiraj %d datotek s skupno velikostjo %d bajtov" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Z desne na levo: kopiraj %d datotek s skupno velikostjo %d bajtov" #: 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 msgid "Fo&llow links" msgstr "Sledi &povezavam" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Zadrži prostor" #: 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 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.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domača 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 "" #: tfrmbenchmark.lblbenchmarksize.caption 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čun nadzornih vsot" #: 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Shrani datoteke z nadzornimi &vsotami v:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Preveri nadzo&rno vsoto ..." #: 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" #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Izberi &vse" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Razveljavi" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Končaj" #: 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.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 drsenje" #: 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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 "&Nov stolpec" #: 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "Shra&ni vse" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Shrani vse" #: 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 "Konec 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.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 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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Nastavi" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastavi &vsem" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Pres&koči datoteko" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Vsebuje:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pot:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Zadnji dostop:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Zadnja sprememba:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Zadnja sprememba stanja:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Simbolna povezava na:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zapri" #: 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 "&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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" msgstr "" #: 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "&Razlikovanje velikosti črk" #: 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 "&Pot povezave:" #: 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 "" #: 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.actbenchmark.caption msgid "&Benchmark" msgstr "" #: 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 "Primerjava map" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Primerjava map" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: 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 "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: 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 "" #: 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.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 "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.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 "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi kazalko na prvo datoteko seznama" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi kazalko na zadnjo datoteko seznama" #: 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.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.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 "" #: 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.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.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 &velikost" #: 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.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 "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 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 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 msgid "Case sensitive" msgstr "Razlikovanje velikosti č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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Ustvarjanje nove mape" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Višina" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&&Uredi" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Naloži" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Ponastavi &vse" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Shrani" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Napredno preimenovanje" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "&Omogoči" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Pripona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Števec" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Najdi &in zamenjaj" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Rezultat beleženja" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Števec" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dan" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dan (2 številki)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dan v tednu (kratko, npr.: »pon«)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dan v tednu (dolgo, npr.: »ponedeljek«)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak pripone na mestu (x)" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex] Znaki pripone med mestoma (x) in (y)" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ure" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ure (2 številki)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 številki)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mesec" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesec (2 številki)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ime meseca (kratko, npr.: »jan«)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ime meseca (dolgo, npr.: »januar«)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ime" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak imena na mestu (x)" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaki imena med mestoma (x) in (y)" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas ..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Pripona ..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ime ..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekunde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekunde (2 številki)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Leto (2 številki)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Leto (4 številke)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Urejanje imen ..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Naloži imena iz datoteke ..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Več naslovov URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Ime ene datoteke" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "En naslov URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Uveljavi" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: 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 "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopiraj" #: 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 "Drugo..." #: 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 "" #: 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 "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 "" #: 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 "Doda&janje:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ar&hivirnik:" #: 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 "&Razširitev:" #: 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 "&Samodejno nastavi" #: 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 "Izvozi ..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: 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" #: 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 #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Zavihki 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 "" #: 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 "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Nastavi v ukazni vrstici" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Povrni na privzete vrednosti" #: 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 msgid "Background 2:" msgstr "Ozadje 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Nastavi &stolpce za datotečni sistem:" #: 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.lblfontname.caption msgid "Font:" msgstr "Pisava:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" msgstr "&Pomoč" #: 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" #: 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 "" #: 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.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Kazalka je za znakom konca vrstice" #: 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 "Pokaži posebne znake" #: 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 "Možnosti notranjega urejevalnika" #: 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 "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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: 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 "" #: 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 "" #: 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 #, 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 "Parametri za ukaz. Daljše ime datoteke, ki vključuje presledke, mora biti zapisan v navednicah." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Ukaz za izvršitev. Daljše ime datoteke, ki vključuje presledke, mora 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.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Izvedi prek lupine" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Možnosti v vsebinskem meniju" #: 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.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: 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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Uporabi kazalnik &preliva" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Kazalnik zasedenosti prostora na pogonu" #: 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Barva &ozadja" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Barva &pisave kazalnika:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Barva &oznake:" #: 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 "&Poišč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 "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Razvrščanje" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Vstavi nove datoteke:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: 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 "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Premakni posodobljene datoteke:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Dod&aj" #: 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 "Omogoči prehod v &nadrejeno mapo, kadar je izveden dvojni klik na prazni del okna datotek" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Ne naloži datoteke, dokler zavihek ni omogočen" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "&Izpiši oglate oklepaje okoli imena mape v seznamu okna" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "&Poudari nove in posodobljene datoteke" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogoči takojšnje &preimenovanje z dvoklikom na ime datoteke" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Naloži &seznam datotek v ločeni niti" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Naloži ikone &za seznamom datotek" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Pokaže skrite in &sistemske datoteke" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "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 msgctxt "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 msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Vsakič uporabi neodvisen filter atributa v maski" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Označevanje/Preklic oznake vnosov" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Privzeta maska 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Pisava konzole" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Pisava &urejevalnika" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "Pisava &dnevnika" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "&Glavna pisava" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Pisava poti" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Pisava rezultatov iskanja" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "Pisava &bralnega pregledovalnika" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "Pisava &pregledovalnika" #: 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.miseparator1.caption msgctxt "TFRMOPTIONSHOTKEYS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Način razvrščanja" #: 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 "" #: 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.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Ploski &gumbi" #: 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.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.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 #, fuzzy #| msgid "View log file content" msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Preglej vsebino datoteke dnevnika" #: 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.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.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 "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: 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 "" #: 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 "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: 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)" #: 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.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 "Vstavki &pakirnikov so uporabljeni za delo z arhivi." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano 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 "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." #: 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." #: 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)." #: 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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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 izvedbo zaključenega ukaza v terminalu" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Ukaz za izvedbo 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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Gumb za &kloniranje" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Uredi hitro &tipko" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "&Vstavi nov gumb" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Izbor" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Drugo ..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Odstrani &hitre tipke" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Predlagaj" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Ploski gumbi" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Pokaži napake ukazov" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Videz" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Velikost orodne &vrstice:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "&Ukaz:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Pomoč" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Hitra tipka:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Iko&na:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veli&kost ikone:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "&Ukaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Začetna &pot:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Orodni namig:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodaj orodno vrstico z VSEMI ukazi DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "za zunanji ukaz" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "za notranji ukaz" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "za ločilnik" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "za podrejeno orodno vrstico" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Varnostna kopija ..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Trenutna orodna vrstica ..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Vrhnja orodna vrstica" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Shrani varnostno kopijo orodne vrstice" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovi varnostno kopijo orodne vrstice" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "iz datoteke orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje na novo orodno vrstico na vrhnji orodni vrstici" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "iz ene datoteke TC.BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "iz datoteke »wincmd.ini« programa TotalCommander ..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Poišči in zamenjaj ..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "v vseh od vseh zgoraj ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "v vseh ukazih ..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "v vseh imenih ikon ..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "v vseh parametrih ..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "v vseh začetnih poteh ..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutnim izborom" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta gumba" #: 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 izvedbo:" #: 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 "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 "Predloga ..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Drugo..." #: 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 "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 "" #: 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 "Izvozi ..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Uvozi ..." #: 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 "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 "Dvojni klik miške v izboru drevesa in končaj" #: 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 "Med uporabi tipkovnih bližnjic, konča okno in se vrne na trenutno izbiro" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Enojni klik miške v izboru drevesa in končaj" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Uporabi za zgodovino ukazne vrstice" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Uporabi za zgodovino map" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Uporabi za zgodovino 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, povezane z menijem 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 akcentov znakov 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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Način bralnega pregledovalnika" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Primer" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Barva &ozadja v bralnem pregledovalniku" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Barva pisave v bralnem pregledovalniku" #: 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 oziroma mapo" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Ustvari arhiv za samodejno odpakiranje" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Šifriraj arhiv z geslom" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "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 "Najprej &vstavi 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:" #: 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 msgid "Field" msgstr "Polje" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Izbor znakov za &vstavljanje:" #: 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 msgid "Created:" msgstr "Ustvarjeno:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Skrita datoteka" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Zadnji dostop:" #: 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" #: 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 #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "&Ciljna mapa:" #: 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.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 "" #: 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.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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zapri" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjaj" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: 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 »Primerjava« 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 "Ra&zširitev:" #: 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafični prikaz" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Vstavki" #: 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.actzoom.caption msgid "Zoom" msgstr "Približanje" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Približaj" #: tfrmviewer.actzoomout.caption 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Poudari" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Risanje" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rdeče oči" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Spremeni velikost" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Razveljavi" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Pregledovalnik" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Predstavitev" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pisalo" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "Poudari" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "Risanje" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "Predstavitev" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: 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.miprint.caption msgid "Print..." msgstr "Natisni ..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Začni" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Datotečna opravila" #: 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 "Prekliči" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Prekliči" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova čakalna vrsta" #: 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 "V vrsto" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Vrsta 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Vrsta 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Vrsta 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Vrsta 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Vrsta 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Če datoteka obstaja" #: 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," #: 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 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" 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 brez nje?\n" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: 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 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 msgid "Copy (%d) %s" msgstr "Kopiraj (%d) %s" #: 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 "" #: 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 "_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.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.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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Prekliči" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: 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 "" #: 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 msgid "Speed %s/s" msgstr "Hitrost %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: 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 "" #: 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 "" #: 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.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 "Določitev predloge" #: ulng.rsfinddepth 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 msgid "Directory %s does not exist!" msgstr "Mapa %s ne obstaja!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Sprosti %s od %s" #: ulng.rsfreemsgshort #, fuzzy msgid "%s free" msgstr "%s prostora" #: 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 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.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?\n" msgstr "" "Opozorilo! Med obnavljanjem datoteke varnostne kopije vročih map *.hotlist se starejša različica izbriše in je ni mogoče več povrniti.\n" "\n" "Ali ste prepričani, da želite nadaljevati?\n" #: 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.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: 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?\n" msgstr "" "Namestitev s tem imenom že obstaja.\n" "Ali jo želite prepisati?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Ali ste prepričani, da želite obnoviti privzeto?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Ali ste prepričani, da želite izbrisati namestitev »%s«?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Nastavitev »%s« je spremenjena.\n" "Ali želite spremembe shraniti?\n" #: 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 "" #: 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 "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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Dejanja" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Privzeto>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Osmiško" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Kopiraj imena s potjo UNC" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: 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.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 msgid "Description: %s" msgstr "" #: 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Napaka nadzorne vsote CRC32 za datoteko:\n" "»%s«\n" "\n" "Ali želite obdržati okvarjeno datoteko?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Datoteke »%s« ni mogoče kopirati oziroma premakniti samo vase!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Ni mogoče izbrisati mape %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Mape »%s« ni mogoče prepisati s predmetom »%s«, ki ni mapa!" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Ukaz chdir v [%s] je spodletel!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Ali naj se odstranijo vsi nedejavni zavihki?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Zavihek (%s) je zaklenjen! Ali naj se vseeno zapre?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Potrditev parametra" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ali ste prepričani, da želite končati?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Ali naj se kopira %d izbranih datotek ali map?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Ali naj se »%s« kopira v:" #: ulng.rsmsgcreateanewfiletype 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 naj se delno kopirana datoteka izbriše?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Ali naj se izbrani predmeti izbrišejo (%d predmetov)?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Ali naj se izbrani predmeti premaknejo v smeti (%d predmetov)?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Ali naj se »%s« izbriše?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Ali naj se »%s« premakne v smeti?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Predmeta »%s« ni mogoče premakniti v smeti. Ali naj se izbriše 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Ni se mogoče povezati s strežnikom: »%s«" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Ni mogoče kopirati datoteke %s v %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Mapa z imenom »%s« že obstaja." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s ni podprt!" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Ni mogoče določiti atributov za »%s«" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Datuma in časa za datoteko »%s« ni mogoče določiti." #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Ni mogoče določiti lastništva in skupine za »%s«" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Ni mogoče nastaviti dovoljenj 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 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 "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 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 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 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 msgid "File %s changed, save?" msgstr "Datoteka %s je spremenjena. Ali naj se spremembe shranijo?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtov, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datoteka %s že obstaja. Ali naj bo prepisana?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Z datoteko:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "Dolžina imena cilja (%d) je več kot %d znakov!\n" "%s\n" "Mnogi programi imajo lahko težave s tako dolgimi imeni datotek in map!\n" #: ulng.rsmsgfilereadonly 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 naj se vseeno izbriše?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig 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 msgid "Folder %s exists, merge?" msgstr "Mapa %s že obstaja. Ali želite datoteke združiti v to mapo?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Ali naj se sledi simbolni povezavi »%s«?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Izbor vrste zapisa za uvoz" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Skupno shranjenih vnosov: %d\n" "\n" "Ime datoteke varnostne kopije: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Število izvoženih vnosov:" #: ulng.rsmsghotdirwhattodelete 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" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Nepravilni podatki dolžine datoteke za: »%s«" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Vstavite dodatni disk, ključ oziroma drug pogon.\n" "\n" "S tem omogočite zapis datoteke:\n" "»%s«\n" "\n" "Zapisati je treba še: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neveljavna pot" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Kopiraj datoteko %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Razširi datoteko %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podrobnosti:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Ustvari povezavo %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Ustvari mapo %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Premakni datoteko %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Zapakiraj v datoteko %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstrani mapo %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Končano:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Ustvari simbolno povezavo %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Preizkusi celovitost datoteke %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Varno izbriši %s" #: ulng.rsmsglogwipedir 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 naj se opravilo vseeno nadaljuje?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Ni dovolj prostora na ciljnem pogonu. Ali naj se prostor ponovno izračuna?" #: ulng.rsmsgnotdelete 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 "" #: 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 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 msgid "&Delete %s" msgstr "&Izbriši %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Shranjen predmet »%s« že obstaja. Ali naj se prepiše?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Napaka izvajanja ukaza (%s)" #: ulng.rsmsgprocessid msgid "PID: %d" msgstr "" #: 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 msgid "Rename/move %d selected files/directories?" msgstr "Ali naj se izbrani predmeti preimenujejo oziroma premaknejo (%d predmetov)?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Ali naj se predmet »%s« preimenuje oziroma premakne?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Za uveljavitev sprememb je treba program ponovno zagnati." #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Izberite vrsto datoteke za dodajanje razširitve »%s«" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Napaka: ni mogoče najti nastavitvene datoteke programa Total Commander:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Napaka: ni mogoče najti izvedbene datoteke programa Total Commander:\n" "%s\n" #: 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.\n" msgstr "" "Napaka: program Total Commander je zagnan, kar pa za to dejanje ne sme biti.\n" "Zaprite program ali prekličite opravilo\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Napaka! Ni mogoče najti žele odvodne mape orodne vrstice TC:\n" "%s\n" #: 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.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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Shranjeno.\n" "Ime orodne vrstice: %s'\n" #: 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 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 "" #: 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 dela arhiva:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Velikost dela arhiva:" # This should be multiple plural !!!! #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Ali naj se izbrane datoteke oziroma mape neobnovljivo izbrišejo (%d)?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Ali naj se »%s« neobnovljivo izbriše?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "z" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Opozorilo, imena so podvojena!" #: ulng.rsmulrenwronglinesnumber 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 "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafični prikaz" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Omrežje" #: 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 "Sistemska datoteka" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Preklicano" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavanje nadzorne vsote" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Izračunavanje nadzorne vsote v »%s«" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Izračunavanje nadzorne vsote »%s«" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Preračunavanje" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Preračunavanje »%s«" #: ulng.rsopercombining msgid "Joining" msgstr "Združevanje" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Združevanje datotek iz »%s« v »%s«" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiranje" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiranje iz »%s« v »%s«" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiranje »%s« v »%s«" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Ustvarjanje mape" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Ustvarjanje mape »%s«" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Brisanje" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Brisanje v »%s«" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Brisanje »%s«" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvajanje" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Izvajanje »%s«" #: ulng.rsoperextracting msgid "Extracting" msgstr "Poteka odpakiranje" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Izpisovanje seznama »%s«" #: ulng.rsopermoving msgid "Moving" msgstr "Premikanje" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Premikanje iz »%s« v »%s«" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakiranje iz »%s« v »%s«" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Nastavljanje lastnosti v »%s«" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavljanje lastnosti »%s«" #: ulng.rsopersplitting msgid "Splitting" msgstr "Razdeljevanje" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Preizkušanje v »%s«" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Preizkušanje »%s«" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Preverjanje nadzorne vsote" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Preverjanje nadzorne vsote »%s«" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Neobnovljivo brisanje v »%s«" #: ulng.rsoperwipingsomething 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 "" #: 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 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 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 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 "Ime vrste arhiva:" #: ulng.rsoptassocpluginwith 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 "" #: 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 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 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 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 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 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 #, 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 "Za povezavo te možnosti s tipkovno bližnjico %s mora biti ta določena za cm_Delete, vendar je povezana z možnostjo %s. Ali jo želite spremeniti." #: ulng.rsopthotkeysshortcutfordeleteissequence 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 msgid "Shortcut %s is already used." msgstr "Tipkovna bližnjica %s je že v uporabi." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Ali naj se zamenja v %s?" #: ulng.rsopthotkeysusedby 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.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 "" #: 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 msgid "Fonts" msgstr "Pisave" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Poudarjalniki" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Hitre tipke" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Spremenjene so možnosti »%s«\n" "\n" "Ali želite shraniti spremembe?\n" #: 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.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 "" #: ulng.rsoptpluginalreadyassigned 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 "" #: 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 "Vpisano za" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: 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;Natural sorting: alphabetical and numbers" msgstr "abecedno, upoštevajoč znakovne naglase;naravno, številčno in abecedno" #: 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 "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Ime &kategorije:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 "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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Datoteke: %d; Mape: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Ni mogoče spremeniti dovoljenj dostopa za »%s«" #: ulng.rspropserrchown 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.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.\n" msgstr "" "Iskanje datotek z uporabo vstavka DSX je že v teku.\n" "Pred začetkom novega iskanja z vstavkom mora biti predhodno končano.\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.\n" msgstr "" "Iskanje datotek z uporabo vstavka WDX je že v teku.\n" "Pred začetkom novega iskanja z vstavkom mora biti predhodno končano.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izbor mape" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Izbor okna" #: ulng.rsshowhelpfor 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 "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: 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 "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: 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 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 naj se opravilo vseeno izvede?" #: 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 "" #: 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 "Pregledovalnik" #: ulng.rsunhandledexceptionmessage 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.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 izvedbo" #: 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.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 msgid "%s not found!" msgstr "%s ni mogoče najti!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "z zunanjim pregledovalnikom" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "z notranjim pregledovalnikom" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Število zamenjav: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Zamenjava ni bila izvršena." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.sk.po������������������������������������������������������������0000644�0001750�0000144�00001246540�13424362040�017235� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-08 18:30+0300\n" "PO-Revision-Date: 2015-03-16 20:20+0100\n" "Last-Translator: Rastislav Vojtek <rastislav.vojtek@enel.com>\n" "Language-Team: Slovenský <sk@li.org>\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" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vyber šablónu" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Kontrolovať 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íka" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopírov&ať dátum/čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Opraviť od&kazy" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Zahodiť znak len na čítanie" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Vynechať prázdne adresáre" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Nas&ledovať odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Vyh&radený priestor" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: 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 #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "Ak adresár &existuje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" 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 "" #: 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.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 #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Archivovať" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Komprimovaný" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Adresár" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Šifrovaný" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Skrytý" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" 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 #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Riedky" #: 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 #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "&Symbolický link" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystémový" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" 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 #, fuzzy #| msgid "As text:" 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 "" #: tfrmbenchmark.lblbenchmarksize.caption 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 "Výpočet kontrolného súčtu..." #: 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 "Vytvo&riť samostatný MD5/SHA1 pre každý súbor" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Uložiť &súbor(y) s kontrolným súčtom do:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Overiť kontrolný súčet..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Pri&dať" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Prip&ojiť" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Vymazať" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" 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&daj do fronty" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Voľby" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Uložiť tieto &voľby ako východzie" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopírovať súbor(y)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" 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/adresáru" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Upraviť komentár k:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Zakó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 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.acteditselectall.caption msgid "Select &All" msgstr "Vybr&ať všetko" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Späť" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Koniec" #: 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.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 #, fuzzy #| msgid "Reload" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "Vľavo" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "Vpravo" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akcie" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kódovanie" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Súbor" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Nastavenia" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Pridaj 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 "Zmazať poslednú skratku zo sekvencie" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: 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 "&Konfigurácia" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Umiestnenie konfigurácie" #: 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 #, fuzzy #| msgid "&Find " 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 "" #: 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 "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 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 "Zpäť" #: 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 #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Obnoviť" #: tfrmeditor.actfilesave.caption #, fuzzy msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Uložiť" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Uložiť" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Uložiť &ako.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Uložiť ako" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Uložiť Všetko" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Uložiť všetko" #: 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 syntaxu" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Koniec riadku" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Rozlišovať veľkosť" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" 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ť týmto:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Vyhľadať:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: 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 #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Prepísať existujúca súbory" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Rozbaliť súbory do:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "&Súbory na rozbalenie:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" 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 "Čakaj..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Meno 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ť, až keď bude možné zmazať dočasné súbory." #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" 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.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zavrieť" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Nastav vlastnosti" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastav na všetky vybrané súbory" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Preskoč tento súbor" #: 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 "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: 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 #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Textovo:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Posledný prístup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Posledná zmena:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Posledná zmena stavu:" #: tfrmfileproperties.lbloctal.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Číselne:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlastník" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veľkosť:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Zástupca:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Meno" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Hodnota" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zavrieť" #: 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 "&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 "" #: 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 "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Choď 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 "" #: 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 "&Start" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "Z&obraziť" #: 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 #, fuzzy #| msgid "Save" 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ž s \"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 "Ak je uložené potom \"Start in directory\" bude obnovené pri nahrávaní šablóny. Použiť pri oprave hľadania na určený adresár." #: 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 #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "&Dátum od:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Dátum do:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Veľkosť od:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Veľkosť do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Vyhľadať &text" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Nasledovať symlinky" #: 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 #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Nie staršie ako:" #: 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 "Hľadať časť mena" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulárne výrazy" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Nahradiť text" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Vybrané adresáre a súbory" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Čas od:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" 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.chkhex.caption msgid "Hexadecimal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Zadaj mená adresárov, 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 "Zadaj mená súborov, ktoré by mali byť vynechané z vyhľadávania oddelené \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Zadaj mená súborov oddelené \";\"" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Adresáre" #: 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 msgid "Attri&butes" msgstr "Atribúty" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kódovanie:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "V&ynechať podadresáre" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Vynechať súbory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Súborová maska" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "&Adresárová maska" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Prehľadať po&dadresáre:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Predchádzajúce hľadania:" #: 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 "Nastavenia" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odobrať zo zoznamu" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: 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 "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zobraziť v prehliadači" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Zobraziť" #: 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 #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Hľadať" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Hľadať" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Rozlišovat veľkosť" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Vytvoriť hardlink" #: 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 "Cieľ (kam bude odkaz ukazovať)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: 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 "Spojovač súborov" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Uložiť do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Položka" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Názov súboru" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dolu" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dolu" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Vymazať" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Hore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Hore" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "O programe" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: 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 "" #: 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.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 #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Vypočítať &obsadené miesto..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zmeniť adresár" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Ísť do nadradeného adresára" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Ísť do koreňového adresára" #: tfrmmain.actchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Vytvoriť kontrolný súčet..." #: tfrmmain.actchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." 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 #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Vymazať záložky" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Zavrieť záložku" #: 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 "Nastav 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 "Nastav 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ť adresáre" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Porovnať adresáre" #: 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 "Zobraziť kontextové menu" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy F5" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopírovať" #: 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 "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.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 "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: 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 #, fuzzy #| msgid "Sho&w occupied space" 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 "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete F8" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Vymazať" #: 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 zložiek" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "&Rýchle adresáre" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit F4" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editovať" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." 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 "" #: tfrmmain.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "Rozbaliť súbory..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Asociácia súborov..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Spojiť súbory" #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Zobraziť vlastnosti súboru" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Rozdeliť súbor..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Aktivovať príkazový riadok" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umiestniť kurzor na prvý súbor zoznamu" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umiestniť kurzor na posledný súbor zoznamu" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Vytvoriť &HardLink..." #: tfrmmain.acthelpindex.caption #, fuzzy #| msgid "Contents" msgid "&Contents" msgstr "Obsah" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Režim s horizontálnymi panelmi" #: tfrmmain.actkeyboard.caption #, fuzzy #| msgid "Keyboard" msgid "&Keyboard" msgstr "Klávesnica" #: 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 "Ľavý &= Pravý" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otvoriť ľavý zoznam diskov" #: 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.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 "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Vytvor adresár" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" 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 "" #: 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 "Invertovať výber" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Vybrať všetko" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Zrušiť výber sk&upiny" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Výber skupiny" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "Zr&ušiť výber" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizovať okno" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "Nástroj pre hromadné premenovanie" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Pripojiť sieťový adresár" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Odpojiť sieťový adresár" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Rýchle pripojiť zo siete" #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "Nová záložka" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "Prepnúť do novej záložky" #: 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 #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "Otvoriť adresár v novej záložke" #: 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 "Otvoriť VFS zoznam" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Konzola operácií" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "Nastavenia..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Zabaliť súbory..." #: tfrmmain.actpanelssplitterperpos.caption #, fuzzy 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 "" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "Prepnúť do predchádzajúcej záložky" #: 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 "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move F6" 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 #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Preme&novať záložku" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Obnoviť výbe&r" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Obrátené poradie" #: 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 "Pravý &= Ľavý" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvoriť pravý zoznam diskov" #: 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 "Spustiť terminál" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" 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 "" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Hľadať" #: 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 "Zmena atribútov" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Uzamknuté; adresáre otvárať v nových záložkách" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normálne" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Uzamknuté" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Uzamknuté; zmena adresára povolená" #: 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čítok" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Zobraziť históriu príkazového riadku" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu F9" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Zobraziť skryté/systémové súbory" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Triediť podľa &atribútov" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Triediť podľa &dátumu" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Tri&ediť podľa prípony" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Triediť podľa &názvu" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Triediť podľa veľko&sti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: 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 #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Vytvoriť Sym&Link..." #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "" #: 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 "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Preniesť adresár pod kurzorom do ľavého okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Preniesť adresár pod kurzorom do pravého okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "Zrušiť výber súborov s rovnakou príponou" #: 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 "Zobraziť" #: 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 "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "Navštíviť domovskú stránku" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Bezpečne zmazať" #: 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 "Koniec" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Adresár" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Vymazať" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal F9" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Hotlist zložiek" #: 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 adresár 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 adresára" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ísť do koreňového adresára" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ísť do nadradeného adresára" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Rýchle adresáre" #: 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 adresár ľ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 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 #, fuzzy 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 záložiek" #: tfrmmain.mitrayiconexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: 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 "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" 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 #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Nastavenia" #: 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í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 #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: 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 "Klávesa" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "&Definovať..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgid "Case sensitive" msgstr "Rozlíšovať veľkosť písmen" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Vstupná maska:" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "Alebo zvoľte preddefinovaný typ výbe&ru:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvoriť nový adresár" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Zadajte nový názov adresára:" #: 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 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 JPG kompresie" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Šírka" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Výška" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šírka" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Vymazať" #: tfrmmultirename.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Upraviť" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Nahrať (Ctrl+&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "P&remenovať" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Obnoviť všetko" #: tfrmmultirename.btnsavepreset.caption #, fuzzy msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Uložiť (Ctrl+&S)" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Hromadné premenovanie" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Log" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulárne výrazy" #: tfrmmultirename.cbusesubs.caption #, fuzzy #| msgid "Use substitution" 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.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E] Prípona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhľadať && Nahradiť" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log výsledku" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predvoľby" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "Prípona" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Hľadať..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "&Názov súboru" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Nahradiť..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Číslovať od" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Šírka" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C] Počítadlo" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Deň" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Deň (2 číslice)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Deň týždňa (skrátene, t.j. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] Deň týždňa (celý, t.j. \"pondelok\")" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozícii x" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x] Znaky od pozície x do y" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[h] Hodina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hodina (2 číslice)" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[n] Minúta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minúta (2 číslice)" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[M] Mesiac" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesiac (2 číslice)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Meno mesiaca (krátko, t.j. \"jan\")" #: tfrmmultirename.mimonth3.caption #, fuzzy #| msgid "[MMMM] Month name (long, e.g. \"january\")" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Meno mesiaca (celé, t.j. \"január\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]Názov" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozícii x" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaky od pozície x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Prípona..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Názov..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[s] Sekunda" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekundy (2 číslice)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 číslice)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 číslice)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 #, 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 "Vyber aplikáciu" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Užívateľský príkaz" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Ulož asociácie" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastav vybranú aplikáciu ako štandartnú akciu" #: tfrmopenwith.lblmimetype.caption 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jednoduché meno súboru" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Použiť" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: 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, vyber jednu z podstránok, táto stránka neobsahuje 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 "" #: 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 "" #: 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 "Ostatní..." #: 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 "Premenovať" #: 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 "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 "" #: 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 "Pridať:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Archivátor:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Zmazať:" #: 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 "Formát výpisu" #: 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 "" #: 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 "Rozšírené" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Hlavné" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption #, fuzzy #| msgid "Also when &size, date, or attributes change" msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Tiež 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 podadresáre" #: 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 "Aktualizovať zoznam pri vy&tvorení, zmazaní alebo premenovaní" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption #, fuzzy #| msgid "Don't &react to updates while in the background" 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 #, fuzzy #| msgid "Always show tray icon" msgctxt "tfrmoptionsbehavior.cbalwaysshowtrayicon.caption" msgid "Al&ways show tray icon" msgstr "Vždy zobraziť ikonu v oznamovacej oblasti" #: 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 #, 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 "Povoliť beh len jednej inštancie 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 "" #: 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 "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" 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 "" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "tfrmoptionscolumnsview.cbgridhorzline.caption" msgid "&Horizontal lines" msgstr "Horizontálne čiary" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "tfrmoptionscolumnsview.cbgridvertline.caption" msgid "&Vertical lines" msgstr "&Vertikálne čiary" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" 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 #, fuzzy #| msgid "Auto size column:" msgctxt "tfrmoptionscolumnsview.lblautosizecolumn.caption" msgid "Auto si&ze column:" msgstr "Automatická veľkosť stĺpca" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "Upraviť" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "tfrmoptionsconfiguration.cbcmdlinehistory.caption" msgid "Co&mmand line history" msgstr "Históriu príkazového riadku" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "tfrmoptionsconfiguration.cbdirhistory.caption" msgid "&Directory history" msgstr "Históriu adresárov" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "tfrmoptionsconfiguration.cbfilemaskhistory.caption" msgid "&File mask history" msgstr "Históriu použitých masiek" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Záložky zložiek" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "tfrmoptionsconfiguration.chksaveconfiguration.caption" msgid "Sa&ve configuration" msgstr "Nastavenie" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "tfrmoptionsconfiguration.chksearchreplacehistory.caption" msgid "Searc&h/Replace history" msgstr "Históriu hľadania/nahrádzania" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Adresáre" #: 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 "" #: 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 "Nastaviť v príkazovom riadku" #: 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 "Adresár p&rogramu (\"portable\" verzia)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "tfrmoptionsconfiguration.rbuserhomedir.caption" msgid "&User home directory" msgstr "Domovský adresár užívateľa" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "Všetko" #: 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 "&Vymazať" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Nový" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Premenovať" #: 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 "Uložiť ako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Uložiť" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: 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 "Hlavné" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Rámček kurzoru" #: 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 "Pozadie:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadie 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "tfrmoptionscustomcolumns.lblconfigcolumns.caption" msgid "Con&figure columns view:" msgstr "Kon&figurácia stĺpcov pre systém súborov:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Farba kurzoru:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy #| msgid "Configure view nr:" msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Konfigurácia pohľadu č.:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veľkosť:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Farba písma:" #: 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 "Farba označený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 "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Pridať stĺpec" #: 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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "&Pomoc" #: 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 "Meno:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Cesta:" #: 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 "" #: 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 "Ukáž potvrdzovacie okno po drop-e" #: 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 "Ukáž súborový systém" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Ukáž voľný pri&estor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Ukáž značku" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Zoznam diskov" #: 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.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.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 "Pozadie" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Pozadie" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: 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 uprav) &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&vert" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Vypni" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "Zapni" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kurzíva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "In&vert" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Vypni" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "Zapni" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Strike Out" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Pre&vrátiť" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Vyp" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "Zap" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podčiarknuť" #: 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 "" #: 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 "Premenovať" #: 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 "Nie" #: 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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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 "Vystrihnúť" #: 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 "Vložiť" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 #, fuzzy msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Pridať" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Prid&ať" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Pridať" #: 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 "Upraviť" #: 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 "Odstrániť" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Odstrániť" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" 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 "" #: 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 "Hore" #: 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 "Akcie" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Prípony" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: 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 "" #: 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 "Akcia:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Príkaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: 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 "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Získať výstup príkazu" #: 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 "Spustiť v terminále" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Zobraziť" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvoriť v prezerači" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" 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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Ukázať 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 #, 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 "&F8/Del presúva do koša (Shift=zmazať ihneď)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operácie vyhodenia do koša" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "tfrmoptionsfileoperations.cbdropreadonlyflag.caption" msgid "D&rop readonly flag" msgstr "Zahodiť znak len na čítanie" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operácie presunu" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "tfrmoptionsfileoperations.cbprocesscomments.caption" msgid "&Process comments with files/folders" msgstr "Spracovať komentáre s adresármi/súbormi" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Vybrať meno súboru bez prípony, pri premenovaní" #: 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 "Zobraziť výber záložky v dialógu \"kopírovať/presunúť\"" #: 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 "Preskočiť chyby súborových operácií a len ich zapísať do okna logov" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Vykonávanie operácií" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Užívateľský interfejs" #: 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 "" #: 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 "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Počet prechodov bezpečného vymazania:" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "tfrmoptionsfilepanelscolors.cbbuseframecursor.caption" msgid "Use &Frame Cursor" msgstr "Použiť rámčekový kurzor" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Použiť Indikátor &Gradientu" #: 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 "Použiť inverzný výber" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Rámček kurzoru" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Indikátor Voľného Miesta na Disku" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Pozadie" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption" msgid "Backg&round 2:" msgstr "Pozadie 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "tfrmoptionsfilepanelscolors.lblcursorcolor.caption" msgid "C&ursor Color:" msgstr "Farba kurzoru:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "tfrmoptionsfilepanelscolors.lblcursortext.caption" msgid "Cursor Te&xt:" msgstr "Text kurzoru:" #: 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 "Úroveň jasu neaktívneho panela" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Indikátor Zadnej Farby:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indikátor Prednej Farby:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "tfrmoptionsfilepanelscolors.lblmarkcolor.caption" msgid "&Mark Color:" msgstr "Farba označenia:" #: 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 "Farba písma:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: 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 "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Hľadanie súborov" #: 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 "Použíť 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 "Východzí" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formátovanie" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Triedenie" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Rozlíšovanie veľkosti písmen:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nesprávny formát" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Vlož&iť nové súbory:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Triedenie adresárov:" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "tfrmoptionsfilesviews.lblsortmethod.caption" msgid "&Sort method:" msgstr "Metóda triedenia:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: 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 "" #: 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ľ záložka je aktivovaná" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Názvy zložiek 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 "" #: 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 posunúť kurzor dolu, ako pri výbere klávesou 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 "Pridať" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Vymazať" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Šablóny..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Farby typu súborov (trieď podľa drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryattr.caption" msgid "Category a&ttributes:" msgstr "Atribúty kategórií:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "tfrmoptionsfiletypescolors.lblcategorycolor.caption" msgid "Category co&lor:" msgstr "Farba kategórie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Maska kategórie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Názov kategórie:" #: tfrmoptionsfonts.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "tfrmoptionsfonts.lbleditorfont.caption" msgid "&Editor font" msgstr "Písmo editora" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "tfrmoptionsfonts.lbllogfont.caption" msgid "&Log font" msgstr "Písmo logu" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "tfrmoptionsfonts.lblmainfont.caption" msgid "Main &font" msgstr "Hlavné písmo" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "tfrmoptionsfonts.lblviewerbookfont.caption" msgid "Viewer&Book Font" msgstr "Písmo prezerača kníh" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "tfrmoptionsfonts.lblviewerfont.caption" msgid "&Viewer font" msgstr "Písmo prezerača" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Pridaj horúcu klávesu" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopírovať" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Vymazať" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Vymaž horúcu klávesu" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Zm&eň horúcu klávesu" #: 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 "Premenovať" #: 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 "&Filter" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "K&ategórie:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Príkazy:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "tfrmoptionshotkeys.lblscfiles.caption" msgid "&Shortcut files:" msgstr "&Súbory zástupcov:" #: 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 "Príkaz" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pre nasledujúce cesty a podadresáre" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Ukáž ikony akcií v &menu" #: 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 "Zobraziť prekladané i&kony (pre zástupcov)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Zakáž špeciálne ikony" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "tfrmoptionsicons.gbiconssize.caption" msgid " Icon size " msgstr "Veľkosť i&kon" #: 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 "Zobraziť ikony vľavo od názvu súboru" #: 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 "&Všetko" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Všetky asociácie + &EXE/LNK (pomaly)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Bez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "tfrmoptionsicons.rbiconsshowstandard.caption" msgid "Only &standard icons" msgstr "L&en štandartné ikony" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "tfrmoptionsignorelist.btnaddsel.caption" msgid "A&dd selected names" msgstr "Prid&ať vybrané mená" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Pridať vybrané mená s celou cestou" #: 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 "&Ignorovať (nezobrazovať) nasledujúce súbory a adresáre:" #: 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í adresár (pohyby ako v Lynx-e)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Písanie" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+L&etters" msgctxt "tfrmoptionskeyboard.lblalt.caption" msgid "Alt+L&etters:" msgstr "Al&t+Písmená:" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Le&tters" msgctxt "tfrmoptionskeyboard.lblctrlalt.caption" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+Písmená:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "Písmená:" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Ploché tlačítka" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "tfrmoptionslayout.cbflatinterface.caption" msgid "Flat i&nterface" msgstr "Ploché rozhranie" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Ploché tlačítka" #: 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 "Zobraziť indikátor voľného miesta na disku" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "tfrmoptionslayout.cblogwindow.caption" msgid "Show lo&g window" msgstr "Zobraz okno logu" #: 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 #, fuzzy #| msgid "Show command &line" msgctxt "tfrmoptionslayout.cbshowcmdline.caption" msgid "Show command l&ine" msgstr "Zobraziť príkazový ria&dok" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "tfrmoptionslayout.cbshowcurdir.caption" msgid "Show current director&y" msgstr "Zobraziť aktuáln&y adresár" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Zobraziť &tlačítka diskov" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "tfrmoptionslayout.cbshowdrivefreespace.caption" msgid "Show free s&pace label" msgstr "V hlavičke panela zobraziť údaj o voľnom mieste" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Ukáž &tlačidlo zoznamu diskov" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "tfrmoptionslayout.cbshowkeyspanel.caption" msgid "Show function &key buttons" msgstr "Zobraziť &funkčné tlačidlá" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "tfrmoptionslayout.cbshowmainmenu.caption" msgid "Show &main menu" msgstr "Zobraziť hlavné menu" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show tool&bar" msgstr "Zobraziť &tlačídlovú lištu" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Ukáž 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 #, fuzzy #| msgid "Show &tabstop header" 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ť &záložky" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "tfrmoptionslayout.cbtermwindow.caption" msgid "Show te&rminal window" msgstr "Zobraziť okno terminálu" #: 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 "Zobraziť 2 zoznamy diskov (pevná šírka, nad oknami so súbormi)" #: 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 "" #: 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 "Zbaliť/Rozbaliť" #: 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 "Kopírovanie/Presun/Vytvorenie linku/symlinku" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "Vymazať" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "tfrmoptionslog.cblogdirop.caption" msgid "Crea&te/Delete directories" msgstr "Tvorba/Mazanie zložiek" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Spis &chýb" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "tfrmoptionslog.cblogfile.caption" msgid "C&reate a log file:" msgstr "&Vytvoriť súbor spisu:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "tfrmoptionslog.cbloginfo.caption" msgid "Log &information messages" msgstr "Spis informačných správ" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Spis &dokončených operácií" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "tfrmoptionslog.cblogvfs.caption" msgid "&File system plugins" msgstr "Zásuvné moduly súborového systému" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Spis súborových operácií" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Spis operácií" #: 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 "" #: 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 "Odober náhľady pre už neexistujúce súbory" #: 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 "Vždy choď na root disku, keď je zmena diskov" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Zobraziť varovné správy (len tlačítko \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" 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 "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" 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 "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 #, fuzzy #| msgid "Selection by mouse" msgctxt "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 "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otvoriť s ..." #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Skrolovanie" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Výber" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "tfrmoptionsmouse.lblmousemode.caption" msgid "&Mode:" msgstr "Mód:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "tfrmoptionsmouse.rbscrolllinebyline.caption" msgid "&Line by line" msgstr "Riadok po riadku" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "tfrmoptionsmouse.rbscrolllinebylinecursor.caption" msgid "Line by line &with cursor movement" msgstr "Riadok po riadku s posunom kurzoru" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "tfrmoptionsmouse.rbscrollpagebypage.caption" msgid "&Page by page" msgstr "Stránka po stránke" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: 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 "Ladenie" #: 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ď.)." #: 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.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 "Komprimačné zásuvné moduly pre prácu s archívmi." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy 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 tagy alebo atribúty obrázkov v zozname súborov, alebo ich používať na vyhľadávanie a \"multi-premenovanie\"." #: 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)." #: 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ú prezeranie súborov ako sú napr. obrázky, databázy a pod. v prezerači (F3, alebo Ctrl+Q)." #: 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 . musí zodpovedať zadanému)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Presné meno súhlasí" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Hľadaj písmeno" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Vyhľadať tieto položky" #: 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 "Aktivovať cieľový &panel pri kliknutí na jeho ľubovolnú záložku" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Zobraziť záložku, aj keď existuje len jedna" #: 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 "&Potvrdiť uzatvorenie všetkých záložiek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Obmedzená dĺžka názvu záložky na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Zobraziť uzamknuté záložky so znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Záložky na viac riadkov" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Hore otvorí novú záložku na pozadí" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Otvárať &nové záložky vedľa aktuálnej záložky" #: 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 "Na záložkách aj tlačítko zavrieť" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Hlavičky záložiek" #: 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 "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Umiestnenie záložky" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nie" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Klonovať tlačidlo" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Vymazať" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Zmeň horúcu klávesu" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "Vložte nové tlačítko" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Iné ..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "V&ymaž horúcu klávesu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ploché tlačítka" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Zadaj parametre príkazu, každý v samostatnom riadku. Stlač F1 na pozretie pomoci k parametrom" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Vzhľad" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Veľkosť lišty:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Príkaz:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Horúca klávesa:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ikona:" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Veľkosť ikony:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Príkaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Pomôcka:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačidla" #: 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 "Ponechať o&kno terminálu otvorené aj po skončení programu" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "tfrmoptionstoolbase.cbtoolsruninterminal.caption" msgid "&Execute in terminal" msgstr "Spustiť v t&erminály" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption" msgid "&Use external program" msgstr "Po&užiť externý program" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "tfrmoptionstoolbase.lbltoolsparameters.caption" msgid "A&dditional parameters" msgstr "Ďalšie parametre" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "tfrmoptionstoolbase.lbltoolspath.caption" msgid "&Path to program to execute" msgstr "Cesta k externému &programu" #: 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óny..." #: 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 "" #: 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 "Zobraziť bublinovú pomoc" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Pomoc pre kategóriu:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategórie:" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Farba kurzoru:" #: 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.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Mód prezerania knihy" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Vzorka" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption" msgid "&Background color in book viewer" msgstr "Far&ba pozadia v prezerači kníh" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "tfrmoptionsviewer.lblfontcolorviewerbook.caption" msgid "&Font color in book viewer" msgstr "&Farba písma v prezerači kníh" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "tfrmoptionsviewer.lblnumbercolumnsviewer.caption" msgid "&Number of columns in book viewer" msgstr "Počet stĺpcov v prezerači k&níh" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Konfigurovať" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Komprimovať súbory" #: 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 "Vytvoriť samostat&né archívne súbory pre každý vybratý súbor/adresár" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbaľovací archív" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Zakódovať" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" 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 #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Najskôr vytvoriť archív TAR" #: 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 #, fuzzy #| msgid "Close" 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 #, fuzzy 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:" #: 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 "Zadaj text na vyhľadanie alebo filtrovanie" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Rozlíšovať veľkosť písmen" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Adresáre" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: 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 "" #: 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 "Zásuvný modul" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Hodnota" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Zavrieť" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vyber znaky na vloženie:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" 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 "Sticky" #: 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 msgid "Accessed:" msgstr "Naposledy otvorený" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Zmenený" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Len na čítanie" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Rekurzívne" #: 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 "(šedé 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 "Spustiť" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(šedé pole znamená nezmenenú hodnotu)" #: tfrmsetfileproperties.lbloctal.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Číselne:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Delenie súborov" #: 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 "Veľkosť a počet častí" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Cieľový adresár" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Počet častí" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption #, fuzzy #| msgid "Gigabytes" msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "GB" #: tfrmsplitter.rbtnkilob.caption #, fuzzy #| msgid "Kilobytes" msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "KB" #: tfrmsplitter.rbtnmegab.caption #, fuzzy #| msgid "Megabytes" 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.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 "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 "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Vytvoriť symbolický odkaz" #: 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 "Existujúci cieľ (kde link bude ukazovať)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: 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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Zavrieť" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Porovnať" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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 #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Meno" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Meno" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Porovnať" #: 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 "Pri&dať nový" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Zmeniť" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Východzí" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" 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 #, fuzzy #| msgid "Remove" 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 #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "De&tekovať typ archívu podľa obsahu" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Môžete mazať súbory" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Podporuje šifrovanie" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Zobraziť ako normálne súbory (skryť ikonu komprimátora)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Podporuje komprimáciu v pamäti" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify existing archives" msgid "Can &modify existing archives" msgstr "Môžte meniť existujúce archívy" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "&Archív môže obsahovať viac súborov" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Môžte vytvárať nové archí&vy" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Podpor&uje dialóg s nastavením" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Podporuje vyhľadávanie textu v archívoch" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Popis:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "D&etekovaný text:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Prípona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Vlajky:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Me&no:" #: 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 prezerači..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zobraziť About správu" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: 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 "Skopírovať Súbor" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopírovať do schránky" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: 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 #, fuzzy #| msgid "Exit" msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Koniec" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Hľadať" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: 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 "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: 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 #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Náhľad" #: 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 #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.caption" msgid "+ 180" msgstr "Otoč o 180" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180 degrees" msgstr "Otoč o 180" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.caption" msgid "- 90" msgstr "Otoč o 270" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate -90 degrees" msgstr "Otoč o 270" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.caption" msgid "+ 90" msgstr "Otoč o 90" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate +90 degrees" msgstr "Otoč o 90" #: tfrmviewer.actsave.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Okopírovať obrazovku" #: 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 "Vybrat Všetko" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Zobraziť &binárne" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Zobraziť ako knihu" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Zobraziť &hexadecimálne" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Zobraziť ako &Text" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Zobraziť &ako zalamovaný text" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Roztiahnuť" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Natiahni obrázok" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Priblížiť" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Oddialiť" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Vystrihnúť" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýrazniť" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Farba" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Zmeniť veľkosť/rozlíšenie" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Zpäť" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Prezerač" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentácia" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pero" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zvýrazniť" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Farba" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentácia" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Zobraziť" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edit" #: 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.miprint.caption msgid "Print..." msgstr "Tlač..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Otočiť" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Okopírovať obrazovku" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Zobraziť" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrať všetko" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Štart" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Súborové operácie" #: 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 "Zrušiť" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: 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 "Rad" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy 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 "Pracuj na pozadí (oddelené spojenie)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ak súbor existuje" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Výška" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Šírka" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile 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" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Zruš 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 "" #: 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 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 "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 "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: 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 "Nastavenie stĺpcov:" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopírovanie (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: 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 "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Zrušiť" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Pokračovať" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Kopírovať do" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Kopírovať do &Všetko" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Ukončiť program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Všetko ignorovať" #: 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 "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepísať" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepísať &Všetko" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepísať Všetko Staršie" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Pr&emenovať" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Znovu" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: 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 "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ano" #: 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 #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauza" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Štart" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Rad" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Rýchlosť %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "Rýchlosť %s/s, ostávajúci čas %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interný editor Double Commanderu." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgid "Goto Line" msgstr "" #: 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 "" #: 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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 "Opýtaj sa;Prepíš;Skopíruj do;Preskoč" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Opýtaj sa;Prepíš;Prepíš staršie;Preskoč" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Opýtaj sa;Nenastavuj už nikdy;Ignoruj chyby" #: 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.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 "Definovať vzor" #: ulng.rsfinddepth 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 adresár" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Adresár %s neexistuje!" #: ulng.rsfindfound 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 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 "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začať v" #: ulng.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Voľných %s z %s" #: ulng.rsfreemsgshort #, fuzzy 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 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 msgid "Extension" msgstr "Prípona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: 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.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 "" #: 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?\n" msgstr "" #: 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 "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Hľadať súbory" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hlavný" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Prezerač" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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 "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 "" #: 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 "Konfigurovať užívateľské stĺpce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akcie" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Upraviť" #: ulng.rsmnueject msgid "Eject" msgstr "Vysunúť" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: 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 #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvoriť" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otvoriť s ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Iné ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Triediť podľa" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" 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 "" #: ulng.rsmsgapplicationname msgid "Description: %s" msgstr "" #: 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 "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nemôžem vymazať adresár %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Zmena adresára na [%s] zlyhala!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Odstrániť všetky neaktívne záložky?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Záložka (%s) je uzamknutá! Aj tak zavrieť?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Skutočne chcete skončiť?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Kopírovať %d vybraných súborov/zložek?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopírovať vybrané \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 "Vymazať čiastočne skopírovaný súbor?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Vymazať %d vybrané súbory / adresáre?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Vymazať %d vybraných súborov/zložiek do koša?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Vymazať vybrané \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Presunúť vybrané \"%s\" do koša?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nedá sa zmazať do koše! Vymazať priamo?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nie je dostupný" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext #, fuzzy msgid "Enter file extension:" msgstr "Zadajte príponu súboru:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Zadajte názov:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: 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 msgid "Can not connect to server: \"%s\"" msgstr "Nedá sa spojiť so serverom: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nedá sa kopírovať súbor %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Už existuje adresár s menom \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Dátum %s nie je podporovaný!" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Adresár %s existuje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Operácia prerušená uží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 msgid "Can not create directory %s!" msgstr "Nedá sa vytvoriť adresár %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Neplatný odkaz" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Súbory neexistujú" #: 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 msgid "Cannot rename file %s to %s" msgstr "Nedá sa premenovať súbor %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nemôžem uložiť asociáciu súboru!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Súbor sa nedá uložiť" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nedajú sa nastaviť atribúty pre \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nedá sa nastaviť dátum/čas pre \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nemôžem nastaviť majiteľa/skupinu pre \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Súbor %s bol zmenený, uložiť?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Súbor %s existuje, prepísať?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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úbor %s je len na čítanie! Aj tak Vymazať?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Adresár %s existuje, prepísať?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Následuj symbolický odkaz \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 "Cesta" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries 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 "Príkaz:" #: 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 "Meno:" #: 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" msgstr "" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Nesprávna cesta" #: ulng.rsmsginvalidpathlong 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 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 "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopírovať súbor %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Zmazať súbor %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Chyba:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Rozbaliť súbor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Vytvoriť odkaz %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Vytvoriť adresár %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Presunúť súbor %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Komprimovať do súboru %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstrániť adresár %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Vytvoriť symlink %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testovať integritu súboru %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hlavné heslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prosím, zadejte hlavné heslo:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nový súbor" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ďalšia časť 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 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 "" #: 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 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 zadaj heslo na kontrolu:" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Vymazať %s" #: ulng.rsmsgpresetalreadyexists #, fuzzy msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predvoľba \"%s\" už existuje. Nahradiť?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Premenovať/presunúť %d vybraných súborov/zložek?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Premenovať/presunúť vybrané \"%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 "Prosím, na uplatnenie zmien reštartujte program" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Vybrané: %s z %s, súbory: %d z %d, adresáre: %d of %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 "Prosím, vyberte len súbory s kontrolným súčtom!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prosím, vyberte umiestnenie ďalšej časti" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Nastaviť názov disku" #: 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 msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Premenovať záložku" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nové meno záložky:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cieľová cesta:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Bolo vybraných príliš veľa súborov." #: 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 msgid "User name:" msgstr "Užívateľské meno:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Užívateľské meno (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 "Názov disku:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prosím, zadajte veľkosť zväzku:" #: ulng.rsmsgwipefldr #, fuzzy msgid "Wipe %d selected files/directories?" msgstr "Bezpečne zmazať %d vybraných súborov/zložek?" #: ulng.rsmsgwipesel #, fuzzy msgid "Wipe selected \"%s\"?" msgstr "Bezpečne zmazať vybrané \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" 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 "Nemeniť;VEĽKÝM;malým;Prvý znak veľkým;Prvý Znak Každého Slova Veľkým;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Sieť" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Ostatní" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Systémový" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Prerušené" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Počítam kontrolný súčet" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Počítam kontrolný súčet v \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" 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 msgid "Calculating \"%s\"" msgstr "Počíta sa \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Pripájam sa" #: ulng.rsopercombiningfromto 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 msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírujem z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírujem \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváram adresár" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Vytváram adresár \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Mazanie" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Mazanie v \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Mazanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Vykonávam" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Vykonávam \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbaľujem" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Výpis \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Presúvam" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Presúvam z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Presúvam \"%s\" na \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nespustené" #: ulng.rsoperpacking msgid "Packing" msgstr "Balím" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Balím z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Balím \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pozastavené" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pozastavujem" #: ulng.rsoperrunning msgid "Running" msgstr "Beží" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavujem vlastníctvo" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Nastavujem vlastníctvo v \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavujem vlastníctvo \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Delím" #: ulng.rsopersplittingfromto 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 "Skúšam" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Skúšam v \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Skúšam \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Overujem kontrolný súčet" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Overujem kontrolný súčet v \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Overujem kontrolný súčet \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čakám na prístup k zdroju súborov" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čakám na reakciu užívateľa" #: ulng.rsoperwiping msgid "Wiping" msgstr "Bezpečné mazanie" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Bezpečné mazanie v \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Bezpečné mazanie \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Pracujem" #: 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 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 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 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 "Meno typu archívu:" #: ulng.rsoptassocpluginwith 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 "" #: 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 "Zadajte príponu" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "oddelenom okne;minimalizovanom oddelenom okne;panely operácií" #: ulng.rsoptfilesizefloat msgid "float" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong #, fuzzy,badformat msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Skratka pre cm_Delete bude zaregistrovaná, takže môže byť použitá na obrátenie tohto nastavenia." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 "Horúce klávesy" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: 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 #, 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 "Pre toto nastavenie" #: ulng.rsopthotkeysshortcutfordeleteissequence 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 #, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Klávesa %s sa už používa pre" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Zmeniť na %s?" #: ulng.rsopthotkeysusedby #, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "použité pre %s %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 "Funkcie" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: 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 "Umiestnenie konfigurácie" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Užívateľské stĺpce" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Rýchle adresáre" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tlačidlo zoznamu diskov" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asociácie súborov" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nový" #: ulng.rsoptionseditorfileoperations #, fuzzy msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Súborové operácie" #: ulng.rsoptionseditorfilepanels #, fuzzy msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panely súborov" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Hľadanie súborov" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Náhľad súborov" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy súborov" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Záložky zložiek" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: 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 "Horúce klávesy" #: 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 "Rozvrhnutie" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Rôzne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Myš" #: ulng.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Zásuvné moduly" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" 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.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 "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: 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čí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 "Na vrch zoznamu súborov;Pod adresáre (ak sú adresáre zoradené pred súbormi);Na vytriedenej pozícii;Na spodok zoznamu súborov" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned 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 "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Meno" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrované pre" #: 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 "Súbory;Ad&resáre;Súbory a Adresáre" #: 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 "Sc&hovaj filter panelu, keď s ním nepracuješ" #: 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 zobraz ich na začiatku;Triediť ako súbory a zobraz ich na začiatku;Triediť ako súbory" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Abecedne, s ohľadom na prízvuk;Prirodzené triedenie: abecedne a číselne" #: 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 "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Názov kategórie:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 "Nemeň pozíciu;Použi také isté 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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Súbory: %d, adresáre: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nedajú sa zmeniť prístupové práva pre \"%s\"" #: ulng.rspropserrchown 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 "Adresár" #: 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 "" #: 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrať adresár" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Príkaz" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "Súbory" #: 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.rssimplewordworkdir msgid "WorkDir" msgstr "" #: 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 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ý adresár!" #: 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 "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Zvoľte adresár:" #: ulng.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 "Chyba pri vytváraní zástupcu." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Predvolený text" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Prostý text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dňov" #: 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ň(ne,ňov)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok(y,ov)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: 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 prezerač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 "" #: 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 "Prezerač" #: ulng.rsunhandledexceptionmessage 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 "" #: 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.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 "Sieť" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interný prezerač Double Commandera." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódovanie" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nová veľkosť" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nebol nájdený!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.ru.po������������������������������������������������������������0000644�0001750�0000144�00001475303�13555366126�017265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.9.0 beta\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2019-10-22 01:25+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Сравнение... %d%% (ESC для отмены)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Справа: Удалить файлы (%d шт.)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Найдено файлов: %d (Одинаковых: %d, Различных: %d, Уникальных слева: %d, Уникальных справа: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Слева направо: Копируется файлов: %d, общий размер: %d байт" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "С&ледовать ссылкам" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Сохранить файл(ы) контрольных сумм как:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "Выделить в&сё" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отменить" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Выход" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Первое отличие" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "С&лева" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "С&права" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Сохранить &все" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.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 "Направление" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Установить" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "У&становить для всех" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путь:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Группа" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последний доступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последнее изменение:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. ссылка" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Имя" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Поместить курсор на первый файл в списке" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Высота" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Пр&авка" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "З&агрузить" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Переименовать" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "&Восстановить всё" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Сохранить" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Групповое переименование" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] Расширение" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Счётчик" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Найти и заменить" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Счётчик" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] День" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] День (2 цифры)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] День недели (краткий, т.е., \"Пн\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] День недели (полный, т.е., \"понедельник\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Символ с позиции x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Символы с позиции x по y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Час (2 цифры)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Минута" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Минута (2 цифры)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месяц" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месяц (2 цифры)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Название месяца (краткое, т.е., \"янв\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Название месяца (полное, т.е., \"Январь\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Имя" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Символ с позиции x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Символы с позиции x по y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Время..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Расширение..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Имя..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Плагин" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунда (2 цифры)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Год (2 цифры)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Год (4 цифры)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "&Редактировать имена..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "&Загрузить имена из файла..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "Тип открываемого файла: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Список файлов" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Список URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Один файл" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Один URI" #: tfrmopenwith.misingleurl.hint 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.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 "Фиксированная ширина колонок" #: 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 "&Каталог программы (portable version)" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" 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 "Добавление из главной панели" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Цвет фона &индикатора:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Цвет индикатора:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гигабайт:" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Консоль" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "&Редактор" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Протоко&л" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "О&сновной" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Текущий &путь" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Результаты поиска" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Просмотрщик в режиме \"&Книга\"" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" 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.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.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.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.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 "Одним щелчком открывать папки и двойным файлы" #: 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\", и т.п.)" #: 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.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, атрибуты изображений и т.д.) в панелях или при поиске/переименовании" #: 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, и т.д." #: 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) файлы различных форматов, таких как рисунки, таблицы, базы данных и т.д." #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "Параметры:" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "&Дублировать" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Удалить" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "&Редактировать" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "Доба&вить" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Выбрать" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Другое..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "У&далить" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Подсказка" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Всплывающая подсказка на основе типа, команды и параметров кнопки" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Плоские кнопки" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Сообщить об ошибках с командами" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Параметры команды, каждый на отдельной строке. F1 - помощь" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Вид кнопок" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Р&азмер панели:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Команда:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметры:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помощь" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Горячая клавиша:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "&Файл значка:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ра&змер значков:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Кома&нда:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Пара&метры:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "П&уть запуска:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Подс&казка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Добавить панель со ВСЕМИ командами DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "внешнюю команду" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "внутреннюю команду" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "разделитель" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "меню" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Резервирование..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущая панель инструментов..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" TC (оставить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" TC (удалить существующий)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Наивысшая панель инструментов..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Сохранить резервную копию панели инструментов" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" TC (оставить существующий)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" TC (удалить существующий)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "сразу после выбранного" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед выбранным" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Восстановить панель инструментов из резервной копии" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "из файла панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "из одного файла TC .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "из файла \"wincmd.ini\" TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "сразу после выбранного" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед выбранным" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Найти и заменить..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "сразу после выбранного" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед выбранным" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "во всём вышеперечисленном..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "во всех командах..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "во всех файлах значка..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "во всех параметрах..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "во всех путях запуска..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "сразу после выбранного" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед выбранным" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Режим просмотра \"Книга\"" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "&Цвет фона " #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" 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 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 "Время:" #: 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 msgid "Field" msgstr "Поле" #: 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 "ИЛИ (любое правило)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Открыт:" #: 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 "Запись" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "&Графика" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "Увеличение" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Увеличить" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Выделение" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Рисование" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Красные глаза" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Изменить размер" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Отменить" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Программа просмотра" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд шоу" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Карандаш" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Выделение" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Рисование" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд шоу" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Просмотреть" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "&Пауза для всех" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "Если файл существует" #: 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 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" msgstr "" "Файл с контрольной суммой поможет объединить файлы, но не был найден:\n" "%s\n" "\n" "Вы можете сделать его доступным и нажать \"OK\", когда будете готовы,\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 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 msgid "Copy (%d) %s" msgstr "Копия (%d) %s" #: 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 "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " 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.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.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 msgid "Speed %s/s" msgstr "Скорость %s/с" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "\"]\" не найдена в строке %s" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "число уровней: %s" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "все (неограниченная)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "только текущий каталог" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Каталог %s не существует!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Найдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сохранить шаблон поиска" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Имя шаблона:" #: 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.rsfreemsg msgid "%s of %s free" msgstr "%s из %s свободно" #: ulng.rsfreemsgshort 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 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.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?\n" msgstr "" "Внимание! Восстановление из резервной копии очистит существующий список избранных каталогов и заменит его импортированным.\n" "\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.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?\n" msgstr "" "Файл с таким именем уже существует.\n" "Хотите переписать его?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Вы уверены, что хотите восстановить значения по умолчанию?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Вы уверены, что хотите удалить набор \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Файл \"%s\" был изменён.\n" "Хотите сохранить его сейчас?\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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команды" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<По умолчанию>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Восьмеричный" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Копировать в буфер имена с UNC-путём" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Неверная контрольная сумма файла назначения:\n" "\"%s\"\n" "\n" "Хотите оставить повреждённый файл?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Нельзя скопировать/переместить файл \"%s\" сам в себя!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Не удалось удалить каталог %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Невозможно перезаписать каталог \"%s\" файлом, не являющимся каталогом \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Переход в каталог \"%s\" не удался!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Закрыть все неактивные вкладки?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Вкладка (%s) заблокирована! Закрыть?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Подтверждение параметра" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Вы уверены, что хотите выйти?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Копировать выбранные файлы/каталоги (%d шт.)?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Копировать выбранный \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Удалить %d выбранных файлов/каталогов?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Удалить %d выбранных файлов/каталогов в корзину?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Удалить выбранный \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Удалить выбранный \"%s\" в корзину?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Не удалось соединиться с сервером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Не удалось скопировать файл из %s в %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Уже существует каталог с именем \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Дата %s не поддерживается" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Не удалось установить атрибуты для \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Не удалось установить дату/время для \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Не удалось установить владельца/группу для \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Будут загружены избранные вкладки: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Сохранить текущие вкладки поверх существующих избранных вкладок" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файл %s изменён, сохранить?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Заменить:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Файл %s существует, переписать?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "файлом:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "Длина целевого пути (%d) превышает %d символов!\n" "%s\n" "Большинство программ не смогут обратиться к файлу/каталогу с таким длинным именем!\n" #: ulng.rsmsgfilereadonly 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" "Продолжить?\n" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Размер файла \"%s\" слишком большой для файловой системы получателя!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "Каталог %s существует, объединить?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Следовать ссылке \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Выберите формат текста для импорта" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Всего объектов сохранено: %d\n" "\n" "Резервная копия: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всего объектов экспортировано: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Вы хотите удалить все элементы внутри подменю [%s]?\n" "Ответ НЕТ удалит только разделители меню и оставит элементы внутри подменю.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Укажите место и имя для сохранения файла избранных каталогов" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Неверная длина файла назначения для файла : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Пожалуйста, вставьте следующий диск или другой носитель.\n" "\n" "Это позволит записать файл:\n" "\"%s\"\n" "\n" "Число оставшихся для записи байт: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "Недопустимое шестнадцатеричное число: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некорректный путь" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Путь %s содержит запрещённые символы" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Этот файл не является корректным плагином!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Копирование файла %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Распаковка файла %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Информация: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Создание ссылки %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Создание каталога %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Перемещение файла %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Упаковка в файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Завершение программы" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Запуск программы" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Удаление каталога %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Выполнено: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Создание символьной ссылки %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Проверка целостности файла %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Стирание файла %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Удалить %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" существует. Перезаписать?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Проблема выполнения команды (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Переименовать/переместить %d выбранных файлов/каталогов?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Выберите тип файла для добавления расширения \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Ошибка! Не удалось найти файл конфигурации TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Ошибка! Не удалось найти исполняемый файл TC:\n" "%s\n" #: 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.\n" msgstr "" "Ошибка! TC всё ещё запущен, но для этой операции он должен быть закрыт.\n" "Закройте его и нажмите OK или нажмите ОТМЕНА для прекращения.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Ошибка! Не удалось найти каталог с панелями инструментов TC:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Укажите место и имя для сохранения файла панели инструментов TC" #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Сохранено!\n" "Имя файла панели инструментов: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Стереть %d выбранных файлов/каталогов?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Стереть выбранный \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "с" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Неверный пароль!\n" "Пожалуйста, попробуйте ещё раз!\n" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Автоматически переименовывать в \"name (1).ext\", \"name (2).ext\" и т.д.?" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без изменений;ПРОПИСНЫЕ;строчные;С прописной;Каждое Слово С Прописной;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Внимание, одинаковые имена!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Подсчёт" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Вычисление \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Объединение" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Объединение файлов \"%s\" в \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копирование" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Копирование из \"%s\" в \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Копирование \"%s\" в \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Создание каталога" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Создание каталога \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Удаление" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Удаление в \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Удаление \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Выполнение" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Выполнение \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Распаковка" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Распаковка из \"%s\" в \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Список" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Список \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Перемещение" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Перемещение из \"%s\" в \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Перемещение \"%s\" в \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упаковка" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Упаковка из \"%s\" в \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Установка свойства в \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Установка свойства на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Разрезание" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Проверка в \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Проверка \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверка контрольной суммы" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Проверка контрольной суммы в \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Стирание в \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Сочетание %s для cm_Delete будет зарегистрировано, поэтому оно может быть использовано обратным этой настройке." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Горячая клавиша %s уже используется." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Изменить на %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Опции \"%s\" изменены.\n" "\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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "\"%s\" уже существует!" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "Плагин \"%s\" не найден!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "рег. выраж." #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Значение \"%s\" поля \"%s\" не найдено!" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлов: %d, папок: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Не удалось изменить права доступа для \"%s\"" #: ulng.rspropserrchown 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.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.\n" msgstr "" "Поиск файлов с DSX-плагином уже запущен.\n" "Необходимо завершить его, прежде чем начать новый.\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.\n" msgstr "" "Поиск файлов с WDX-плагином уже запущен.\n" "Необходимо завершить его, прежде чем начать новый.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Выберите каталог" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Выберите окно" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Число замен: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Замена не состоялась." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.ro.po������������������������������������������������������������0000644�0001750�0000144�00001231172�13424362040�017233� 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-01-17 23:08+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Se compară... %d%% (ESC pentru a renunța)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "De la Dreapta la Stânga: Copiază %d fișiere, dimensiune totală: %d octeți" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "Urmărește &legăturile" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervă spațiu" #: 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Salvează fișierul/fișierele sumă de control în:" #: 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..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Selectează to&ate" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Anulează" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Stânga (&l)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "D&reapta" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Sal&vează Toate" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Salvează Toate" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Setează proprietăți" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Sete&ază tuturor fișierelor selectate" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sari &peste acest fișier" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conține:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cale:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grup" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ultima accesare:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ultima modificare:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ultima schimbare de status:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mărime:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Legătură simbolică la:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nume" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensibilitate la m&ajuscule" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Pune cursorul pe primul fișier din listă" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Pune cursorul pe ultimul fișier din listă" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Creează dosar nou" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Înălțime" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Lățime" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Editează" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Încarcă (&l)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Redenumește" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Resetează to&ate" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "RedenumireMultiplă" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Activare (&b)" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Extensie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contor" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Găsește și Înlocuiește" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Jurnal Rezultate" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Countor" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Zi" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Zi (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Zi a săptămânii (scurt, ex., \"mar\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Zi a săptămânii (lung, ex., \"marți\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Caracter la poziția x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caractere de la poziția x la y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Oră" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Oră (2 cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Lună" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Lună (2 cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Mule lună (scurt, ex., \"ian\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nume lună (lung, ex., \"ianuarie\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nume" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Caracter la poziția x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caractere de la poziția x la y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Timpu..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nume..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Modul" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Secundă" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Secundă (2 cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] An (2 cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] An (4 cifre)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI-uri Multiple" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nume de fișier unic" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI Singular" #: tfrmopenwith.misingleurl.hint 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.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" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 msgid "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Ajutor" #: 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:" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utilizează Indicator colorat &gradat" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicator de Spațiu Liber pe Disc" #: 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 msgid "&Brightness level of inactive panel" msgstr "Nivelul de strălucire al panoului inactiv (&b)" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Culoarea de fundal a in&dicatorului:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Culoarea de prim plan a &Indicatorului:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Culoare &Marcaj:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Fontul &consolei" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Font &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Font jurna&l" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fontul principal" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Font Vizualizator de Carte (&b)" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Font &vizualizator" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "B&utoane plate" #: 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.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.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.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.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 "" #: 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.)" #: 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.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ă" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Buton de c&lonare" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editează tastă rapidă (&k)" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserează un buton nou" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Altul..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Înlătură tastă rapidă (&y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Butoane plate (&f)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aspect" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensiune &bară:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&dă:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametri(&s):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajutor" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Tastă rapidă:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&niță:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Mărime iconiță (&z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mandă:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Cale de pornire (&h):" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Indiciu (&t):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Copie de rezervă..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Caută și înlocuiește..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tip de buton" #: 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Mod Vizualizare Carte" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemplu" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Culoare fundal în vizualizatorul de cărți (&b)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Culoarea &fontului în vizualizatorul de cărți" #: 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Renunţă" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selectați caracterele pentru inserție:" #: 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 msgid "Accessed:" msgstr "Accesat:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizează" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizează dosarele" #: tfrmsyncdirsdlg.cbextfilter.text 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafică" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Module" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Mărește" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidențiază" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Desenează" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ochi roșii" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionează" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Anulează" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Vizualizator" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentare" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stilou" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Evidențiază" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Desenează" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentare" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Vizualizează" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: 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.miprint.caption msgid "Print..." msgstr "Imprimare..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selectează Toate" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: 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ă" #: 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 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" 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 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 msgid "Copy (%d) %s" msgstr "Copiază (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Viteză %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "Dosarul %s nu există!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Liber %s din %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actiuni" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nu se poate șterge dosarul %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sigur doriți să închideți?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Se copiază %d fișiere/dosare selectate?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Se copiază selecția \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Se șterge %d fișiere/dosare selectate?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Mutați %d fișiere/dosare selectate la gunoi?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Se șterge selecția \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Se mută selecția \"%s\" la gunoi?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Nu s-a putut efectua conexiunea la server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nu s-a putut copia fișierul %s la %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Există deja un dosar cu numele de \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s nu este admisă" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nu am putut seta atributele pentru \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nu am putut seta data/timpul pentru \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nu am putut seta proprietarul/grupul pentru \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Fișierul %s a fost modificat, doriți salvarea lui?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s octeți, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Suprascrie:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Fișierul %s există, se suprascrie?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Cu fișierul:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly 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 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 msgid "Folder %s exists, merge?" msgstr "Dosarul %s există, se combină?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Urmează legătura simbolică \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Cale nevalidă" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copiază fișierul %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Dezarhivare fișierul %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informații: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Creează legătura %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Creează dosarul %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mută fișierul %s" #: ulng.rsmsglogpack 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 msgid "Remove directory %s" msgstr "Elimină dosarul %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Gata: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Creează legătura simbolică %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testează integritatea fișierului %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Șterge definitiv fișierul %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Șterge (&d) %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Fișierul predefinit \"%s\" există deja. Suprascrieți?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Se redenumesc/mută %d fișiere/dosare selectate?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Se șterg definitiv %d fișiere/dosare selectate?" #: ulng.rsmsgwipesel 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!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Se calculează suma de control în \"%s\"" #: ulng.rsopercalculatingchecksumof 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 msgid "Calculating \"%s\"" msgstr "Se calculează \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Se îmbină" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Se îmbină fișierele \"%s\" la \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Se copiază" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Se copiază de la \"%s\" la \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Se copiază \"%s\" la \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Se creează dosarul" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Se creează dosarul \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Se șterge" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Se șterge în \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Se șterge \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Se execută" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Se execută \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Se extrage" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Se listează \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Se mută" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Se mută de la \"%s\" la \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Se împachetează de la \"%s\" la \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Se setează proprietatea în \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Se setează proprietatea lui \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Se separă" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Se testează în \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Se testează \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Se verifică suma de control" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Se verifică suma de control în \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Se curăță în \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Scurtătura %s este deja folosită." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "O schimbați la %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fișiere: %d, dosare: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nu se pot schimba drepturile de acces pentru \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selectați un director" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.pt_BR.po���������������������������������������������������������0000644�0001750�0000144�00001276265�13433576734�017656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparando... %d%% (ESC para cancelar)." #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Direito: Excluir %d arquivo(s)." #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Equerda para Direita: Copiar %d arquivos, tam total: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "S&eguir links" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espaço" #: 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Gra&var arquivos checksum em:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verificar checksum..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Selecion&ar Todos" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Esquerdo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Direito" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Salvar &tudo" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Salvar tudo" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Definir propriedades" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Definir p&ara todos os selecionados." #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "P&ular este arquivo." #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contém:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Caminho:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Último acesso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificação:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Última alteração de estado:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamanho" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link simbólica para:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensível a m&aiúsculas" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar cursor no primeiro arquivo da lista." #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar cursor no último arquivo da lista." #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Criar nova pasta" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Excluir" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Ca&rregar" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Ren&omear" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Re&por tudo" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Salvar" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Multirenomear" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "A&tivar" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Extensão" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Localizar && substituir" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log de Resultados" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Contador" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dia" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dia (2 dígitos)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dia da semana (curto, ex. \"seg\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dia da semana (longo, ex. \"segunda\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Caracter na posição x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caracteres desde a posição x até y." #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hora (2 dígitos)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuto (2 dígitos)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mês" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mês (2 dígitos)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nome do mês (curto, ex. \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nome do mês (longo, ex. \"janeiro\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nome" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Caracter na posição x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caracteres desde a posição x até y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensão..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nome..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Suplemento" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Segundo" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Segundo (2 dígitos)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Ano (2 dígitos)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Ano (4 dígitos)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiplos URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome de arquivo único." #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI único" #: tfrmopenwith.misingleurl.hint 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.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:" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Redefinir para 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 msgid "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Ajuda" #: 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" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Opções estendidas dos itens:" #: 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usar indicador &gradiente." #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espaço livre na unidade." #: 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 msgid "&Brightness level of inactive panel" msgstr "Nível de &brilho do painel inativo." #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Cor de fundo do in&dicador:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Cor 1º plano do &indicador:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Cor da &marca:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Fonte do console" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Letra do &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Fonte do log" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Letra do programa" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Letra do vis&ualizador de livro" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Letra do visuali&zador" #: 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "B&otões planos." #: 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.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.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.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.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 "" #: 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.)" #: 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.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" #: 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." #: 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)" #: 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.edruntermparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edruntermparams.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" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botão" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Excluir" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editar atal&ho" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserir novo botão" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Selecionar" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Outro..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Remo&ver atalho" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugestão" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botões p&lanos." #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Relatório de erros com comandos." #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aparência" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Tamanho da &barra:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajuda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Atalho:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Íco&ne:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamanho do í&cone:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parâmetros:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Su&gestão:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Adicionar barra de ferramentas com TODOS COMANDOS DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "por um comando externo" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "por um comando interno" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "de uma guia" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "de uma sub-barra de ferramenta" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Backup" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra Ferramenta atual..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um arquivo de barra de ferramenta (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um arquivo TC .BAR (manter o existente)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um arquivo TC .BAR (excluir o existente)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter o existente)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (excluir o existente)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de Ferramenta no Topo..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Salvar um backup da Barra de Ferramentas" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um arquivo de Barra de Ferramentas (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um arquivo TC .BAR (manter o existente)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um arquivo TC .BAR (excluir o existente)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter o existente)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (excluir o existente)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "Logo após a seleção atual" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "Antes da seleção atual" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restaurar um backup da Barra de Ferramentas" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar na barra de ferramentas atual" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "De um arquivo da barra de ferramentas (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "A partir de um único arquivo TC .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "De \"wincmd.ini \" do TC ..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual." #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual." #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior." #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior." #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "substituir a barra de ferramentas superior." #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a seleção atual." #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento." #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "antes da seleção atual." #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Encontrar e substituir..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "lgo após a seleção atual" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "como primeiro elemento." #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "após a seleção atual" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "em todos os acima ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "em todos os comandos..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "Em todos os nomes de ícones ..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "em todos parâmetros..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "em todos caminhos iniciais..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "logo após a seleção atual" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "antes da seleção atual." #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botão:" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Visualização Modo Livro" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemplo:" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Cor de &fundo da visão livro." #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Cor de te&xto do livro." #: 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 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:" #: 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 msgid "Field" msgstr "Campo" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecionar os caracteres a inserir:" #: 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 msgid "Accessed:" msgstr "Acessado:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: 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 "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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Suplementos" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Reduzir" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Pintar" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Olhos vermelhos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizador" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Caneta" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pintar" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Show de Slides" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: 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.miprint.caption msgid "Print..." msgstr "Imprimir..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecionar tudo" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o arquivo existir" #: 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" #: 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 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" 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?\n" #: 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 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 msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: 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.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.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.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 msgid "Speed %s/s" msgstr "Velocidade %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "A pasta %s não existe!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Livres %s de %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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?\n" #: 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ações" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "CRC32 incorreto para o arquivo resultante: \n" "\"%s\"\n" "\n" "Você deseja manter o arquivo corrompido resultante de qualquer maneira?\n" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Impossível Excluir a pasta %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Tem a certeza que quer desistir?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Copiar %d arquivos/pastas selecionados?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" selecionados?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Excluir %d arquivos/pastas selecionados?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Excluir %d arquivos/pastas selecionados para a lata de lixo?" #: ulng.rsmsgdelsel #, fuzzy,badformat msgid "Delete selected \"%s\"?" msgstr "Excluir %d arquivos/pastas selecionados?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Excluir \"%s\" selecionados para a lata de lixo?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Impossível conectar ao servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossível copiar o arquivo %s para %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Já existe uma pasta chamada \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s não é suportada" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Impossível definir atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossível definir data/hora para \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Impossível definir proprietário/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Não foi possível definir permissões para \"%s\"" #: 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 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 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 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 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 msgid "File %s changed, save?" msgstr "O arquivo %s foi alterado! Salvar?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobreescrever:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "O arquivo %s já existe! Substituir?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Com arquivo:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "A pasta %s já existe! Substituir?" #: ulng.rsmsgfollowsymlink 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 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 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 #, fuzzy,badformat msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Total de entradas salvas:% d\n" "\n" "Nome do arquivo de backup:% s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Total de entradas exportadas: " #: ulng.rsmsghotdirwhattodelete 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" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Comprimento de arquivo resultante incorreto para arquivo: \"%s\"" #: ulng.rsmsginsertnextdisk 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" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Caminho inválido" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copiar arquivo %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Extrair arquivo %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informação:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Criar ligação %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Criar pasta %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mover arquivo %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimir para arquivo %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Remover pasta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Feito:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Criar ligação simbólica %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testar integridade do arquivo %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Limpar arquivo %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Excluir %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predefinição \"%s\" já existe! Substituir?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problema ao executar comando (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Renomear/Mover %d arquivos/pastas selecionados?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Selecione o tipo de arquivo para adicionar a extensão \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Erro! Não é possível encontrar o arquivo de configuração do TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Erro! Não é possível encontrar o executável de configuração do TC:\n" "%s\n" #: 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Erro! Não é possível encontrar a pasta de saída desejada da barra de ferramentas TC:\n" "%s\n" #: 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.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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Salvo!\n" "Nome arq Barra Ferramenta: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Limpar %d arquivos/pastas selecionados?" #: ulng.rsmsgwipesel #, 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!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Calculando a checksum em \"%s\"" #: ulng.rsopercalculatingchecksumof #, 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 msgid "Calculating \"%s\"" msgstr "Calculando \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Juntando" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Juntando arquivos em \"%s\" para \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copiando" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copiando de \"%s\" para \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "copiar \"%s\" para \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Criando pasta" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Criando pasta \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Excluindo" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Excluindo em \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Excluindo \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Executando" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Executando \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extraindo" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Listando \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Movendo" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Movendo de \"%s\" para \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Comprimindo de \"%s\" para \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Definir propriedade em \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Definir propriedade de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dividindo" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Testando em \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Testando \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verificando checksum" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Verificando checksum em \"%s\"" #: ulng.rsoperverifyingchecksumof #, 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 msgid "Wiping in \"%s\"" msgstr "Limpando em \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Atalho %s já está em uso." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Alterar para %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Arquivos: %d, pastas: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossível alterar direitos de acesso a \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecione uma pasta" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 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." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.pt.po������������������������������������������������������������0000644�0001750�0000144�00001306653�13424362040�017245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Pedro Albuquerque <palbuquerque73@gmail.com>, 2017. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2017-12-11 07:55+0000\n" "Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "A comparar - %d%% (ESC para cancelar)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Direita: eliminar %d ficheiro(s)" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Esquerda->direita: copiar %d ficheiros, tamanho: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "Seguir &ligações" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espaço" #: 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Gravar ficheiro&s checksum em:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verificar checksum..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Seleccion&ar tudo" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Esquerdo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Di&reito" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Gra&var tudo" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Gravar tudo" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Definir propriedades" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "P&ara todos os seleccionados" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sa<ar este ficheiro" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contém:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Caminho:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Último acesso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificação:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Última alteração de estado:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamanho:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Ligação simbólica a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensível a m&aiúsculas" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar cursor no primeiro ficheiro da lista" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar cursor no último ficheiro da lista" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Criar nova pasta" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Ca&rregar" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Re&por tudo" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Multi-renomear" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Ac&tivar" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Extensão" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Localizar && substituir" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Resultado do diário" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Contador" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dia" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dia (2 dígitos)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dia da semana (curto, ex. \"Seg\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dia da semana (longo, ex. \"Segunda\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Carácter na posição x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caracteres desde a posição x até y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hora (2 dígitos)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuto (2 dígitos)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mês" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mês (2 dígitos)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nome do mês (curto, ex. \"Jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nome do mês (longo, ex. \"Janeiro\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nome" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Carácter na posição x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caracteres desde a posição x até y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensão..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nome..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Extensão" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Segundo" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Segundo (2 dígitos)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Ano (2 dígitos)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Ano (4 dígitos)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Editar nomes..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Carregar nomes de ficheiro..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiplos URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome de ficheiro único" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI único" #: tfrmopenwith.misingleurl.hint 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.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 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 "&Eliminar" #: 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 "Funções para seleccionar o caminho correcto" #: 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 "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" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Repor predefiniçã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 "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 msgid "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Ajuda" #: 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:" #: 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 "" #: 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 "" #: 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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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 "" #: 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 "" #: 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 #, 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 a passar ao comando. Usar aspas em nomes de ficheiro longos e com espaços." #: 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 executar. Usar aspas em nomes de ficheiro longos e com espaços." #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Itens de opções estendidas:" #: 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)\n" #: 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.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: 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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usar indicador de &gradiente" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espaço livre na unidade" #: 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 msgid "&Brightness level of inactive panel" msgstr "Nível de &brilho do painel inactivo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Cor de fun&do:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Cor de &1º plano:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Cor da &marca:" #: 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 "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordem" #: 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 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Inserir novos ficheiros:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: 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 "" #: 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Letra da &consola" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Letra do &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Letra do &diário" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Letra do programa" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Letra do caminho" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Letra dos resultados" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Letra do livro do vis&ualizador" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Letra do visuali&zador" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Ordem" #: 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 "" #: 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "B&otões planos" #: 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.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.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 #, fuzzy #| msgid "View log file content" msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Ver conteúdo do diário" #: 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.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.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 "" #: 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 "Rolar" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecçã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 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 "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" 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 "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.)" #: 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.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 "&Extensões de compressão são usadas para trabalhar com arquivos" #: 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 "Extensão" #: 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 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" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botão" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editar atal&ho" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserir novo botão" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Seleccionar" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Outro..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Remo&ver atalho" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugerir" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botões p&lanos" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Reportar erros com comandos" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aparência" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Tamanho da &barra:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajuda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Atalho:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Íco&ne" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamanho do í&cone:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parâmetros:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Su&gestão:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Adicionar barra com TODOS os comandos" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "para um comando externo" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "para um comando interno" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "para um separador" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "para uma sub-barra" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Seguranças..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra actual..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um ficheiro .BAR do TC (manter existente)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um ficheiro .BAR do TC (eliminar existente)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter existente)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (eliminar existente)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de topo..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Gravar segurança da barra" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um ficheiro .BAR do TC (manter existente)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um ficheiro .BAR do TC (eliminar existente)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter existente)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (eliminar existente)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restaurar uma segurança da barra" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "de um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "de um ficheiro TC .BAR único" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "de \"wincmd.ini\" do TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Procurar e substituir..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "em todos dos acima..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "em todos os comandos..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "em todos os nomes de ícones..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "em odos os parâmetros..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "em todos os caminhos iniciais..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botão" #: 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 "" #: 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 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 "" #: 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 "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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Modo Livro de visualização" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemplo" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Cor de &fundo do livro" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Cor de te&xto do livro" #: 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 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:" #: 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 msgid "Field" msgstr "Campo" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleccionar os caracteres a inserir:" #: 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 msgid "Accessed:" msgstr "Acedido:" #: 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" #: 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 #, 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 "Compilação" #: 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 "" #: 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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Extensões" #: 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.actzoom.caption msgid "Zoom" msgstr "Ampliação" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Pintar" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Olhos vermelhos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizador" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Caneta" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pintar" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: 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.miprint.caption msgid "Print..." msgstr "Imprimir..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar tudo" #: 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 ficheiros" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: 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" #: 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 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" 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.\n" #: 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 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 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 msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: 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 "" #: 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 "_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.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.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.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 "&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 "" #: 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 msgid "Speed %s/s" msgstr "Velocidade %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: 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 "" #: 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 "" #: 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.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 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 msgid "Directory %s does not exist!" msgstr "A pasta %s não existe!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Livres %s de %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" msgstr "" "Aviso! Ao restaurar uma segurança .hotlist, a lista existente será apagada pela importada.\n" "\n" "Tem a certeza que quer continuar?\n" #: 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.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?\n" msgstr "" "Já existe uma configuração com esse nome.\n" "Deseja sobrescrevê-la?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Tem a certeza de que deseja repor a predefinição?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Tem a certeza de que deseja apagar a configuração \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "A configuração \"%s\" foi modificada.\n" "Deseja gravá-la agora?\n" #: 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 "" #: 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acções" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Copiar nomes com caminho UNC" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "CRC32 errado no ficheiro resultante:\n" "\"%s\"\n" "\n" "Quer manter o ficheiro resultante corrompido?\n" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Impossível eliminar a pasta %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Impossível sobrescrever a pasta \"%s\" com a não-pasta \"%s\"" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Tem a certeza que quer sair?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Copiar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" seleccionados?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Eliminar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Eliminar %d ficheiros/pastas seleccionados para o lixo?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Eliminar \"%s\" seleccionado?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Eliminar \"%s\" seleccionados para o lixo?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Impossível ligar ao servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossível copiar o ficheiro %s para %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Já existe uma pasta chamada \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s não é suportada" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Impossível definir atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossível definir data/hora para \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Impossível definir proprietário/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Impossível definir permissões para \"%s\"" #: 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 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 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 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 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 msgid "File %s changed, save?" msgstr "O ficheiro %s foi alterado! Gravar?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobrescrever:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "O ficheiro %s já existe! Sobrescrever?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Pelo ficheiro:" #: ulng.rsmsgfilenotfound 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 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!\n" 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!\n" #: ulng.rsmsgfilereadonly 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 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 msgid "Folder %s exists, merge?" msgstr "A pasta %s já existe! Unir?" #: ulng.rsmsgfollowsymlink 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 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Nº de entradas gravadas: %d\n" "\n" "Nome da segurança: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Nº de entradas exportadas: " #: ulng.rsmsghotdirwhattodelete 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" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Tamanho do ficheiro \"%s\" resultante incorrecto" #: ulng.rsmsginsertnextdisk 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" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Caminho inválido" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copiar ficheiro %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Extrair ficheiro %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informação:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Criar ligação %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Criar pasta %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mover ficheiro %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimir para ficheiro %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Remover pasta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Feito:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Criar ligação simbólica %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testar integridade do ficheiro %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Limpar ficheiro %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Eliminar %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predefinição \"%s\" já existe! Substituir?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problema ao executar o comando (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Renomear/Mover %d ficheiros/pastas seleccionados?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Seleccione a que tipo de ficheiro adicionar a extensão \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Erro! impossível modificar a pasta de configuração do TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Erro! impossível encontrar o executável de configuração do TC:\n" "%s\n" #: 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Erro! impossível encontrar a pasta de saída da barra do TC:\n" "%s\n" #: 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.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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Gravado!\n" "Nome do ficheiro: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Limpar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Limpar \"%s\" seleccionados?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "com" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Aviso, nomes duplicados!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "A calcular a checksum em \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "A calcular a checksum de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "A calcular" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "A calcular \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "A juntar" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "A juntar ficheiros em \"%s\" para \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "A copiar" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "A copiar de \"%s\" para \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "copiar \"%s\" para \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "A criar pasta" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "A criar pasta \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "A eliminar" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "A eliminar em \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Eliminar \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "A executar" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "A executar \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "A extrair" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "A listar \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "A mover" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "A mover de \"%s\" para \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "A comprimir de \"%s\" para \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Definir propriedade em \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Definir propriedade de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "A dividir" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "A testar em \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "A testar \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "A verificar a checksum" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "A verificar a checksum em \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "A limpar em \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Atalho %s já está em uso." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Alterar para %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "As opções em \"%s\" foram alteradas.\n" "\n" "Deseja gravar as alterações?\n" #: 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Ficheiros: %d, pastas: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossível alterar direitos de acesso a \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\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.\n" 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.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleccione uma pasta" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Seleccione a sua janela" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Nº de substituição: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Não houve substituição." �������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.po���������������������������������������������������������������0000644�0001750�0000144�00001056270�13424362040�016620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "" #: 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 "" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "" #: tfrmmultirename.caption msgid "MultiRename" msgstr "" #: tfrmmultirename.cblog.caption msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "" #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "" #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "" #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" 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 "" #: 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to 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 msgid "Background 2:" msgstr "" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure 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.lblfontname.caption msgid "Font:" msgstr "" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "" #: 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" 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 "" #: 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.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.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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" 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.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" 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.miseparator1.caption msgctxt "TFRMOPTIONSHOTKEYS.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgid "Flat b&uttons" 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.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.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.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.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 "" #: 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 "" #: 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.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 "" #: 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 "" #: 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 "" #: 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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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 "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" 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 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 "" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Created:" msgstr "" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "" #: 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 "" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr "" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "" #: 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 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" 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 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 msgid "Copy (%d) %s" 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" 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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "" #: ulng.rsfindfound msgid "Found: %d" msgstr "" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "" #: ulng.rsfindscanned 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.rsfreemsg msgid "%s of %s free" msgstr "" #: ulng.rsfreemsgshort 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "" #: ulng.rsmsglogerror msgid "Error: " msgstr "" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "" #: ulng.rsmsgloginfo msgid "Info: " msgstr "" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgid "Deleting" msgstr "" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby 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.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 msgid "Fonts" msgstr "" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgid "File" msgstr "" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.pl.po������������������������������������������������������������0000644�0001750�0000144�00001326354�13424362040�017235� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.9.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2019-01-23 09:29+0200\n" "Last-Translator: Maciej Bojakowski <maciejbojakowski@gmail.com> and Andrzej Kamiński <endriusK@interia.pl>\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: Polski (Polska)\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porównywanie... %d%% (Esc, aby anulować)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Prawy: Usuń %d plik(ów)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Znaleziono plików: %d (Identycznych: %d, Różnych: %d, Unikalnych po lewej: %d, Unikalnych po prawej: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Z lewej do prawej: Kopiowanie %d plików, całkowity rozmiar: %d bajtów" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Z prawej do lewej: Kopiowanie %d plików, całkowity rozmiar: %d bajtów" #: 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 msgid "Fo&llow links" msgstr "&Śledź linki" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Za&rezerwuj miejsce" #: 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 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.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 "Przyklejony" #: 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 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 msgctxt "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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Zapi&sz plik(i) sumy kontrolnej do:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Sprawdź sumę kontrolną..." #: 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 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 "Wstaw" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" 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.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Zakończ" #: 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.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 "Przewijaj dalej" #: 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 "Wczytaj ponownie" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Wczytaj 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Lewy" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Prawy" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 skrót klawiaturowy 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 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 "Wstaw" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Wstaw" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Zapisz &wszystko" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Zapisz wszystko" #: 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.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "&Uwzględnij wielkość liter" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "&Szukaj od kursora" #: 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 "&Wyszukaj:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Kierunek" #: 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 msgctxt "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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Ustaw właściwości" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ustaw dla &wszystkich wybranych plików" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Pomiń ten plik" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Zawartość:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ścieżka:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Grupa" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ostatnio używany:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ostatnio zmieniony:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ostatnia zmiana statusu:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Rozmiar:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link symboliczny do:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapis" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nazwa" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 "Uchwyt pliku" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ID procesu" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Ścieżka pliku wykonywalnego" #: tfrmfinddlg.actcancel.caption msgctxt "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 "Pliki do &panelu" #: 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 "&Zapisz" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Z&apisz 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 "Uwzględnij &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ź linki s&ymboliczne" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Znajdź pliki &Niezawierające tekstu" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "N&ie starsze niż:" #: 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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 "Przeszukuj po&dkatalogi:" #: 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 "&Wynik" #: 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "&Uwzględnij wielkość liter" #: 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 "Po kliknięciu podmenu, wybierz całe 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 kartę 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.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 polecenia" #: 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 &zawartość" #: 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 archiwizeró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 "" #: 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 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.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 "&Pokaż 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 "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 "Utwórz 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.actfocuscmdline.caption msgid "Focus command line" msgstr "Przejdź do lini poleceń" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Zamień fokus" #: 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 "Fokus na widoku drzewa" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Przełączanie między bieżącą listą plików a widokiem drzewa (jeśli jest włączone)" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umieść kursor na pierwszym pliku listy" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umieść kursor na ostatnim pliku listy" #: 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.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.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 napęd 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.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.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 ignoruj plik listy, aby nie pokazywać nazw plików" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Utwórz link &symboliczny..." #: 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 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 msgid "Restore" msgstr "Przywróć" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "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 "&Zaznacz" #: 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 "" #: 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 msgid "Case sensitive" msgstr "Uwzględnij 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Utwórz nowy katalog" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Wysokość" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Szerokość" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Usuń" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Edytuj" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Wczytaj" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Zmień &nazwę" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Resetuj &wszystko" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Zapisz" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Wielokrotna zmiana nazwy" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "&Włącz" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Rozszerzenie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Licznik" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Znajdź i zamień" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Dziennik wyniku" #: 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 "&Przerwa" #: 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 "Liczba począ&tkowa" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "Szerokość" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Licznik" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dzień" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dzień (2 cyfry)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dzień tygodnia (krótki, np. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dzień tygodnia (długi, np. \"poniedziałek\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozycji x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Znaki na pozycjach od x do y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Godzina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Godzina (2 cyfry)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuty (2 cyfry)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[М] Miesiąc" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Miesiąc (2 cyfry)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nazwa miesiąca (krótka, np. \"sty\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nazwa miesiąca (długa, np. \"styczeń\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nazwa" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozycji x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] Znaki z pozycji od x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Czas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Rozszerzenie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nazwa..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekunda" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekundy (2 cyfry)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 cyfry)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 cyfry)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Edytuj nazwy..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Wczytaj nazwy z pliku..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Wiele identyfikatorów URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Pojedyncza nazwa pliku" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Pojedynczy identyfikator URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Zastosuj" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: 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 msgctxt "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 msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opcje:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Tryb analizowania formatu:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "&Włączone" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Tryb de&bugowania" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "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 msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "&Dodawanie:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hiwizator:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Usuń:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Opi&s:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Rozszerzenie:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "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 msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archi&wizery:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Zakończenie listy (opcjonalnie):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "&Format listy:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "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 "Po zmianie &rozmiaru, daty lub atrybutów" #: 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 "Po utworzeniu, usunięciu lub zmianie nazwy &plików" #: 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 (z tabulatorem)" #: 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" #: 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 przy wchodzeniu 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: 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 msgid "Background 2:" msgstr "Tło 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Kon&figuracja widoku 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.lblfontname.caption msgid "Font:" msgstr "Czcionka:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Rozmiar:" #: 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" msgstr "&Pomoc" #: 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" #: 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 "Automatyczne wcięcie" #: 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.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 "Inteligentny tabulator" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Kiedy użyjesz klawisza <Tab>, karetka przejdzie do następnego zanku nie-spacji 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 \"Inteligentny tabulator\" ma pierwszeństwo wykonania przed tabulacją" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opcje edytora wewnętrznego" #: 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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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 #, 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 "Parametr do przekazania do polecenia. Długa nazwa pliku ze spacjami powinna być w cudzysłowiu (wprowadzanym ręcznie)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Polecenie do wykonania. Nigdy nie ujmuj tego ciągu 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Rozszerzone opcje elementów:" #: 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.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 &buforu 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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Użyj &gradientu kolorów wskaźnika" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Wskaźnik wolnego miejsca na dysku" #: 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Kolor tła ws&kaźnika:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Kolor &wskaźnika:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Kolor &zaznaczenia:" #: 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ślny" #: 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 "&Bajty:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabajty:" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "Format nagłówka/stopki:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobajty:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megab&ajty:" #: 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 "&Terabajty:" #: 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 msgctxt "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 msgctxt "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 msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Pokaż nawiasy &kwadratowe [] wokół katalogów" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Wy&różnij nowe i zaktualizowane pliki" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "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 msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Wczytaj &listę plików w oddzielnym wątku" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Wczytaj &ikony po liście plików" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Pokaż pliki &ukryte/systemowe" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "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 msgctxt "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 msgctxt "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 msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Zaznaczenie/Odznaczenie wpisów" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Czcionka &konsoli" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Czcionka &edytora" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "Czcionka &logów" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "&Czcionka główna" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Czcionka ścieżki" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Czcionka wyników wyszukiwania" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "Czcionka przeglądarki &książek" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "Czcionka &podglądu" #: 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 klawiaturowych (pogrupowane)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Sortuj według skrótów klawiaturowych (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.miseparator1.caption msgctxt "TFRMOPTIONSHOTKEYS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Kolejność sortowania" #: 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 "Przyciemnione ukryte pliki (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.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Płaskie p&rzyciski" #: 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.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.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 konfiguracji" #: 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.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.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 nie 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)" #: 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 "Do&stosuj" #: 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.)" #: 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 "Dodając nową wtyczkę, automatycznie przechodzisz do okna ustawień" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Konfiguracja:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Ścieżka w stosunku 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 msgctxt "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 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 "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." #: 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 "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." #: 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 "Wtyczki przeglądarki (&Listera) umożliwiają wyświetlanie plików, takich jak obrazy, arkusze kalkulacyjne, bazy danych itp. w Listerze (F3, Ctrl+Q)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "&Początek (nazwa musi rozpoczynać się od pierwszego wpisanego znaku)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "&Koniec (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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "K&lonuj przycisk" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Usuń" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "&Edytuj klawisz skrótu" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "&Wstaw nowy przycisk" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Wybierz" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Inne..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Usuń klawisz &skrótu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugeruj" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Płaskie przyciski" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Raportuj błędy z poleceń" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Wygląd" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "&Rozmiar paska:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "Pole&cenie:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Para&metry:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Pomoc" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Klawisz skrótu:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "&Ikona:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Ro&zmiar ikon:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "Po&lecenie:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametry:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Ścieżk&a początkowa:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "E&tykietka narzędzia:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodaj pasek narzędzi ze WSZYSTKIMI poleceniami DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "dla polecenia zewnętrznego" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "dla polecenia wewnętrznego" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "dla separatora" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "dla paska narzędzi podrzędnych" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Kopia zapasowa..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Eksportuj..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Bieżący pasek narzędzi..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "do pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "do pliku .BAR TC (zachowaj istniejący)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "do pliku .BAR TC (wymaż istniejący)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (zachowaj istniejący)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (wymaż istniejący)" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Górny pasek narzędzi..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Zapisz kopię zapasową paska narzędzi" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do pliku .BAR TC (zachowaj istniejący)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do pliku .BAR TC (wymaż istniejący)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (zachowaj istniejący)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (wymaż istniejący)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importuj..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Przywróć kopię zapasową paska narzędzi" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "z pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z pojedynczego pliku .BAR TC" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z \"wincmd.ini\" TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Znajdź i zamień..." #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "we wszystkich powyższych..." #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "we wszystkich poleceniach..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "we wszystkich nazwach ikon..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "we wszystkich parametrach..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "we wszystkich ścieżkach początkowych..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ przycisku" #: 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 podpowiedzi dla wybranego typu pliku:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Ogólne opcje dotyczące podpowiedzi:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "&Pokaż etykietkę narzędzia 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 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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Tryb podglądu książki" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Przykład" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Kolor &tła w podglądzie książki" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Kolor &czcionki w podglądzie książki" #: 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 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:" #: 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ędnij 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 msgid "Field" msgstr "Pole" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Wybierz znaki do wstawienia:" #: 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 msgid "Created:" msgstr "Utworzony:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Ukryty" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Dostępny:" #: 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" #: 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 #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Katalog do&celowy" #: 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.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.actselectclear.caption msgid "Remove selection" msgstr "Usuń zaznaczenie" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Wybierz do kopiowania (kierunek domyślny)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Wybierz do kopiowania -> (od lewej do prawej)" #: 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 <- (od prawej do lewej)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Wybierz do usunięcia -> (po 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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: 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 "Widok z lewej" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Widok z prawej" #: 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 "Porzuć" #: 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 archiwum" #: 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.actchangeencoding.caption msgid "Change encoding" msgstr "Zmień kodowanie" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Skopiuj plik" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Skopiuj 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 "Skasuj plik" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Skasuj plik" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Koniec" #: 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.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 "Odbicie poziome" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Odbicie lustrzane" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Odbicie pionowe" #: 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.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 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 "Tryb binarny" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Pokaż jak&o Książkę" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Tryb &Dec" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Tryb szesnastkowy (hex)" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Jako tekst" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Tekst z zawijaniem wierszy" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Wtyczki" #: 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.actzoom.caption msgid "Zoom" msgstr "Powiększenia" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Powiększ" #: tfrmviewer.actzoomout.caption 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Wyróżnij" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Maluj" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Czerwone oczy" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Zmień rozmiar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Cofnij" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Lister" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokaz slajdów" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Ołówek" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zaznacz" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Maluj" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokaz slajdów" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Podgląd" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programie" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Edytuj" #: 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 "Rysunek" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Drukuj..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Zaznacz wszystko" #: 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 \"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 osobnym 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 osobnym oknie" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Wstrzymaj wszystkie" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Gdy plik istnieje" #: 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" #: 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 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" 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?\n" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: 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 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 "" #: 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 "Rozmiar" #: 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 polecenia i parametrów" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopiuj (%d) %s" #: 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 "" #: 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 "_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.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.rsdlgbuttonabort msgid "Ab&ort" msgstr "Pr&zerwij" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Wszystkie" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Dodaj" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomatyczna zmiana nazwy plików źródłowych" #: 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 "&Inne" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Zastąp" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Zastąp wszys&tkie" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Nadpisz wszystkie &większe" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Nadpisz wszystkie &starsze" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Nadpisz 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 "&Ponów" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Jako Ad&ministrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Pomiń" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "P&omiń wszystkie" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Odblok&uj" #: 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 "&Pauza" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Rozpocznij" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kolejka" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Prędkość: %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "\"]\" nie znaleziono w linii %s" #: ulng.rsextscommandwithnoext 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 "Pytaj;Nadpisz;Pomiń" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Zapytaj;Połącz;Pomiń" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Zapytaj;Zastąp;Zastąp 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 archiwizera" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Pliki podpowiedzi DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Pliki katalogu Hotlist" #: 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.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 wzorzec" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s poziom(y)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Wszystko (bez ograniczeń)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Tylko bieżący katalog" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Katalog %s nie istnieje!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Szukaj: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Zapisz szablon wyszukiwania" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nazwa szablonu:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Przeskanowano: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanowanie" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Znajdź plik" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Czas skanowania:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Zacznij w" #: ulng.rsfreemsg #| msgid "Free %s from %s bytes" msgid "%s of %s free" msgstr "Wolne %s z %s" #: ulng.rsfreemsgshort 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 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 "Rozmiar" #: 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;Rozsz., a-z;Rozsz., z-a;Rozm. 9-0;Rozm. 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?\n" 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ć?\n" #: 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.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?\n" msgstr "" "Konfiguracja o tej nazwie już istnieje.\n" "Czy chcesz ją nadpisać?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Czy na pewno chcesz przywrócić domyślną?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Czy na pewno chcesz usunąć konfigurację \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "\"%s\" konfiguracja zastała zmodyfikowana.\n" "Czy chcesz ją teraz zapisać?\n" #: 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 linii)" #: 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 "" #: 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 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Polecenia" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Domyślnie>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Ósemkowo" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Kopiuj nazwy ze ścieżką UNC" #: 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.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 Commander" #: ulng.rsmsgapplicationname msgid "Description: %s" msgstr "Opis: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatkowe parametry linii poleceń archiwizera:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Chcesz dołączyć cudzysłowie?" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Nieprawidłowy CRC32 dla pliku wynikowego:\n" "\"%s\"\n" "\n" "Czy chcesz mimo to zachować uszkodzony plik wynikowy?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nie można skopiować/przenieść pliku \"%s\" do niego samego!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nie mogę usunąć katalogu %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Nie można nadpisać katalogu \"%s\" nie-katalogiem \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Nieudane przejście do katalogu [%s] !" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Usunąć nieaktywne zakładki?" #: ulng.rsmsgcloselockedtab 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Na pewno zakończyć?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Skopiować %d wybranych plików/katalogów?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Skopiować wybrane \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 "Skasować ten częściowo skopiowany plik?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Usunąć %d wybranych plików/katalogów?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Wyrzucić do kosza %d wybranych plików/katalogów?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Usunąć wybrane \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Usunąć wybrane \"%s\" do kosza?" #: ulng.rsmsgdeltotrashforce 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 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 "Błąd w danych" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nie można połączyć z serwerem: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nie można skopiować pliku %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Katalog o nazwie \"%s\" już istnieje." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s nie jest obsługiwana" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nie można ustawić atrybutów dla \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nie można ustawić daty/czasu dla \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nie można ustawić właściciela/grupy dla \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Nie można ustawić uprawnień 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 msgid "Executable: %s" msgstr "Wykonywalne: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Status wyjścia:" #: 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 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 "" #: ulng.rsmsgfavoritetabsimportedsuccessfully 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 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 msgid "File %s changed, save?" msgstr "Plik %s zmieniono, zapisać?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtów, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Nadpisz:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Plik o nazwie %s istnieje, zastąpić?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Plikiem:" #: ulng.rsmsgfilenotfound 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 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!\n" 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ą!\n" #: ulng.rsmsgfilereadonly 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 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 msgid "Folder %s exists, merge?" msgstr "Katalog o nazwie %s istnieje, połączyć?" #: ulng.rsmsgfollowsymlink 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 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Liczba zapisanych wpisów: %d\n" "\n" "Nazwa pliku kopii zapasowej: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Liczba wyeksportowanych wpisów: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Czy chcesz usunąć wszystkie elementy wewnątrz podmenu [%s]?\n" "Odpowiedź NIE usunie tylko ograniczniki menu, ale pozostawi element wewnątrz podmenu.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Nieprawidłowa wynikowa długość pliku dla pliku : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Proszę włożyć 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\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Błąd w linii poleceń" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Błędna nazwa pliku" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Nieprawidłowy format pliku konfiguracyjnego" #: ulng.rsmsginvalidhexnumber msgid "Invalid hexadecimal number: \"%s\"" msgstr "Nieprawidłowa liczba szesnastkowa: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Zła ścieżka" #: ulng.rsmsginvalidpathlong 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 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 "Błędne cytowanie" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Błędny 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 msgid "Copy file %s" msgstr "Kopiowanie pliku %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Rozpakowywanie pliku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informacja: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Tworzenie twardego linku %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Tworzenie katalogu %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Przenoszenie pliku %s" #: ulng.rsmsglogpack 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 msgid "Remove directory %s" msgstr "Usunięcie katalogu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Wykonano: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Tworzenie linku symbolicznego %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testowanie integralności pliku %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Zatrzyj plik %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Zatrzyj katalog %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hasło główne" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Proszę wprowadzić 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 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 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 "Proszę wprowadzić hasło:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Hasło (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Proszę ponownie wprowadzić hasło dla weryfikacji:" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Usuń %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Wzorzec \"%s\" istnieje. Zastąpić?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problem z wykonaniem polecenia (%s)" #: ulng.rsmsgprocessid 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 "Proszę udostępnić 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 msgid "Rename/move %d selected files/directories?" msgstr "Zmienić nazwę/przenieść %d wybranych plików/katalogów?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Zmienić nazwę/przenieść wybrany \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Czy chcesz zastąpić ten tekst?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Proszę ponownie uruchomić Double Commander, aby zastosować zmiany" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Wybierz, aby dodać rozszerzenie typu pliku \"%s\"" #: ulng.rsmsgselectedinfo 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 "Zmień etykietę wolumniu" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Specjalny katalog" #: 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 msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Ta zakładka (5s) 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Błąd! Nie można znależć pliku konfiguracji TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Błąd! Nie można znaleźć konfiguracji pliku wykonywalnego TC:\n" "%s\n" #: 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.\n" 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ć.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Błąd! Nie można znaleźć żądanego folderu wyjściowego paska narzędzi TC:\n" "%s\n" #: 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.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 wyniki, w tym utratę danych i niestabilność systemu. Proces nie będzie miał szansy na zapisanie jego stanu lub danych przed jego zakończeniem. Czy na pewno chcesz zakończyć proces?" #: ulng.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Zapisano!\n" "Nazwa paska narzędzi: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Wybrano zbyt dużo plików" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Nieokreślony" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "BŁĄD: Nieoczekiwane użycie Widoku Drzewa" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<BRAK ROZSZ.>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<BRAK NAZWY>" #: 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Zamazać %d wybranych plików/katalogów?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Zamazać \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "z" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Nieprawidłowe hasło!\n" "Spróbuj ponownie!\n" #: 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Ostrzeżenie, zduplikowane nazwy!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Obliczanie sumy kontrolnej dla \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Obliczanie sumy kontrolnej z \"%s\"" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Obliczanie" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Obliczanie \"%s|\"" #: ulng.rsopercombining msgid "Joining" msgstr "Łączenie\"" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Łączenie plików w \"%s\" do \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiowanie" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiowanie z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiowanie \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Tworzenie katalogu" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Tworzenie katalogu \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Usuwanie" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Usuwanie w \"%s|\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Usuwanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Wykonywanie" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Wykonywanie \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Wyodrębnianie" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Lista \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Przenoszenie" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Przenoszenie z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakowanie z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Pakowanie \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pauza" #: ulng.rsoperpausing msgid "Pausing" msgstr "Wstrzymywanie" #: ulng.rsoperrunning msgid "Running" msgstr "Działające" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Ustawianie właściwości" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Ustawianie właściwości w \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Ustawianie właściwości \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dzielenie" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Testowanie w \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Testowanie \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Weryfikowanie sumy kontrolnej" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Weryfikowanie sumy kontrolnej w \"%s\"" #: ulng.rsoperverifyingchecksumof 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 "Zacieranie" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Zacieranie w \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Zacieranie \"%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 "Dodanie nowego typu pliku podpowiedzi" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Aby zmienić bieżącą 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 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 "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Eksportuj konfigurację archiwizatora" #: ulng.rsoptarchiverexportdone 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 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 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 "dynamiczny" #: ulng.rsopthotkeysadddeleteshortcutlong 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 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 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 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 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" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Skróty" #: 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 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 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 msgid "Shortcut %s is already used." msgstr "Skrót %s jest już używany." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Zmienić na %s?" #: ulng.rsopthotkeysusedby 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.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 msgid "Fonts" msgstr "Czcionki" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Podświetlanie" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Skróty klawiaturowe" #: ulng.rsoptionseditoricons msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Lista ignorowanych plików/katalogów" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klawisze" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Język" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Wygląd" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Plik dziennika" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Różne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mysz" #: ulng.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Opcje zostały zmienione w \"%s\"\n" "\n" "Czy chcesz zapisać zmiany?\n" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Wtyczki" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Szybkie wyszukiwanie/filtr" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Pasek narzędzi" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Narzędzia" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "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 polecenia;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 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 "Wyłą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. rozsz." #: 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.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Zmiana nazwy pliku podpowiedzi" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Uwzględnij;&Bez uwzględniania" #: 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;Natural sorting: alphabetical and numbers" msgstr "Alfabetycznie, uwzględniając akcenty;Sortowanie naturalne: alfabetyczne i liczbowe" #: 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ć konfigurację pliku podpowiedzi, ZASTOSUJ lub USUŃ bieżącą edycję" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Nazwa pliku podpowiedzi:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "\"%s\" już istnieje!" #: ulng.rsopttooltipfiletypeconfirmdelete 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 "Wyeksportowana konfiguracja pliku podpowiedzi" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Eksportuj konfigurację pliku podpowiedzi" #: ulng.rsopttooltipfiletypeexportdone msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport %d elementów do pliku \"%s\" zakończony." #: 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 konfigurację pliku podpowiedzi" #: ulng.rsopttooltipfiletypeimportdone msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import %d elementów z pliku \"%s\" zakończony." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Wybierz plik, aby zaimportować konfigurację pliku 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 pliku podpowiedzi" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Nazwa pliku podpowiedzi" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC legacy - Kopiuj (x) nazwapliku.roz;Windows - nazwapliku (x).roz;Pozostałe - 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ędne do poniższych" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "zawiera(case)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "zawiera" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound msgid "Field \"%s\" not found!" msgstr "Pole \"%s\" nie zostało znalezione!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!zawiera(case)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!zawiera" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(case)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound msgid "Plugin \"%s\" not found!" msgstr "Wtyczka \"%s\" nie została znaleziona!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Jednostka \"%s\" nie została znaleziona dla pola \"%s\" !" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Pliki: %d, foldery: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nie można zmienić praw dostępu dla \"%s\"" #: ulng.rspropserrchown 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.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.\n" msgstr "" "Przeszukanie pliku za pomocą wtyczki DSX jest już w toku.\n" "Przed uruchomieniem nowego musisz zamknąć bieżące.\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.\n" msgstr "" "Przeszukanie pliku za pomocą wtyczki WDX jest już w toku.\n" "Przed uruchomieniem nowego musisz zamknąć bieżące.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Wybierz katalog" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Wybierz okno" #: ulng.rsshowhelpfor 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 "Nie powiodło się!" #: ulng.rssimplewordfalse msgid "False" msgstr "Fałsz" #: 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.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 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! 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\" 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 "Wybierz katalog:" #: ulng.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Tylko podgląd" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Pozostałe" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: 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 Hot 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ślnie dla 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 podpowiedzi DC i systemowe, najpierw DC (starsze);Połącz podpowiedzi DC i systemowe, najpierw systemowe;Pokaż podpowiedzi DC, gdy jest to możliwe, a systemowe, gdy nie;Pokaż tylko podpowiedzi DC;Pokaż tylko podpowiedzi systemowe" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Lister" #: ulng.rsunhandledexceptionmessage 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 "Proszę zgłosić ten błąd do systemu śledzenia błędów wraz z opisem wcześniejszych działań i następującym plikiem:%sWciśnij %s aby kontynuować lub %s aby zakończyć program." #: 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.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.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 msgid "%s not found!" msgstr "%s nie znaleziono!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: 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 msgid "Number of replacement: %d" msgstr "Liczba zamian: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nie było zamian." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.nl.po������������������������������������������������������������0000644�0001750�0000144�00001252435�13424362040�017231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: \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 1.8.7.1\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergelijken... %d%% (ESC om te annuleren)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Rechts: verwijder %d bestand(en)" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Links naar rechts: kopieer %d bestanden, totale grootte: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Rechts naar links: kopieer %d bestanden, totale grootte: %d bytes" #: 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 msgid "Fo&llow links" msgstr "Volg koppelingen" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserveer ruimte" #: 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 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.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 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 checksumbestand nadat klus voltooid is" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Maak aparte checksum aan voor elk bestand" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Sla checksumbestand(en) op in:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Verifieer checksum..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Selecteer &alles" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Ongedaan maken" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Af&sluiten" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "Sla alles op" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Sla alles op" #: 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.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Hoofdlettergevoeligheid" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Zoek vanaf dakje ^" #: 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" #: 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 "Bestandnaam:" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Eigenschappen instellen" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Instellen voor alle gekozen bestanden" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sla dit bestand over" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Bevat:" #: 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 "Bestandnaam" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Bestandnaam" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pad:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "Groep" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Laatst benaderd:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Laatste wijziging:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Laatste statuswijziging:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Grootte:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symbolische koppeling naar:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Soort:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijven" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Naam" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 "Invoegtoepassingen" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschappen" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Sluiten" #: 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 "&Annuleren" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Sluiten" #: 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 zoektocht 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 'Begin 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.cbopenedtabs.caption msgid "Opened tabs" msgstr "Geopende tabbladen" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Zoek naar deel van bestandnaam" #: 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 "Regular &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 invoegtoepassing voor zoeken:" #: tfrmfinddlg.chkhex.caption msgid "Hexadecimal" msgstr "" #: 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.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 "Invoegtoepassingen" #: 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Hoofdlettergevoelig" #: 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 "&Bestandnaam" #: 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 "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Voeg bestandnaam 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 bestandnaam toe aan opdrachtregel" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopieer pad naar opdrachtregel" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: 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 "" #: 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 "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: 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 "" #: 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.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 "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 "&Platte weergave" #: 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 "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Plaats aanwijzer op eerste bestand in lijst" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Plaats aanwijzer op laatste bestand in lijst" #: 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 extensie" #: 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.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 dezelfde extensie" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Kies alle bestanden met zelfde 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.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 "" #: 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 extensie" #: 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.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 "Open 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.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 extensie" #: 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.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 dezelfde extensie" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Deselecteer alle bestanden met zelfde 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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Maak nieuwe map" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Hoogte" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Breedte" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Verwijderen" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Laden" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Hernoemen" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Zet alles terug op standaardwaarden" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Opslaan" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Meervoudig hernoemen" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "Inschakelen" #: 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.extension.caption msgid "[E] Extension" msgstr "[E]xtensie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Teller" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Zoek en vervang" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Logboek van resultaat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Masker" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Voorinstellingen" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Extensie" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Zoeken..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Tussenpoze" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Bestandnaam" #: 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.micounter.caption msgid "[C] Counter" msgstr "[T]eller" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D]ag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dag (twee cijfers)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Weekdag (kort, bijv. 'ma')" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Weekdag (lang, bijv. 'maandag')" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Teken op positie x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Tekens van positie x tot y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[u] Uur" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Uur (twee cijfers)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuut (twee cijfers)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Maand" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Maand (twee cijfers)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Maandnaam (kort, bijv. 'jan')" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Maandnaam (lang, bijv. 'januari')" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Naam" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Teken op positie x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Tekens van positie x tot y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tijd..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Naam..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "Invoegtoepassing" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Seconde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Seconden (twee cijfers)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Jaar (twee cijfers)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Jaar (vier cijfers)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Bewerk namen..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Laad namen vanuit bestand..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Oude bestandnaam" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nieuwe bestandnaam" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Meerdere URI's" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkele bestandnaam" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkele URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Toepassen" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: 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 "" #: 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 "Toevoegen:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Inpakker:" #: 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 "Extensie:" #: 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 "Inpakkers:" #: 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 "Proef:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Automatisch instellen" #: 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 "Exporteren..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importeren..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: 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 bestandextensies" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "uitgelijnd (met tabblad)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "direct na bestandnaam" #: 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" #: 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 "" #: 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 #, fuzzy 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 "" #: 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 "" #: 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Terugzetten op 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 kleurtje voor deze weergave" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Achtergrond:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgid "Background 2:" msgstr "Achtergrond 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Stel kolomweergave in:" #: 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.lblfontname.caption msgid "Font:" msgstr "Lettertype:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Grootte:" #: 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 "Öpen 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" msgstr "Hulp" #: 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 "Diverse..." #: 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 sleur en pleur)" #: 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:" #: 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 pleuren van tekst, genereer bestandnaam automatisch (anders vragen aan gebruiker)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Toon bevestigingsvenster na pleuren" #: 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 sleur en pleur):" #: 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 "" #: 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.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 "" #: 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 "Opties voor interne bewerker" #: 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 "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 sleuren en pleuren)" #: 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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: 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 "Öpen alle takken" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Plakken" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Hernoemen" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: 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 #, 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 "Parameter om mee te geven aan de opdracht. Let op juiste omgang met spaties in bestandnamen." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Opdracht om uit te voeren. Let op juiste omgang met spaties in bestandnamen." #: 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 "Extensies" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kan worden geselecteerd door sleur en pleur" #: 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 sleur en pleur" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Extensies kunnen worden gerangschikt door sleur en pleur" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Bestandtypes kunnen worden gerangschikt door sleur en pleur" #: 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.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Voer uit via schil" #: 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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Onderdelen voor uitgebreide opties:" #: 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 bestandnaam met hernoemen (niet de extensie)" #: 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.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: 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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Gebruik hellingshoekindicator" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Vrije schijfruimte-indicator" #: 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 msgid "&Brightness level of inactive panel" msgstr "&Helderheidsniveau van inactieve paneel" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicator achtergrondkleur:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indicator voorgrondkleur:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Markeerkleur:" #: 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 bestandnaam" #: 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 "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Rangschikken" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: 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 "" #: 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 "" #: 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 extensie, enz.)" #: 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 "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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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 sleur en pleur)" #: 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Lettertype voor terminalvenster" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Lettertype voor bewerker" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "Logboeklettertype" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "Standaardlettertype" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Pad van lettertype" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Lettertype voor zoekresultaten" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "Kijkerboek-lettertype" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "Lettertype voor kijker" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Rangschikvolgorde" #: 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 "" #: 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 bestandnaam" #: 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 gebruikersschil" #: tfrmoptionslayout.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Platte knoppen" #: 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.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.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 #, fuzzy #| msgid "View log file content" msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Toon inhoud van logboekbestand" #: 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.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.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 "pixels" #: 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 "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: 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 "" #: 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 "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: 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 "Invoegtoepassing" #: 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 "Bestandnaam" #: 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 "Invoegtoepassingen voor zoeken stellen u in staat om alternatieve zoekalgorithmes of externe gereedschappen (zoals 'locate', etc.) te gebruiken." #: 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.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 "Invoegtoepassingen voor inpakken worden gebruikt om te werken met archiefbestanden" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegtoepassing" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandnaam" #: 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 "Invoegtoepassingen 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" #: 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-invoegtoepassingen geven u toegang tot schijven die niet benaderbaar zijn door het besturingsssysteem of tot externe apparaten zoals Palm/PocketPC." #: 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-invoegtoepassingen laten bestandsoorten zoals plaatjes, rekenbladen, gegevensbanken enz. zien in Kijker (F3, Ctrl+Q)" #: 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 "" #: 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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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 "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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Kloonknop" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Ver&wijderen" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Bewerk sneltoets" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "Voeg nieuwe knop in" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Kiezen" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Anders..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Verwijder sneltoets" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Suggereren" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Laat DC de gereedschaptip voorstellen gebaseerd op knopsoort, opdracht en parameters" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "Platte knoppen" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapporteer fouten bij opdrachten" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Uiterlijk" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "&Balkgrootte:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "Opdracht:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parameters:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Hulp" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Sneltoets:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Pictogram:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Pictogramgrootte:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "Opdracht:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parameters:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "&Beginpad:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Gereedschaptip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Voeg werkbalk toe met alle DC-opdrachten" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "voor een externe opdracht" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "voor een interne opdracht" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "voor een scheidingsteken" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "voor een sub-werkbalk" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Reservekopie..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exporteren..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Huidige werkbalk..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "aan een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR-bestand (behoud bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR-bestand (wis bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "naar een 'wincmd.ini' van TC (behoud bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "naar een 'wincmd.ini' van TC (wis bestaande)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Bovenste werkbalk..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Sla een reservekopie op van de werkbalk" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "aan een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR-bestand (behoud bestaande)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR-bestand (wis bestaande)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "naar een 'wincmd.ini' van TC (behoud bestaande)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "naar een 'wincmd.ini' van TC (wis bestaande)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importeren..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Herstel een reservekopie van werkbalk" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "Voeg toe aan huidige werkbalk" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "van een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige werkbalk" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "van een enkel TC .BAR-bestand" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige werkbalk" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "van 'wincmd.ini' van TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "Voeg toe aan huidige werkbalk" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Zoeken en vervangen..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "in alle bovenstaande..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "in alle opdrachten..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "in alle pictogramnamen..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "in alle parameters..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "in alle beginpaden..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Knopsoort" #: 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 "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Toon gereedschaptip 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 "" #: 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 "Exporteren..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importeren..." #: 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 "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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Kijker boekmodus" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Voorbeeld" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Achtergrond in boekkijker" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Lettertypekleur in boekkijker" #: 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 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:" #: 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-invoegtoepassingen, combineer met:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Invoegtoepassing" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Veld" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annuleren" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Sluiten" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Hulp" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecteer de in te voegen tekens:" #: 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 msgid "Created:" msgstr "Gemaakt:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Verborgen" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Benaderd:" #: 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" #: 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 "Bestandgrootte" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Mapdoel" #: 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.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.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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Sluiten" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Vergelijken" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: 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 invoegtoepassing 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 "Extensie:" #: 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 "Invoegtoepassing:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Invoegtoepassing:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "Over Kijker..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Toont het Over-bericht" #: 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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Afbeeldingen" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Invoegtoepassingen" #: 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.actzoom.caption msgid "Zoom" msgstr "Zoomen" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Inzoomen" #: tfrmviewer.actzoomout.caption msgid "Zoom Out" msgstr "Uitzoomen" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Bijsnijden" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Volledig scherm" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Oplichten" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Schilderen" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rode ogen" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Herschalen" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Ongedaan maken" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Kijker" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diavoorstelling" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pen" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "Oplichten" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "Paint" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "Diavoorstelling" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Tonen" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: 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.miprint.caption msgid "Print..." msgstr "Afdrukken..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Starten" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Bestandbewerkingen" #: 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 "Annuleren" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annuleren" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nieuwe wachtrij" #: 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 "Wachtrij" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Wachtrij 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Wachtrij 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Wachtrij 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Wachtrij 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Wachtrij 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Als bestand bestaat" #: 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" #: 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 "Maker" #: uexifreader.rsmodel msgid "Camera model" msgstr "Cameramodel" #: uexifreader.rsorientation msgid "Orientation" msgstr "Oriëntatie" #: ulng.msgtrytolocatecrcfile 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" 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 bestandnaam in, met extensie, voor gepleurde tekst" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Te importeren tekstsoort" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Kapot:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Algemeen:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Onbrekend:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Leesfout:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Geslaagd:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Geef checksum in en kies algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifieer checksum" #: 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;Divers;Parallelle poort;Afdrukken;Markeren;Veiligheid;Klembord;FTP;Navigatie;Hulp;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 msgid "Copy (%d) %s" msgstr "Kopieer (%d) %s" #: 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 "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "GepleurdeTekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "GepleurdeHTMLtekst" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "GepleurdeRichText" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "GepleurdeSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "GepleurdeUnicodeUTF16tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "GepleurdeUnicodeUTF8tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr " Voegt toe: " #: 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.rsdlgbuttonabort msgid "Ab&ort" msgstr "Afbreken" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Alles" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Vasthaken" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Auto-hernoem bronbestanden" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annuleren" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: 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 "" #: 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 msgid "Speed %s/s" msgstr "Snelheid %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "Goto Line" msgstr "Ga naar regel" #: ulng.rseditnewfile msgid "new.txt" msgstr "nieuwe.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Bestandnaam:" #: 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: 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 "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Vraag;Overschrijf;Kopieer naar;Overslaan" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Vraag;Overschrijf;Overschrijf oudere;Overslaan" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Vraag;Niet meer instellen;Negeer fouten" #: 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.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 "Bepaal sjabloon" #: ulng.rsfinddepth 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 msgid "Directory %s does not exist!" msgstr "Map %s bestaat niet." #: ulng.rsfindfound msgid "Found: %d" msgstr "Gevonden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Opslaan zoeksjabloon" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Sjabloonnaam:" #: ulng.rsfindscanned 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Vrij %s van %s" #: ulng.rsfreemsgshort #, fuzzy 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 msgid "Extension" msgstr "Extensie" #: 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 extensie" #: 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.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?\n" 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?\n" #: 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.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: 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?\n" msgstr "" "Een opstelling met die naam bestaat reeds.\n" "Wilt u hem overschrijven?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Weet u zeker dat u de standaardinstellingen wilt terugzetten?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Weet u zeker dat u opstelling '%s' wilt wissen?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "'%s' opstelling is gewijzigd.\n" "Wilt u deze nu opslaan?\n" #: 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 "" #: 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acties" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standaard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octaal" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: 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.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 msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Extra parameters voor inpakker-opdrachtregel:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Wilt u het tussen aanhalingstekens zetten?" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Slechte CRC32 voor resulterend bestand:\n" "\"%s\"\n" "\n" "Wilt u het corrupte resulterende bestand toch behouden?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "U kunt bestand '%s' niet kopiëren of verplaatsen naar zichzelf." #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kan directory %s niet verwijderen" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kan map '%s' niet overschrijven met niet-map '%s'" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Wijzigen dir naar [%s] mislukt." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle niet-actieve tabbladen verwijderen?" #: ulng.rsmsgcloselockedtab 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Weet u zeker dat u wilt afsluiten?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Kopieer %d geselecteerde bestanden/mappen?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopieer geselecteerde '%s'?" #: ulng.rsmsgcreateanewfiletype 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 bestandnaam 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 msgid "Delete %d selected files/directories?" msgstr "Verwijder %d geselecteerde bestanden/mappen?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Verwijder %d geselecteerde bestanden/mappen naar prullenbak?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Verwijder geselecteerde '%s'?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Verwijder geselecteerde '%s' naar prullenbak?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan '%s' niet verwijderen naar prullenbak. Onherstelbaar 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 bestandextensie:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Geef naam:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Geef naam van nieuwe bestandsoort om te maken voor extensie '%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 msgid "Can not connect to server: \"%s\"" msgstr "Kan niet verbinden met server: '%s'" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kan bestand %s niet kopiëren naar %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Er is al een map genaamd '%s'." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s wordt niet ondersteund" #: ulng.rsmsgerrdirexists 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 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 msgid "Cannot rename file %s to %s" msgstr "Kan bestand %s niet hernoemen in %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 msgid "Can not set attributes for \"%s\"" msgstr "Kan attributen voor '%s' niet instellen" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kan datum/tijd voor '%s' niet instellen" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kan eigenaar/groep voor '%s' niet instellen" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Kan rechten voor '%s'niet instellen" #: 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 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 "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 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 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 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 msgid "File %s changed, save?" msgstr "Bestand %s gewijzigd, opslaan?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overschrijven:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Bestand %s bestaat reeds, overschrijven?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Met bestand:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly 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 "" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "De bestandgrootte van '%s' is te groot voor doelbestandssysteem." #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "Map %s bestaat al, overschrijven?" #: ulng.rsmsgfollowsymlink 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 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Aantal alle opgeslagen elementen: %d\n" "\n" "Naam reservekopie: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Totaal elementen geëxporteerd: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Geef locatie en bestandnaam in waar een lijstbestand met favoriete mappen op te slaan" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Onjuist resultaat bestandlengte voor bestand: '%s'" #: ulng.rsmsginsertnextdisk 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" 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\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fout in opdrachtregel" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ongeldige bestandnaam" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ongeldige bestandsoort van configuratiebestand" #: ulng.rsmsginvalidhexnumber msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ongeldig pad" #: ulng.rsmsginvalidpathlong 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 geldige invoegtoepassing." #: ulng.rsmsginvalidpluginarchitecture #, fuzzy,badformat msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Deze invoegtoepassing is gemaakt voor Double Commander voor %s.Het 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 msgid "Copy file %s" msgstr "Kopieer bestand %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Uitpakken bestand %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Maak koppeling %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Maak map %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Verplaats bestand %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Inpakken naar bestand %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Verwijder map %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Klaar: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Maak symbolische koppeling %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Beproef bestandsintegriteit %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Wis bestand %s" #: ulng.rsmsglogwipedir 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 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 "" #: 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 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 msgid "&Delete %s" msgstr "&Verwijder %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voorinstelling '%s' bestaat reeds. Overschrijven?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Probleem bij uitvoeren van opdracht (%s)" #: ulng.rsmsgprocessid msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Bestandnaam voor gepleurde 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 msgid "Rename/move %d selected files/directories?" msgstr "Verplaats/hernoem %d geselecteerde bestanden/mappen?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Verplaats/hernoem geselecteerde '%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 "Herstart a.u.b. Double Commander om wijzigingen door te voeren" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Kies de bestandsoort om de extensie '%s' aan toe te voegen" #: ulng.rsmsgselectedinfo 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 checksumbestanden." #: 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 #, fuzzy,badformat msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Dit tabblad 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fout! Kan het TC-configuratiebestand niet vinden:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Fout! Kan het uitvoerbare TC-configuratiebestand niet vinden:\n" "%s\n" #: 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fout! Kan de gewenste TC-werkbalkdoelmap %s niet vinden.\n" "\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Geef locatie en bestandnaam in waar een TC-werkbalkbestand op te slaan" #: 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.rsmsgthisisnowinclipboard 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 "Extensie of 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 bestandnaam in van te herstellen werkbalk" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Opgeslagen.\n" "Werkbalkbestandnaam: %s\n" #: 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 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 "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Het doelbestand is corrupt: checksum 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Wis %d geselecteerde bestanden/mappen?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Wis geselecteerde '%s'?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "met" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Waarschuwing: dubbele namen." #: ulng.rsmulrenwronglinesnumber 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 "" #: 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 "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Afbeeldingen" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Netwerk" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Overig" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Systeem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afgebroken" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Berekenen checksum" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Bezig met berekenen checksum in '%s'" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Bezig met berekenen checksum van '%s'" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Berekenen" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Bezig met berekenen '%s'" #: ulng.rsopercombining msgid "Joining" msgstr "Samenvoegen" #: ulng.rsopercombiningfromto 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 msgid "Copying from \"%s\" to \"%s\"" msgstr "Bezig met kopiëren van '%s' naar '%s'" #: ulng.rsopercopyingsomethingto 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 msgid "Creating directory \"%s\"" msgstr "Bezig met maken van map '%s'" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Verwijderen" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Bezig met verwijderen in '%s'" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Bezig met verwijderen van '%s'" #: ulng.rsoperexecuting msgid "Executing" msgstr "Uitvoeren" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Bezig met uitvoeren '%s'" #: ulng.rsoperextracting msgid "Extracting" msgstr "Uitpakken" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Bezig met lijst maken van '%s'" #: ulng.rsopermoving msgid "Moving" msgstr "Verplaatsen" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Bezig met verplaatsen van '%s' naar '%s'" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Bezig met inpakken van '%s' naar '%s'" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Instellen eigenschappen in '%s'" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Instellen eigenschappen van '%s'" #: ulng.rsopersplitting msgid "Splitting" msgstr "Splitsen" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Bezig met uitproberen in '%s'" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Bezig met uitproberen van '%s'" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verifiëren van checksum" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Bezig met verifiëren checksum in '%s'" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Bezig met wissen in '%s'" #: ulng.rsoperwipingsomething 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 "" #: 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 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 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 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 "Archiefbestandtype naam:" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associeer invoegtoepassing '%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 "" #: 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 extensie" #: 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 #, fuzzy,badformat msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Sneltoets voor cm_Delete zal geregistreerd worden, zodat het gebruikt kan worden om deze instelling om te keren." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 #, 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 "Om met deze instelling te werken, moet deze toegewezen worden aan cm_Delete, maar die is reeds toegewezen aan %s. Wilt u dit wijzigen? " #: ulng.rsopthotkeysshortcutfordeleteissequence 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 msgid "Shortcut %s is already used." msgstr "Sneltoets %s wordt reeds gebruikt" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Dit wijzigen naar %s?" #: ulng.rsopthotkeysusedby 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 "Inpakkers" #: 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.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Sleur en pleur" #: 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 "Bestandvoorbeeldweergaven" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: 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 msgid "Fonts" msgstr "Lettertypes" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Markeerders" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Sneltoetsen" #: 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 "Allerlei" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Muis" #: ulng.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Er zijn opties veranderd in '%s'.\n" "\n" "Wilt u de wijzigingen opslaan?\n" #: 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.rsoptionseditortools msgid "Tools" msgstr "Gereedschappen" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Gereedschaptips" #: 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 msgid "Plugin %s is already assigned for the following extensions:" msgstr "Invoegtoepassing %s is reeds toegewezen aan de volgende extensies:" #: 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 "Bestandnaam" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Naam" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Geregistreerd voor" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: 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 "" #: 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;Natural sorting: alphabetical and numbers" msgstr "Alfabetisch, met inachtneming van accenten;Natuurlijke rangschikking: alfabetisch en cijfers" #: 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 "Categorienaam:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 ouderwets - Kopieer (x) bestandnaam.ext;Windows - bestandnaam (x).ext;Ander - bestandnaam (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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Bestanden: %d, mappen: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kan toegangsrechten voor '%s' niet wijzigen" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Kies een map" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Kies uw venster" #: ulng.rsshowhelpfor 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 "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Bestandnaam" #: 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 "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: 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 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 "Onjuist bestandsgrootte formaat." #: 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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 bestandnaam, geen extensie" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Volledige bestandnaam (pad+bestandnaam)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hulp met '%s' 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.rsvarleftpanel msgid "Left panel" msgstr "Linkerpaneel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Tijdelijke bestandnaam van lijst met bestandnamen" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Tijdelijke bestandnaam van lijst van volledige bestandnamen (pad+bestandnaam)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Bestandnamen in lijst in UTF-16 met BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Bestandnamen in lijst in UTF-16 met BOM, tussen dubbele aanhalingstekens" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Bestandnamen in lijst in UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Bestandnamen in lijst in UTF-8, tussen dubbele aanhalingstekens" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Tijdelijke bestandnaam van lijst van bestandnamen met relatief pad" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Aleen bestandextensie" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Alleen bestandnaam" #: 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 "" #: 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 "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 "Bestandnaam 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.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interne 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 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 msgid "Number of replacement: %d" msgstr "Aantal vervangingen: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Er vond geen vervanging plaats." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.ko.po������������������������������������������������������������0000644�0001750�0000144�00001277064�13424362040�017236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.8 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-04-22 23:08+030\n" "PO-Revision-Date: 2017-07-08 07:12+0900\n" "Last-Translator: Sangjin <comsem1104@naver.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: ko\n" "X-Generator: Poedit 2.0.2\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "비교하기... %d%% (취소 ESC)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "오른쪽: %d개 파일 삭제" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "파일 찾음; %d (동일: %d, 다름: %d, 왼쪽 유일함: %d, 오른쪽 유일함: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "왼쪽에서 오른쪽: %d개 파일 복사, 총 용량: %d 바이트" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "오른쪽에서 왼쪽: %d 개 파일 복사, 총 용량: %d 바이트" #: 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 msgid "Fo&llow links" msgstr "링크 연결(&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "공간 리버스(&R)" #: 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 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 "Double Commander 정보" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" 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 "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 "확인(&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 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 "각각의 파일에 분리된 체크섬 파일 생성(&R)" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "체크섬 파일 저장(&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "전부 선택(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "되돌리기" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "첫 번째 차이점" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "왼쪽 방향키(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "오른쪽 방향키(&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 "윈도우즈(CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "윈도우즈 (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 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 #, fuzzy 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 #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "새 이름 저장(&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "새 이름 저장" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "전체 저장(&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" 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 #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "확인(&O)" #: 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 "방향" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "속성 설정(&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "선택한 모든 파일 설정(&A)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "이 파일 건너뛰기(&P)" #: 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 "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contains:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "경로:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "그룹(&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "마지막 액세스:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "마지막 변경:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "크기:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "심볼링크 달기:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "형태:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "파일명" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "값" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "파일속성" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "속성" #: tfrmfileunlock.btnclose.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "취소(&A)" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "" #: tfrmfinddlg.actclose.caption #, fuzzy msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "닫기(&C)" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption #, fuzzy msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "편집(&E)" #: tfrmfinddlg.actfeedtolistbox.caption #, fuzzy msgctxt "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 #, fuzzy msgctxt "tfrmfinddlg.actgotofile.caption" msgid "&Go to file" msgstr "파일로 가기(&G)" #: tfrmfinddlg.actintellifocus.caption #, fuzzy msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "자료 찾기" #: tfrmfinddlg.actlastsearch.caption #, fuzzy msgctxt "tfrmfinddlg.actlastsearch.caption" msgid "&Last search" msgstr "마지막 검색(&L)" #: tfrmfinddlg.actnewsearch.caption #, fuzzy msgctxt "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 "" #: 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 #, fuzzy msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "실행(&S)" #: tfrmfinddlg.actview.caption #, fuzzy 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 "" #: 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 "옵션" #: 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 #, fuzzy 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "대소문자 구분(&A)" #: 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.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 "차지한 공간 계산(&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "폴더 변경" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "home으로 폴더 변경" #: 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.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 "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 msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "파일 쪼개기(&I)..." #: tfrmmain.actflatview.caption msgid "&Flat view" 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "목록 첫 파일에 커서 두기" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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) 목록 열기" #: 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.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.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.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 "전체화면 콘솔 ON/OFF" #: 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 "더블 커맨더 웹사이트 방문(&V)" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "영구 삭제(휴지통X)" #: tfrmmain.actworkwithdirectoryhotlist.caption #, fuzzy #| msgid "Work with Directory Hotlist and paramters" 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 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 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 "범주(&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 #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "추가(&A)" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "높이" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "폭" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "편집(&E)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "불러오기(&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "파일명 변경(&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "전체 재설정(&A)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "저장(&S)" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "여러개 파일명 바꾸기" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "가능(&B)" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] 확장자" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "일련 번호" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "찾기 && 바꾸기" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] 일련 번호" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 일자" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 일자( 2 didgits)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 요일(짧게,예,\"월\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 요일(길게, 예, \"월요일\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 문자 위치 x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 문자 위치 x에서 y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 시간" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 시간 ( 2자리)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 분" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 분 (2자리)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 월" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 월 (2자리)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 월 (짧게, 예, \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 월 (길게, 예, \"january\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] 파일명" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] 문자 위치 x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] 문자 위치 x에서 y까지" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "시각..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "확장자..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "파일명..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "플러그인" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 초" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 초 (2자리)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 년 (2 자리)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 년 (4 자리)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 #, fuzzy 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 msgid "File type to be opened: %s" msgstr "열린 파일 종류: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "다중 파일명" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "다중 URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "단일 파일명" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "단일 URI" #: tfrmopenwith.misingleurl.hint 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.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 "아이디 위치:" #: 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 "목록(&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 "더블커맨더 오직 하나만 실행 허용(&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 "고정된 파일속성열 제목폭" #: 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 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 #, fuzzy 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 #, fuzzy 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to 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 "Con&figure columns view:" msgstr "파일속성열 제목 보기 환경설정(&F):" #: 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.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 #, fuzzy 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 #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "구분자 추가" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "타이핑 입력할 폴더 추가" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption #, fuzzy 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 #, fuzzy 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 #, fuzzy 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 #, fuzzy 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 #, fuzzy #| msgid "Add..." msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "추가..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption #, fuzzy #| msgid "Backup..." msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "백업..." #: tfrmoptionsdirectoryhotlist.btndelete.caption #, fuzzy #| msgid "Delete..." msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "삭제..." #: tfrmoptionsdirectoryhotlist.btnexport.caption #, fuzzy #| msgid "Export..." msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "내보내기..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption #, fuzzy #| msgid "Help" msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "도움말" #: tfrmoptionsdirectoryhotlist.btnimport.caption #, fuzzy #| msgid "Import..." msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "가져오기..." #: tfrmoptionsdirectoryhotlist.btninsert.caption #, fuzzy #| msgid "Insert..." msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "삽입..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption #, fuzzy #| msgid "Miscellaneous..." 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 #, fuzzy #| msgid "Sort..." msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "정렬..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption #, fuzzy #| msgid "When adding directory, add also target" msgid "&When adding directory, add also target" msgstr "폴더 추가할 때 대상 파일로 추가" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption #, fuzzy #| msgid "Always expand tree" msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "항상 트리 확장" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy #| msgid "Show only valid environment variables" msgid "Show only &valid environment variables" msgstr "유효 환경변수만 보이기" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption #, fuzzy #| msgid "In popup, show [path also]" 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 #, fuzzy #| msgid "Target:" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "비활성창:" #: 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 "...선택된 목록 현재 레벨" #: 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 "바로 가기 경로 존재여부 점검하기" #: 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 "바로 가기 경로 && 타깃 유효성 점검하기" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption #, fuzzy #| msgid "to a Directory Hotlist file (.hotlist)" msgid "to a Directory &Hotlist file (.hotlist)" msgstr "폴더 바로 가기 목록 파일(.hotlist)" #: 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 "TC의 \"wincmd.ini\"로 (기존파일 유지)" #: 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 "TC의 \"wincmd.ini\"로 (기존파일 삭제)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption #, fuzzy #| msgid "Go to configure TC related info" msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "TC(토탈커맨더)정보와 관련된 환경설정 가기" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption #, fuzzy #| msgid "Go to configure TC related info" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "TC(토탈커맨더)정보와 관련된 환경설정 가기" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "바로 가기테스트메뉴" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption #, fuzzy #| msgid "from a Directory Hotlist file (.hotlist)" msgid "from a Directory &Hotlist file (.hotlist)" msgstr "폴더 바로 가기 파일로 부터(.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption #, fuzzy #| msgid "from \"wincmd.ini\" of TC" msgid "from \"&wincmd.ini\" of TC" msgstr "TC의 \"wincmd.ini\"로 부터" #: 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 "폴더 바로 가기 백업에서 복구" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption #, fuzzy #| msgid "Save a backup of current Directory Hotlist" msgid "&Save a backup of current Directory Hotlist" msgstr "현재 폴더 바로 가기 백업 저장" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption #, fuzzy #| msgid "Search and replace..." msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "찾아 바꾸기..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption #, fuzzy #| msgid "...everything, from A to Z!" msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...A에서 Z까지 모두!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption #, fuzzy #| msgid "...single group of item(s) only" msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...단일 그룹 목록만" #: 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 "...하위메뉴 내용 선택, 하위수준 없음" #: 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 "..선택된 하위 메뉴 내용과 모든 하위 수준" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption #, fuzzy #| msgid "Test resulting menu" 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 #, fuzzy #| msgid "Addition from main panel:" msgid "Addition from main panel" 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 "" #: 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.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 "사용(및 편집) 전역스킴(global shceme) 설정(&G)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "지역스킴(local scheme) 사용(&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 "None" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "항상 트리구조 펴기" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text 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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" 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.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" 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 "추가(&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "추가(&A)" #: 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 #, 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 "명령에 넘길 매개변수. 공백이 있는 긴파일명 인용." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." 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 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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 "프레임 커서 사용(&F)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "그라이언트 표시 사용(&G)" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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 msgid "&Brightness level of inactive panel" msgstr "비활성 창의 밝기 레벨(&B)" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "배경색 표시기(&D):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "전경색 표시기(&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "마크 색상(&M):" #: 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 #, fuzzy msgctxt "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 #, fuzzy msgctxt "tfrmoptionsfilesearch.dbtextsearch.caption" msgid "Text search in files" msgstr "파일에서 텍스트 검색" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "파일 검색" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption" msgid "Default search template:" msgstr "기본 검색 템플릿:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "파일 텍스트 검색을 위해 메모리 매핑 사용(&X)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption #, fuzzy msgctxt "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 "형식화(Formatting)" #: 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 "대소문자 구별(&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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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 msgid "&Sort method:" msgstr "메소드 정렬(&S):" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "&Move updated files" 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 "파일명 더블클릭 후 이름 바꾸기(&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 "<스페이스바>로 선택시 (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 msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "추가(&D)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "적용(&P)" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "콘솔 글꼴(&C)" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "편집기 글꼴(&E)" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "로그 글꼴(&L)" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "주 글꼴(&F)" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "뷰어책 글꼴(&B)" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "뷰어 글꼴(&V)" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy 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 msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "바로 가기 삭제(&D)" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy 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 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 "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "명령어" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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 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 "모든 관계된 + EXE/LNK(천천히)(&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 "왼쪽, 오른쪽 화살표로 폴더 변경(리눅스처럼)(&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 #, fuzzy #| msgid "&Letters" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "단순 버튼(&U)" #: 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 "로그 윈도 표시(&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 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 "기능키(F키) 버튼 표시(&K)" #: tfrmoptionslayout.cbshowmainmenu.caption 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 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 "(파일창위에 고정폭으로)두 개의 버튼 바 표시(&X)" #: 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.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 #, fuzzy #| msgid "View log file content" msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "로그 파일 내용 보기" #: 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.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "경고 메시지 표시(\"확인\"버튼만) (&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.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 "" #: 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 "" #: 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)" #: 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.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 #, 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태그나 이미지 속성 표시, 검색, 파일명 변경도구 플러그인 허용(&G)" #: 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)/포켓PC(PocketPC)처럼 외부 디바이스 파일에 접근할 수 있는 플러그인 허용(&L)" #: 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)" #: 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 "탭 클릭시 대상 창 활성화(&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 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+위 방향키 새탭을 열기(&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 "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 #, fuzzy msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{명령}은 명령 프롬프트에서 실행을 반영하기 위해 이곳에 일반적으로 위치해야 함." #: 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 "{명령}은 명령 프롬프트에서 실행을 반영하기 위해 이곳에 일반적으로 위치해야 함." #: tfrmoptionsterminal.edruntermparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edruntermparams.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 #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "명령어:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "명령어:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionsterminal.lbruntermcmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "명령어:" #: tfrmoptionsterminal.lbruntermparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "버튼 복제(&L)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "단축키 편집(&K)" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "새 버튼 삽입(&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "선택" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "다른 옵션..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "단축키 제거(&Y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "제안" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "버튼형태, 명령어와 매개변수에 따라 풍선도움말 제공" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "기본 버튼(&F)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "명령어와 함께 오류 보고" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "명령어 매개변수 각 줄에 입력. F1키 도움말 보기" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "모양" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "도구바 크기(&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "명령어(&D):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "매개변수(&S):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "도움말" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "단축키:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "아이콘(&N):" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "아이콘 크기(&Z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "명령어(&M):" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "매개변수(&P):" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "시작 경로(&H):" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "풍선도움말(&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "모든 더블커맨더 명령 도구상자 추가" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "외부명령" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "내부명령" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "구분자" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "하위 도구상자" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "백업..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "내보내기..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "현재 도구상자..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "툴바 파일(.toolbar)로" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "TC.BAR 파일로(기존 파일 유지)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "TC.BAR 파일로(기존 파일 지우기)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC \"wincmd.ini로 (기존파일 유지)\"" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC \"wincmd.ini로 (기존파일 지우기)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "최상위 도구상자..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "도구상자 백업 저장" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "도구상자 파일로(.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC .BAR 파일로(기존파일 유지)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC .BAR 파일로(기존파일 지우기)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC \"wincmd.ini로 (기존파일 유지)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC \"wincmd.ini로 (기존파일 지우기)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 다음" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫번째 요소로" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "바로 전 선택" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "가져오기..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "도구상자 백업 복구" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구상자에 추가" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "현재 도구상자에 새 도구상자 추가" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "최상위 도구상자에 새 도구상자 추가" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "최상위 도구상자에 추가" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "최상위 도구상자 교체" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "도구상자(.toolbar)파일로 부터" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "현재 도구상자 추가" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "현재 도구상자에 새로운 도구상자 추가" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "최상위 도구상자에 새로운 도구상자 추가" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "최상위 도구상자에 추가" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "최상위 도구상자 교체" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "단일 TC.BAR 파일로 부터" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구상자 추가" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "현재 도구상자에 새로운 도구상자 추가" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "최상위 도구상자에 새 도구상자 추가" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "최상위 도구상자 추가" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "최상위 도구상자 교체" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC \"wincmd.ini\"로 부터..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구상자 추가" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "현재 도구상자에 새 도구상자 추가" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "최상위 도구상자에 새 도구상자 추가" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "최상위 도구상자에 추가" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "최상위 도구상자 교체" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫번째 요소로서" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로서" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "현재 선택 바로 이전" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "찾아 바꾸기..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "첫번째 요소로서" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "마지막 요소로서" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "현재 선택 바로 이전" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "모든 것 위에..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "모든 명령..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "모든 아이콘명..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "모든 매개변수..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "모든 시작경로에..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫번째 요소로서" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로서" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "현재 선택 바로 이전" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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 "" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "책보기 모드 뷰어" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "예" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "책보기 보드 뷰어의 배경색(&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "책보기 모드 글꼴 색상(&F)" #: 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 "파일/폴더 선택에 따라 하나씩 분리 압축파일 생성(&R)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "자동 압축해제 파일 생성(&X)" #: 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 "경로 이름 함께 압축(only recursed) (&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 "시간:" #: 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 "검색 또는 필터 on/off 토글버튼" #: 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 msgid "Field" msgstr "필드" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "종료(&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "문자 삽입 선택(&S)" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "속성 변경" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID(Set Group ID)" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky 비트" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID(Set User ID)" #: 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 msgid "Accessed:" msgstr "실행됨:" #: 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 "쓰기" #: 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 #, 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 "바이트(&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.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free 파스칼" #: 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 "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 "" #: 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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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 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.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.actimagecenter.caption #, fuzzy 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 #, 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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "그래픽" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "늘이기" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "이미지 늘이기" #: tfrmviewer.actstretchonlylarge.caption #, fuzzy msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "크게만 늘이기" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "확대" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "하이라이트" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "색칠" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "적목현상" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "크기 변경" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "실행 취소" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "뷰어" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "슬라이드쇼" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "펜" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "하이라이트" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "색칠" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "슬라이드쇼" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "보기" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "정보" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "파일이 있을 때" #: 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 msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 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" msgstr "" "이 파일은 찾을 수 없고 마지막 파일 최종 조합을 검증할 수 없습니다:\n" "%s\n" "\n" "파일이 준비되어 가능하게 되면 \"OK\"를 누르세요,\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 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 msgid "Copy (%d) %s" msgstr "복사 (%d) %s" #: 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 "_드롭된유니코드UTF16텍스트" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_드롭된유니코드UTF8텍스트" #: ulng.rsdiffadds msgid " Adds: " 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.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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "취소(&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: 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 "" #: 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 "" #: 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 msgid "Speed %s/s" msgstr "속도 %s/초" #: ulng.rsdlgspeedtime 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.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 "뒤로(&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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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 "DC에서 내보내기된" #: 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.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 msgid "%s level(s)" msgstr "%s 레벨" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "모두 (무제한 깊이)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "현재 폴더만" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "폴더 %s 없음!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "찾음: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "검색 템플릿 저장" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "템플릿명:" #: ulng.rsfindscanned 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s 에 %s 사용 가능" #: ulng.rsfreemsgshort #, 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 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.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 "none;파일명, 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?\n" msgstr "" "경고! a.hotlist 백업 파일, 불러오기한.\n" "으로 대체되어 삭제됩니다.\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 #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "편집기" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "파일 찾기" #: ulng.rshotkeycategorymain msgid "Main" 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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "액션" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "CRC32 결과 파일 상태 나쁨:\n" "\"%s\"\n" "\n" "훼손된 파일을 그대로 유지하겠습니까? \n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "\"%s\"파일 자체를 복사/이동할 수 없습니다." #: ulng.rsmsgcannotdeletedirectory #, fuzzy,badformat msgid "Cannot delete directory %s" msgstr "폴더(디렉토리)삭제 할 수 없음" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "\"%s\" 디렉토리를 디렉토리가 아닌 \"%s\"로 덮어쓸 수 없음" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "[%s] 디렉토리 변경 실패!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "비활성 탭 모두 제거?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "이 탭(%s) 잠겼음! 어쨌든 닫을까요?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "정말로 끝내기를 원하시나요?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "파일 %s가 변경됨. 뒤로(backward) 복사를 원하시나요?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "반대로 복사할 수 없음 - 변경된 파일을 유지하겠습니까?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "선택된 %d개의 파일/폴더를 복사할까요?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "선택된\"%s\" 복사할까요?" #: ulng.rsmsgcreateanewfiletype 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 "DC 도구상자 파일을 저장할 위치와 파일명을 입력" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "사용자 액션" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "복사된 파일을 부분적으로 삭제할까요?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "선택된 %d개의 파일/폴더를 삭제할까요?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "선택된 %d개의 파일을 휴지통으로 삭제할까요?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "선택된 \"%s\" 삭제?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "선택된 \"%s\" 휴지통으로 삭제할까요?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "서버에 연결할 수 없습니다: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "%s 에서 %s로 복사할 수 없음" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "\"%s\" 이름의 폴더가 있습니다." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "%s 날짜 지원 안됨" #: ulng.rsmsgerrdirexists 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 #, fuzzy,badformat 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 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 msgid "Can not set attributes for \"%s\"" msgstr "\"%s\" 속성을 설정할 수 없음" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "\"%s\" 날짜/시간 설정할 수 없음" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "\"%s\" 소유자/그룹을 설정할 수 없음" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "즐겨찾기탭 로드됨: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "현재탭을 즐겨찾기탭에 저장" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "파일 %s 변경됨, 저장할까요?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s 바이트, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "덮어쓰기:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "%s 파일이 존재함, 덮어쓸까요?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "이 파일을:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "\"%s\" 파일 크기가 복사될 파일시스템에는 너무 큽니다!" #: ulng.rsmsgfolderexistsrwrt #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "%s 폴더가 있습니다, 덮어쓸까요?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "\"%s\"심링크를 따라갈까요?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "가져오기하려는 다음 텍스트 형태 선택" #: ulng.rsmsghotdiraddselecteddirectories 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 #, fuzzy #| msgid "Path" msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "경로" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "가져오기 \".hotlist\" 파일 위치" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "바로 가기 폴더명" #: ulng.rsmsghotdirnbnewentries 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 #, fuzzy #| msgid "Menu name:" msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "메뉴명:" #: ulng.rsmsghotdirsimplename #, fuzzy #| msgid "Name:" 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "전체 목록 저장: %d\n" "\n" "백업 파일명: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "전체 목록 내보내기됨: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "하위메뉴의 모든 요소를 삭제하시겠습니까? [%s]?\n" "'아니오'를 선택하면 메뉴 구분문자만 삭제하고 하위메뉴 요소는 보관됩니다.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "폴더(디렉토리) 바로 가기 파일을 저장할 장소와 파일명을 입력" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "잘못된 파일명 길이 결과: \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "다음 디스크를 삽입하세요.\n" "\n" "쓰기가 허용되어 있습니다.:\n" "\"%s\"\n" "\n" "바이트 쓰는 중: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "잘못된 경로" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "%s 경로에 금지된 문자열이 포함됨." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "유효한 플러그인 아님!" #: ulng.rsmsginvalidpluginarchitecture #, fuzzy,badformat 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 "TC 환경설정 파일(wincmd.ini) 위치" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TC 실행파일 위치(totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "%s 파일 복사" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "%s 파일 압축 풀기" #: ulng.rsmsgloginfo msgid "Info: " msgstr "정보: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "%s 링크 생성" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "%s 폴더 생성" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "%s 파일 이동" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "%s 파일로 압축" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "%s 디렉토리 제거" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "완료: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "%s 심링크 생성" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "%s 파일 무결성 테스트" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "%s 파일 삭제" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "%s 삭제(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "\"%s\" 프리셋이 존재함. 덮어쓸까요?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "(%s) 명령어 실행 문제 있음" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "%d개 선택된 파일과 폴더를 이름 바꾸기/이동할까요?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "추가하려는 \"%s\" 파일확장자를 선택하세요." #: ulng.rsmsgselectedinfo 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 "윈도 특별 폴더(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 "다른 윈도 특별 폴더에 상대경로 만들기..." #: 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 "윈도 특별 폴더(TC) 사용..." #: ulng.rsmsgtabforopeninginnewtab 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "오류! TC(토탈커맨더) 환경설정 파일을 찾을 수 없음:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "오류! TC(토탈커맨더) 환경설정 파일을 찾을 수 없음:\n" "%s\n" #: 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.\n" msgstr "" "오류! TC(토탈커맨더) 실행중이서 작업을 실행할 수 없습니다.\n" "실행 최소를 위해 작업을 종료한 후 '확인' 또는 '취소' 버튼을 누르세요.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "오류! TC(토탈커맨더) 내보내기 폴더를 찾을 수 없습니다.:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "TC 툴바 파일을 저장할 파일명과 위치를 입력하세요." #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "저장 완료!\n" "툴바 파일명: %s\n" #: 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 "<확장자 없음: NO EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<파일명 없음: No NAME>" #: 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "%d 선택된 파일/폴더를 완전삭제(휴지통X)할까요?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "선택된 \"%s\" 완전 삭제(휴지통X)할까요?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "함께" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "변화없음;대문자;소문자;첫번째 문자 대문자;모든 단어의 첫번째는 대문자;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum" msgstr "체크섬 계산중" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "\"%s\"에서 체크섬 계산중" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "\"%s\"의 체크섬 계산중" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "계산중" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "\"%s\" 계산중" #: ulng.rsopercombining msgid "Joining" msgstr "합치기중" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 합치는중" #: ulng.rsopercopying msgid "Copying" msgstr "복사중" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "\"%s\" 에서 \"%s\"로 파일 복사중" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "\"%s\"를 \"%s\"로 복사중" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "폴더(디렉토리) 생성중" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "\"%s\" 폴더(디렉토리) 생성중" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "삭제중" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "\"%s\" 삭제중" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "\"%s\" 삭제중" #: ulng.rsoperexecuting msgid "Executing" msgstr "실행중" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "\"%s\" 압축해제중" #: ulng.rsoperextracting msgid "Extracting" msgstr "압축해제중" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 압축해제중" #: ulng.rsoperfinished msgid "Finished" msgstr "완료됨" #: ulng.rsoperlisting msgid "Listing" msgstr "목록생성중" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "\"%s\" 목록 생성중" #: ulng.rsopermoving msgid "Moving" msgstr "이동중" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 파일 이동중" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "\"%s\"이 \"%s\"로 이동" #: ulng.rsopernotstarted msgid "Not started" msgstr "시작 안됨" #: ulng.rsoperpacking msgid "Packing" msgstr "압축중" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 압축중" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "\"%s\"에 속성 설정" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "\"%s\"의 속성 설정" #: ulng.rsopersplitting msgid "Splitting" msgstr "파일 분리중" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "\"%s\"에 테스트중" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "\"%s\" 테스트중" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "체크섬 확인중" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "\"%s\"에서 체크섬 확인중" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "\"%s\"에 완전 삭제중" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "\"%s\" 완전삭제중" #: ulng.rsoperworking msgid "Working" msgstr "작업중" #: ulng.rsoptaddfrommainpanel #, fuzzy #| msgid "Add at beginning;Add at the end;Smart add" 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 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 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 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 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 "float" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "cm_Delete를 위한 %s 단축키가 등록될 것이며 이것은 이 설정을 역으로 되돌리는데 사용될 수 있음" #: ulng.rsopthotkeysaddhotkey 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 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 "cm_Delete를 위한 %s 단축키 매겨변수가 이 설정에는 무효합니다. 전역변수로 이 매개변수를 수정할까요?" #: ulng.rsopthotkeysdeletetrashcanparameterexists 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 " cm_Delete를 위해 %s 단축키가는 %s 단축키와 일치하기 위한 매개변수가 필요합니다. 변경할까요?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "설명" #: ulng.rsopthotkeysedithotkey 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 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 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 msgid "Shortcut %s is already used." msgstr "%s 단축키 이미 사용중" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "%s를 변경할까요?" #: ulng.rsopthotkeysusedby 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.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 #, fuzzy 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 "대소문자 구분 안함; 로케일(locale) 설정 (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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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) - 복사(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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "파일: %d, 폴더:%d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "\"%s\" 접근 권한을 변경할 수 없음" #: ulng.rspropserrchown 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.rspropsnmdpipe msgid "Named pipe" msgstr "명명된 파이프(Named pipe)" #: 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "폴더(디렉토리) 선택" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 "시(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "분(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "월(s)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "초(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "주(s)" #: 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 "구분(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 "" #: 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 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 "이 오류를 설명과 함께 다음 파일을 버그 트랙커(Bug tracker)에 보고하세요:%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.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 #, fuzzy #| msgid "Path, with ending delimiter" 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 "여기에서부터 마지막 라인까지, 퍼센트-변수 지시기(indicator)는 \"#\" 기록(sign)입니다." #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "퍼센트 기록(sign) 돌아가기" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "여기에서부터 마지막 라인까지, 퍼센트-변수 지시기(indicator)는 \"#\" 기록(sign) 뒤(back) 입니다." #: 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.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 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 msgid "Number of replacement: %d" msgstr "바꾸기한 갯수: %d 개" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "바꾸기 없음." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.ja.po������������������������������������������������������������0000644�0001750�0000144�00001361300�13424362040�017202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-12-06 21:24+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 1.8.11\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "比較しています… %d (ESCでキャンセル)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "右:%d 個のファイルを削除" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "ファイルが見つかりました: 合計%d項目  (同一:%d 異なる:%d 左側だけに存在:%d、右側だけに存在:%d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "左から右へ: %d 個のファイルをコピー、合計サイズ: %d バイト" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "左から右へ: %d 個のファイルをコピー、合計サイズ: %d バイト" #: 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 msgid "Fo&llow links" msgstr "リンクを辿る(&l)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "スペースを確保(&R)" #: 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 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.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 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 "ファイルごとに個別のチェックサム ファイルを作成(&r)" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "チェックサム ファイルを保存(&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "すべて選択(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "元に戻す" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "最初の違い" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右(&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "全て保存(&v)" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.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 "方向" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "属性を設定(&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "選択したすべてのファイルに設定(&a)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "このファイルをスキップ(&p)" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "パス:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "グループ(&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "最終アクセス:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "最終変更:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "サイズ:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "シンボリックリンク先:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "タイプ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "名前" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "値" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileunlock.btnclose.caption #, fuzzy 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 "キャンセル(&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 "" #: 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 "開始(&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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "大文字と小文字を区別(&a)" #: 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.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 "占有スペースを計算(&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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "リストの最初のファイルにカーソルを置く" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高さ" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "幅" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "編集(&E)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "…" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "読み込み(&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "…" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "全てリセット(&a)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "複数リネーム" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "有効化(&b)" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] 拡張子" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "カウンタ" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "検索と置換" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] カウンタ" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 日" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 日(2桁)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 曜日(短縮形 例:”mon”)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 曜日(完全形 例:”monday”)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 位置xの文字" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 位置xからyの文字" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 時間" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 時間(2桁)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 分" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 分(2桁)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 月" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 月(2桁)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 月の名前(短縮形 例:”jan”)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 月の名前(完全形 例:”january”)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] ファイル名" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] ファイル名の位置xの文字" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] ファイル名の位置xからyの文字" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "時間…" #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "拡張子…" #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名前…" #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "プラグイン" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 秒" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 秒(2桁)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 年(2桁)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 年(4桁)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "名前を編集…" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "名前をファイルからロード…" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 "エディタを閉じたとき変更した名前をロードするには、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 msgid "File type to be opened: %s" msgstr "開くべきファイルの種類: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "複数のファイル名" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "複数の URL" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "1 つのファイル名" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "1つののURI" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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 "同時に起動できるダブル・コマンダーの数を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 "カラムの幅を固定" #: 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 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 #, fuzzy 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 #, fuzzy 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure columns view:" msgstr "ファイルシステムのカラムを構成(&f):" #: 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.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 #, fuzzy 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 #, fuzzy 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 #, fuzzy 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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" 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”から" #: 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 "…全て、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 "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" 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 "" #: 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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 #, 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 "コマンドに渡すパラメータ(スペースを含む長いファイル名は引用符で囲むこと)" #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." 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 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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 "枠型カーソル(&F)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "グラデーション インジケータを使用(&G)" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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 msgid "&Brightness level of inactive panel" msgstr "アクティブでないパネルの明るさのレベル(&B)" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "背景色のインジケータ(&d):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "前景色のインジケータ(&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "マーカーの色(&M):" #: 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 "" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: 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 "" #: 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "コンソール・フォント(&C)" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "エディタのフォント(&E)" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "ログのフォント(&L)" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "メインフォント(&f)" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "パスのフォント" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "検索結果のフォント" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "ブックビューアのフォント(&B)" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "ビューアのフォント(&V)" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "平らなボタン(&u)" #: 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.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.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 #, fuzzy #| msgid "View log file content" 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.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.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 "" #: 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 "" #: 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)。" #: 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.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 #, 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のタグのようなファイルの拡張情報や画像属性の表示を可能にします。またこれは、検索と複数リネームツールで使用します(&g)。" #: 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)。" #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "パラメータ:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "ボタンを複製(&l)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "ホットキーを編集(&k)" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "新しいボタンを挿入(&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "選択" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "その他…" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "ホットキーを削除(&y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "提案" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "ボタンの種類、コマンド、パラメータに基づいてDCにツールチップを提案させる" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平らなボタン(&F)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "コマンドのエラーを報告" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "コマンドのパラメータを1行に1項目入力。F1キーを押してパラメータについてのヘルプを参照。" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "外観" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "バーのサイズ(&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "コマンド(&d):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "パラメータ(&s):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "ヘルプ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "ホットキー" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "アイコン(&n):" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "アイコンのサイズ(&s)" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "コマンド(&m)" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "パラメータ(&P)" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始パス(&h)" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "ツールのヒント(&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "全てのDCコマンドを含むツールバーを追加する" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "外部コマンドを" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "内部コマンドを" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "区切りを" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "サブツールバーを" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "バックアップ…" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "現在のツールバー" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "TCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "TCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "トップツールバー" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "ツールバーのバックアップを保存" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "ツールバーのバックアップから復元" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)から" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "TCの.BARファイル(1つ)から" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC の”wincmd.ini”から" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "検索と置換…" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "上にある全ての項目の全てで…" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "全てのコマンドで…" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "全てのアイコン名で…" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "全てのパラメータで…" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "全ての開始パスで…" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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 "" #: 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "ブックモードで表示" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "例" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "ブックビューアの背景色(&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "ブックビューアのフォントの色(&F)" #: 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 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 "時間:" #: 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 msgid "Field" msgstr "フィールド" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "挿入する文字を選択(&S):" #: 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 msgid "Accessed:" msgstr "アクセス済み:" #: 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 "書き込み" #: 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 #, 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 "バイト(&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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "グラフィックス" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "ズーム" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "ズームイン" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "強調表示" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "塗りつぶし" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "赤目補正" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "サイズ変更" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "元に戻す" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "ビューア" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "スライドショー" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "ペン" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "強調表示" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "塗りつぶし" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "スライドショー" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "表示" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 "日付/時間をコピー(&a)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "バックグラウンドで動作(別の接続)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 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" msgstr "" "このファイル(ファイルの最終的な組み合わせの検証に役立ちます)が見つかりません。\n" "%s\n" "\n" "これファイルが利用可能になり、準備ができたら”OK”を押す。\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 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 msgid "Copy (%d) %s" msgstr "コピー(%d) %s" #: 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 "_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.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.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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "キャンセル(&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: 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 "" #: 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 msgid "Speed %s/s" msgstr "スピード %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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 "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 "" #: 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.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 msgid "%s level(s)" msgstr "%s レベル(複数可)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全て(深さは無制限)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "現在のディレクトリのみ" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "ディレクトリ%sは存在しません!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "見つかった項目数:%d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "検索テンプレートを保存" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "テンプレート名:" #: ulng.rsfindscanned 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "空き領域 %s (%s 中)" #: ulng.rsfreemsgshort #, 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 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.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?\n" msgstr "" "警告! .hotlistバックアップファイルを復元する場合、既存のリストは、インポートされたもので置換されるため消去されます。\n" "\n" "このまま進めてよろしいですか?\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.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?\n" msgstr "その名前のセットアップは既に存在します。上書きしますか?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "本当にデフォルトを復元しますか?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "本当に設定<%s>を消去しますか?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "<%s>セットアップファイルが変更されました。\n" "今すぐそれを保存しますか?\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 "" #: 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "アクション" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "UNCパスで名前をコピー" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "下記結果ファイルのCRC32が正しくありません:\n" "<%s>\n" "\n" "それを承知で、この破壊した結果ファイルを保持しますか?\n" "
\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "ファイル<%s>をそれ自身にコピー/移動することはできません!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "ディレクトリ<%s>を削除できません。" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "ディレクトリ<%s>をディレクトリでない<%s>で上書きすることはできません" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "ディレクトリ<%s>への移動ができません。" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "全てのアクティブでないタブを削除しますか?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "この<%s>タブはロックされています。それも、閉じるしますか?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "終了してもよろしいですか?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリをコピーしますか?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "選択した<%s>をコピーしますか?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリを削除しますか?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "選択した %d 個のファイル/ディレクトリをごみ箱に入れて削除しますか?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "選択された<%s>を削除しますか?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "選択した<%s>をゴミ箱に入れて削除しますか?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "サーバー<%s>に接続できません。" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "ファイル<%s>を<%s>にコピーできません。" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "<%s>という名前のディレクトが既に存在します。" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "日付<%s>はサポートされていません。" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "<%s>の属性を設定出来ません。" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "<%s>の日付/時刻を設定出来ません。" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "<%s>の所有者/グループを設定出来ません。" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "お気に入りのタブをロード:<%s>" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "既存のお気に入りのタブのエントリに現在のタブを保存" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "ファイル<%s>は変更されました。保存しますか?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s バイト, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "上書き:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "ファイル<%s>が存在します。上書きしますか?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "ファイル:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "ターゲット名の長さ (%d) は %d 文字以上です!\n" "%s\n" "ほとんどのプログラムはこのような長い名前のファイル/ディレクトリにアクセスすることができますされません!\n" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "ファイル<%s>のサイズは、送り先のファイルシステムには大きすぎます!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "フォルダ<%s>が存在します。マージしますか?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "シンボリックリンク<%s>を辿りますか?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "インポートするファイルフォーマットを選択" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "保存された項目の合計: %d 個\n" "\n" "バックアップファイル名: %s\n" "
\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "エクスポートされた項目の合計:" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "サブメニュー<%s>中の全ての項目を削除しますか?\n" "答えが「いいえ」の場合、メニューの区切りだけが消され、サブメニュー中の項目はそのまま残ります。\n" "
\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "「ディレクトリ・ホットリスト」ファイルを保存する場所とファイル名を入力して下さい。" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "結果であるファイルの長さが正しくありません: <%s>" #: ulng.rsmsginsertnextdisk 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" msgstr "" "次のディスクまたは何か同様のものを挿入して下さい。\n" "\n" "次のファイルを書き込むためのものです:\n" "<%s>\n" "残りの書き込みサイズ:<%d>バイト\n" "
\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無効なパス" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "パス<%s>には認められていない文字が含まれています。" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "これは有効なプラグインではありません" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "ファイル<%s>をコピー" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "ファイル<%s>を抽出" #: ulng.rsmsgloginfo msgid "Info: " msgstr "情報:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "リンク<%s>を作成" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "ディレクトリ<%s>を作成" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "ファイル<%s>を移動" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "ファイル<%s>に圧縮" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "ディレクトリ<%s>を削除" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完了:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "シンボリックリンク<%s>を作成" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "ファイル<%s>の完全性をテスト" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "ファイル<%s>を完全消去(抹殺)" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "<%s>を削除(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "プリセット<%s>が既に存在します。上書きしますか?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "コマンド<%s>を実行中の問題" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリの名前を変更/移動しますか?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "ファイルの拡張子<%s>をどのファイルタイプに追加するか選択" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "エラー!:TCの設定ファイルが見つかりません:\n" "<%s>\n" "
\n" # どの実行ファイルのこと? #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "エラー!:TCの設定実行ファイルが見つかりません:\n" "%s\n" "
\n" # なぜ、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.\n" msgstr "" "エラー!:TCはまだ動作していますが、この操作のために終了する必要があります。\n" "閉じてOKを押すか、キャンセルを押して中止。\n" "
\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "エラー!:お望みのTCツールバー出力フォルダが見つかりません:\n" "%s\n" "
\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "TCツールバーファイルを保存する場所とファイル名を入力して下さい。" #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "ツールバーを保存しました。\n" "ファイル名: %s\n" "
\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリを完全削除(抹殺)しますか?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "選択した<%s>を完全削除(抹殺)しますか?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "with" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" # 文脈不明 #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "変更無し;大文字;小文字;最初だけ大文字;各単語の頭を大文字" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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 #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "グラフィックス" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "ネットワーク(&N)" #: 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 msgid "Calculating checksum" msgstr "チェックサムを計算中" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "<%s>でチェックサムを計算中" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "<%s>のチェックサムを計算中" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "計算中" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "<%s>を計算中" #: ulng.rsopercombining msgid "Joining" msgstr "結合中" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "<%s>にあるファイルを<%s>に結合中" #: ulng.rsopercopying msgid "Copying" msgstr "コピー中" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "<%s>から<%s>にコピー中" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "<%s>を<%s>にコピー中" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "ディレクトリを作成中" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "ディレクトリ<%s>を作成中" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "削除中" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "<%s>で削除中" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "<%s>を削除中" #: ulng.rsoperexecuting msgid "Executing" msgstr "実行中" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "<%s>を実行中" #: ulng.rsoperextracting msgid "Extracting" msgstr "抽出中" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に抽出中" #: ulng.rsoperfinished msgid "Finished" msgstr "完了" #: ulng.rsoperlisting msgid "Listing" msgstr "リスト中" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "<%s>をリスト中" #: ulng.rsopermoving msgid "Moving" msgstr "移動中" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に移動中" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "<%s>を<%s>に移動中" #: ulng.rsopernotstarted msgid "Not started" msgstr "開始していません" #: ulng.rsoperpacking msgid "Packing" msgstr "圧縮中" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に圧縮中" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "<%s>で属性を設定中" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "<%s>の属性を設定中" #: ulng.rsopersplitting msgid "Splitting" msgstr "分割中" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "<%s>でテスト中" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "<%s>をテスト中" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "チェックサムを検証中" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "<%s>でチェックサムを検証中" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "<%s>で完全削除(抹殺)中" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "ショートカット<%s>をcm_Delete用に登録しようとしています。この設定を逆にするために使用できます。" #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "ショートカット<%s>は既に使用中です。" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "変更して<%s>にしますか?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "“%s” でオプションが変更されました。\n" "\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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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レガシー: 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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "ファイル:%d、フォルダ:%d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "<%s>のアクセス権限の変更ができません。" #: ulng.rspropserrchown 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.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.\n" msgstr "" "DSXプラグインを使用したファイル検索が既に動いています。\n" "新しいものを起動するためには既に動いているものが終了する必要があります。\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.\n" msgstr "" "WDXプラグインを使用したファイル検索が既に動いています。\n" "新しいものを起動するためには既に動いているものが終了する必要があります。\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "ディレクトリを1つ選択して下さい。" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "ウィンドウを選択" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 "" #: 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 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.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 #, fuzzy #| msgid "Path, with ending delimiter" 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.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 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 msgid "Number of replacement: %d" msgstr "置換の回数:%d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "置換は起こりませんでした。" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.it.po������������������������������������������������������������0000644�0001750�0000144�00001215737�13424362040�017240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-02-07 21:08+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" "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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "Se&gui i link" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Riserva spazio" #: 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 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.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 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.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Salva file di Checksum in:" #: 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..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Selezion&a Tutto" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annulla" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Es&ci" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Sinistra" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Destra" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Sal&va Tutto" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Salva tutto" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Imposta proprietà" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Imposta su &tutti i file selezionati" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Salta questo file" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Percorso:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ultimo accesso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ultima modifica:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ultimo cambio di stato:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Dimensione:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link simbolico a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "D&istingui maiusc./minusc." #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Posiziona cursore sul primo file in lista" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Posiziona cursore sull'ultimo file in lista" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nuova cartella" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altezza" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Larghezza" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Modifica" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Carica" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Rinomina" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Reimposta &tutto" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Strumento Multi-Rinomina" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "A&bilita" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Estensione" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contatore" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Trova && Sostituisci" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registra risultati" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Contatore" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Giorno" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Giorno (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Giorno della settimana(corto, es: \"lun\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Giorno della settimana(lungo, es: \"lunedì\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Carattere alla posizione x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caratteri dalla posizione x a y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ora (2 cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuto (2 cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mese" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mese (2 cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nome mese(corto, es : \"gen\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nome del mese(lungo, es : \"gennaio\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nome" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Carattere alla posizione x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Carattere dalla posizione x a y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Ora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Estensione..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nome..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Secondi" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Secondi (2 cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Anni (2 cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Anni (4 cifre)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI multipli" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome di file singolo" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI singolo" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Ai&uto" #: 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 "" #: 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.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.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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 "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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa &indicatore gradiente" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicatore di spazio libero sull'unità" #: 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 msgid "&Brightness level of inactive panel" msgstr "Livello di &luminosità del pannello inattivo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicat.color.s&fondo:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indicat.color.Primo&Piano:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Selezione colore:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Font &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Registra font" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Font principale" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Visualizzatore &Book Font" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "&Visualizzatore 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "P&ulsanti piatti" #: 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.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.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.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.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 "" #: 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.)" #: 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.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." #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Clo&na pulsante" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Modifica scorciato&ia" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserisci nuovo tasto" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Altro" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Rimuovi scorciato&ia" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Pulsanti &piatti" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aspetto" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensione ba&rra" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&do" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Scorciatoia:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&na:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Dimensione ic&ona:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Percor&so di avvio" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Tooltip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo di pulsante" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Visualizzatore modo book" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Esempio" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Colore di &sfondo del visualizzatore book" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Colore del &font del visualizzatore book" #: 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleziona caratteri da inserire:" #: 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 msgid "Accessed:" msgstr "Accesso:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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 #, 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafica" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Plugin" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom -" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidenzia" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colora" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Occhi Rossi" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Ridimensiona" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Annulla" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizzatore" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositive" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Penna" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Evidenzia" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Colora" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositive" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Mostra" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: 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.miprint.caption msgid "Print..." msgstr "Stampa..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Seleziona Tutto" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando i file esistono" #: 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" #: 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 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" 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 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 msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Velocità %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "La cartella %s non esiste!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s liberi su %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Azioni" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Non è possibile copiare/spostare il file \"%s\" su sé stesso!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Impossibile eliminare cartella %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 msgid "This tab (%s) is locked! Close anyway?" msgstr "Questa scheda (%s) è bloccata! Chiudere ugualmente?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sei sicuro di voler uscire?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Copia %d file/cartelle selezionati?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Elimina %d file/cartelle selezionati?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Spostare %d file/cartelle selezionati nel cestino?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Eliminare \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Spostare \"%s\" nel cestino?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Impossibile connettersi al server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossibile copiare il file %s verso %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "La cartella col nome \"%s\" è già presente." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La data %s non è supportata" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Impossibile impostare gli attributi per \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossibile impostare data/ora per \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Impossibile impostare proprietario/gruppo per \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Il file %s è stato modificato, salvarlo?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s byte, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sovrascrivi:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Il file %s esiste, sovrascriverlo?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con il file:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "La cartella %s esiste, sovrascriverla?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Segui collegamento simbolico \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Percorso non valido" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copia file %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Estrai file %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crea collegamento %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crea cartella %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Sposta file %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimi file %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Rimuovere cartella %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fatto:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crea link simbolico %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Test integrità file %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Elimina %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" già presente. Sovrascrivere?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Rinominare/spostare %d file/cartelle selezionati?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Avviare la cancellazione sicura per i file/cartelle %d selezionati?" #: ulng.rsmsgwipesel 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!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Calcolo del Checksum in \"%s\"" #: ulng.rsopercalculatingchecksumof #, 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 msgid "Calculating \"%s\"" msgstr "Calcolo di \"%s\" in corso " #: ulng.rsopercombining msgid "Joining" msgstr "Unione" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Unisci file in \"%s\" su \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copia" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creazione cartella" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creazione cartella \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Eliminazione" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Eliminazione in \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Eliminazione di \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Esecuzione" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Esecuzione di \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Estrazione" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Elencazione di \"%s\" in corso" #: ulng.rsopermoving msgid "Moving" msgstr "Spostamento" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Spostamento da \"%s\" a \"%s\"" #: ulng.rsopermovingsomethingto 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 #, fuzzy #| msgid "Compressione da \"%s\" a \"%s\"" msgid "Packing from \"%s\" to \"%s\"" msgstr "Compressione da \"%s\" a \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Imposta proprietà in \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Imposta proprietà di \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Divisione" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Verifica del Checksum" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Verifica del Checksum in \"%s\"" #: ulng.rsoperverifyingchecksumof #, 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 msgid "Wiping in \"%s\"" msgstr "Cancellazione sicura in \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "La scorciatoia %s è già usata." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Modificare esso in %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "File: %d, cartelle %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossibile modificare i permessi per \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleziona cartella" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������doublecmd-0.9.8/language/doublecmd.hu.po������������������������������������������������������������0000644�0001750�0000144�00001247652�13424362040�017241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha r7226\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-11-20 02:01+0000\n" "Last-Translator: Nyilas MISY <dr.dabzse@gmail.com>\n" "Language-Team: unDoRito -- HTC-iP <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 1.8.8\n" "X-Native-Language: Magyar\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Összehasonlítás.... %d%% (ESC a kilépéshez)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Jobb: %d fájl törlése" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fájl található : %d (azonos : %d, különböző : %d, csak balról : %d, csak jobbról : %d )" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Balról jobbra : %d fájl másolása, teljes méret : %d bájt" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Jobbról balra : %d fájl másolása, teljes méret : %d 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 msgid "Fo&llow links" msgstr "Linkek követése" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Hely &tartalékolása" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: 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 msgid "When dir&ectory exists" msgstr "Ha a &mappa 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.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 "" #: tfrmbenchmark.lblbenchmarksize.caption 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 "Ellenőrző összeg számítása..." #: 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 "&Külön MD5/SHA1 készítése fájlonként" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Ellenőrzőösszeg(ek) mentése ide:" #: 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..." #: 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 "&Sorbaállít" #: 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 sorbaállítás" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Sorbaállítás 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Sorbaállítás 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Sorbaállítás 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Sorbaállítás 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Sorbaállítás 5" #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "&Mind kiválasztása" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Visszavonás" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Első különbség" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Első különbség" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Karakterkészlet 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 "Folyamatos görgetés" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Utolsó különbség" #: 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ő különbség" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Következő különbség" #: 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ő különbség" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Előző különbség" #: 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Bal" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Jobb" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 "" #: 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ás" #: 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 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "Ö&sszes mentése" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Összes mentése" #: 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 #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Kilépés" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Karakterér&zékeny" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Keresés a hiány&jeltő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 kiválasztott szöve&g" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Csak a &teljes 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" #: 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 :" #: 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 panelbe" #: 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 "Eddig :" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Tulajdonságok beállítása" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "&Minden kiválasztott fájlra" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Ezen fájl kihagyása" #: 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 "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Tartalmaz :" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Fájl néve" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Útvonal :" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Csoport" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Utolsó hozzáférés :" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Utolsó módosítás :" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Legutóbbi állapotváltozás :" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Méret :" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Szimbolikus hivatkozás :" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Típus :" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Név" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Érték" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmfileproperties.tsplugins.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Bezárás" #: 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 "&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 "" #: 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 "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: 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 "" #: 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 "&Indítás" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Nézőke" #: 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 ezzel \"Indítás a mappába\"" #: 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 el van mentve \"Indítás a mappában\", akkor vissza lesz állítva a sablon betöltésekor. Használja akkor, ha szeretné rögzíteni a keresést egy adott mappában" #: 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 "Kisbetű/Nagybetű érzékeny" #: 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.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 "Regular &expression" msgstr "R&egulá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.chkhex.caption msgid "Hexadecimal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Írja be a mappák nevét amelyeket kizár a keresésből, \";\" az elválasztó" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Írja be a fájlok nevét amelyeket kizár a keresésből, \";\" az elválasztó" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Írja be a fájlok nevét, \";\" az elválasztó" #: 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 "&Almappák kizárása" #: 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 "&Indítás a mappában" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "&Alkönyvtárak keresése :" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Előző keresések :" #: 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 "Megnyitás új fülön" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opciók" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Eltávolít a listáról" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: 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 #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Nézőke" #: 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "K&arakterérzékeny" #: 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 "Létező cél (erre fog mutatni a hivatkozás)" #: 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álassza ki az elemeket amiket importálni szeretne" #: 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 "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 "" #: 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 "" #: 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.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Rövid nézet" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Rövid nézet" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Elfoglalt &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 "" #: 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 "" #: 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 "Beállítások mentése" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Eszköztár..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Fa nézet menü beállítása" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Fa nézet 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 "" #: 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ájlnév másolása &teljes elérési úttal" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Fájlnév másolása a &vágólapra" #: 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 "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: 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 "" #: 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 "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Könyvtár előzmények" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Kedvenc &könyvtárak" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: 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 "" #: 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.actfocuscmdline.caption msgid "Focus command line" msgstr "Parancssorra fókuszálás" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Kurzor helyezése az első fájlra" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Kurzor helyezése az utolsó 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 "Rövid 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 "Baloldali 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 "" #: 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 "" #: 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 "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.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Csoportos át&nevezés" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Hálózati &csatlakozás..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Hálózati &szétkapcsolás" #: 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 "" #: 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ív 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 "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "&VFS lista megnyitása" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Műveletek nézőke" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&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 "" #: 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 "" #: 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 "" #: 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 "Rövid 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 "Jobboldali 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 "" #: 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 "" #: 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 "" #: 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 ezzel : ú&j füleken megnyitott könyvtárak" #: 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 ezzel : könyvár &változások engedélyezése" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Megnyitás a rendszertá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.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.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 "" #: 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 nézet panel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: 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 "" #: 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 "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 "Következő előzményre ugrik" #: 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 "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Látogassa meg a Double Commander honlapját" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Eltöröl" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: 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 msgid "Clear" msgstr "Üríté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 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 "" #: 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 #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 msgid "Case sensitive" msgstr "Karakterérzékeny" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Maszk bevitele :" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&vagy válasszon előre meghatározott kiválasztási típust :" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Új könyvtár létrehozása" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Adja 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Magasság" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Szélesség" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Szerkesztés" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Betö<és" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Átnevezés (&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Mind visszaállítása" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Csoportos Átnevező" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "E&ngedélyez" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Kiterjesztés" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Számláló" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Keresés && Csere" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Eredmény naplózása" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maszk" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Előre beállított" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Számláló" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Nap" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Nap (2 számjegy)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] A hét neve (röviden, pl : \"hét\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] A hét neve (hosszan, pl : \"hétfő\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Kiterjesztés" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Kiterjesztés" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Óra" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Óra (2 számjegy)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Perc" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Perc (2 számjegy)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Hónap" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Hónap (2 számjegy)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Hónap neve (röviden, pl : \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Hónap neve (hosszan, pl : \"január\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Név" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Név" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] Név" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Idő..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Kiterjesztés..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Név..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Beépülő" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Másodperc" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Másodperc (2 számjegy)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Év (2 számjegy)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Év (4 számjegy)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Nevek szerkesztése..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Nevek betöltése fájlból..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "---" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 "" #: 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 msgid "File type to be opened: %s" msgstr "Fájltípus legyen megnyitva : %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Összetett fájl nevek" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Összetett URI-k" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Egyszerű fájlnév" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Egyszerű URI" #: tfrmopenwith.misingleurl.hint 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.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opciók" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Kérem, válasszon egyet az aloldalak 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 "" #: 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 "" #: 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 "Egyéb..." #: 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 "Át&nevezés" #: 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 "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 "" #: 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 "Hozzá&adás" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Tö&mötírő :" #: 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 "Ki&bont :" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Útvonal nélküli kibontás" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID pozíció :" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID : " #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID keresési taromány :" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista :" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archívumok:" #: 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érdező sztring :" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Önkioldó 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 "" #: 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álás..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importálás..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: 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 "Ide beírhat egy vagy több meghajtót vagy csatolási pontot, elkülönítve ezzel : \";\"" #: 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" #: 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 "" #: 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ájlmaszk előzmények" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy 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 "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy 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 "" #: 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 "Állítsa be a parancssorra" #: 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 "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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Visszaállítás" #: 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 "" #: 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 "Con&figure columns view:" msgstr "&Oszlopnézet beállítása:" #: 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.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 "" #: 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 "" #: 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 "Elválasztó hozzáadása" #: 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 "Teljes összezárás" #: 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 "Kiválasztott elem törlése" #: 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 "Hozzáad..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Biztonsá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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Súgó" #: 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 "Egyéb..." #: 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 "Rendezés..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Fa állandó kitárása" #: 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 "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 "" #: 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élpont:" #: 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 "Keresés és csere..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "minden, A-től Z-ig!" #: 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 "Kapott menü tesztelése" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" 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 "Megerő&sítő ablak megjelenítése \"ejtés\" után" #: 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á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 "" #: 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.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Sorvége utáni görgetés" #: 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 "Speciális karaktekek megjelenítése" #: 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 "Belső szerkesztő beállításai" #: 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 "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 "Fa állandó kitárása" #: 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 "" #: 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 "" #: 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 "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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 "al-menü" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Al-menü hozzáadása" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Teljes összezárás" #: 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 "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 "al-menü minden elemmel" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "csak al-menü, de az elemek megtartása" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "kiválasztott elem" #: 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 "" #: 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 "Elválasztó beszúrása" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Al-menü hozzáadása" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "minden, A-től Z-ig!" #: 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 "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 "" #: 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 "" #: 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 "&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 "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: 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 "" #: 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 "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 "" #: 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 "" #: 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 "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 "Ki&induló ú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.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 kontext 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 "" #: 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 "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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Elemek kibővített opciói:" #: 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űvelet &másolása" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Művelet &törlése" #: 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 "&Mozgatá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.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: 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 "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mű&ködő műveletek megjelenítése" #: 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 "&Hányszoros legyen a végleges törlés??" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "&Gradiens (lejtő) mutató 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Meghajtón a szabad terület mutató" #: 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Mutató háttér szí&ne :" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Mutató &előtér szí&ne :" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Jelölő színe :" #: 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 "Szövegszín :" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: 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 "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Szöveg keresése a fájlokban" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Fájlkeresés" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: 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 "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Rendezés" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Karakterérzék&eny :" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Új fájl&ok beszúrása :" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: 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 "" #: 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 "" #: 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 "" #: 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 "" #: 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 "Hozzáa&dás" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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úzás és ejtés által rendez)" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Konzol betűtípusa" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Sz&erkesztő betűtípusa" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Nap&lófájl betűtípusa" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fő betűtípus" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Útvonal betűtípusa" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Keresési eredmények betűtípusa" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Megjelenítő könyv &betűtípusa" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Né&zőke betűtípusa" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Gyorsbillentyű &hozzáadása" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Másolás" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Törlés" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Gyorsbillentyű tö&rlése" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Gyorsbillentyű &módosítása" #: 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 "Átnevezés" #: 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 "&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 "Fájl rövidíté&sek :" #: 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 "Parancs" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: 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 "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Beborító ikonok megjelenítése, pl : linkek" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: 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 "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: 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 "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: 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 "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Mellőzi (nem mutatja) a következp 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 "Al&t+Betű :" #: 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Lapos gombok" #: 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.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Képernyő felosztása " #: 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 "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 "" #: 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.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 "" #: 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 "&Nem létező fájlok bélyegképeinek eltávolítása" #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Napló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.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 "" #: 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 végrehajtó:" #: 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 "&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 "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: 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 "" #: 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 "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: 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 "Regisztrálva" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájl neve" #: 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 le&hetővé tesznek más keresési algoritmusokat vagy külső eszközöket (mint pl : \"lokális\", stb)" #: 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.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 "A tömö&rítő beépülők az archív fájlokkal való munkához valók." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Regisztrálva" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy 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, vagy használja kereséshez és csoportos átnevezéshez" #: 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 lehetővé teszik, hogy az operációs rendszer számára elérhetetlen lemezek hozzáférését, vagy külső eszközöket, mint pl : Palm/PocketPC." #: 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 lehetővé teszik képek, táblázatok, adatbázisok, stb megtekintését a Nézőkében (F3, Ctrl+Q)" #: 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 "Karakterérzékeny keresés" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Keresés ezekre a tételekre" #: 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 "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 "karakterek" #: 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 "" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "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 :" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Gomb k&lónozása" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Gyorsbillentyű szerkesztése :" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Ú&j gomb beszúrása" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Kiválaszt" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Más..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Gyorsbillent&yű eltávolítása" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Javasol" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "L&apos gombok" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Adja meg a parancs paramétereit, mindegyik külön sorban. Nyomja meg az F1 billentyűt a paraméterek súgójához" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Megjelenés" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Sáv mérete :" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Para&ncs :" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Para&méterek" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Súgó" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Gyorsbillentyű :" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Iko&n :" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ikon mé&rete :" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Pa&rancs :" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Paraméterek :" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ki&induló útvonal :" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Buborék& :" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "külső parancsnak" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "belső parancsnak" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "az elválasztónak" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "az al-eszköztárnak" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Biztonsági mentés..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportálás..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Jelenlegi eszköztár..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "Eszkötár fájlba (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC .BAR fájlba (létező megtartása)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC .BAR fájlba (létező törlése)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Felső eszköztár..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Eszköztár biztonsági másolata" #: tfrmoptionstoolbar.miexporttoptodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "Eszkötár fájlba (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC .BAR fájlba (létező megtartása)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC .BAR fájlba (létező törlése)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "csak a jelenlegi kiválasztás után" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "mint első elemet" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "mint utolsó elemet" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importálás..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Eszköztár visszamásolása" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "jelenlegi eszköztárhoz ad" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "eszköztár fájlból (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "jelenlegi eszköztárhoz ad" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "egyszerű TC .BAR fájlból" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "jelenlegi eszköztárhoz ad" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC \"wincmd.ini\"-ből" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "jelenlegi eszköztárhoz ad" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "csak a jelenlegi kiválasztás után" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "mint első elemet" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "mint utolsó elemet" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Keresés és csere..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "csak a jelenlegi kiválasztás után" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "mint első elemet" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "mint utolsó elemet" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "az alábbiak mindegyikében..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "minden parancsban..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "minden ikon nevében..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "minden paraméterben..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "minden kezdő útvonaban..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "csak a jelenlegi kiválasztás után" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "mint első elemet" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "mint utolsó elemet" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Gomb típusa" #: 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 "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 "" #: 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 "&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 "" #: 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álás..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importálás..." #: 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 "Az előzményekkel:" #: tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: 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 nézet 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 "" #: 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Megjelenítő könyv mód" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Példa" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Megjelenítő könyv &háttérszíne" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Megjelenítő könyv &betűszíne" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Megjele&nítő könyv oszlopszáma" #: 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 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ő :" #: 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 "Karakterérzékeny" #: 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 "" #: 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 "Beépülő" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Mező" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "karakterek kivála&sztása beszúráshoz :" #: 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 msgid "Accessed:" msgstr "Utolsó hozzáférés :" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Módosított :" #: 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" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: 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 #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Célkönyv&tár" #: 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 "&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 "Kiadás" #: 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 "" #: 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 "" #: 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.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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: 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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: 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álasztott" #: 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 "egyedülállók" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Nyomja 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 nézet menü" #: 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 "Teljes összezárás" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Teljes kitárás" #: 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 "Fa nézet menü beállítása" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Fa nézet 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 "" #: 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 "&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 "D&etektálandó 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.actchangeencoding.caption msgid "Change encoding" msgstr "" #: 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 "" #: 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.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Közép" #: 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 "" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: 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.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 "Elforgat : 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Elforgat : 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Elforgat : 90" #: 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 "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: 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 "" #: 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Beépülők" #: 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 "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Nagyítás" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Nagyítás" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Kiemel" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Befest" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Piros szemek" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Átméretez" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Visszavonás" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Nézőke" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bemutató" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Toll" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Kiemel" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Befest" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bemutató" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Nézőke" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: 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.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.miprint.caption msgid "Print..." msgstr "Nyomtat..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Összes kijelölése" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Indítá&s" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Fájlműveletek" #: 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 "Mégsem" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Mégsem" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Új sorbaállítás" #: 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 "Sorbaállítás" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Sorbaállítás 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Sorbaállítás 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Sorbaállítás 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Sorbaállítás 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Sorbaállítás 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: 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" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Magasság" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Szélesség" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile 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" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: 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 "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Törött :" #: 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 msgid "Success:" msgstr "Sikeres :" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Ellenőrző összeg beírása és algoritmus kiválasztása :" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Ellenőrzőösszeg ellenőrzése" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Összes :" #: 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 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 "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: 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 "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Másolat (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Egyező:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Módosított:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Megszü&ntet" #: 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Mégsem" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Folytat" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "&Belemásol" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "&Mind belemásolja" #: 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 "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Kihagy" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Minde&t kihagy" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: 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 "Sorbaállítás" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Sebesség : %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Sebesség : %s/s, hátralevő idő : %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: 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ájl neve :" #: 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: 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 "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Kérdez;Felülír;Belemásol;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 "" #: 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.rsfilterstatus msgid "FILTER" msgstr "SZŰRŐ" #: 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 "Sablon meghatátozása" #: ulng.rsfinddepth 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 msgid "Directory %s does not exist!" msgstr "A könyvtár \"%s\" nem létezik!" #: ulng.rsfindfound 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 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 "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Kezdés" #: ulng.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s szabad %s" #: ulng.rsfreemsgshort #, fuzzy 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 msgid "Extension" msgstr "Kiterjesztés" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Csoport" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: 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.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 "" #: 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?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Párbeszédablak másolása/mozgatása" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Eltérésnézőke" #: 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.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: 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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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 "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 "" #: 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 "Egyéni oszlopok beállítása" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Műveletek" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Szerkesztés" #: ulng.rsmnueject msgid "Eject" msgstr "Kiadás" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: 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 "Más..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: 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 "" #: ulng.rsmsgapplicationname msgid "Description: %s" msgstr "" #: 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 "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nem másolhatja/helyezheti a fájlt \"%s\" saját magára!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "A mappa \"%s\" nem törölhető" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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ítja az összes inaktív fület?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Ez a fül (%s) zárolt! Mégis bezárja?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Biztosan ki akar lépni?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár másolása?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "\"%s\" másolása?" #: ulng.rsmsgcreateanewfiletype 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 "Törölje a részben átmásolt fájlt?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár törlése?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "A kijelölt %d fájlt/mappát a Kukába helyezi?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "\"%s\" törlése?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "A kijelölt \"%s\" Kukába helyezi?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nem helyezhető a Kukába! Véglegesen törli?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "A lemez nem elérhető" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Írja be a fájl kiterjesztést :" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Írja be a nevet :" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: 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 msgid "Can not connect to server: \"%s\"" msgstr "Nem bír csatlakozni a szerverhez : \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nem tudom %s fájlt ide másolni : %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Már létező könyvtárnév : \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "A dátum %s nem támogatott" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nem módosíthatóak az attribútumok : \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nem módosítható a dátum/idő : \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nem módosítható a tulajdonos/csoport : \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: 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 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 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 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 "Almenü neve" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "A fájl %s megváltozott, menti?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bájt, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Felülírja :" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "A fájl %s már létezik, felülírja?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Ezzel a fájllal :" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "A fájl (%s) csak olvasható/rejtett/rendszer. Törli?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "A fájl %s már létezik, felülírja?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "A szimbolikus hivatkozás \"%s\" követése?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 "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 "" #: 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 "Mind exportálása!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: 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 "" #: 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 "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries 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 "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 "" #: 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" msgstr "" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Érvénytelen útvonal" #: ulng.rsmsginvalidpathlong 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 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 verziójához készült! %s 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 "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "%s másolása" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "%s törlése" #: ulng.rsmsglogerror msgid "Error: " msgstr "Hiba : " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "%s kitömörítése" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Infó : " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "%s hivatkozás létrehozása" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "%s könyvtár létrehozása" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "%s fájl mozgatása" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Tömörítés %s fájlba" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "%s könyvtár törlése" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Kész : " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "%s szimbolikus hivatkozás létrehozása" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "%s fájl sértetlenségének ellenőrzése" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mesterjelszó" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Kérem, írja be a mesterjelszavat :" #: 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, folytatja?" #: 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 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 "" #: 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 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érem, írja be a jelszavat :" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Jelszó (Tűzfal) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Kérem, írja be újból a jelszavat az ellenőrzéshez :" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "%s &törlése" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" már létezik. Felülírja?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "%d fájl/könyvtár áthelyezése/átnevezése?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Kiválasztott \"%s\" áthelyezése/átnevezése?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Kérem indítsa újra a Double Commander-t, hogy érvényesítse a változásokat" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Kérem, csak ellenőrzőösszeg-fájlokat jelöljön ki!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Válassza 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 "" #: 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 msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: 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 "" #: 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 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 "" #: 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 "Kötetcimke :" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Kérem, írja be a kötet méretét :" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "A kiválasztott %d fájl/mappa törlése?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Törli a kiválasztott \"%s\"-t?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "ezzel" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Hálózat" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Egyéb" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Rendszer" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Megszüntetett" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Ellenőrzőösszegének számítás" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Ellenőrzőösszegének számítás itt : \"%s\"" #: ulng.rsopercalculatingchecksumof 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 msgid "Calculating \"%s\"" msgstr "Számítás \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Összefűzés" #: ulng.rsopercombiningfromto 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 msgid "Copying from \"%s\" to \"%s\"" msgstr "Másolás innen \"%s\" ide \"%s\"" #: ulng.rsopercopyingsomethingto 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 msgid "Creating directory \"%s\"" msgstr "Mappa készítése : \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Törlés" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Törlés itt : \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "\"%s\" törlése" #: ulng.rsoperexecuting msgid "Executing" msgstr "Végrehajtás" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "\"%s\" végrehajtása" #: ulng.rsoperextracting msgid "Extracting" msgstr "Kibontás" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "\"%s\" listázása" #: ulng.rsopermoving msgid "Moving" msgstr "Mozgatás" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Mozgatás innen \"%s\" ide \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Csomagolás innen \"%s\" ide \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Tulajdonság beállítása itt \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "\"%s\" tulajdonságainak beállítása" #: ulng.rsopersplitting msgid "Splitting" msgstr "Vágás" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Próbálás itt \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "\"%s\" próbálása" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Ellenőrzőösszeg ellenőrzése" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Ellenőrzőösszeg ellenőrzése itt \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "\"%s\" ellenőrzőösszeg ellenőrzése" #: 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 "Tisztítás" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Tisztítás itt \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "\"%s\" tisztítása" #: ulng.rsoperworking msgid "Working" msgstr "Dolgozik" #: 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 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 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 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 "Archívum típusának neve :" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "A beépülő \"%s\" 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 "" #: 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 "Kiterjesztés megadása" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: 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ő" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "A gyorsbillentyű \"%s\" a cm_Delete-tel lesz bejegyezve, így azt fel lehet használni, hogy megfordítsuk ezt a beállítást." #: ulng.rsopthotkeysaddhotkey 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 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 gyorsbillentyűje \"%s\" rendelkezik paraméterrel amely felülírja ezt a beállítást. Szeretné megváltoztatni ezt a paramétert és használni a globális beállítást?" #: ulng.rsopthotkeysdeletetrashcanparameterexists 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 gyorsbillentyű \"%s\" a cm_Delete-hez paraméterváltozást igényel, hogy egyezzen \"%s\" gyorsbillentyűvel. Szeretné megváltoztatni?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Leírás" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Gyorsbillentyű szerkesztése ehhez : %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Állandó paraméter" #: 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 törlésre" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned 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 gyorsbillentyű \"%s\" működjön, a gyorsbillentyűt \"%s\" hozzá kell rendelni a cm_Delete parancshoz, de már hozzá van rendelve ehhez : \"%s\". Szeretné megváltoztatni?" #: ulng.rsopthotkeysshortcutfordeleteissequence 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 gyorsbillentyű \"%s\" a cm_Delete-hez egy olyan szekvencia gyorsbillentyű amely a fordított Shift forrógombbal nem használható. 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 msgid "Shortcut %s is already used." msgstr "A gyorsbillentyű \"%s\" már foglalt" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Cseréli erre \"%s\"?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "erre van 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 "Archívumok" #: 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 "Rövid 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.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 "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: 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 #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Fájlkeresés" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Fájlok megtekintése" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: 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 "" #: 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 "Gombok" #: 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 "Egyéb" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Egér" #: ulng.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" #: 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.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 nézet menü" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: 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 "" #: ulng.rsoptpluginalreadyassigned 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 "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: 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 "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Regisztrálva" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: 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 "nem karakterérzékeny;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 és mutatja az elsőt;rendezés, mint a fájlokat és mutatja az elsőt;rendezés, mint a fájlokat" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Betűrendes, ékezetekre figyel;Természetes elrendezés : betűrendes és számok" #: 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 "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Név kategória:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fájl : %d, mappa : %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "\"%s\" jogosultsága nem állítható" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Válasszon ki egy könyvtárat" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Fájlnév" #: ulng.rssimplewordfiles msgid "files" msgstr "fájlok" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "Paraméter" #: ulng.rssimplewordresult msgid "Result" msgstr "Eredmény" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "MunkaMappa" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "B" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "GB" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "kB" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "MB" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "TB" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fájlok:%d, Mappák:%d, 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 "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Könyvtár kiválasztása :" #: ulng.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Csak előnézet" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Egyebek" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Lapos" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Korlátozott" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Egyszerű" #: 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 "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 "" #: 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 "" #: 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 "" #: 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 "Nézőke" #: ulng.rsunhandledexceptionmessage 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érjük, jelezze a hibát a 'bug tracker'-en egy leírással, hogy mit csinált, és a következő fájlt : %s. Nyomja meg \"%s\" gombot a folytatáshoz, vagy \"%s\" gombot a programból való kilépéshez." #: 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 "Panel útvonala" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: 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 "" #: 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.rsvarleftpanel msgid "Left panel" msgstr "Bal panel" #: 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 "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 "" #: 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 "Jobb panel" #: 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 "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 "" #: 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 "Hálózat" #: 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 msgid "%s not found!" msgstr "%s nem található!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: 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 msgid "Number of replacement: %d" msgstr "Cserék száma: %d" #: ulng.rszeroreplacement #, fuzzy,badformat #| msgid "No replacement took place.Use custom font and coloractGoToFileactIntelliFocusS&topUse \"drag && drop\" to move operations between queuesPut first in queuePut last in queueOut of queueCalculate files and foldersLinker complete(end of sub menu)(separator)Yes (%s)" msgctxt "ulng.rsmsgfavoritetabsendofmenuulng.rsmsgfavoritetabssimpleseparator" msgid "No replacement took place." msgstr "Nem történt csere.Egyedi betűtípus és szín használataactGoToFileactIntelliFocusLeállí&tás\"Fogd && Ejtsd\" használata a sorbaállítási műveletek köztElsőnekUtolsónakSoron kívülFájlok és mappák számításaLinker végzett(almenü vége)(elválasztó)Igen (%s)" ��������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.hr.po������������������������������������������������������������0000644�0001750�0000144�00001320621�13424362040�017222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-01-06 17:20+0100\n" "Last-Translator: Ivica Pavelić <ivica.pavelic2@zg.ht.hr>\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 msgctxt "fsyncdirsdlg.rscomparingpercent" msgid "Comparing... %d%% (ESC to cancel)" msgstr "Uspoređujem... %d%% (ESC za otkazivanje)" #: fsyncdirsdlg.rsdeleteright msgctxt "fsyncdirsdlg.rsdeleteright" msgid "Right: Delete %d file(s)" msgstr "Desno: Obriši %d datoteku(e)" #: fsyncdirsdlg.rsfilesfound 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 msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Sa ljeva na desno: Kopiraj %d datoteka, ukupne veličine %d bajta" #: fsyncdirsdlg.rsrighttoleftcopy msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "Right to Left: Copy %d files, total size: %d bytes" 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.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.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 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.lblsaveto.caption msgctxt "tfrmchecksumcalc.lblsaveto.caption" msgid "&Save checksum file(s) to:" msgstr "&Kopiraj zbirnu(e) ptovjeru(e) u" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Zbirna provjera..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Označi &sve" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Izlaz" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Lijevo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Sač&uvaj sve" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "_Kopiraj sve" #: 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.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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Podesite svojstva" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Dodeli svim odabranim datotekama" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Preskoči& ovu datoteku " #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Sadrži:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Putanja:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Udruženje" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Posljednji pristup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Posljednja izmena:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Poslednja izmena stanja:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Veza ka:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" msgstr "O&setljivo na veličinu slova" #: 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.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.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 "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.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.actgotofirstfile.caption msgctxt "tfrmmain.actgotofirstfile.caption" msgid "Place cursor on first file in list" msgstr "Postavi pokazivač na prvu datoteku kartice" #: tfrmmain.actgotolastfile.caption msgctxt "tfrmmain.actgotolastfile.caption" msgid "Place cursor on last file in list" msgstr "Postavi pokazivač na posljednju datoteku kartice" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmkdir.caption msgctxt "tfrmmkdir.caption" msgid "Create new directory" msgstr "Napravi novu mapu" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Visina" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zatvori&" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Izbriši&" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Uredi" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgctxt "tfrmmultirename.btnloadpreset.caption" msgid "&Load" msgstr "Učitaj&" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Pre&imenuj" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Poništi sve&" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Snimi&" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Višestruko preimenovanje" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Omogući&" #: 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.extension.caption msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "[E] Extension" msgstr "[E] nastavak" #: 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.gblog.caption msgctxt "tfrmmultirename.gblog.caption" msgid "Log Result" msgstr "Izlazi datoteke događanja" #: 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.micounter.caption msgctxt "tfrmmultirename.micounter.caption" msgid "[C] Counter" msgstr "[C] Brojač" #: tfrmmultirename.miday.caption msgctxt "tfrmmultirename.miday.caption" msgid "[D] Day" msgstr "[D] dan" #: tfrmmultirename.miday1.caption msgctxt "tfrmmultirename.miday1.caption" msgid "[DD] Day (2 digits)" msgstr "[DD] dan (2 cifre)" #: tfrmmultirename.miday2.caption msgctxt "tfrmmultirename.miday2.caption" msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] dan u nedjelji (kratko, npr. „pon“)" #: tfrmmultirename.miday3.caption msgctxt "tfrmmultirename.miday3.caption" msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] dan u nedjelji (potpuno, npr. „ponedeljak“)" #: tfrmmultirename.miextensionx.caption msgctxt "tfrmmultirename.miextensionx.caption" msgid "[Ex] Character at position x" msgstr "[Ex] znak na položaju x" #: tfrmmultirename.miextensionxx.caption msgctxt "tfrmmultirename.miextensionxx.caption" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] znaci od položaja x do položaja y" #: tfrmmultirename.mihour.caption msgctxt "tfrmmultirename.mihour.caption" msgid "[h] Hour" msgstr "[h] sat" #: tfrmmultirename.mihour1.caption msgctxt "tfrmmultirename.mihour1.caption" msgid "[hh] Hour (2 digits)" msgstr "[hh] sat (2 znaka)" #: tfrmmultirename.miminute.caption msgctxt "tfrmmultirename.miminute.caption" msgid "[n] Minute" msgstr "[n] Minut" #: tfrmmultirename.miminute1.caption msgctxt "tfrmmultirename.miminute1.caption" msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuta (2 znaka)" #: tfrmmultirename.mimonth.caption msgctxt "tfrmmultirename.mimonth.caption" msgid "[M] Month" msgstr "[M] Mejsec" #: tfrmmultirename.mimonth1.caption msgctxt "tfrmmultirename.mimonth1.caption" msgid "[MM] Month (2 digits)" msgstr "[MM] Mesec (2 znaka)" #: tfrmmultirename.mimonth2.caption msgctxt "tfrmmultirename.mimonth2.caption" msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ime meseca (kratko, npr., „jan“)" #: tfrmmultirename.mimonth3.caption msgctxt "tfrmmultirename.mimonth3.caption" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ime meseca (puno, npr., „januar“)" #: tfrmmultirename.miname.caption msgctxt "tfrmmultirename.miname.caption" msgid "[N] Name" msgstr "[N] Ime" #: tfrmmultirename.minamex.caption msgctxt "tfrmmultirename.minamex.caption" msgid "[Nx] Character at position x" msgstr "[Nx] znak na položaju x" #: tfrmmultirename.minamexx.caption msgctxt "tfrmmultirename.minamexx.caption" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] znaci od položaja x do položaja y" #: tfrmmultirename.minext.caption msgctxt "tfrmmultirename.minext.caption" msgid "Time..." msgstr "Vrijeme..." #: tfrmmultirename.minextextension.caption msgctxt "tfrmmultirename.minextextension.caption" msgid "Extension..." msgstr "Nastavak..." #: tfrmmultirename.minextname.caption msgctxt "tfrmmultirename.minextname.caption" msgid "Name..." msgstr "Ime..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Priključak" #: tfrmmultirename.misecond.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgctxt "tfrmmultirename.misecond1.caption" msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (2 znaka)" #: tfrmmultirename.miyear.caption msgctxt "tfrmmultirename.miyear.caption" msgid "[Y] Year (2 digits)" msgstr "[Y] Godina (2 znaka)" #: tfrmmultirename.miyear1.caption msgctxt "tfrmmultirename.miyear1.caption" msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Godina (4 znaka)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgctxt "tfrmopenwith.milistofurls.caption" msgid "Multiple URIs" msgstr "Višestruke adrese" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgctxt "tfrmopenwith.misinglefilename.caption" msgid "Single file name" msgstr "Jedno ime datoteke" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgctxt "tfrmopenwith.misingleurl.caption" msgid "Single URI" msgstr "Jedna adresa" #: tfrmopenwith.misingleurl.hint 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.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" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: 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 msgid "Con&figure 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.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.btnhelp.caption #, fuzzy #| msgid "Help" msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Pomoć" #: 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:" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Dodatne stavke opcija" #: 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Koristi &indikator gradijenta" #: 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazivač slobodnog mesta na uređajima" #: 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 msgid "&Brightness level of inactive panel" msgstr "Osvjetljenje neradne kartice" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Pozadinska boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Čeona boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Boja označavanja&:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Uređivač fontova" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Datoteka događanja fontova&" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Glavni font&" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Preglednik& knjige fontova" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Preglednik& fontova" #: 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.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Ravna dugmad&" #: 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.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.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.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.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 "" #: 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.)" #: 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.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" #: 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." #: 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)" #: 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.edruntermparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Gumb potpuno istih umnožaka" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi &prečicu" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Unesi novi gumb" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Odabiranje" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Drugo..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Ukloni &prečicu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Predložiti" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Prijava pogrešaka s naredbama" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Prikaz" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Veličina &trake:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Naredba:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Prečica:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "ikona&:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veličina& ikonice:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Naredba&:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Odrednice&:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Napomena:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodavanje alatne trake s svim DC naredbama" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "za vanjsku naredbu" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "za unutarnju naredbu" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "za razdjelnik" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "za podređenu alatnu traku" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Trenutna alatna traka" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "u datoteku alatne trake (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "u TC.BAR datoteci (zadržite postojeće)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "u TC.BAR datoteci (izbrišite postojeće)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Najpopularnija alatna traka" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Spremanje sigurnosne kopije Alatne trake" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "u datoteku Alatne trake (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "u TC.BAR datoteci (zadržite postojeće)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "u TC.BAR datoteci (obrišite postojeće)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "neposredno prije trenutnog odabira" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Vračanje sigurnosne kopije alatne trake" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption #, fuzzy #| msgid "to add to top toolbar" msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "iz datoteke Alatne trake (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "iz jedne TC .BAR datoteke" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "iz datoteke \"wincmd.ini\" programa TotalCommander ..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje na trenutačnu alatnu traku" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Traži i zamijeni" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "u svim gore navedenim ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "u svim naredbama ..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "u svim imenima ikona ..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "u svim parametrima ..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "Na svim početnim putanjima" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "samo prethodni trenutni odabir" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta gumba" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Način prikaza preglednika knjiga" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Primjer" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Pozadinska boja u pregledniku knjiga" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Boja slova u pregledniku knjiga" #: 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Izaberite znakove za unos:" #: 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 msgid "Accessed:" msgstr "Pristupano:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklađivanje mapa" #: 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 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Priključak" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Udalji" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Oboji" #: tfrmviewer.btnprevgifframe.caption msgid "<||" 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.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Vrati" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Preglednik" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretne slike" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Olovka" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Bojenje" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretni prikaz" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Pregled" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: 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.miprint.caption msgid "Print..." msgstr "Štampaj..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: 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" #: 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 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" 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?\n" #: 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 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 msgid "Copy (%d) %s" msgstr "Kopiraj (%d) %s" #: 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.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.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.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 msgid "Speed %s/s" msgstr "Brzina %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "Mapa %s ne postoji. " #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Slobodno je %s od %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" msgstr "" "Upozorenje: Pri vraćanju datoteke .hotlist iz ostave, trenutni spisak će biti izbrisan i zamjenjen uvezenim.\n" "\n" "Da li sigurno želite nastaviti?\n" #: 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Radnje" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Izlazna datoteka CRC32 je neispravna:\n" "„%s“\n" "\n" "Da li želite zadržati neispravnu datoteku?\n" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Ne možete izbrisati %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 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.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite napustiti program?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Želite li Kopirati %d odabranih datoteka/mapa?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Da Kopiram odabrano „%s“?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Želite li izbrisati %d odabranih datoteka/kazala?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Želite li premjestiti %d odabrane datoteke/kazala u smeće?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Želite li izbrisati odabrani „%s“?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Želite li premjestiti odabrano „%s“ u smeće?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Nisam uspio povezati se sa poslužiteljem „%s“" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nisam uspio kopirati datoteku %s u %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Datoteka pod imenom „%s“ već postoji." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s nije podržan" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nisam uspio postaviti svojstva datoteci „%s“" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nisam uspio postaviti datum i vreme datoteci „%s“" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nisam uspio postaviti vlasnika/udruženje datoteci %s“" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Nije moguće postaviti dozvole za \"%s\"" #: 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 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 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 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 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 msgid "File %s changed, save?" msgstr "Datoteka %s je izmijenjena. Želite li ju sačuvati?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajta, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datoteka %s već postoji, Želite li ju prepisati?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Datotekom:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Datoteka %s postoji. Želite li ju prepisati?" #: ulng.rsmsgfollowsymlink 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 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Ukupan broj sačuvanih stavki: %d\n" "\n" "Ime ostave: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Ukupna broj izvezenih stavki: " #: ulng.rsmsghotdirwhattodelete 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" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Netačna je izlazna dužina datoteke : „%s“" #: ulng.rsmsginsertnextdisk 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" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neispravna putanja" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Kopiraj datoteku %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Raspakiram datoteku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podaci: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Napravi Mapa %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Premjesti datoteku %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Putanja do datoteke %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Ukloni Mapa %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Urađeno: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Provjeri ispravnost datoteke %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Izbriši potpuno datoteku %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Obriši %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Datoteka „%s“ već postoji. Da je prepišem?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Naredba za izvršavanje problema (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Preimenovanje/premještanje %d označenih datoteka/kazala?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Odaberite vrstu datoteke za dodavanje njenog tipa\"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Pogreška! Konfiguracijska datoteka TC se ne može pronaći:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Pogreška! Izvršna konfiguracija TC se ne može pronaći:\n" "%s\n" #: 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Pogreška! Nije moguće pronaći željenu željenu TC izlaznu mapu alatne trake:\n" "%s\n" #: 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.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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Spremljeno!\n" "Ime datoteke alatne trake: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Želite li potpuno izbrisati %d označenih datoteka/kazala?" #: ulng.rsmsgwipesel 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!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Računam zbirnu provjeru u „%s“" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Računam zbirnu proveru „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Računam" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Računam „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Spajam" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spajam datoteke iz „%s“ na „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiram" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiram iz „%s“ u „%s“ " #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiram „%s“ na „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Stvaram Mapa" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Stvaram Mapa „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brišem" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Brišem iz „%s“" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Brišem „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvršavam" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Izvršavam „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Izdvajam" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Listam „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Premještam" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Premještam iz „%s“ u „%s“" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Sažimam iz „%s“ u „%s“" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Postavljam svojstva u „%s“" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Postavljam svojstva datoteci „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dijeljenje" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Probam u „%s“" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Probam „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Provjeravam zbir" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Provjeravam zbir u „%s“" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Brisanje u „%s“" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 #, 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 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 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 #, 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 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 msgid "Shortcut %s is already used." msgstr "Prečica %s već postoji." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Da li je dodjeliti %s?" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Datoteka: %d, mape: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nisam uspio promijeniti prava pristupa za „%s“" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izaberite Mapa" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 #, fuzzy,badformat msgid "Number of replacement: %d" msgstr "Broj zamjene" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nije bilo zamjene" ���������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.fr.po������������������������������������������������������������0000644�0001750�0000144�00001361615�13424362040�017230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Par soucis d'être constant, il n'y a pas d'exception, c'est toujours "Dossier" qui est utilisé. # C'est comme ça pour reprendre la même nomenclature que Windows et Apple. # Il est vrai que TC utilise le terme "Répertoire" mais on prend le partie de Windows qui lui parle de "dossier". # Pour quelqu'un qui a toujours préféré le terme "Répertoire" c'est un peu irritant la première heure d'utiliser le terme "Dossier". # Mais courage, après quelques minutes, on fini par s'y habituer et c'est très bien. # # 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 Comission 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 d'avantage et on va utiliser le même terme qu'en angalis, soit "plugin". # On le mettra partout entre guillemet. Puis si c'est au pluriels on ajoutera un "s" genre "plugins" simplement. # La seule exception c'est pour "ulng.rsoptionseditorplugins" où il n'estpas entre guillemet. C'est juste pour que dans le menu d'option alors qu'on trie # alphabétiquement pour pas que cela ne se retrouve en haut de la liste à cause du guilemet. # 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. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.1 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2018-12-22 19:01-0500\n" "Last-Translator: Denis Bisson <denis.bisson@denisbisson.org>\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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparaison... %d%% (ESC pour annuler)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Droite : Effacement %d fichiers(s)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fichiers trouvés : %d (Identique : %d, Différents : %d, Gauche unique : %d, Droit unique : %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Gauche vers la droite : Copier %d fichiers, taille totale : %d octets" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Droite versla gauche : Copier %d fichiers, taille totale : %d octets" #: 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 les 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 msgid "Fo&llow links" msgstr "Suivre les liens" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Réserver l'espace" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Vérification" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Quoi 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 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 ajuste 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 révision" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Page de démarrage :" #: 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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Sauvegarder le fichier de signature dans :" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Vérification de signature..." #: 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 "Ajoute à 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 "Sauvegarder 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 "Sauvegarder 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 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 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.acteditselectall.caption msgid "Select &All" msgstr "&Tout sélectionner" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annuler (en arrière)" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Quitter" #: 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.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 "Précédente différence" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Précédente différence" #: 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 "Sauvegarder la gauche" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sauvegarder la gauche" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sauvegarder la gauche sous..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sauvegarder la gauche sous..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sauvegarder la droite" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sauvegarder la droite" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sauvegarder la droite sous..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sauvegarder 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 msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparer les fichiers" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Gauche" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Droite" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Actions" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmdiffer.mnuencoding.caption 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 raccourcis à 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 raccourcis de la séquence" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Choisissiez votre raccourci-clavier de 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 "Recherche précédent" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Allez à 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 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 "Sauvegarder sous" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "T&out enregistrer" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Sauvegarder tout" #: 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 msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "En&codage" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Ouvrir en :" #: 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.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 "Chaine à R&echercher :" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direction" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Ajuster les propriétés" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ajuster pour tous les fichiers sélectionnés" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sauter ce fichier" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contient :" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Chemin :" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Groupe" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Dernier accès :" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Dernière modification :" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Dernier changement de statut :" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal :" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Taille :" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Lien symbolique vers :" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Type :" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écriture" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 "Handle 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 "Configurations 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 "Annule la recherche, ferme la fenêtre et oublie cette recherche" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Pour toutes les autres recherches, annule-les, ferme-les et oublie-les" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Aller au fichier" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Cherche donnée" #: 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 "Allez à 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 "Enregister" #: 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 "Sauvegarder 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 "Si sauvegardé, alors le dossier de début de recherche sera restitué lorsqu'on chargera le modèle. Utilisez cela si vous voulez chercher à nouveau 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 "Recherche 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.cbopenedtabs.caption msgid "Opened tabs" msgstr "Onglets ouverts" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Recherche pour les parties de noms" #: 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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 les données" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attributs" #: tfrmfinddlg.lblencoding.caption 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émarre 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 "Pour toutes les autres, annule-les, ferme-les et oublie-les" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Ovrir 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensible à la casse" #: 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 sur 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 "Choissiez l'entrée à importer" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Lorsqu'on clique un sous-menu, cela le sélectionnera au complet" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Maintenant la touche CTRL enfoncé et cliquez les entrées pour en choisir plus d'une à 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.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 "Calcul de 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 "Ajuster la ligne de commande pour la suivante dans 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 "Ajuster la ligne de commande pour la précédente dans 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 "Compare dossiers" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Compare 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 options reliées aux onlgets" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Configurations des raccourcis-clavier" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Configuration des \"Plugins\"" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Enregistre 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 info-bulles" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Configuration du menu en arbre" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Configuration des couleurs du menu en arbre" #: 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.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 de la sélection sans le séparateur de dossier final" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copier le chemin au 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 "Pour toutes les recherches, annule-les, ferme-les et oublie-les" #: 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 "Select any command and execute it" msgstr "Choisissez n'importe quelle commande et l'exécuter" #: 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écute 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.actfocuscmdline.caption msgid "Focus command line" msgstr "Mettre la contrôle actif 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 de droite" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Bascule vers la vue en arborescence" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Basculer entre la liste de fichiers actuelle et l'arborescence (si activé)" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer le curseur sur le premier fichier de la liste" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer le curseur sur le dernier fichier de la liste" #: 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 "Inverse 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 vignette sur le panneau gauche" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Charger un groupe d'onglets favoris" #: 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 d'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 avec la même &extension" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Sélectionne tous les fichiers du même nom" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Sélectionne tous les fichiers du même nom et la même extension" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Sélectionne tous les fichiers avec le 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 "Minimiser la fenêtre" #: 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 msgid "Open bar file" msgstr "Ouvre 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 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 "&Rafraichir" #: 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 "Resauvegarder les onglets courants dans un groupe d'onglets favoris" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurer 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 "Iverser 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 "Sauvegarder les onglets courants dans un groupe d'onglets favoris" #: 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 "Sauvegarde des 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 "Tous les onglets déverrouillés" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Tous les onglets verrouillés" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Tous les onglets verrouillés avec les 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.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 "Ouvre 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.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Appairer 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 du 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 "Vue du 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 avec la &même extension" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Désélectionne tous les fichiers du même nom" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Désélectionne tous les fichiers du même nom et la même extension" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Désélectionne tous les fichiers avec le 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 "Effacement Sécurisé" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Work with Directory Hotlist and parameters" #: 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 même dossier que celui actif dans le panneau opposé" #: 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 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 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 vore 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Créer un nouveau dossier" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Hauteur" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largeur" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Supprimer" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Éditer" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Charger" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Renommer" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Réinitialiser tout" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Enregister" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Renommer par lot" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Activer" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Extension" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Compteur" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Chercher && Remplacer" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Journaliser le résultat" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Compteur" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[J] Jour" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[JJ] Jour (2 digits)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Jour de la semaine (court, ex : \"lun\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Jour de la semaine (long, ex : \"lundi\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Caractère à la position x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caractère de la position x à y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Heure" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Heure (2 digits)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 digits)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mois" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mois (2 digits)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nom du mois (court, ex : \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nom du mois (long, ex : \"janvier\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nom" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Ex] Caractère à la position x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Ex:y] Caractère de la position x à y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Heure..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extension..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nom..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Seconde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Seconde (2 digits)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Année (2 digits)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Année (4 digits)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Édite les noms..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Charge les noms des fichiers..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 "Clique OK quand vous aurez fermé l'éditeur pour charger les noms à changer!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Choisir une application" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Commande personalisée" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Sauvegarder l'association" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Ajuster l'application à utiliser par défaut" #: tfrmopenwith.lblmimetype.caption 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Plusieurs URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fichier unique" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Identifiant de ressource unique" #: tfrmopenwith.misingleurl.hint 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.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 "Choisissez une sous-page, celle-ci ne contient aucun ajustements." #: 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 reconnaitre le type d'archive par 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 "Gestions 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 "Désactive tous" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Ramène l'état initial" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Active tous" #: 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 rafraichissement automatique" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Rafraichir 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 "Cache lenom automatiquement des disque 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 "Autoriser une seule instance de Double Commander à la fois" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ici vous pouvez entrer un ou plus lecteur ou point 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 "Affiche l'extension des fichiers" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "aligne (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 colonne fixe" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Largeur de colonne fixe" #: 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 "Affiche la grille" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Dimensionne automatiquement les colonnes" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Largeur des colonnes automatique :" #: 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 #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Onglets" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Sauvegarder 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 "" #: 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 "Sauvegarder en quittant" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Classement des éléments de configuration de l'arbre de gauche" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "État de l'arbre de configuration lorsqu'on y entre" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Ajuster 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 "Applique 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 "Applique 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 "Applique 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 "Applique 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 "Applique 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 à ajuster le défaut" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Réinitialise aux valuers 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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éinitialise 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 "Utilise 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é" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Personnaliser la police et 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 "Con&figure columns view:" msgstr "Configurer les colonnes pour l'affichage des dossiers/fichiers" #: 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.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 "Ci-dessus en un aperçu. Vous pouvez promener le cuseur et sélectionner des fichiers. Ça vous donne un aperçu immédiate de l'effet des ajustements." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Option 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 choisis présentement dans le dossier actif" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgid "Add a separator" msgstr "Ajoute 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 "Ajoute un dossier dont je vais entrer le nom" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Compacte le tout" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Refermer la branche" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Couper vers le presse-papier les entrées" #: 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, conserver les éléments" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Ouvrir la branche" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Se déplacer vers l'arbre" #: 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 au prochain élément" #: 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 choisis présentement 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ère le 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éploie toutes les branches" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Insère le contenu presse-papier" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Chercher et replacer 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 "Cherche et remplacement dans la cible" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Ajuster le chemin" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Ajuster la 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 "E&ffacer..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "E&xporter..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Aide" #: 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 "Quelques 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éployer tout l'arbre" #: 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 [le 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 (utilisez le glisser et 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é à TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Aller configurer les options relié à 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 "Ramène un fichier de backup d'une liste de dossiers favoris" #: 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 "Recherche et remplace..." #: 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-menu sélectionné, mais pas plus creux" #: 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 "Ajuste chemin" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Ajuste la cible" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Ajout du panneau principal" #: 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 utilisé à chaque fois" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Lorsqu'on sauvegarde du texte en Unicode, utiliser le format UTF8 (autrement, cela sera UTF16)" #: 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 "Affiche 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 et 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 le plus désirable en premier (utiliser le glisser et déposer)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(si celui le plus désiré n'est pas présent, on prendra 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écoché si problème)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Montre les fichiers-systèmes" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Montre l'espace-libre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Montre 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>, indenter la nouvelle ligne créée de la même distance de l'indentation de la ligne précédente" #: 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-dela de la fin de la ligne" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Affiche les caractères spéciaux" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Affiche 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 "Utilisez 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.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 "Enregister" #: 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 schéma global des ajustements" #: 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 "Inverse" #: 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 "Inverse" #: 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 "Inverse" #: 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 "Soulignement" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Inverse" #: 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 "Effacer..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importation/Exportation" #: 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éployer tout l'arbre" #: 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 groupses d'onglets favoris (on peut utiliser le glisser et déposer)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Autre 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 "Onglet à conserver :" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Sauvegarder l'historique des dossiers :" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Les onglets de gauche sauvés seront ramenés à :" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Les onglets de droite sauvés seront ramenés à :" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un séparateur" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Ajoute 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 "Compacte 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 "Importe les fichiers classique d'onglets selon les ajustements 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éploie 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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'items seulement" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Tri un seul groupe d'items" #: 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 profond" #: 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 vore 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 "Quelques 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 "Quelques 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 metter jamais 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 idenitifant l'action choisi 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 réarranger par glisser et 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 glissées/déposées" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Les extensions peuvent être triées par glisser et déposer" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Les types de fichier peuvent être trier par glisser et 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 "Personalisé avec..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Personalisé" #: 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.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 les associations d'extensions, offrir d'ajouter celle du fichier sélectionné si elle n'est pas déjà configurée" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Exécuter via le terminal puis fermer" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Exécuter via le terminal et demeurer actif" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Options étendues :" #: 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 d'effacement" #: 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 d'effacement 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életionner uniquement le nom du fichier lors d'un renommage (pas 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 boite de dialogue des copies/déplacement" #: 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.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" #: 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 "Montre 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 pulvérisation :" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utiliser l'indicateur en gradient" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Utilisez 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicateur d'espace-disque libre" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fond :" #: 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Couleur arrière de l'indicateur" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Couleur avant de l'indicateur" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Couleur de marque :" #: 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 "Un aperçu apparaît ci-dessous. Vous pouvez vous déplacer, sélectionner un fichier et voir l'effet immédiatement des différentes options." #: 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 lanche une recherche de fichier, réinitialser les filtres" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Recherche pour les parties de noms" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Affiche 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 "Action sur les filtres lorsqu'on appuis le 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gibioctet:" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "En-tête et barre d'état:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "Kibioctet:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Mébioctet:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Insérer les nouveaux fichiers :" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Format pour taille durant opérations:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Triage des dossiers :" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Méthode de tri :" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Tébioctet:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Déplace les fichiers mise à 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-clic 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 des fichiers juqu'au moment où l'onglet est activé" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mettre les noms des dossiers entre crochets" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Colore 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 "Active le renommage du fichier en double-cliquant 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élections 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 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 de fichiers" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Masque d'attribut à utiliser pa 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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 (se trie par glisser et 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Police de la console" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Police de l'éditeur" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Police du journal" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Police principale" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Police du chemin" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Police du résultat de recherche" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Police pour la visionneuse en mode \"Book\"" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Police du lecteur de fichiers" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Ajoute 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 apparaitre 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 "Ramener valeur par défaut de DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Sauvegarde 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Orde de tri" #: 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 "Montre 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 "Affiches 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 "Affichage ombragé pour fichiers cachés (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 "Affiche 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Boutons plats" #: 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.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 "Archivage/extraction des données des archives compressées" #: 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.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Journaliser les messages d'information" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Démarrage/Fermeture" #: 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 "Efface 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.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 "Sauverager 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.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, double-clic ouvre les fichiers)" #: 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 "Raffiner" #: 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 "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Appliquer à tous les \"plugins\" configurés" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Lorsque vous ajoutez un nouveau plugin, allez automatiquement dans la fenêtre de rafinnement" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Configuration :" #: 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 compresseur 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." #: 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 dystème de fichier 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." #: 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)" #: 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 l'avoir re-sauvegarder" #: 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 sauvegarder un nouveau" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Active les options extra des groupes d'onglets favoris (choix du panneau-cible lorsqu'on rappel, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Valeurs des options extra des groupes d'onglets favoris lorsqu'on en ajoute un nouveau" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Options \"extra\" des onglets de dossiers" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Lorsqu'on restitue un onglet, conserver les onglets existants :" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Les onglets de gauche sauvegardé seront rechargés :" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Les onglets de droite sauvegardé seront rechargés :" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conservation de l'historique des dossis avec ce groupe d'onglets favoris :" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Position par défault du nouveau groupe d'onglets favori lorsqu'on l'ajoute :" #: 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 quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode 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 quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode terminal" #: tfrmoptionsterminal.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode 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 en mode terminal et qui sera fermé ensuite :" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Commande pour exécuter une commande en mode terminal et qui demeurera ouvert :" #: 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 :" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "&Dupliquer le bouton" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Supprimer" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Éditer raccourci clavier" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insérer un nouveau bouton" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Choisissez" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Autre..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Retire raccourci clavier" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Suggestion" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Suggère un tooltip basé sur le type de bouton, sa commande et paramètres" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Bo&utons simples" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapporter les erreurs avec les commandes" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Entrez les paramètres, un sur chaque ligne. Appuyez F1 pour obtenir de l'aide sur les paramètres." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Apparence" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Taille de la barre" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Commande :" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paramètres :" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Aide" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Raccourci clavier" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Icône :" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "T&aille de l'icône :" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Commande :" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paramètres :" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Chemin de démarrage :" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Infobulle :" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Ajoute une barre d'outil avec TOUTES les commandes internes" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pour une commande externe" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pour une commande interne" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pour un séparateur" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pour un sous-menu" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Archivage..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exporter..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barre courante..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outil (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier de barre d'outil TC en conservant les existants (.BAR)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier de barre d'outil TC en remplaçant les existants (.BAR)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conservant les existants)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplaçant les existants)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barre d'outil principale..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Savegarde une archive de la barre d'outil" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outils (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier .BAR de TC (remplace les existants)." #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier de barre d'outil TC en remplaçant les existants (.BAR)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conservant les existants)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplaçant les existants)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la séelection courante" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Ramène un backup de barre d'outils" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil principale" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "d'un fichier de barre (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "d'un fichier de barre de TC (.BAR)" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "de \"wincmd.ini\" de TC" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Recherche et remplace..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "dans tout ce qu'il y a plus haut..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "dans toutes les commandes" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "dans toutes les icônes" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "dans tous les paramètres" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "dans tous les chemins de démarrage" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Type de bouton" #: 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'info-bulle pour le type de fichier sélectionné:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Options générales sur les info-bulles:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Afficher les info-bulles 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 info-bulles:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Mode d'affichage des info bulles:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Types de fichiers:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Annule 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 raccourcis-clavier, cela va quitter directement en retournant notre choix" #: 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 "Utilise pour l'historique de la ligne de commande" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Utilise pour l'historique des dossiers" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Utilise 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 arbre :" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Où utiliser les menu en arbre :" #: 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 : Concernant les options comme la sensiblité à la casse, d'ignorer les accents ou non, ces options seront sauvegardées et ramenées pour chaque contexte d'un usage 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 onglets favoris :" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Avec l'historique :" #: tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Afficher et utiliser les raccourcis" #: 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 "Avant-goût du menu en arbre :" #: 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 "Changer la couleur à gauche et vous observer un avant-goût du résultat à droite." #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Vue en mode \"Book\" (book viewer)" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemple" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Arrière-plan dans la vue en mode \"Book\"" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Couleur de la police en mode \"Book\"" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Nombre de colonne 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 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 "Compression" #: 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é 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 "Methode :" #: 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 :" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Ferme le panneau de filtre" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Entrez le texte à rechercher ou 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 "Que le début corresponde" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Que la fin corresponde" #: 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 "D'avantage 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 msgid "Field" msgstr "Champ" #: 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 quel concordance)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Choisissez les caractères à insérer :" #: 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 msgid "Accessed:" msgstr "Accédé :" #: 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 "Récursif" #: 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 "Prorpié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 "Octal :" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lire" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écrire" #: 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 vérification de signature CRC21" #: 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 parts" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Dossier-cible" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Nombre de blocs" #: 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.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'explotation" #: 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 "Utilise le chemin relatif lorsque 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.actselectclear.caption msgid "Remove selection" msgstr "Supprément éléments sélectionnées" #: 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 "Inverse le sens de la copie" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Choisir pour copie <- (droite vers 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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Appairer" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Appairer 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 "Montre :" #: 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 "dupliqué" #: 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 "Appuyez \\Comparer\" pour lancer" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchronise" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmer l'écrasement" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Menu en arbre" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Choisissez votre dossier favori :" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Recherche stricte respectant majuscules/minuscules" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Replier toutes les branches" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Déployer les branchess" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Ignorer les accents et ligatures durant la recherche" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Recherche en ignorant majuscules/minuscules" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Recherche stricte respectant 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é se trouve dans le nom de la branche, afficher cette branche même si rien à l'intérieur de correspond" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Fermer le menu en arbre" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Configuration du menu en arbre" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Configuration des couleurs du menu en arbre" #: 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 "Quelques fonctions pour choisir le chemin approprié" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Quelques 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 "Raffiner le \"plugin\"" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Détecter le type des archives par le 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 "Afficher 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 "Autoriser 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 d'À propos" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Changer 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 "Copier vers le presse-papier" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Coper 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 "&Quitter" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Rechercher" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Recherche précédent" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Plein écran" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Centrer" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Sui&vant" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Charger le fichier suivant" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Précédent" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Charger 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 "Prévisualisation" #: 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 "Sauvegarder 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élain de 5 seconde" #: 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Graphiques" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Étirer" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Étendre l'image" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Étendre seulement les grandes images" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom -" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Surbrillance" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colorer" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Yeux rouges" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionner" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Annuler" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visionneuse" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Crayon" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Surbrillance" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Colorer" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Vue" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: 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.miencoding.caption 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.miprint.caption msgid "Print..." msgstr "Imprimer..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Tout sélectionner" #: 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 "Utilisez 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 "Montre 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 "Une pause pour tous" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: 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 "Copy d&ate/time" #: 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" #: 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 "Manufacturier" #: uexifreader.rsmodel msgid "Camera model" msgstr "Appareil" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientation" #: ulng.msgtrytolocatecrcfile 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" msgstr "" "Ce fichier est introuvable et pourrait aider à valider la concaténation des fichiers à la finl:\n" "%s\n" "\n" "Est-ce que vous pourriez le rendre disponible et appuyer \"OK\" quand vous êtes prêt,\n" "ou \"ANNULER\" pour continuer tout de même sans ce fichier?\n" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<RÉP>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LIEN>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annule 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 "Entrez 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 msgid "Success:" msgstr "Succès :" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Entrer la signature et sélectionnez 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 "Voulez-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;Outil;Affichage;Utilisateur;Onglet;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 msgid "Copy (%d) %s" msgstr "Copie (%d) %s" #: 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 "Gio" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "Kio" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "Mio" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "Tio" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "Effacé: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Les deux fichiers sont identiques!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Corresponde: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modifie: " #: 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 "Renomme automatiquement le fichier" #: 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 "Copie tout à l'intérieur" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Sortie de l'application" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&nore" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignorez tous" #: 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 "Écrasement de ceux plus grands" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Écrasement de ceux plus vieux" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Écrasement des 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 msgid "Speed %s/s" msgstr "Vitesse %s/s" #: ulng.rsdlgspeedtime 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.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 fermer" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Exécuter via le terminal et demeurer actif" #: ulng.rsextsclosedbracketnofound msgid "\"]\" not found in line %s" msgstr "\"]\" introuvable dans la ligne %s" #: ulng.rsextscommandwithnoext 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;Copie à l'intérieur;Saute" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Demande;Ré-écris;Ré-écris 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 "Info-bulle 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.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 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 msgid "Directory %s does not exist!" msgstr "Le dossier %s n'existe pas !" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Trouvé : %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Sauvegarder le modèle de la recherche" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nom du modèle :" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Analyse effectuée : %d" #: ulng.rsfindscanning 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.rsfreemsg msgid "%s of %s free" msgstr "%s libre sur %s" #: ulng.rsfreemsgshort 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é" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Date/heure de création" #: 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.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?\n" msgstr "" "Avertissement! Lorsqu'on ramène liste de dossiers favoris, cela va effacer celle existant pour la replacer par celle importée.\n" "\n" "Êtes-vous sûr de vouloir continuer?\n" #: 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.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Apparairer 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?\n" msgstr "" "Une configuration avec ce nom existe déjà.\n" "Est-ce que tu veux l'écraser?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Êtes-vous sûr de vouloir ramener les valeur initiales?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Êtes-vous sûr de vouloir effacer la configuration \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Le fichier de configuration \"%s\" a été modifié.\n" "Voulez-vous le sauvegarder maintenant?\n" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Aucun raccourcis 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 "On ne trouve pas de rérérence à la barre 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 "Choisissez 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 colonne 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 \"colonne\", vous devez SAUVEGARDER, COPIER ou EFFACER celle qui vous éditez présentement" #: 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actions" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Défaut>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octale" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Copie les noms avec chemin UNC" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Créer un raccourci..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Déconnecté les lecteurs-réseaux" #: 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 "Compresse ici..." #: 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 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 "Voulez-vous mettre en guillemets" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Mauvais CRC32 pour le fichier résultant:\n" "\"%s\"\n" "\n" "Voulez-vous conserver le fichier résultant même s'il est corrompu?\n" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "On ne peut pas effacer le dossier %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "On ne peut pas écraser le répertoire \"%s\" avec de quoi qui n'est pas un répertoire \"%s\"" #: ulng.rsmsgchdirfailed 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 msgid "This tab (%s) is locked! Close anyway?" msgstr "Cet onglet (%s) est verrouillé! Forcer sa fermeture tout de même?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Confirmation de paramètre" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Êtes-vous certain de vouloir quitter ?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Le fichier %s a changé. Voulez-vous tout de même l'écraser avec ce contenu?" #: 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 msgid "Copy %d selected files/directories?" msgstr "Copier les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copier la sélection \"%s\" ?" #: ulng.rsmsgcreateanewfiletype 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 "Entrez l'emplacement et le nom de fichier pour la barre d'outil DC à sauvegarder" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Action personalisée" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Effacer le fichier copié partiellement?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Supprimer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Déplacer les %d fichiers/dossiers sélectionnés dans la corbeille ?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Supprimer la sélection \"%s\" ?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Déplacer le fichier/dossier \"%s\" sélectionné dans la corbeille ?" #: ulng.rsmsgdeltotrashforce 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 "Enter le nom de l'action personalisée" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Donnez l'extension de fichier :" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Donnez le nom :" #: ulng.rsmsgenternewfiletypename 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 (contrôle de redondance cyclique) dans l'archive" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Les données sont erronées" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Impossible de se connecter au serveur : \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossible de copier le fichier %s vers %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Il existe déjà un dossier nommé \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La date %s n'est pas supportée" #: ulng.rsmsgerrdirexists 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 de 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 lors de l'écriture dans le fichier" #: ulng.rsmsgerrforcedir 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 "Pas de fichier trouvé" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "La mémoire est 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 msgid "Cannot rename file %s to %s" msgstr "Impossible de renommer le fichier %s en %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "On ne peut sauver l'association!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossible de sauvegarder le fichier" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Impossible de définir les attributs pour \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossible de définir la date/heure pour \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "On ne peut pas ajuster le propiétaire/groupe pour \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "On ne peut ajuster les permissions pour \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Le cache (mémoire tampon) est trop petit" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Il y a trop de fichier à archiver" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format d'archive inconnu" #: ulng.rsmsgexecutablepath 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 que vous vous détruire toutes les entrées de vos onglets-favoris? (On ne pourra pas défaire cette action!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Déplacer ici les autres entrées" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Entrer un nom pour ce groupes d'onglets favoris" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Savegarde vers une nouvelle entrée de groupe d'onglets favoris" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Nombre de groupes d'onglets exportés avec succès : %d sur %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Ajustement pour sauvegarde de l'historique des dossiers par défaut pour un nouveau groupe d'onglets favoris" #: ulng.rsmsgfavoritetabsimportedsuccessfully 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 .tab favoris ont été importés" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Choisissez le(s) fichier(s) .tab à importer (on peut en importer plus d'un à la fois!)" #: 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 des onglets favoris n'ont pas été sauvegardées. Est-ce que vous voulez les sauvegarder avant de continuer?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conservation de l'historique des dossis avec ce groupe d'onglets favoris :" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nom du sous-menu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Cela va restituer le groupe d'onglets favoris sauvegardé sous le nom \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Sauvegarder les onglets courants sur un groupe d'onglets favoris existant" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Le fichier %s a été modifié, le sauvegarder ?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s octets, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Écraser :" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Le fichier %s existe déjà, l'écraser ?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Avec fichier :" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Ce fichier est 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 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!\n" msgstr "" "La longueur du nom de fichier-cible (%d) est plus grande que %d caractères!\n" "%s\n" "La plupart des applications ne seront pas capable d'accéder au dossier/fichier avec un nom long comme cela!\n" #: ulng.rsmsgfilereadonly 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 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 msgid "Folder %s exists, merge?" msgstr "Le dossier %s existe déjà, copier à l'intérieur'?" #: ulng.rsmsgfollowsymlink 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 msgid "Add %d selected dirs" msgstr "Ajoute les %d dossiers sélectionnés" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Ajoute le dossier sélectionné: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Ajoute 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 retirer toutes les entrées de votre liste de dossiers favoris? (Il n'y a pas de \"undo\" à cette action!)" #: 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 en archivant les entrées..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Erreur d'exportation d'entrées" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exporter tous!" #: 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 tous!" #: 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 "Pointez le fichier \".hotlist\" à importer" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nom du favori :" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Nombre de nouvelles entrées : %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 "Ajoute à nouveau le dossier sélectionné: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ajoute à 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 menu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Sous-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 du 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étermine l''ordre de tri du panneau actif 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étermine l''ordre de tri du panneau inactif après avoir changé de dossier" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Quelques fonctions pour choisir le chemin parmis ceux relatif, absolu, selon les dossiers spéciaux de Windows, etc." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Entrées sauvegardées : %d\n" "\n" "Fichier de backup : %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Nombre d''entrées exportées: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Voulez-vous effacer tous les éléments du sous-menu [%s]?\n" "Répondre NON va effacer seulment les délimiteurs de menu mais conservera tous les éléments à l'intérieur du menu\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Sélectionnez où sauvegarder le fichier des dossiers favoris" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longueur de fichier résultant incorrecte : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Insérez le prochain média de support.\n" "\n" "C'est pour écrire le fichier :\n" "\"%s\"\n" "\n" "Nombre d'octets restant à écrire : %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "Nombre hexadécimal invalide: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Chemin invalide" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Le chemin \"%s\" contient de caractères interdits" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ce n'est pas un \"plugin\" valide!" #: ulng.rsmsginvalidpluginarchitecture 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 non permise" #: 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 msgid "Copy file %s" msgstr "Copie du fichier %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Extraction du fichier %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Information: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Créer le lien %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Créer le dossier %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Déplacer le fichier %s" #: ulng.rsmsglogpack 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 msgid "Remove directory %s" msgstr "Supprimer le dossier %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Effectué: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Créer le lien symbolique %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Test de l'intégrité du fichier %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Pulvérisez le fichier %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Pulvérisez le dossier %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mot de passe principal" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Introduisez 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électionner." #: 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 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'oject 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 "Ci-dessous est un aperçu. Vous pouvez voir immédiatement le résultat de vos ajustements de couleur et tester un peu." #: ulng.rsmsgpassword msgid "Password:" msgstr "Mot de passe :" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Les mots de passe sont différent!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Introduire 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 "S'il vous plait, ré-entrez le mot de passe pour vérification :" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Supprimer %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Écraser la configuration \"%s\" existante ?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problème d'exécution de la commande (%s)" #: ulng.rsmsgprocessid 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 "S'il vous plait, rendez ce fichier disponible. 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 msgid "Rename/move %d selected files/directories?" msgstr "Renommer/Déplacer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Renommer/Déplacer la sélection \"%s\" ?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Voulez-vous remplacer ce texte?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Vous devez redémarrer Double Commander pour activer les changements." #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Choisissez le type de fichier auquel ajouté une extension \"%s\"" #: ulng.rsmsgselectedinfo 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 d'exécutable pour" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "S'il vous plait, choisissez uniquement un fichier contenant une (des) signature(s)!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Merci de 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 "Ajoute le dossier du panneau actif" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Ajoute le dossier du panneau inactif" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Parcourir et utiliser le dossier désigné" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Utilise variable d'environnement" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Aller configurer les chemin spéciaux de DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Aller au 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 "Rend relatif selon le chemin du dossier favori" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Transforme le chemin en absolu" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Transforme le chemin en relatif par rapport à un dossier spécial de DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Transforme le chemin en relatif par rapport à une variable d'environnement" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Transforme le chemin en relatif par rapport à un dossier spécial de Windows (même que TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Transforme le chemin en relatif par rapport à un autre dossier spécial de Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Utilise un chemin spécial de Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Utilise le chemin du dossier favori" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Choisir parmis d'autre dossiers spéciaux de Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Choisir parmis des dossiers spéciaux de Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Cet onglet (%s) est verrouillé! Voulez-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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le fichier de configuratio de TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le fichier de l'exécutable de TC :\n" "%s\n" #: 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.\n" msgstr "" "Erreur! TC est toujours en cours d'exécution mais devrait être fermé pour compléter cette opération.\n" "Fermez-le et appuyez OK ou ANNULER pour avorter.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le dossier de sortie pour la barre d'outil TC désirée :\n" "%s\n" #: 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'outil TC à sauvegarder" #: 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é de sauvegarder son état ou ses données avant qu'il ne soit terminé. Êtes-vous sûr de vouloir mettre fin au processus?" #: ulng.rsmsgthisisnowinclipboard 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é n'est pas parmis 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'outil à ramener" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Sauvegardé!\n" "Nom du fichier de barre d'outil : %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Trop de fichier 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 arbre!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL :" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SANS EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<SANS NOM>" #: 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 "Voulez-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 "Entrez la taille du volume :" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Lancer l'effacement sécurisé pour les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Lancer l'effacement sécurisé pour la sélection \"%s\" ?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "avec" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Mauvais mot de passe!\n" "Essayez à nouveau!\n" #: 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Attention, il y a des doubons!" #: ulng.rsmulrenwronglinesnumber msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Le fichier contient le mauvais nombre de lignes: %d, mais devrait être %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Conserver;Réinitialiser;Demander" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Pas 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 de fenêtre de recherche à fermer et oublier..." #: 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.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 "Ajustements" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Système" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Accessoires" #: ulng.rsoperaborted msgid "Aborted" msgstr "Annulé" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Calcul de signature" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Calcul de signature en \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Calcul de signature de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calcul en cours..." #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calcul \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Concaténage" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Concaténer fichiers dans \"%s\" vers \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copie" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copie de \"%s\" vers \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copie \"%s\" vers \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Création d'un dossier" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Création du dossier \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Suppression" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Effacement dans \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Efface \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Exécution" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Exécution de \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Décompression" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Décompression de \"%s\" vers \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminés" #: ulng.rsoperlisting msgid "Listing" msgstr "Liste" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Liste \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Déplacement" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Pas encore démarrés" #: ulng.rsoperpacking msgid "Packing" msgstr "Compression" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "En attente" #: ulng.rsoperpausing msgid "Pausing" msgstr "Mettre en attente" #: ulng.rsoperrunning msgid "Running" msgstr "En cours" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Ajustement d'une propriété" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Ajustement d'une propriété dans \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Ajustement d'une propriété de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Fractionnement" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Fractionnement de \"%s\" vers \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "En cours de démarrage" #: ulng.rsoperstopped msgid "Stopped" msgstr "Arrêté" #: ulng.rsoperstopping msgid "Stopping" msgstr "En train d'arrêter" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Test dans \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Test \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Vérification de la signature" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Vérification de la signature dans \"%s\"" #: ulng.rsoperverifyingchecksumof 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 de l'utilisateur..." #: ulng.rsoperwiping msgid "Wiping" msgstr "Pulvérisation" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Pulvérise dans \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Pulvérise \"%s\"" #: ulng.rsoperworking 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'info-bulle" #: 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 moade, command additionnelle" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Ajoute si n'est pas vide" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Nom de l'archive (nom long)" #: ulng.rsoptarchiverarchiver 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 msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Êtes-vous sûr de vouloir effacer: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Configuration 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 msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportation de %s é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 voulez 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 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 "Choississez le fichier à importer les configurations d'outils d'archivage" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Choisissez ce que vous voulez importer" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Utilise le nom seulement, sans le chemin" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Utilise 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 "Exécutable 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 msgid "Use ANSI encoding" msgstr "Utilise encodage ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Utilise encodage UTF8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Entrez le chemin et nom de fichier où sauvegarder la configuration de l'outil d'archivage" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Type d'archive :" #: ulng.rsoptassocpluginwith 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 (mais \"Langue\" sera toujours premier)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Étendu;Replié" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Le panneau actif à gauche et l'inactif à droite (classique);Le panneau de gauche à gauche, celui de droite à droite" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Entrer une extension" #: ulng.rsoptfavoritetabswheretoaddinlist 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 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é, donc it pourra être utilisé pour inverser cette option." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Ajoute un raccourci clavier pour %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Ajoute un raccourci" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "On ne peut ajuster de raccourci" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Changer le raccourci" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Commande" #: 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 "Le raccourci %s de la commande cm_Delete a un paramètre qui peut passer outre cette option. Voulez-vous changer ce paramètre pour utiliser celui global?" #: 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 "Le raccourci %s de la commande cm_Delete a besoin d'avoir un paramètre modifié pour correspondre au raccourci %s. Est-ce que vous voulez le changer?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Description" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Éditer raccourci clavier pour %s" #: ulng.rsopthotkeysfixparameter 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 "Ajuster le raccourci pour effacer un fichier" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned 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 raccouris %s, le raccourci %s doit être assigné à cm_Delete but imais il est déjà assigné à %s. Désirez-vous changer cela?" #: ulng.rsopthotkeysshortcutfordeleteissequence 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 raccouci pourlaquelle l'action inverse avec \"SHIFT\" ne peux pas être habitué. Cet ajustement peut donc ne pas fonctionner." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Raccourcis utilisé" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Le raccourci %s est déjà utilisé." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Modifier en %s ?" #: ulng.rsopthotkeysusedby 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 "Gestions des archives" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Rafraichissement automatique" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportements" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Vue 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 personalisées" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Dossiers favoris" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Glisser et 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Les options ont changé pour \"%s\"\n" "\n" "Voulez-vous sauvegarder les modifications?\n" #: 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.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 arbre" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Couleur menu arbre" #: 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é;Kibioctet personnalisé;Mébioctet personnalisé;Gibioctet personnalisé;Tébioctet personnalisé" #: ulng.rsoptpluginalreadyassigned 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.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Renommer le type de fichier d'info-bulle" #: 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 "non sensible à 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;Natural sorting: alphabetical and numbers" msgstr "Alphabétique avec prise en considération des accents;Tri naturel alphanumérique (lettres et chiffres)" #: 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 info-bulles 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 msgid "\"%s\" already exists!" msgstr "\"%s\" existe déjà!" #: ulng.rsopttooltipfiletypeconfirmdelete msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Êtes-vous sûr de vouloir effacer: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Configuration de type de fichier d'info-bulle exporté" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Exporter la configuration du type de fichier info-bulle" #: ulng.rsopttooltipfiletypeexportdone msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportation de %s é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 voulez exporter" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importer une configuration de type de fichier d'info-bulle" #: ulng.rsopttooltipfiletypeimportdone 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 voulez 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 du type de fichier d'info-bulle" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Nom du type de fichier info-bulle" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC classique - Copy (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 les mêmes option que pour les nouveaux fichiers;à l'endroit normal 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 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 msgid "Plugin \"%s\" not found!" msgstr "Plugin \"%s\" introuvable!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Unité \"%s\" introuvable pour champ \"%s\"!" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fichiers : %d, Dossiers : %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossible de changer les droits pour \"%s\"" #: ulng.rspropserrchown 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.rspropsnmdpipe msgid "Named pipe" msgstr "Tube 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.\n" msgstr "" "Une recherche de fichiers avec un plugin DSX est déjà en cours.\n" "Nous devons attendre qu'elle soit complété avant dans lancer une nouvelle .\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.\n" msgstr "" "Une recherche de fichiers avec un plugin WDX est déjà en cours.\n" "Nous devons attendre qu'elle soit complété avant dans lancer une nouvelle .\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Sélectionner un dossier" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Choisissez" #: ulng.rsshowhelpfor 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 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.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 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 partie 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Simplement un avant-goût" #: 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 de 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 de la barre d'outil principale" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Choisissez votre répertoire de la liste des répertoires favoris" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Choisissez votre dossier dans l'historique selon cette vue" #: 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 msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ne fait rien;Ferme l'onglet;Accéder aux groupes d'onglets favoris;Le 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 l'onglet favori" #: 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'info-bulle système et DC;DC d'abord et système ensuite (hérité);Combiner l'info-bulle du système et du système, d'abord le système;Afficher l'info-bulle du DC lorsque cela est possible et le système lorsque ce n'est pas le cas;Afficher l'info-bulle de DC uniquement;Afficher l'info-bulle du système uniquement" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visionneuse" #: ulng.rsunhandledexceptionmessage 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 "Merci de rapporter cette erreur sur le \"bug tracker\" avec une description de ce que vous étiez en train de faire ainsi que 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 msgid "Enclose each name in brackets or what you want" msgstr "Isole chaque nom entre crochers ou ce que vous voulez" #: 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'entre un paramètre avec une valeur par défaut suggérée" #: 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, la variable-pourcent est indiquer par le symbole \"#\"" #: 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, la variable-pourcent est de retour indiquer par le symbole \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Faire précéder chaque nom avec \"-a\" ou ce que vous désirez" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Interroge l'usager pour un paramètre;La 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 "Le chemin cmplet 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 "Va afficher un message simplement" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Panneau actif (source)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Panneau inactif" #: 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 en mode terminal qui demeurera ouver à la fin." #: 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 en mode terminal qui sera fermé à la fin" #: 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.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visionneuse interne de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Maubaise qualité" #: ulng.rsviewencoding 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 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 msgid "Number of replacement: %d" msgstr "Nombre de remplacements : %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Aucun remplacement n'a eu lieu." �������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.es.po������������������������������������������������������������0000644�0001750�0000144�00001266404�13424362040�017230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.1 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparando... %d%% (ESC para cancelar)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Derecha: Borrar %d archivo(s)" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Izquierda a Derecha: Copiar %d archivos, tamaño total: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "Seguir en&laces" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espacio" #: 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Guardar archivo(s) de suma de verificación en:" #: 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..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Seleccion&ar todo" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Deshacer" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Salir" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Izquierda" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "De&recha" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "G&uardar todo" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Guardar todo" #: 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.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 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" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "A&plicar" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Aplicar a &selección" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Saltar este archivo" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ruta:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Último acceso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificación:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Último cambio de estado:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Tamaño:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Enlace simbólico a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nombre" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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.\n" #: 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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 «;»\n" #: 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 «;»\n" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introducir nombres de archivos separados con «;»" #: 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensible a c&apitalización" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar el cursor sobre el primer archivo" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar el cursor sobre el último archivo" #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crear carpeta nueva" #: 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Anchura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Carg&ar" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Renombrar" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Res&tablecer todo" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Guardar" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Renombrado múltiple" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "Acti&var" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Extensión" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Buscar y Reemplazar" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registro de resultados" #: 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.micounter.caption msgid "[C] Counter" msgstr "[C] Contador" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Día" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Día (2 dígitos)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Día de la semana (corto, ejem., «lu.»)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Día de la semana (largo, ejem., «lunes»)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Carácter en posición x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caracteres desde posición x a y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hora (2 dígitos)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minutos (2 dígitos)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mes" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mes (2 dígitos)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Mes (corto, ejem., «Ene»)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Mes (largo, ejem., «Enero»)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nombre" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Carácter en posición x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caracteres desde posición x a y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensión..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nombre..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "Complemento" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Segundo" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Segundos (2 dígitos)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Año (2 dígitos)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Año (4 dígitos)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Editar nombres..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Cargar nombres desde el archivo..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URIs múltiples" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nombre de archivo único" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI individual" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "A&plicar" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: 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 «;».\n" #: 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" #: 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: 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 msgid "Background 2:" msgstr "Segundo plano 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure 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.lblfontname.caption msgid "Font:" msgstr "Tipografía:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Tamaño:" #: 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" msgstr "A&yuda" #: 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" #: 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.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.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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Elementos de opciones extendidas:" #: 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Indicador de color °radado" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Indicador de espacio libre" #: 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 msgid "&Brightness level of inactive panel" msgstr "Nivel de &brillo del panel inactivo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Color segundo plano:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Color primer plano:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Color de &selecció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 "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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Tipografía de la c&onsola" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Tipografía del &editor" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "Tipografía del re&gistro" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "&Tipografía principal" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Tipografía de la &ruta del panel" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Resultados de la búsqueda" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "Tipografía de la vista de li&bro" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "Tipografía del &visor" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Ordenación" #: 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.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Bo&tones planos" #: 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.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.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.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.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 "" #: 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.)" #: 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.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" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botón" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Editar ata&jo" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "Botón nue&vo" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Seleccionar" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "&Otro..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Borrar atajo" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Consejo" #: tfrmoptionstoolbar.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\n" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Botones planos" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Informar de errores con comandos" #: tfrmoptionstoolbar.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.\n" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Apariencia" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Tamaño de &barra:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "Coman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parámetro&s:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Ayuda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Atajo:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&no:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamaño de ic&ono:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parámetros:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "&Ruta inicial:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "A&yuda:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Añadir barra con TODOS los comandos de DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "para un comando externo" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "para un comando interno" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "para un separador" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "para subbarra de herramientas" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Respaldo..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra de herramientas actual..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "a un archivo de barra (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a «wincmd.ini» de TC (mantener existente)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a «wincmd.ini» de TC (borrar existente)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de herramientas..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Guardar un respaldo de la barra" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "a un archivo de barra (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a «wincmd.ini» de TC (mantener existente)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a «wincmd.ini» de TC (borrar existente)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restablecer un respaldo de la barra" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "desde un archivo de barra (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "desde un archivo TC .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "desde «wincmd.ini» de TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "para añadir a la barra superior" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Buscar y reemplazar..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "en todas de todo lo anterior..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "en todos los comandos..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "en todos los nombres de iconos..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "en todos los parámetros..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "en todas las rutas de inicio..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botón" #: 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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Visualizar en modo libro" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Ejemplo" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Color de fondo en vista de libro" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Color de &tipografía en vista de libro" #: 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 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:" #: 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 msgid "Field" msgstr "Campo" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleccionar los caracteres a insertar:" #: 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 msgid "Created:" msgstr "Creado:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accedido:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizar directorios" #: tfrmsyncdirsdlg.cbextfilter.text 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Complementos" #: 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.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Acercar" #: tfrmviewer.actzoomout.caption 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Resaltar" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibujar" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ojos rojos" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Deshacer" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visor" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositivas" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Lápiz" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "Resaltar" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "Pintar" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "Diapositivas" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Acerca de..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: 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.miprint.caption msgid "Print..." msgstr "Imprimir..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Si el archivo ya existe" #: 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" #: 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 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" 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?\n" #: 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 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 msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: 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.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.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.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 msgid "Speed %s/s" msgstr "Velocidad: %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "¡La carpeta «%s» no existe!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s libres de %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" msgstr "" "¡Advertencia! Cuando se restablece un archivo de respaldo .hotlist, este borrará la lista existente y la reemplazará.\n" "\n" "¿Seguro que quieres continuar?\n" #: 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.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?\n" msgstr "" "Ya existe una configuración con ese nombre.\n" "¿Quieres sobrescribirla?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "¿Seguro que quieres restaurar el valor predeterminado?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "¿Seguro que quieres borrar la configuración «%s»?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "La configuración de «%s» ha sido modificada.\n" "¿Quieres guardarla ahora?\n" #: 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acciones" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Copiar nombres con la ruta UNC" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Error de CRC32 en el archivo:\n" "«%s»\n" "\n" "¿Quieres conservar el archivo corrupto de todos modos?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "¡No puedes copiar/mover el archivo «%s» dentro de sí mismo!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "No se puede borrar la carpeta «%s»" #: ulng.rsmsgcannotoverwritedirectory 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 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 msgid "This tab (%s) is locked! Close anyway?" msgstr "" "¡Esta pestaña (%s) está bloqueada!\n" "¿Quieres cerrarla de todos modos?\n" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Confirmación de parámetro" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "¿Estás seguro de querer salir?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "¿Copiar los %d archivos/carpetas seleccionados?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "¿Copiar «%s»?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "¿Quieres eliminar los %d archivos/carpetas seleccionados?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "¿Quieres enviar %d archivos/carpetas a la papelera?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "¿Quieres eliminar «%s»?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "¿Quieres enviar a «%s» a la papelera?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" "¡No se puede enviar «%s» a la papelera!\n" "¿Quieres eliminarlo directamente?\n" #: 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 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 msgid "Can not connect to server: \"%s\"" msgstr "No se puede conectar al servidor: «%s»" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "No se puede copiar el archivo «%s» a «%s»" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ya existe una carpeta llamada «%s»." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La fecha «%s» no está soportada" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "No se pueden fijar atributos para «%s»" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "No se pueden fijar fecha/hora para «%s»" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "No se pueden fijar propietario/grupo para «%s»" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "No se pueden fijar permisos para «%s»" #: 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 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 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 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?\n" #: 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 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 msgid "File %s changed, save?" msgstr "" "El archivo «%s» ha cambiado.\n" "¿Quieres guardarlo?\n" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobrescribir:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "" "El archivo «%s» ya existe.\n" "¿Quieres sobrescribirlo?\n" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con archivo:" #: ulng.rsmsgfilenotfound 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 #, 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!\n" 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\n" #: ulng.rsmsgfilereadonly 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?\n" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig 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 msgid "Folder %s exists, merge?" msgstr "" "La carpeta «%s» ya existe.\n" "¿Quieres mezclarla?\n" #: ulng.rsmsgfollowsymlink 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 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Total de apuntes guardados: %d\n" "\n" "Archivo de respaldo: «%s»\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Total apuntes exportados:" #: ulng.rsmsghotdirwhattodelete 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" 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ú.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longitud de archivo incorrecto en: «%s»" #: ulng.rsmsginsertnextdisk 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" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta no válida" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copiar archivo «%s»" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Extraer archivo «%s»" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Información: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crear enlace «%s»" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crear carpeta «%s»" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mover archivo «%s»" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimir en archivo «%s»" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Eliminar carpeta «%s»" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hecho: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crear enlace simbólico «%s»" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Comprobar integridad del archivo «%s»" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Destruir archivo «%s»" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Borrar «%s»" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "El preajuste «%s» ya existe.\n" "¿Quieres sobrescribirlo?\n" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problema al ejecutar comando (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "¿Renombrar/mover los %d archivos/carpetas seleccionados?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Seleccionar a qué tipo de archivo agregar la extensión «%s»" #: ulng.rsmsgselectedinfo 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 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?\n" #: 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "¡Error! No se pudo encontrar el archivo de configuración de TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "¡Error! No se pudo encontrar la configuración del ejecutable de TC:\n" "%s\n" #: 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.\n" msgstr "" "¡Error! TC está ejecutándose, pero debe cerrarse para esta operación.\n" "Ciérralo y pulsa «Aceptar» o «Cancelar» para interrumpir.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "¡Error! No se pudo encontrar la carpeta de salida de la barra de herramientas TC:\n" "%s\n" #: 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.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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "¡Guardada!\n" "Nombre del respaldo de la barra: «%s»\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "¿Quieres destruir los %d archivos/carpetas seleccionados?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "¿Quieres destruir «%s»?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "con" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "¡Advertencia, nombres duplicados!" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "Calculando suma de verificación en «%s»" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Calculando suma de verificación de «%s»" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Calculando" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calculando «%s»" #: ulng.rsopercombining msgid "Joining" msgstr "Juntando" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Juntando archivos de «%s» a «%s»" #: ulng.rsopercopying msgid "Copying" msgstr "Copiando" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copiando desde «%s» a «%s»" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copiando «%s» a «%s»" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creando carpeta" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creando carpeta «%s»" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Borrando" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Borrando en «%s»" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Borrando «%s»" #: ulng.rsoperexecuting msgid "Executing" msgstr "Ejecutando" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Ejecutando «%s»" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extrayendo" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Listando «%s»" #: ulng.rsopermoving msgid "Moving" msgstr "Moviendo" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Moviendo desde «%s» a «%s»" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Comprimiendo desde «%s» a «%s»" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Configurando propiedad en «%s»" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Configurando propiedad de «%s»" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dividiendo" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Comprobando en «%s»" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Comprobando «%s»" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Comprobando suma de verificación" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Comprobando suma de verificación en «%s»" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Destruyendo en «%s»" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "El atajo «%s» ya está en uso." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "¿Cambiarlo a «%s»?" #: ulng.rsopthotkeysusedby 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.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 msgid "Fonts" msgstr "Tipografías" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Resaltadores" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Atajos" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Las opciones han cambiado en «%s»\n" "\n" "¿Quieres guardar las modificaciones?\n" #: 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Archivos: %d, carpetas: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "No se pueden cambiar los derechos de acceso de «%s»" #: ulng.rspropserrchown 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.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.\n" 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.\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.\n" 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.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecciona una carpeta" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Selecciona una ventana" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Número de sustituciones: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "No se ha sustituido nada." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.el.po������������������������������������������������������������0000644�0001750�0000144�00001543354�13445412501�017224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.9.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2019-03-04 20:37+0200\n" "Last-Translator: Anastasios Kazakis <orca.surfshark@gmail.com>\n" "Language-Team: Anastasios Kazakis <orca.surfshark@gmail.com>\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 2.0.6\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Language: el_GR\n" "X-Source-Language: el\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Σύγκριση... %d%% (ESC για ακύρωση)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Δεξιά: Διαγραφή %d αρχείο(α)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Ευρεθέντα αρχεία: %d (Όμοια: %d, Διαφορετικά: %d, Μοναδικά αριστερά: %d, Μοναδικά δεξιά: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Αριστερά προς Δεξιά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Δεξιά προς Αριστερά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %d bytes" #: 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 msgid "Fo&llow links" msgstr "Ακολουθείστε τους δεσμούς" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 "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 "Ως Κείμενο:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Αποθήκευση αρχείου(ων) αθροίσματος ελέγχου στο:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "Επιλογή όλων" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Αναίρεση" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Πρώτη Διαφορά" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Αριστερά" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Δεξιά" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "Αποθήκευση Όλων" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.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 "Κατεύθυνση" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Καθορισμός Ιδιοτήτων" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Καθορισμός σε όλα τα επιλεγμένα αρχεία" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Διαδρομή:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Γκρουπ" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Τελευταία προσπέλαση:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Τελευταία διαμόρφωση:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Τελευταία αλλαγή κατάστασης:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Συμβολοδεσμός στο:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Τύπος:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Όνομα" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 #, fuzzy 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 "Τροφοδοσία στο 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 "&Μετάβαση στο αρχείο" #: 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Τοποθέτηση του κέρσορα στο πρώτο αρχείο της λίστας" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Τοποθέτηση του κέρσορα στο τελευταίο αρχείο της λίστας" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Δημιουργία δεσμού τύπου Hard Link..." #: 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Ύψος" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Πλάτος" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Φόρτωση" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Μετονομασία" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Επαναφορά όλων" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Μετονομασία Πολλών" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] Επέκταση" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Μετρητής" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Αναζήτηση && Αντικατάσταση" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Μετρητής" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Ημερομηνία" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[ΗΗ] Ημέρα (2 ψηφία )" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[ΗΗΗ] Ημέρα της εβδομάδας (σύντομο, π.χ., \"δευτ\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[ΗΗΗΗ] Ημέρα της εβδομάδας (μακρύ, π.χ., \"δευτέρα\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Χαρακτήρας στη θέση x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Χαρακτήρες από την θέση x στη y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ώρα" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ώρα (2 ψηφία)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Λεπτό" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Λεπτό (2 ψηφία)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Μήνας" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Μήνας (2 ψηφία)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[ΜΜΜΜ] Όνομα Μηνός (σύντομο, π.χ., \"ιαν\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[ΜΜΜΜ] Όνομα Μηνός (μακρύ, π.χ., \"ιανουάριος\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Όνομα" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Χαρακτήρας στη θέση x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Χαρακτήρες από τη θέση x στη y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Χρόνος..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Επέκταση..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Όνομα..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Δευτερόλεπτο" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Δευτερόλεπτο (2 ψηφία)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Χρονιά (2 ψηφεία)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Χρονιά (4 ψηφεία)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Επεξεργασία ονομάτων..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Φόρτωμα ονομάτων από το αρχείο..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "Τύπος αρχείου προς άνοιγμα: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Πολλαπλά ονόματα αρχείων" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Πολλαπλά URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Μονό όνομα αρχείου" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Μονό URI" #: tfrmopenwith.misingleurl.hint 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.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 "Σταθερό Πλάτος Στηλών" #: 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 #, fuzzy 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" 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 "Προσθήκη από το κύριο πάνελ:" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 #, 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 "Παράμετρος που θα μεταφερθεί στην εντολή. Μακρύ όνομα αρχείου με κενά θα μπει σε εισαγωγικά." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Πισινό Χρώμα Σημαντή:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Μπροστινό Χρώμα Σημαντή:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gigabyte:" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Γραμματοσειρά Τερματικού" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Γραμματοσειρά Επεξεργαστή" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Γραμματοσειρά Καταγραφών" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Κύρια Γραμματοσειρά" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Γραμματοσειρά Διαδρομής" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Γραμματοσειρά Αποτελεσμάτων Αναζήτησης" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Γραμματοσειρά Προβολέα Βιβλίων" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" 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.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.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 #, fuzzy #| msgid "View log file content" 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.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.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 "Μονό κλικ (άνοιγμα καταλόγων, διπλό κλικ για αρχεία)" #: 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\", κ.λ.π.)" #: 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.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 tags ή ιδιότητες εικόνας στις λίστες αρχείων, ή χρήση τους στην αναζήτηση και στο εργαλείο μετονομασίας πολλών" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "Παράμετροι:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Κουμπί κλωνοποίησης" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Ρύθμιση ειδικού πλήκτρου" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Εισαγωγή νέου κουμπιού" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Επιλέξτε" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "Άλλα..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Αφαίρεση ειδικού πλήκτρου" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Πρόταση" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Πρόταση από τον DC υπόδειξης βασισμένης στον τύπο κουμπιού, εντολής και παραμέτρων" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Αναφορά λαθών με εντολές" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Εισαγωγή παραμέτρων εντολής, καθεμία σε ξεχωριστή γραμμή. Πιέστε F1 για βοήθεια στις παραμέτρους." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Εμφάνιση" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Μέγεθος Μπάρας:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Εντολή:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Παράμετροι:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Βοήθεια" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Ειδικό Πλήκτρο:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Εικονίδιο:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Μέγεθος εικόνας:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Εντολή:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Παράμετροι:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Διαδρομή Εκκίνησης:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Υπόδειξη:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Προσθήκη γραμμής εργαλείων με ΟΛΕΣ τις DC εντολές" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "για μία εξωτερική εντολή" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "για μία εσωτερική εντολή" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "για ένα διαχωριστικό" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "για μια υπο-σειρά εργαλείων" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Αντίγραφο Ασφαλείας..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Τρέχουσα γραμμή εργαλείων..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Γραμμή Εργαλείων κορυφής..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Αποθήκευση ενός αντιγράφου ασφαλείας της Γραμμής Εργαλείων" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Εισάγετε..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Επαναφορά ενός αντιγράφου ασφαλείας της Σειράς Εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "από ένα Αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "από ένα απλό TC .BAR αρχείο" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "από \"wincmd.ini\" του TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στην τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Αναζήτηση και αντικατάσταση..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "σε όλα τα ανωτέρω..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "σε όλες τις εντολές..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "σε όλα τα ονόματα εικονιδίων..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "σε όλες τις παραμέτρους..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "σε όλες τις διαδρομές εκκίνησης...." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Λειτουργία Προβολέα Βιβλίων" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Παράδειγμα" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Χρώμα παρασκηνίου στον προβολέα βιβλίων" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" 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 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 "Χρόνος:" #: 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 msgid "Field" msgstr "Πεδίο" #: 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 "Ή (όποιο ταιριάζει)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Προσπελάστηκε:" #: 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 "Εγγραφή" #: 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Γραφικά" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "Μεγέθυνση" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Μεγέθυνση" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Υπογράμμιση" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Ζωγραφική" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Κόκκινα Μάτια" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Αλλαγή Μεγέθους" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Αναίρεση" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Προβολέας" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slide Show" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Στυλό" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Υπογράμμιση" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Ζωγραφική" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slide Show" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Προβολή" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Εκκίνηση" #: 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 "Παύση Όλων" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" 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 "Όταν το αρχείο υπάρχει" #: 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 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" msgstr "" "Αυτό το αρχείο δε μπορεί να βρεθεί και αυτό θα μπορούσε να βοηθήσει στην επικύρωση του τελικού συνδυασμού αρχείων:\n" "%s\n" "\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 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 msgid "Copy (%d) %s" msgstr "Αντιγραφή (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "Διαγραφή: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Τα δύο αρχεία είναι όμοια!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Αντιστοιχίσεις:" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Ταχύτητα %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "\"]\" δεν βρέθηκε στη γραμμή %s" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "%s επίπεδο(α)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "όλα (απεριόριστο εύρος)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "τρέχων κατάλογος μόνο" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Ο Κατάλογος %s δεν υπάρχει!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Βρέθηκαν: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Αποθήκευση αναζήτησης προτύπου" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Όνομα Προτύπου:" #: ulng.rsfindscanned 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Ελεύθερα %s από %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" msgstr "" "Προσοχή! Κατά την αποκατάσταση ενός .hotlist αντιγράφου, θα διαγραφεί η υπάρχουσα λίστα για να αντικατασταθεί από την σημαντική.\n" "\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.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?\n" msgstr "" "Μια εγκατάσταση με αυτή την ονομασία υπάρχει ήδη.\n" "Επιθυμείτε αντικατάστασή της;\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Είστε σίγουροι ότι επιθυμείτε αποκατάσταση των προκαθορισμένων;" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Είστε σίγουροι ότι επιθυμείτε διαγραφή της εγκατάστασης των \"%s\";" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "\"%s\" Εγκαταστάσεις έχουν αλλάξει.\n" "Επιθυμείτε αποθήκευση;\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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ενέργειες" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Προκαθορισμένα>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octal" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Αντιγραφή ονομάτων με UNC διαδρομή" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Κακό CRC32 για τελικό αρχείο:\n" "\"%s\"\n" "\n" "Επιθυμείτε να κρατήσετε το κατεστραμμένο τελικό αρχείο ως έχει;\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Δεν μπορείτε να αντιγράψετε/μετακινήσετε ένα αρχείο \"%s\" σε αυτό το ίδιο!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Αδυναμία διαγραφής καταλόγου %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Δεν είναι δυνατή η αντικατάσταση του καταλόγου \"%s\" με τον μη-κατάλογο \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "ChDir σε [%s] απέτυχε!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Αφαίρεση όλων των ανενεργών καρτελών;" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Αυτή η καρτέλα (%s) είναι κλειδωμένη! Κλείσιμο ως έχει;" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Επιβεβαίωση της παραμέτρου" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Είστε σίγουροι οτι επιθυμείτε έξοδο;" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Αντιγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Αντιγραφή επιλεγμένου \"%s\";" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων στο κάδο αχρήστων;" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Διαγραφή επιλεγμένων \"%s\" στο κάδο αχρήστων;" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Αδυναμία σύνδεσης στον διακομιστή: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Αδυναμία αντιγραφής αρχείου %s στο %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Εκεί υπάρχει ήδη ένας κατάλογος με το όνομα \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Ημερομηνία %s δεν υποστηρίζεται" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Αδυναμία καθορισμού ιδιοτήτων για \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Αδυναμία ορισμού ημερομηνίας/ώρας για \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Αδυναμία ορισμού ιδιοκτήτη/γκρουπ για \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Αυτό θα φορτώσει τις Αγαπημένες Καρτέλες: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Αποθήκευση τρεχουσών καρτελών πάνω σε υπάρχουσα καταχώρηση Αγαπημένων Καρτελών" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Το αρχείο %s έχει αλλάξει, αποθήκευση;" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Αντικατάσταση:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Το Αρχείο %s υπάρχει, αντικατάσταση;" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Με το αρχείο:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "Το μήκος ονόματος στόχου (%d) είναι περισσότερο από %d χαρακτήρες!\n" "%s\n" "Τα περισσότερα προγράμματα δε θα μπορούν να έχουν πρόσβαση σε αρχείο/κατάλογο με τόσο μακρύ όνομα!\n" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Το μέγεθος αρχείου του \"%s\" είναι πολύ μεγάλο για το προοριζόμενο σύστημα αρχείων!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "Ο Φάκελος %s υπάρχει, συγχώνευση;" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Ακολουθείστε Συμβολοδεσμό \"%s\";" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Επιλέξτε τον τύπο κειμένου προς εισαγωγή" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Σύνολο καταχωρήσεων που έχουν αποθηκευθεί: %d\n" "\n" "Όνομα Αρχείου ασφαλείας: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Σύνολο καταχωρήσεων που έχουν εξαχθεί: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Επιθυμείτε να διαγράψετε όλα τα στοιχεία εντός του υπομενού [%s];\n" "Απαντώντας ΟΧΙ θα διαγράψετε μόνο τους οριοθέτες του μενού αλλά θα διατηρηθεί το στοιχείο μέσα στο υπομενού.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου όπου θα αποθηκευθεί ένα αρχείο καταλόγου Hotlist" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Μη Έγκυρο τελικό μήκος αρχείου για το αρχείο : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Παρακαλώ εισάγετε τον επόμενο δίσκο ή κάτι παρόμοιο.\n" "\n" "Ώστε να επιτραπεί εγγραφή σε αυτό το αρχείο:\n" "\"%s\"\n" "\n" "Αριθμός bytes προς εγγραφή: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "Μη έγκυρο δεκαεξαδικό νούμερο: \"%s\" " #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Μη Έγκυρη διαδρομή" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Η Διαδρομή %s περιέχει απαγορευμένος χαρακτήρες." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Αυτό είναι ένα μη έγκυρο πρόσθετο!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Αντιγραφή αρχείου %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Εξαγωγή Αρχείου %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Πληροφορίες: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Δημιουργία δεσμού %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Δημιουργία καταλόγου %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Μετακίνηση αρχείου %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Πακετάρισμα στο αρχείο %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Τερματισμός Προγράμματος" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Έναρξη Προγράμματος" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Αφαίρεση καταλόγου %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Έγινε: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Δημιουργία συμβολοδεσμού %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Δοκιμή ακεραιότητας αρχείου %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Ασφαλής Διαγραφή αρχείου %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "Διαγραφή %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Τα προκαθορισμένα \"%s\" ήδη υπάρχουν. Αντικατάσταση;" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Πρόβλημα κατά την εκτέλεση της εντολής (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Μετονομασία/μετακίνηση %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Επιλογή σε ποιους τύπους αρχείων να προστεθεί επέκταση \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης αρχείου TC ρυθμίσεων:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης εκτελέσιμου TC ρυθμίσεων:\n" "%s\n" #: 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.\n" msgstr "" "Λάθος! Ο TC ακόμη λειτουργεί αλλά θα έπρεπε να είναι κλειστός για αυτή τη λειτουργία.\n" "Κλείστε τον και πιέστε ΟΚ ή πιέστε ΑΚΥΡΩΣΗ για απόρριψη.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης επιθυμητού φακέλου εξαγωγής TC γραμμής εργαλείων:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου που θα αποθηκευθεί ένα αρχείο γραμμής εργαλείων του TC" #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Αποθηκεύτηκε!\n" "Όνομα Αρχείου Γραμμής Εργαλείων: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Ασφαλής Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Ασφαλής Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgwithactionwith msgid "with" msgstr "με" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Λάθος συνθηματικό!\n" "Παρακαλώ δοκιμάστε ξανά!\n" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Εκτέλεση αυτόματης μετονομασίας του \"name (1).ext\", \"name (2).ext\" κ.λ.π;" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Χωρίς αλλαγή;ΚΕΦΑΛΑΙΟ;μικρό;Πρώτο γράμμα κεφαλαίο;Πρώτο Γράμμα κάθε Λέξης Κεφαλαίο;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Προσοχή, διπλότυπες ονομασίες!" #: ulng.rsmulrenwronglinesnumber 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 #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Γραφικά" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Πολυμέσα" #: ulng.rsopenwithnetwork #, fuzzy 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 #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Σύστημα" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Εξαρτήματα" #: ulng.rsoperaborted msgid "Aborted" msgstr "Έχει απορριφθεί" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Υπολογισμός αθροίσματος ελέγχου" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου του \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Υπολογισμός" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Υπολογισμός \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Ένωση" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Ένωση αρχείων από \"%s\" σε \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Αντιγραφή" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Αντιγραφή από \"%s\" σε \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Αντιγραφή \"%s\" σε \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Δημιουργία καταλόγου" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Δημιουργία καταλόγου \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Διαγραφή" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Διαγραφή σε \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Διαγραφή \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Εκτέλεση" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Εκτέλεση \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Εξαγωγή" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Εξαγωγή από \"%s\" σε \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Τελείωσε" #: ulng.rsoperlisting msgid "Listing" msgstr "Προβολή Λίστας" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Προβολή Λίστας \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Μετακίνηση" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Μετακίνηση από \"%s\"σε \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Μετακίνηση \"%s\"σε \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Δεν έχει εκκινηθεί" #: ulng.rsoperpacking msgid "Packing" msgstr "Πακετάρισμα" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Πακετάρισμα από \"%s\" σε \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Καθορισμός ιδιότητας σε \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Καθορισμός ιδιότητας των \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Διαμερισμός" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Δοκιμή σε \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Δοκιμή \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Επιβεβαίωση αθροίσματος ελέγχου" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Επιβεβαίωση αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Ασφαλής Διαγραφή σε \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Η συντόμευση %s για το cm_Delete θα κατοχυρωθεί, ώστε να χρησιμοποιηθεί για να γίνει αντιστροφή αυτής της ρύθμισης.." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Συντόμευση %s έχει ήδη χρησιμοποιηθεί." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Αλλαγή σε %s;" #: ulng.rsopthotkeysusedby 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Οι Ρυθμίσεις έχουν αλλάξει στο \"%s\"\n" "\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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "Το \"%s\" υπάρχει ήδη!" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "Το πρόσθετο \"%s\" δεν βρέθηκε!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Η μονάδα \"%s\" δεν βρέθηκε στο πεδίο \"%s\" !" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Αρχεία: %d, Φάκελοι: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Αδυναμία αλλαγής δικαιωμάτων πρόσβασης για \"%s\"" #: ulng.rspropserrchown 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.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.\n" msgstr "" "Μια αναζήτηση αρχείων με χρήση του προσθέτου DSX είναι ήδη σε εξέλιξη.\n" "Πρέπει να ολοκληρωθεί αυτή ώστε να φορτωθεί μια νέα.\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.\n" msgstr "" "Μια αναζήτηση αρχείων με χρήση του προσθέτου WDX είναι ήδη σε εξέλιξη.\n" "Πρέπει να ολοκληρωθεί αυτή ώστε να φορτωθεί μια νέα.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Επιλέξτε ένα κατάλογο" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Επιλογή επιθυμητού παραθύρου" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Αριθμός αντικατάστασης: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Δεν πραγματοποιήθηκε καμία αντικατάσταση." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.de.po������������������������������������������������������������0000644�0001750�0000144�00001277106�13532422403�017212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha Rev. 6885\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-20 12:40+0300\n" "PO-Revision-Date: 2019-07-16 10:18+0200\n" "Last-Translator: Claudio <linuxbastler@users.sourceforge.net>\n" "Language-Team: Deutsch <linuxbastler@users.sourceforge.net>\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.2.1\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergleiche... %d%% (ESC zum Abbrechen)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Lösche Datei(en) %d" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Links nach rechts: Kopiere %d Dateien, Gesamtgröße: %d Bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Rechts nach links: Kopiere %d Dateien, Gesamtgröße: %d Bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vorlage wählen..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Prüfe freien Speic&her" #: 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 "&Korrigiere Verknüpfungen" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Sch&reibschutz-Attribut entfernen" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Leere &Verzeichnisse ignorieren" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Fo&lge Verknüpfungen" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Speicherplatz &reservieren" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Was soll getan werden, wenn Dateieigenschaften nicht übernommen werden können" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Vorlage aus Datei übernehmen" #: 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 übernommen 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.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 "Abbru&ch" #: 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 "&Kaum" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Dauerhaft" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolischer Link" #: 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 "Bits:" #: 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 "" #: tfrmbenchmark.lblbenchmarksize.caption 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 "Berechne Prüfsumme..." #: 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 "Fü&r jede Datei eigene Prüfdatei erstellen" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Prüf&summen-Datei speichern unter:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifiziere Prüfsumme..." #: 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 "Verbinde mit:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Zur Warteschlange hinzufügen" #: 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 &Optionen 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 "Datei- / Ordnerkommentar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Bearbeite Kommentar 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 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.acteditselectall.caption msgid "Select &All" msgstr "&Alles markieren" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig machen" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Beenden" #: 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.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 "Zeilenunterschied" #: 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 "Öffne links..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Öffne rechts..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Hintergrund zeichnen" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Vorheriger Unterschied" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Vorheriger 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 "Speichere links" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Speichere links" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Speichere links unter..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Speichere links unter..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Speichere rechts" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Speichere rechts" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Speichere rechts unter..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Speichere rechts unter..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Vergleiche" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Vergleiche" #: 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 "Vergleiche Dateien" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 Verknüpfung zur Sequenz hinzufügen" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbru&ch" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Letzte Verknüpfung aus der Sequenz entfernen" #: 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 "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 "Verknüpfungen:" #: 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 "Finde nächste" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Finde nächste" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Finde vorherige" #: 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 "Wiederholen" #: 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 markieren" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig machen" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "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 "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 "Neu" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Öffnen" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Öffnen" #: tfrmeditor.actfilereload.caption #, fuzzy 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 "Speichern" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Speichern &unter..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Speichern unter..." #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Alles &speichern" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Alle speichern" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Text-Editor" #: 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 "Zeilenende" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Ende" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Groß/Kleins&chreibung" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Suche von &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" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Entpacke Dateien" #: 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 &separaten Ordner 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 "Entpacke Dateien &nach" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Entpacke &Dateien anhand Auswahl" #: 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 "Warte..." #: 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 Panel:" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Alle betrachten" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuelle Operation:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Von:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Nach:" #: tfrmfileproperties.btnclose.caption msgctxt "tfrmfileproperties.btnclose.caption" msgid "&Close" msgstr "S&chließen" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Eigen&schaften einstellen" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "&Auf ausgewählte Dateien anwenden" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Diese Datei übers&pringen" #: 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 "Dauerhaft" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "als Programm ausführen &erlauben" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: 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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Enthält:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pfad:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Gruppe" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Letzter Zugriff" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Letzte Änderung:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Letzte Statusänderung:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Größe:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symb. Link:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Name" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Wert" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschaften" #: tfrmfileunlock.btnclose.caption #, fuzzy 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 "" #: 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 "Prozess ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Abbrechen" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "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 "Füge in &Listbox ein" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Suche abbrechen, Schließen und Speicher freigeben" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Gehe zu Datei" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Finde Daten" #: 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 "Gehe zu Seite \"Erweitert\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Gehe zu Seite \"Laden/Speichern\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Gehe zu Seite \"Plugins\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Gehe zu Seite \"Ergebnisse\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Gehe zu Seite \"Standard\"" #: 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-Pfad" #: 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 der Start-Pfad mitgepeichert wird, wird er wiederhergestellt, wenn die Vorlage geladen wird. Nützlich, wenn eine Suche immer im gleichen Verzeichnis gestartet werden 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 "&Vor Datum:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Date&igröße ab:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Bis Dateigr&öß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 Datei die &NICHT den Text enthalten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nicht &älter als:" #: 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 "Ausgew&ählte Verzeichnisse und Dateien" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "R&egulärer Ausdruck" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Zeit &von:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Zeit &bis:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Nutze Such-PlugIn" #: tfrmfinddlg.chkhex.caption msgid "Hexadecimal" msgstr "" #: 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.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 "&Vorherige Suche(n)" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Suche" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "für alle Anderen, Schließen 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 "Zeige in Betrachter" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Anzeige" #: 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Schreibweise be&achten" #: 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 "Ausgewählte importieren" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Einträge auswä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ü ausgewählt, wird das ganze Menü ausgewählt" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Strg 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 "Verschmelzer" #: 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 "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dateiname in die Befehlszeile kopieren" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Neues Such-Fenster..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Pfad und Dateiname in die Befehlszeile kopieren" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "&Pfad in die Befehlszeile eintragen" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Verkürzt" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Verkürzte Ansicht" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Berechne belegten &Speicherplatz..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Verzeichnis wechseln" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Wechsel zum Home-Verzeichnis (Nutzer)" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "In das übergeordnete Verzeichnis wechseln" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Verzeichnis zu Root wechseln" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Berechne Prüf&summe..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verifiziere Prüfsumme..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Log-Datei leeren" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Log-Fenster leeren" #: 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 "Stelle Befehlszeile auf den nächsten Befehl im Verlauf" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Vorher eingegebener Befehl" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nutze die Befehlszeile mit dem zuletzt eingegebenen Befehl" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Vollständig" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Spaltenansicht" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Anhand des &Inhalts vergleichen" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Vergleiche Ordner/Verzeichnisse" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Vergleiche Ordner/Verzeichnisse" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Konfiguration der Archivierer" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnis-Hotlist" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Konfiguration der Favoriten-Tabs" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Konfiguration der Verzeichnis-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 speichern" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Einstellungen speichern" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Konfiguration der Dateisuche" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Toolbar..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: 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 Baumansicht Menü Farben" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "&Zeige Kontextmenü" #: 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 "Kopiere alle ange&zeigten Spalten" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiere Dateinamen mit komplettem &Pfad" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiere Datei&namen in die Zwischenablage" #: 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 "Kopiere den kompletten Pfad der markierten Datei(en) ohne Verzeichnis-Trennzeichen am Ende (/)" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiere den kompletten Pfad der markierten Datei(en)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiere in gleichen Ordner" #: 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 "Zeige Befehlsparameter" #: 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 "für alle Suchen, Schließen und Speicher freigeben" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Verzeichnisverlauf" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Verzeic&hnis-Favoriten" #: tfrmmain.actdoanycmcommand.caption 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 "Ko&mmentar bearbeiten..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Datei erstellen und bearbeiten" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Pfad-Zeile über der Dateiliste bearbeiten" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Panels 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 "E&ntpacke Dateien..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Konfiguration der Dateiverkn&üpfungen" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Verbinde Dateien..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Dateiei&genschaften anzeigen..." #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "&Teile Datei..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "\"&Flache\" Ansicht" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus auf die Befehlsze&ile" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Setze die Einfügemarke auf den ersten Eintrag der Liste" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Setze die Einfügemarke auf den letzten Eintrag der Liste" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Erstelle &Hardlink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Hilfe &Index" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horizontale Datei-Panel" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastaturkürzel Index" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Verkürzte Ansicht im linken Panel" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Spaltenansicht im linken Panel" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Links &= Rechts" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Flache Ansicht im linken Panel" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Öffne &linke Laufwerksliste" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Umgekehrte Reihenfolge im linken Panel" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Linkes Panel nach &Attributen sortieren" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Linkes Panel nach &Datum sortieren" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Linkes Panel nach &Dateiendung sortieren" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Linkes Panel nach &Namen sortieren" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Linkes Panel nach &Größe sortieren" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Thumbnails-Ansicht im linken Panel" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Tabs aus den Favoriten-Tabs 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 &Endung markieren" #: 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 "Auswahl um&kehren" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Alle&s markieren" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Gru&ppe abwählen..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Gruppe markieren..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Alles a&bwählen" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Fenster minimieren" #: 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 Tab 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 "Versuche Archiv zu öffnen" #: 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 "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Öffne &VFS-Liste" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Ablauf-&Betrachter" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Optionen..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Packe Dateien..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Position des Fenster-Teilers festlegen" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Einf&ügen" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Vorherigen Tab aus der Liste laden" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Zum v&orherigen 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 Tab erneut öffnen" #: 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 "Neu im letzten geladenen Favoriten-Tab 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 "Verkürzte Ansicht im rechten Panel" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Spaltenansicht im rechten Panel" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Rechts = L&inks" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Flache Ansicht im rechten Panel" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Öffne rechte Laufwerksliste" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Umgekehrte Anordnung im rechten Panel" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Rechtes Panel nach &Attributen sortieren" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Rechtes Panel nach &Datum sortieren" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Rechtes Panel nach &Dateiendung sortieren" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Rechtes Panel nach &Namen sortieren" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Rechtes Panel nach &Größe sortieren " #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Thumbnail-Ansicht im rechten Panel" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Kommandozeilen-Fens&ter öffnen" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Aktuellen Tab in neuen Favoriten-Tab 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 "&Speichere Tabs in Datei" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Suchen..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle gesperrten Tabs, in denen Verzeichnisse in neuen Tabs geöffnet werden" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Alle Tabs in 'Normal' umwandeln" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Alle Tabs in 'Gesperrt' umwandeln" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle gesperrten Tabs, in denen Verzeichniswechsel erlaubt sind" #: 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 und Verzeichnisse in neuem Rei&ter öffnen" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Gesperrt" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Gesperrt, aber &Verzeichniswechsel erlaubt" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Öffnen" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Öffnen anhand der System-eigenen Dateiverknüpfungen (außerhalb von Double Commander)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Button-Leiste 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 "&Zeige versteckte und Systemdateien" #: 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 &Endung 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 "Liste der Laufwerke öffnen" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "De-/Aktivieren der Dateiliste um Dateinamen nicht anzuzeigen" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Erstelle symbolischen &Link..." #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Sychronisiere Verzeichnisse..." #: 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 Konsole umschalten" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Bewege markierten &Ordner in das linke Fenster" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Bewege &markierten Ordner in das rechte Fenster" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Baumansich&t-Panel" #: 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 E&ndung abwählen" #: 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 "Betrachten" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zeige den Verlauf der geöffneten Verzeichnisse des aktiven Panels" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gehe zum nächsten Eintrag in der Verlaufsliste" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gehe zum vorherigen Eintrag in der Verlaufsliste" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Log-Datei betrachten" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Alle Such-Fenster anzeigen" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Homepage von Double Commander öffnen" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Endgültig löschen" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Mit der Verzeichnis-Hotlist 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 "Favoriten für Verzeichnisse" #: 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 "zu Benutzerverzeichnis wechseln" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Zum Root-Verzeichnis 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 "Verzeichnis-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 "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 "Kopiere..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Hardlink erstellen..." #: 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 mar&kieren" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Verschiebe..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Erstelle symbolischen Link" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Tab-Optionen" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: 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 "Verzeichnis-Wechsel" #: 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 auswählen" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Auf alte Art sortiert" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Auf alte Art sortiert" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Alle Kategorien nach Standard sortieren" #: 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 "Hinweis:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Tastaturkürzel:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: 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 #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 msgid "Case sensitive" msgstr "Abhängig von der Schreibweise" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Neues Verzeichnis anlegen" #: 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 "Kompressions-Qualität für Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Breite :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Höhe" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Breite" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "L&öschen" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "B&earbeiten" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Laden" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Umbenennen" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "&Alles zurücksetzen" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Speichern" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Mehrfaches Umbenennen" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Akti&vieren" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguläre Ausdrücke" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "N&utze Ersetzung" #: 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.extension.caption msgid "[E] Extension" msgstr "[E]ndung" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Zähler" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Suchen und e&rsetzen" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log-Ergebnis" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Vorgaben" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Endung" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Su&che..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Datei&name" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Er&setze..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "S&tarten bei" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Breite" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Zählweise" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Tag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Tag (zweistellig)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Tag der Woche (kurz, z. B. \"Mo\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Tag der Woche (lang, z. B. \"Montag\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex]Bezeichnung an Position x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y]Bezeichnung von Positionx bis y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Stunde" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Stunde (zweistellig)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (zweistellig)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Monat" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Monat (zweistellig)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Monatsname (kurz, z. B. \"Jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Monatsname (lang, z. B. \"Januar\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Name" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Bezeichnung an Position x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Bezeichnung von Position x bis y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Zeit..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Endung..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Name..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[S] Sekunde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekunde (zweistellig)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Jahr (zweistellig)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Jahr (vierstellig)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Vorheriger 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 "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Anwendung auswählen" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Angepasster Befehl" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Verknüpfung speichern" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Gewählte Aktion als Standard festlegen" #: tfrmopenwith.lblmimetype.caption 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 msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Mehrere URL" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Einzelner Dateiname" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Einzelne URL" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Übernehmen" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: 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 auswählen, diese Seite hier 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 "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Übernehmen" #: 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 "" #: 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 "Andere..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Umbenennen" #: 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 "Optionen:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Format Analyse-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 "&Zeige die Ausgabe des Konsolenfensters" #: 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 "H&inzufügen:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hivierer:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Lösche:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Be&schreibung:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Endung:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "En&tpacken:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Ohne gespeicherten Pfad entpacken:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: 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 "Archivierer:" #: 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 "Teste:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&uto-Konfiguration" #: 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 "Exportieren..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importieren..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: 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 &Größe, Datum oder Attribute geändert werden" #: 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 Instanz von Doub&le Commander gleichzeitig 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 so getrennt werden müssen \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "A&usschlussliste für Laufwerke" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Spaltenweite" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Zeige Dateiendungen" #: 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" #: 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 "" #: 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 "Zeige Gitterstruktur zur Orientierung" #: 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 "&Übernehmen" #: 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 "Verzeichnis-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&he / Ersetze 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 Konfigurationsdatei" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Beim Beenden speichern" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Reihenfolge der Konfigurationsfolge im linken Baum sortieren" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Baumansicht bei Öffnen der Optionen" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "An Eingabeaufforderung übergeben" #: 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 "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 "Standard für Gehe zu" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: 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 "Vorheriges" #: 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-Überschneidung" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Wenn etwas geändert 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 "Cursor Begrenzung" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Nutze Frame-Cursor" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Farbe der inaktiven Auswahl nutzen" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Umgekehrte Auswahl nutzen" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Angepasste 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 "Hintergrund 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Spaltenansicht konfigurieren:" #: 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.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 er 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 Frame-Panel nach dem Vergleich:" #: 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 "Füge eine Kopie des gewählten Eintrages hinzu" #: 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 "Füge ein Trennzeichen hinzu" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Füge Verzeichnis hinzu, dass ich eintippe" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Alle zusammenfalten" #: 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 "Lösche gewählte Einträge" #: 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 "Füge Verzeichnis ein, das ich eintippe" #: 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 "Alle Zweige öffnen" #: 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 "Füge hinzu..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Lösche..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportieren..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Hilfe" #: 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 "Einige Funktionen um angemessene Pfade zu wählen" #: 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 "Struktur immer aufklappen" #: 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 Pop-Up-Menü [auch Pfad] zeigen" #: 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 "Hotlist Verzeichnisse (umsortieren durch Drag && Drop)" #: 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 "...aktuelles Level an markierten Einträgen" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Alle Hot-Dir Verzeichnisse scannen um die zu erkennen, die wirklich existieren" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Alle Hot-Dir Verzeichnisse und Ziele scannen, um die zu erkennen, die wirklich existieren" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "zu einer Verzeichnis-Hotlist (.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 "HotDir-Testmenü" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "aus einer Verzeichnis-Hotlist (.hotlis)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "aus einer \"wincmd.ini\" des TotalCommander" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Wiederherstellen einer Verzeichnis-Hotlist aus einem Backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Speichern einer aktuellen Verzeichnis-Hotlist in ein Backup" #: 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 Einträgen" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...Inhalt von Untermenüs gewählt, aber keine tieferen Level" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "Inhalt von Untermenüs ausgewählt, auch alle tiferen Level" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Menü aus Testergebnissen" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Zusatz aus dem Hauptpanel:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Frage 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 "Wenn Unicode-Text gespeichert werden soll, nutze das UTF-8 Format (ansonsten wird das UTF-16 Format benutzt)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Wenn Text fallen gelassen wird, erstelle den Dateinamen automatisch (ansonsten wird der Nutzer gefragt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Zeige Be&stätigungsdialog nach dem Ziehen und Ablegen von Dateien" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Wenn Drag && Drop benutzt 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 (Nutze Drag && Drop):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(ist das wahrscheinlichste Format 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 fünktionieren, bitte in diesem Fall versuchen das Problem durch Nicht-Markieren zu lösen)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "&Zeige Dateisystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Z&eige freien Speicherplatz" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Zeige &Laufwerksbezeichnung" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Laufwerksliste" #: 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.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 "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Sonderzeichen anzeigen" #: 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 "Optionen des internen Editors" #: 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 "&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 "Füge hinzu..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Lösche..." #: 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 "Struktur immer aufklappen" #: 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-Tab (umsortieren durch Drag && Drop)" #: 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 "Existierende Tabs die erhalten bleiben sollen:" #: 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 dort wiederherstellen:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Rechts gespeicherte Tabs dort wiederherstellen:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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 "Füge Untermenü hinzu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Alle zusammenfalten" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... aktuelles Level an markierten Einträgen" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Ausschneiden" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Lösche alle!" #: 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ählte Einträge" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Lösche gewählte Einträge" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Auswahl in veraltete .tab Datei(en) exportieren" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Veraltete .tab Datei nach Standardart importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Veraltete .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 "Veraltete .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 "Veraltete .tab Datei(en) an gewählte 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 öffnen" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Einfügen" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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 Einträgen" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortiere nur einzelne Gruppe von Einträgen" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...Inhalt von Untermenüs gewählt, aber keine tieferen Level" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...Inhalt von Untermenüs ausgewählt, auch alle tiferen Level" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Menü aus Testergebnissen" #: 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 "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: 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 "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Hoch" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Startpfad des Befehles. Nicht in Anführungstriche 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, sondern dient nur der Identifizierung." #: 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 "Parameter für den Befehl. Lange Pfade mit Leerzeichen sollten in Anführungsstriche gesetzt werden." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Befehl zum Ausführen. Lange Pfade mit Leerzeichen sollten in Anführungsstriche gesetzt werden." #: 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 "Endungen" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kann durch Drag & Drop 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 Drag & Drop angeordnet werden" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Endungen können durch Drag & Drop angeordnet werden" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Dateitypen können durch Drag & Drop angeordnet 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 "Angepasst mit..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Angepasst" #: 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 aus Konsolen-Fenster entnehmen" #: 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 Konsolen-Fenster 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.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Auf der Befehlszeile ausführen" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Erweitertes Kontextmenü" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfiguration der Dateitypen" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Anbieten die Auswahl zur Dateityp-Verknüpfung hinzuzfü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 "Wenn die Dateityp-Verknüpfung genutzt wird, anbieten die aktuelle Datei hinzuzfügen, wenn nicht bereits in einem konfigurierten Tpy enthalten" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Im Terminal ausführen und schließen" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Im Terminal ausführen und geöffnet lassen" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Einträge für erweiterte Optionen:" #: 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 ('Umschalt'-Taste invertiert diese Funktion)" #: 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" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Verschieben" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "K&ommentare von Dateien/Verzeichnissen mitbearbeiten" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "&Bei Umbenennen den Dateinamen ohne Endung selektieren" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "&Zeige Auswahldialog für Tabs im Kopieren/Verschieben-Dialog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "&Fehler bei Datei-Operationen ignorieren und sie im Log-Fenster anzeigen" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Führe Operationen aus" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Nutzeroberfläche" #: 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 "Ze&ige Operationsfortschritt in" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Dateiname bei Duplizieren erweitern:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "A&nzahl der Überschreibvorgänge" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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-Überschneidung" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "&Cursor nur als Rahmen" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Ver&wende Farbverlauf als Indikator" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Nutze inaktive Sel-Farbe" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Invertierte Au&swahl nutzen" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Cursor Begrenzung" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indikator für freien Speicherplatz auf Laufwerken" #: 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 "Hinte&rgrund 2:" #: 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 "Inaktive Cursor-Farbe" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inaktive Markierungsfarbe" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "&Helligkeitswert des inaktiven Panels" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Hintergrun&dfarbe für Indikator" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Vordergrundfarbe für &Indikator:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Markierungsfarbe" #: 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 einen sofortigen 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 Dateimaske leeren" #: 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 "Menue-Bar 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\" Button:" #: 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 "Nutze Memor&y-Mapping zur Textsuche in Dateien" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "N&utze Stream zur Textsuche in Dateien" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Format" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "personalisierte Abkürzungen benutzen:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Sortierung" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: 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 Dateigr&öße" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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 "Neue Date&ien einfügen" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: 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 "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "&Move updated files" 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 "" #: 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 "Zeige eckige Klammern um Verzeic&hnisse" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Ma&rkiere neue und aktualisierte Dateien" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Sofortiges Umbenennen bei zweimaligem Anklicken eines Dateinamens 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 "Zeige versteckte und S&ystemdateien" #: 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 "" #: 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 "&Hinzufügen" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Übernehmen" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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 (durch \"Drag && Drop\" anordnen)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Ka&tegorie der 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "S&chriftart für Kommandozeilen-Fenster" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Schriftart für &Editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Schriftart für &Log-Dateien" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Hauptschri&ftart" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Schriftart für Pfade" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Schriftart für Suchergebnisse" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Schriftart für die &buchartige Ansicht" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Schriftart für &Betrachter" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Tastaturkürzel &hinzufügen" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopieren" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy 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ürzel &bearbeiten" #: 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 "Umbenennen" #: 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 "&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 "&Verknüpfungen:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "So&rtierreihenfolge:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Befehle" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: 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 Buttons anzeigen" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Überlagernde Icons zeigen (z. B. Pfeile bei Verknüpfungen)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Keine speziellen Symbole" #: 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 "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: 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 verknüpften .&exe / .lnk - Dateien (langsam)" #: 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 "&Ausgewählte Namen hinzufügen" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Ausgewählte Namen mit &komplettem Pfad hinzufügen" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoriere (zeige nicht) die folgenden Dateien und Verzeichnisse:" #: 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 "P&feil nach links, bzw. rechts 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 Buttons" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Flaches Erschei&nungsbild" #: tfrmoptionslayout.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Fla&che Buttons" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Z&eige den 'Freien Speicher'-Indikator über den Panels" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Lo&g-Datei anzeigen" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Zeige den ausführenden Fensterteil im Hintergrund" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Zeige allgemeinen Fortschritt in der Menü-Zeile" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Befehlsze&ile anzeigen" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "&Zeige aktuelles Verzeichnis" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Zeige Buttons für &Laufwerke" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Zeige '&freien Speicher' von 'Gesamt-Speicherplatz' über den Panels" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Zeige Button für das Laufwe&rks-Drop-down-Menü" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Ze&ige Buttons der Funktionstasten" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Zeige Haupt&menü" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Zeige Tool&bar" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Zeige kurze Information zum freien Speicherp&latz" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "&Statusleiste zeigen" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Zeige Ta&bstop-Zeile" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Zeige &Verzeichnis-Tabs" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Konsolenfenste&r zeigen" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zeige zwei &Laufwerksleisten (feste Breite, über den Dateifenstern)" #: 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 "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Inhalt der Log-Datei betrachten" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Datum in den Namen der Log-Datei aufnehmen" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Packen / Entpacken" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Externe Befehlszeile ausführen" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiere/Verschiebe/Erstelle Link/s&ymb. Link" #: 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&telle / Lösche Verzeichnisse" #: 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 Log-Datei:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Informat&ionsmeldungen aufzeichnen" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/Beenden" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Erfolgreiche 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 Log-Datei" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Operationen aufzeichnen:" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Fortschritt des Vorgangs" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Vo&rschaubilder für gelöschte Dateien entfernen" #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Inhalt der Log-Datei betrachten" #: 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 "Beim Wechsel des Laufwerkes immer zur &obersten Ebenen des Laufwerkes wechseln" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "&Warnungen anzeigen (nur \"OK\" Button)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Speichern von Bildvorschauen im Cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Vorschaubilder" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "In Bezug auf TC Import/Export:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsdatei:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC.exe-Datei" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ausgabepfad für Toolbar:" #: 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 "Au&swahl mit der Maus" #: 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 "Öffnen mit..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Maus-Rad: Bewegen durch die Seite" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Auswahl" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modus" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Doppelklick" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Anzahl Zei&len" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Zeile für Zeile mit Be&wegen der Zeilenmarkierung" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Seite für Seite" #: 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)" #: 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" #: 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.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 "Pack&er-PlugIns werden benutzt um mit Archiven zu arbeiten." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: 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 "Registriert für" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy 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 "Inhalt-Plu&gins erlauben es, weitere Details (wie z.B. MP3-Tags) in Dateilisten anzuzeigen, oder sie zur Suche oder Umbenennung zu nutzen" #: 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)." #: 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 Bilder, Tabellen, Datenbanken o.ä. mit dem Betrachter (F3 oder Strg+Q)." #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Beginn (Name soll 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 des Namens (letztes Zeichen vor einem . soll passen)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Optionen" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Exakte Übereinstimmung des &Names" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Suche Schreibweise" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Suche nach diesen Einträgen" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Umbennung 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-&Panel 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 einer vorhanden" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Doppelte Tabs schließen wenn DC geschlossen wird" #: 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 "Begrenze Tab-Tite&lzeile auf" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Alle gesperrten Tabs mit Stern * markieren" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Rei&ter-Titel auf mehrere Zeilen verteilen" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Strg+Pf&eil hoch öffnet einen neuen Tab im Vordergrund" #: 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 erneut nutze, wenn möglich" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Zeige Button um Ta&bs zu schließen" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Laufwerksbuchstaben im Tab-Titel immer zeigen" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Verzeichnis-Tab-Titel" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "Bu&chstaben" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Aktion festlegen, wenn auf den Tab-Titel doppel-geklickt wird" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Rei&ter-Position" #: 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 dem erneuten Speichern zur-Tab-Konfiguration wechseln" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Nach dem Speichern eines neuen Tab zur-Tab-Konfiguration wechseln" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Extra-Optionen für Favoriten-Tabs ermöglichen (Zielseite beim Wiederherstellen auswählen, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Standard-Extra-Einstellungen zum Speichern neuer Favoriten-Tabs:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Extras für Tabs-Header" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Wenn Tabs wiederhergestellt werden, diese erhalten:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Links gespeicherte Tabs sollen hier wiederhergestellt werden:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Rechts gespeicherte Tabs sollen hier wiederhergestellt werden:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verzeichnis-Verlauf weiter speichern bei diesen Favoriten-Tabs:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardposition im Menü beim Speicherneines neuen Favoriten-Tabs:" #: 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 "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: 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 "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: tfrmoptionsterminal.edruntermparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Befehl, um ein Terminal zu öffnen:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Befehl, um einen Befehl im Terminal auszuführen und es anschließend zu schließen:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Befehl, um einen Befehl im Terminal auszuführen und es anschließend offen zu halten:" #: 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" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "S&Button klonen" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "L&öschen" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Tastatur&kürzel bearbeiten" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "Neuen Button e&infügen" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Auswählen" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Andere..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Tastaturk&ürzel entfernen" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Vorschlag" #: tfrmoptionstoolbar.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 Buttons, Befehls oder Parameters machen lassen" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Flache Buttons" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Berichte Fehler mit Befehlen" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Aussehen" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Höhe de&r Leiste:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "&Befehl:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parameter:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hilfe" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Tastaturkürzel:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Ico&n:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Größe der I&cons:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Befehl:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parameter:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Start&pfad" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Tooltip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Toolbar mit ALLEN DC-Befehlen hinzufügen" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "für externen Befehl" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "für internen Befehl" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "für ein Trennzeichen" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "für ein Untermenü" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportieren..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuelle Toolbar..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Toolbar-Datei" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine TC .bar - Datei (bestehende erhalten)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine TC .bar - Datei (bestehende überschreiben)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Top-Toolbar..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "speichere ein Backup der Toolbar" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Toolbar-Datei (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine TC .bar - Datei (bestehende erhalten)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine TC .bar - Datei (bestehende überschreiben)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter der aktuellen Auswahl" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Auswahl" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importieren..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Backup einer Toolbar wieder herstellen" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu neuer Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar auf oberster Toolbarebene hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbarebene hinzufügen" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbarebene ersetzen" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "aus einer Toolbar-Datei (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu neuer Toolbar in der aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu neuer Toolbar an oberster Position der Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "aus einzelner TC .bar - Datei" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu einer neuen Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar der obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "aus \"wincmd.ini\" des TC" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu einer neuen Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar in der obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "zur obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Suchen und Ersetzen..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "Alle in allen oberhalb..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "in allen Befehlen..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "in allen Icon-Bezeichnungen..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "in allen Parametern..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "in allen Startpfaden..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Button-Typ" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Konsolenfenster offen lassen, wenn der Vorgang abgeschlossen ist" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "In Konsol&enfenster 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 "&Übernehmen" #: 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 "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Zeige Tooltips (Hinweistexte) für Dateien im Panel" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategorie-&Hinweis:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Kategorie&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 "Exportieren..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importieren..." #: 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Hintergrundfarbe:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Cursorfarbe:" #: 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 "Baumansicht Menü Vorschau:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Tastaturkürzel Farbe:" #: 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Buchartige Ansicht" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Beispiel" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Hintergrundfarbe in der &buchartigen Ansicht" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Schri&ftfarbe in der buchartigen Ansicht" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "A&nzahl der Spalten in der buchartigen Ansicht" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Kon&figurieren" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Packe Dateien" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Für jede ausgewählte Datei/Verzeichnis ein seperates Archiv erstellen" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "SF&X-Archiv erstellen" #: 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 &mitspeichern (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:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Filter-Panel 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 "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Abhängig von der Schreibweise" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Verzeichnisse" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Dateien" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Entspricht dem Anfang" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Entspricht der Endung" #: 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 "Nutze Inhalt-Plugins, kombiniere mit:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Feld" #: 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 stimmt überein)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&ODER (irgendeine Übereinstimmung)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Abbrechen" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Zeichen zum Einfügen au&swählen:" #: 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 "Ändern von Dateieigenschaften" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Dauerhaft" #: 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 msgid "Accessed:" msgstr "Zugriff:" #: 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 "Auch 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 "Bits:" #: 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" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: 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 #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "&Zielverzeichnis" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "A&nzahl der Teile" #: 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 "Build" #: 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 "Maschinen-Typ" #: 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 "" #: 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 "Erstelle symbolischen Link" #: 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 "Bestehen&des Ziel, auf das die Verknüpfung zeigen soll" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Verknüpfungsname" #: 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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Schließen" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Vergleiche" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: 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 "asymetrisch" #: 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 ausgewä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 "Vergleiche" #: 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 \"Vergleiche\" 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 "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "alle einklappen" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "alle aufklappen" #: 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 #, fuzzy msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Konfiguration Baumansicht Menü" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint #, fuzzy msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Konfiguration Baumansicht Menü Farben" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Neue hinzufügen" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "A&bbruch" #: 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 "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmtweakplugin.btnremove.caption msgctxt "tfrmtweakplugin.btnremove.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Anpass-PlugIn" #: 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 String:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Endung:" #: 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.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 "In Zwischenablage kopieren mit &Format" #: 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 "Finde" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Finde nächste" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Finde vorherige" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Ganzer Bildschirm" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Zentrieren" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Nächste" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Nächste Datei laden" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Vorherige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Vorherige Datei laden" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Horizontal spiegeln" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "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.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" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Um 180 Grad drehen" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "-90 Grad drehen" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Um 90 Grad drehen" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Um +90 Grad 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 "Anzeige als Bild kopieren (Screenshot)" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "3 Sekunden verzögern" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "5 Sekunden verzögern" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Alle mar&kieren" #: 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 "Wie ein &Buch anzeigen" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: 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 "&Zeilenumbruch" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Bilder" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Strecken" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Bild strecken" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Nur große strecken" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Vergrössern" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Größer darstellen" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Kleiner darstellen" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Markieren" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Malen" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rote Augen" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Größe ändern" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Rückgängig machen" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Schnellansicht" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bilder automatisch nacheinander anzeigen (Slideshow)" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stift" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Markieren" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Malen" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bilder automatisch nacheinander anzeigen (Slideshow)" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Betrachten" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bearbeiten" #: 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.miprint.caption msgid "Print..." msgstr "Drucken..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Drehen" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Anzeige kopieren (Screenshot)" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Anzeigen" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Starten" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Dateioperationen" #: 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 "Abbrechen" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Abbrechen" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Neue Warteschlange" #: 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 "Warteschlange" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Warteschlange 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Warteschlange 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Warteschlange 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Warteschlange 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Warteschlange 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: 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 Datei vorhanden" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Höhe" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Breite" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile 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" msgstr "" "Die Datei konnte nicht gefunden werden, aber könnte helfen die vorhandenen zu prüfen:\n" "%s\n" "\n" "Kann sie manuell zur Verfügung gestellt werden? Dann bitte \"Ok\" klicken,\n" "oder \"Abbrechen\" klicken um ohne sie fortzusetzen.\n" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: 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 "Dateinamen eingeben, mit Endung, für gezogenen Text" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Zu importierendes Textformat" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Kompromitiert:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Allgemein:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Fehlend:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Lesefehler:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Erfolg:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Prüfsumme eingeben und Algorithmus auswählen" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifiziere Prüfsumme..." #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Gesamt:" #: 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 "Die Zwischenablage enthält keine gültigen Daten für die Werkzeugleiste." #: 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 Panel;Linkes Panel;rechtes Panel;Datei-Operationen;Konfiguration;Netzwerk;Verschiedenes;Paralleler Anschluss;Druck;Markierung;Sicherheit;Zwischenablage;FTP;Navigation;Hilfe;Fenster;Befehlszeile;Werkzeuge;Ansicht;Benutzer;Tabs;Sortierung;Log" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ablauf sortiert;A-Z sortiert" #: ulng.rscolattr msgid "Attr" msgstr "Attribute" #: 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 "Spalten anpassen" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Dateiverknüpfungen konfigurieren" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Befehlszeile und Parameter bestätigen" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopie (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importierte DC-Toolbar" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importierte TC-Toolbar" #: 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 "_Gezogener Text" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_Gezogener HTML-Text" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Gezogener RichText" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Gezogener einfacher Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Gezogener UnicodeUTF16-Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_Gezogener UnicodeUTF8-Text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Fügt hinzu: " #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Löscht: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Die Dateien sind identisch!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Entspricht: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Verändert: " #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Unterbrechen" #: 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Abbru&ch" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortset&zen" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Zunächst nur d&ieses Verzeichnis kopieren" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "&Alle bestehenden Verzeichnisse kopieren" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Programm beenden" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: 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 &vorhandenen Dateien überschreiben" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "A&lle größeren Dateien überschreiben" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Alle älteren &Dateien überschreiben" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Alle &kleineren Dateien überschreiben" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Umb&enennen" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Fo&rtsetzen" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Wiederholen" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Übe&rspringen" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Übers&pringe alle" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: 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 msgid "Speed %s/s" msgstr "Geschwindigkeit %s/s" #: ulng.rsdlgspeedtime 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 "" #: 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 "Öffne Datei" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Zurück" #: 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 "Auf der Befehlszeile ausführen" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Im Terminal ausführen und schließen" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Im Terminal ausführen und offen lassen" #: ulng.rsextsclosedbracketnofound msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Links;Rechts;Aktiv;Inaktiv;Beide;Nichts" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Ja;Nein" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportiert_aus_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Fragen;Überschreiben;Hinein kopieren;Ü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 setzen;Fehler ignorieren" #: 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.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 "Vorlage definieren" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s Level(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Alle (Tiefe unbegrenzt)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Nur das aktuelle Verzeichnis" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Verzeichnis %s existiert nicht!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Gefunden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Suche als Vorlage speichern" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Vorlagen-Name" #: ulng.rsfindscanned 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 "Zeit des Scans:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Starte bei" #: ulng.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "%s von %s frei" #: ulng.rsfreemsgshort #, fuzzy 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" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimierte Größe" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum/Zeit der Erstellung" #: ulng.rsfuncext msgid "Extension" msgstr "Endung" #: 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 "Vernüpfung 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 Endung" #: 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.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;Endung, a-z;Endung, 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?\n" msgstr "" "Warnung! Wenn eine \"Hotlist\" Backupdatei restauriert wird, wird die existierende durch das Backup ersetzt\n" "Sicher, dass weiter gemacht werden soll?\n" #: 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 "Bearbeite Kommentar-Dialog" #: 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.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Schnellansicht" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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 "nach Kommando-Name;nach Shortcut-Key (gruppiert);nach Shortcut-Key (einer pro Zeile)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kann Bezug zur Standard Bar-Datei nicht finden" #: 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 abwählen" #: ulng.rsmarkplus msgid "Select mask" msgstr "Wähle Maske" #: 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 "Um das aktuelle Bearbeiten der Spaltenansicht zu verändern, die aktuelle entweder SPEICHERN, KOPIEREN oder LÖSCHEN" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Bearbeite angepasste Spalten" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Neuen angepassten Namen für die Spaltenansicht angeben" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Aktionen" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: 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 "Einbinden" #: 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.rsmnusortby msgid "Sort by" msgstr "Sortieren" #: ulng.rsmnuumount msgid "Unmount" msgstr "Einbindung lösen" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Betrachten" #: ulng.rsmsgaccount msgid "Account:" msgstr "Zugang:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname msgid "Description: %s" msgstr "" #: 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 "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Falscher CRC32-Wert für entstehende Datei:\n" "\"%s\"\n" "\n" "Soll die entstehende korrupte Datei trotzdem behalten werden?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Die Datei \"%s\" kann nicht über sich selbst kopiert/verschoben werden!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kann Verzeichnis %s nicht löschen." #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Verzeichniswechsel nach [%s] fehlgeschlagen" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle in-aktiven Tabs entfernen?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Dieser Tab (%s) ist gesperrt! Trotzdem schließen?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Double Commander wirklich beenden?" #: ulng.rsmsgcopybackward 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 - ssoll die veränderte Datei behalten werden?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "%d markierte Datei(en)/Verzeichnis(se) kopieren?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Markierte \"%s\" kopieren?" #: ulng.rsmsgcreateanewfiletype 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 unter dem die Toolbar-Datei gespeichert werden soll" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Angepasste Aktion" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Teilweise kopierte Datei löschen?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Löschen von %d ausgewählten Dateien/Verzeichnissen?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "%d markierte Dateien/Verzeichnisse in den Papierkorb verschieben?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Markierte \"%s\" löschen?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Markierte \"%s\" in den Papierkorb verschieben?" #: ulng.rsmsgdeltotrashforce 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 angepasste Aktion angeben:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Dateiendung eingeben:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Namen eingeben:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Bitte Namen für die neue Dateiendung \"%s\" angeben" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-Fehler in der Archivdatei" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datenfehler" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Kann nicht mit dem Server \"%s\" verbinden" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kann die Datei %s nicht zu %s kopieren" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ein Verzeichnis mit Namen \"%s\" besteht bereits." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s wird nicht nicht unterstützt" #: ulng.rsmsgerrdirexists 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 "Kann Datei nicht schliessen" #: 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 "Kann Datei nicht lesen" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Kann Datei nicht erstellen" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Verzeichnis %s kann nicht erstellt werden!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ungültige Verknüpfung" #: 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 Befehl des Kontextmenü" #: 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 msgid "Cannot rename file %s to %s" msgstr "Kann Datei %s nicht zu %s umbenennen" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kann Verknüpfung nicht festlegen" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kann Datei nicht speichern" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Kann Attribut für \"%s\" nicht setzen" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kann Datum/Zeit für \"%s\" nicht setzen" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kann Besitzer/Gruppe für \"%s\" nicht erstellen" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Berechtigungen für \"%s\" können nicht gesetzt werden" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Puffer zu klein" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Zuviel Dateien zum Packen" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Archivformat unbekannt" #: ulng.rsmsgexecutablepath 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 "Wirklich alle Einträge vom Favoriten-Tab entfernen? (Es gibt keine Möglichkeit dies \"rückgängig\" zu machen!)" #: 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 diesen Favoriten-Tab-Eintrag eingeben" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Speichere einen Favoriten-Tab-Eintrag" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Anzahl der exportierten Favoriten-Tabs erfolgreich: %d in %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Standard extra Einstellung für Verzeichnisverlauf für neue Favoriten-Tabs:" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Anzahl der erfolgreich importierten Datei(en): %d auf %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Veraltete importierte 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 der Favoriten-Tabs wurde noch nicht geändert. Vor dem Fortsetzen speichern?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verlauf weiter speichern mit Favoriten-Tabs:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dies wird die Favoriten-Tabs \"%s\" laden" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Aktuellen Tab oberhalb des bestehenden Favoriten-Tabs speichern" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Datei %s wurde geändert, speichern?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s Bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Überschreiben:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datei %s existiert bereits. Überschreiben?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Mit Datei:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Datei \"%s\" nicht gefunden." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive Datei-Operationen" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Es gibt Datei-Operationen, die noch nicht beendet sind. Das Schliessen von Double Commander kann deshalb zu Datenverlust führen!" #: ulng.rsmsgfilepathovermaxpath 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!\n" msgstr "" #: ulng.rsmsgfilereadonly 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 "" #: ulng.rsmsgfilesizetoobig 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 Ziel-Laufwerks!" #: ulng.rsmsgfolderexistsrwrt #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Verzeichnis %s besteht bereits. Bitte eine Auswahl treffen:" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Sym-Link \"%s\" folgen?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Textformat zum Importieren auswählen" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Füge %d markierte Verzeichnisse hinzu" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Füge ausgewähltes Verzeichnis hinzu: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Füge aktuelles Verzeichnis hinzu: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Führe Befehl aus" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnis-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 "Sicher, dass alle Einträge aus der Verzeichnis-Hotlist entfernt werden sollen? (Es gibt keine Möglichkeit dies \"rückgängig\" zu machen!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dies wird den folgenden Befehl ausführen:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "So wird das Verzeichnis benannt" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dies wird den aktiven Rahmen in den folgenden Pfad ändern:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Und der inaktive Rahmen wird in den folgenden Pfad geändert:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Fehler bei Sichern der Einträge..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Fehler bei Export der Einträge..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportiere alle" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportiere Verzeichnis-Hotlist - Wähle Einträge die exportiert werden sollen" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportiere ausgewä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 "Importiere Verzeichnis-Hotlist - Wähle die Einträge die importiert werden sollen" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Ausgewä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 für HotDir" #: ulng.rsmsghotdirnbnewentries 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 "HotDir-Pfad" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Gewähltes Verzeichnis erneut hinzufügen" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Aktuelles Verzeichnis erneut hinzufügen" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Speicherort und Dateinamen der Verzeichnis-Hotlist eigeben, 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 "(Unterteilung)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Ziel der HotDir" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Entscheidung ob der aktive Frame in einer bestimmten Weise sortiert werdensoll, nachdem das Verzeichnis gewechselt wurde" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Entscheide, ob der nicht-aktive Frame in einer bestimmten Art und Weise sortiert werden soll nach dem Wechsel des Verzeichnisses" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Einige Funktionen zum Wählen eines relativen Pfades, absoluten Pfades, spezieler Ordner, etc." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Anzahl aller gespeicherter Einträge: %d\n" "\n" "Name des Backups: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Gesamtzahl der exportierten Einträge" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Sollen alle Elemente innerhalb der Untermenüs gelöscht werden [%s]?\n" "NEIN als Antwort löscht nur Unterteilungen innerhalb der Untermenüs, Elemente in den Untermenüs bleiben erhalten.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Speicherort und Dateiname zum Speichern der Verzeichnis-Hotlist" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Falsches Ergebnis der Dateilänge für: \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Bitte nächste Disk oder ähnliches einlegen.\n" "\n" "Damit diese Datei geschrieben werden kann:\n" "\"%s\"\n" "\n" "Anzahl der noch zu schreibenden Bytes: %d\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ungültiger Pfad" #: ulng.rsmsginvalidpathlong 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 akzeptables Plugin" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dieses Plugin wurde für Double Commander für %s erstellt.%sEs kann nicht für %s verwendet werden!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ungültiges Zitat" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ungültige Auswahl" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Lade Dateiliste..." #: 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.exe (totalcmd.exe oder totalcmd64.exe) finden" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopiere Datei %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Lösche Datei %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fehler:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Externen laden" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Externes Ergebnis" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Entpacke Datei(en) %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Erstelle Verknüpfung %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Erstelle Verzeichnis %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Verschiebe Datei(en) %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Packe in Datei %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Verzeichnis %s entfernen" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fertig:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Erstelle symb. Link für %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Teste Dateiintegrität von %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Lösche Datei %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Lösche Verzeichnis %s" #: 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. Trotzdem fortfahren?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nicht genügend Speicherplatz auf dem Ziellaufwerk. Erneut versuchen?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Kann Datei %s nicht löschen" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nicht möglich." #: 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 "Unten ist eine Vorschau zu sehen. Der Cursor kann bewegt werden und Dateien markiert werden um einen Eindruck von den verschiedenen Einstellungen zu bekommen." #: ulng.rsmsgpassword msgid "Password:" msgstr "Passwort:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Die zwei 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 das Passwort zum Verifizieren erneut eingeben!" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Lösche %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voreinstellung \"%s\" besteht bereits. Überschreiben?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problem beim Ausführen des Befehls (%s)" #: ulng.rsmsgprocessid msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Dateiname für gezogenen Text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Bitte diese Datei zur Verfügung stellen. Nochmal versuchen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Neuen guten Namen für diesen Favoriten-Tab eingeben" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Neuen Namen für dieses Menü eingeben" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "%d markierte Dateien/Verzeichnisse umbenennen/verschieben?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Datei/Verzeichnis \"%s\" kopieren/verschieben?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Bitte Double Commander neustarten um die Änderungen zu übernehmen" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Bitte angeben welcher Dateityp die Endung \"%s\" bekommen soll" #: ulng.rsmsgselectedinfo 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 "Besondere Verzeichnisse" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Pfad aus dem aktiven Frame hinzufügen" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Pfad aus dem inaktiven Frame hinzufügen" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Durchsuche und benutze den gewählten Pfad" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Benutze Umgebungsvariable..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gehe zu besonderem Double Commander Pfad..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gehe zu Umgebungsvariable..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gehe zu anderem besonderen Windows-Pfad..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gehe zu besonderem Windows-Verzeichnis (TC)" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Relativ zum HotDir-Pfad machen" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Mache Pfad absolut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Mache Pfad relativ zu Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Mache Pfad relativ zur Umgebungsvariable..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Mache Pfad relativ zum besonderen Windows-Verzeichnis (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Mache Pfda relativ zu anderem besonderen Windows-Verzeichnis..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Nutze besonderen Double Commander-Pfad..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Nutze HotDir-Pfad" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Nutze anderes besonderes Windows-Verzeichnis..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Nutze besonderes Windows-Verzeichnis (TC)..." #: ulng.rsmsgtabforopeninginnewtab 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 Tab-Name" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Zielpfad" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fehler! Kann die TC-Konfigurationsdatei nicht finden:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Fehler! Die ausführbare Datei für die TC-Konfiguration kann nicht gefunden werden:\n" "%s\n" #: 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.\n" msgstr "" "Fehler! TC läuft noch, sollte aber für diese Aktion geschlossen werden.\n" "Bitte schließen und OK klicken oder ABBRUCH zum abbrechen.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fehler! Kann den angegebenen gewünschten TC-Toolbar Ausgabeordner nicht finden:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Speicherort und Datinamen angeben unter dem die TC-Toolbardatei gespeichert werden soll" #: 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.rsmsgthisisnowinclipboard 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 "Endung 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 Dateinamen der Toolbar zum Wiederherstellen angeben" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Gespeichert!\n" "Name der Toolbar: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Zuviele Dateien ausgewählt." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Unbestimmt" #: 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 msgid "User name:" msgstr "Nutzername:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nutzername (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 "Laufwerksbezeichnung:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Bitte Volume-Größe eingeben:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "%d markierte Dateien/Ordner sicher löschen?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Markierte \"%s\" sicher löschen?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "mit" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Keine Änderung;GROSSBUCHSTABEN;alles klein;Erster Buchstabe groß;Erster Buchstabe in jedem Wort groß;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "erhalten;leeren;fragen" #: 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 "Bilder" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "&Netzwerk" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Andere" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Einstellungen" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abgebrochen" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Berechne Prüfsumme" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Berechne Prüfsumme in \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Berechne Prüfsumme von \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Berechne" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Berechne \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Verschmelze" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Verschmelze Dateien in \"%s\" nach\"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiere" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiere von \"%s\" nach \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiere \"%s\" nach \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Erstelle Verzeichnis" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Erstelle Verzeichnis \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Lösche" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Lösche in \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Lösche \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Führe aus" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Führe \"%s\" aus" #: ulng.rsoperextracting msgid "Extracting" msgstr "Entpacke" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Entpacke von \"%s\" nach \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Beendet" #: ulng.rsoperlisting msgid "Listing" msgstr "Liste auf" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Liste \"%s\" auf" #: ulng.rsopermoving msgid "Moving" msgstr "Verschiebe" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Verschiebe von \"%s\" nach \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Verschiebe \"%s\" nach \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nicht gestartet" #: ulng.rsoperpacking msgid "Packing" msgstr "Packe" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Packe von \"%s\" nach \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Packe \"%s\" nach \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausiert" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperrunning msgid "Running" msgstr "Wird ausgeführt" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Stelle Eigenschaften ein" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Setze Eigenschaften in \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Setze Eigenschaft von \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Teile" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Teile \"%s\" nach \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Wird gestartet" #: ulng.rsoperstopped msgid "Stopped" msgstr "Gestoppt" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stoppe" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Teste in \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Teste \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verifiziere Prüfsumme" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Verifiziere Prüfsumme in \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Verifiziere Prüfsumme von \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Warte auf Zugriff auf Datei-Quelle" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Warte auf Benutzereingabe" #: ulng.rsoperwiping msgid "Wiping" msgstr "Lösche sicher" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Lösche sicher in \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Lösche \"%s\" sicher" #: ulng.rsoperworking msgid "Working" msgstr "Führe aus" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Am Anfang anfügen;Am Ende anfügen;Smart hinzufügen" #: 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 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 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 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 "Name des Archiv-Typs:" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Verknüpfe PlugIn \"%s\" mit:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Erste;Letzte;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassisch, Vermächtnis-Reihenfolge;Alphabetische Reihenfolge (aber Sprache immer zuerst)" #: 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 "Aktiver Frame-Panel links, inaktiver rechts (Vermächtnis);Linker Frame-Panel links, rechts auf der rechten Seite" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Endung eingeben" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Am Anfang hinzufügen;Am Ende hinzufügen;Alphabetisch sortieren" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "eigenes Fenster;minimiertes eigenes Fenster;Operationsfenster" #: ulng.rsoptfilesizefloat msgid "float" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong 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 die Änderung rückgängig gemacht werden kann." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Füge Tastaturkürzel für %s hinzu" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Tastaturkürzel erstellen" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kann die Verknüpfung nicht erstellen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Verknüpfung ändern" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Befehle" #: 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 "Verknüpfung %s für cm_Delete hat Parameter, die diese Einstellung überschreiben. Soll dieser Parameter geändert werden, um die globale Einstellung zu verwenden?" #: 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 "Verknüpfung %s für cm_Delete muss einen Parameter geändert bekommen, um der Verknüpfung %s zu entsprechen. Soll der Parameter geändert werden?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beschreibung" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Bearbeite Tastaturkürzel für %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Parameter wiederherstellen" #: 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 "Verknüpfung festlegen um Dateien zu löschen" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned 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 Verknüpfung %s funktioniert, muss %s cm_Delete zugewiesen werden, aber ist %s zugewiesen. Soll dies geändert werden?" #: ulng.rsopthotkeysshortcutfordeleteissequence 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 "Verknüpfung %s für cm_Delete ist eine Sequenz-Verknüpfung, für die ein Tastaturkürzel mit umgekehrter Umschalt-Taste nicht verwendet werden kann. Die Einstellung funktioniert wahrscheinlich so nicht." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Tastaturkürzel in Gebrauch" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Tastaturkürzel %s wird bereits verwendet." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Verändern zu %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "Benutzt für %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "für diesen Befehl genutzt, aber mit unterschiedlichen Parametern" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archivierer" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatisch auffrischen" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Verhalten" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Verkürzt" #: 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 "Verzeichnisfavoriten" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag & Drop (ziehen und ablegen)" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Button für das Laufwerks-Drop-down-Menü" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favoriten-Tabs" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Extra Optionen für Dateiverknüpfungen" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Dateiverknüpfungen" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy 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 "Datei-Ansicht" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Dateitypen" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Verzeichnis-Tabs" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Favoriten-Tabs extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Schriftarten" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Hervorheber" #: 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 "Ausschlussliste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasten" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" #: 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 "Befehlszeilen-Interpreter" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Werkzeugleiste" #: 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 "Menü Baumansicht" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Farben Menü 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;Rechte Taste;" #: 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 sollen);an festgelegte Position;ans Ende der Dateiliste" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s ist bereits den folgenden Dateiendungen 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 "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Name" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registriert für" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Genaue &Schreibweise;unabhängig von der Schreibwe&ise" #: 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 "Verstecke Filterpanel wenn es nicht ausgewä&hlt ist;Einstellung Änderungen speichern für die nächste Sitzung" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Nicht abhängig von der Schreibweise; abhängig von den lokalen Einstellungen (aAbBcC); erst Groß, dann klein (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Nach Namen sortieren und ersten anzeigen;wie Dateien sortieren und erste anzeigen;wie Dateien sortieren" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alphabetisch, Akzentuierungen beachten;Natürliche Sortierung: alphabetisch und numerisch" #: 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 "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Kategorie&name" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 bisher: \"Kopie (x) Dateiname.ext\";Windows: \"Dateiname (x).ext\";Andere: \"Dateiname(x).ext\"" #: 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 nutzen;an festgelegte Position" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Dateien: %d, Verzeichnisse: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kann die Zugriffsrechte für die Datei \"%s\" nicht ändern" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Kann den Besitzer für \"%s\" nicht ändern" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datei" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Verzeichnis" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Benannte Pipe" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Spezielles Block-device" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Spezielles Buchstaben-device" #: 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Wähle ein Verzeichnis" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Zeige Hilfe zu %s" #: 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 "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Dateiname" #: ulng.rssimplewordfiles msgid "files" msgstr "Dateien" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parameter" #: ulng.rssimplewordresult msgid "Result" msgstr "Ergebnis" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbeitsverzeichnis" #: 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 msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Dateien: %d, Verzeichnisse: %d, Grösse: %s (%s Bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kann Zielverzeichnis nicht erstellen" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Falsches Dateigrössenformat!" #: 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össer 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 "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Wähle Verzeichnis:" #: ulng.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 "Fehler beim Erstellen des symb. Link." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtext" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Reiner Text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nichts tun;Tab schließen;Favoriten-Tabs;Tabs Popup-Menü" #: 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 "Favoriten-Tabs umbenennen" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Untermenü der Favoriten-Tabs umbenennen" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Vergleichsprogramm" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Text-Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fehler beim Öffnen des Vergleichers" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fehler beim Öffnen des Editors" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fehler beim Starten des Befehlszeilen-Interpreters" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fehler beim Öffnen des Betrachters" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Befehlszeilen-Interpreter" #: 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 "Schnellansicht" #: ulng.rsunhandledexceptionmessage 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 Panels, von aktiv zu inaktiv" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Beide Panels, von links nach rechts" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pfad des Panels" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Jeden Namen in Klammern schließen, oder nach Belieben" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Nur Dateinamen, keine Endung" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Kompletten Dateinamen (mit Pfad)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hilfe mit \"%\" Variablen" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Fordert Nutzer auf einen Parameter einzugeben, mit einem vorgeschlagenen Standardwert" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Linkes Panel" #: 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 und 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 aus Liste mit Dateinamen mit relativem Pfad" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Nur Dateiendung" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Nur Dateiname" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Anderes Beispiel für Möglichkeiten" #: ulng.rsvarpath #, fuzzy #| msgid "Path, with ending delimiter" msgid "Path, without ending delimiter" msgstr "Pfad, mit 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; die Prozent-Anzeige ist das \"#\" Zeichen" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Setze das Prozentzeichen zurück" #: 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; die Prozent-Anzeige ist hinter dem \"%\" Zeichen" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Stelle jedem Namen \"-a\" voran, oder was auch immer" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "% [Frage den Nutzer nach Parameter;Standardwert wird vorgeschlagen]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Dateiname mit relativem Pfad" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Rechtes Panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Voller Pfad der zweiten gewählten Datei im rechten Panel" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Zeige Befehl vor der Ausführung" #: 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 Panel (Quelle)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktives Panel (Ziel)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Dateinamen werden von hier aus zitiert (Standard)." #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Befehle werden im Terminal ausgeführt. Dies bleibt am Ende geöffnet." #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Pfade werden am Ende ein trennendes Zeichen haben" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Dateinamen werden von hier aus nicht zitiert" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Befehl wird im Terminal ausgeführt. Dies wird nach der Ausführung geschlossen" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Pfade werden am Ende kein trennendes Zeichen haben (Standard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "&Netzwerk" #: 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össe" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nicht gefunden!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "Mit externem Betrachter" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "Mit internem Betrachter" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Anzahl der Ersetzungen: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nichts wurde ersetzt." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.da.po������������������������������������������������������������0000644�0001750�0000144�00001241143�13424362040�017176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.5 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-09-13 11:52+ZONE\n" "Last-Translator: Full Name <Bolle_Barnewitz@sol.dk>\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: Dansk\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Læser mapper: %d%% (ESC for at afbryde)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Venstre til højre: Kopiér %d fil(er), totalt: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Højre til venstre: Kopiér %d fil(er), totalt: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vælg skabelon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Kontrollér ledig &plads" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopiér a&ttributter" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiér ejerskab" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: 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 lin&ks" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Fjern skri&vebeskyttet attribut" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption #, fuzzy msgctxt "tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption" msgid "E&xclude empty directories" msgstr "&Udelad tomme mapper" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Fø&lg links" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservér plads" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: 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 msgid "When dir&ectory exists" msgstr "Hvis mappen findes:" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "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>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Luk" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiér til Udklipsholder" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Hjemmeside" #: 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 "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 msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arkiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "K&omprimeret" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mappe" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Krypt&eret" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "S&kjult" #: tfrmattributesedit.cbreadonly.caption msgctxt "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 "Klæbrig" #: 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 "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 "" #: tfrmbenchmark.lblbenchmarksize.caption 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 "Dan CRC-kontrolsumfil" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Åbn kontrolsumfil efter opgaven er færdig" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Dan en &separat kontrolsumfil for hver fil" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Gem kontrol&sum-fil(er) som:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Kontroller kontrolsum" #: 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:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Føj til køen" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: 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 #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Gem beskrivelse" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Filkommmentar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Re&diger kommentar for:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kod&er:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "&Om sammenligneren..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Sammenlign automatisk" #: 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.acteditselectall.caption msgid "Select &All" msgstr "Vælg &alle" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Fortryd" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Afslut" #: 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.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 msgctxt "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" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Sammenlign indhold" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Venstre" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Højre" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "H&andlinger" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: 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 "&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" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption #, fuzzy msgctxt "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:" #: 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 #, fuzzy msgctxt "tfrmeditor.acteditdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " 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" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: 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 "" #: 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 "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 msgid "&Replace" msgstr "&Erstat..." #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Erstat" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Markér 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 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 "Å&bn..." #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Åbn" #: tfrmeditor.actfilereload.caption #, fuzzy 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 #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Gem &som..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Gem som" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Gem alle" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Gem alle" #: 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 #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Annuller" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "" "Forskel på STORE\n" "og små &bogstaver\n" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "" "Søg fra &lodret tegn\n" "(pipe)\n" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulære udtryk" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Kun den valgt &tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Kun hele ord" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Indstillinger" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "E&rstat med:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Søg efter:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Retning" #: tfrmextractdlg.caption msgctxt "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 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 "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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Ind&stil egenskaber" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Indstil &alle valgte filer" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "S&pring filen over" #: 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" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Indeholder:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: 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.lblfolder.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Placering:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Gruppe:" #: tfrmfileproperties.lbllastaccess.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Åbnet:" #: tfrmfileproperties.lbllastmodif.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ændret:" #: tfrmfileproperties.lbllaststchange.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Attributter ændret:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Ejer:" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmfileproperties.lblsize.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Størrelse:" #: tfrmfileproperties.lblsymlink.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink til:" #: tfrmfileproperties.lbltype.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Filtype:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Navn" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Værdi" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributter" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Egenskaber" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "&Luk" #: 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 "&Annuller" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Luk" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Luk" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Ko&pier til listboks" #: 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&å 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" #: 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 "&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\n" #: 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 "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Find tekst:" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Følg s&ymbolske links" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "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.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Søg efter en del af fi&lnavnet " #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulære udtryk" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Erst&at med:" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Søg kun i &valgte mapper/filer" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &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 "Anvend søge-plug&in:" #: tfrmfinddlg.chkhex.caption msgid "Hexadecimal" msgstr "" #: 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.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 msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "A&ttributter" #: tfrmfinddlg.lblencoding.caption msgctxt "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 "" #: 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 "Indstillinger" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Fjern fra liste" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Vis alle fundne elementer" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Vis i fremviser" #: tfrmfinddlg.miviewtab.caption #, fuzzy 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "STORE og små bogstaver" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "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å:" #: 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 "Importér alle" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Importér 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 msgctxt "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 msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "filnavnet:" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Ned" #: tfrmlinker.spbtndown.hint #, fuzzy msgctxt "tfrmlinker.spbtndown.hint" msgid "Down" msgstr "Ned" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Fjern" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Slet" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Op" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Op" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Om Double Commander" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Tilføj filnavn til kommandolinje" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: 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 "Kopier sti til kommandolinje" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "&Kort visning" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kort visning" #: 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" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Dan CRC-kontrolsumfil(er)..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Kontroller 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" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Luk &alle faneblade" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "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" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "&Lang visning" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolonnevisning" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Sammenlign &indhold..." #: 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" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration af Favoritmapper" #: 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 "Vis kontekstmenu" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopier" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: 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 "K&opier filnavn + sti til Udklipsholder" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopier filnavn til Udklipsholder" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopier filer uden bekræftelse" #: 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 "Kopier til samme panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopier" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Vis &brugt plads" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Klip" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Mappehistorik" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Favorit&mapper" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Rediger" #: 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" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Ombyt vind&uer" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Afslu&t" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Udpak filer..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Asso&ciering..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Saml filer..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "E&genskaber..." #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Opdel fil..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Flad visning" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus på kommandolinjen" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer markøren på første fil på listen" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer markøren på sidste fil på listen" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Dan et &hårdt link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Indeks" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Horisontal visnin&g" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatur" #: 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 "Venstre &= Højre" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Åbn venstre drevliste" #: 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.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "He&nt valg fra Udklipsholder" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Hent valg fra fil" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Ind&læs faneblade fra fil" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Ny mappe" #: 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 "" #: 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 valg" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Vælg &alle" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "In&dskrænk valg..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Udvid valg..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Fravælg alle" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimer vindue" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Multi-omd&øbning..." #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Forbind til netværk..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Afbryd til netværk" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hurtig netværksforbindelse..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Dublér faneblad" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: 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" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Åbn mappe i et nyt faneblad" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Andre Computere" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vis handlinger" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Indstillinger..." #: 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" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: 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 msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hurtig søgning" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hurtig visning" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Opdatér vindue" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: 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" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Omdøb fane" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Gendan valg" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&mvendt sortering" #: 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 "Højre &= venstre" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Åbn højre drevliste" #: 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 "Åbn terminal (komman&do-prompt)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: 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" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Gem faneblad som fil" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Find fi&ler..." #: 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 "&Ændre attributter..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Lås faneblad med mapper åbnet i nyt faneblad" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "L&ås faneblad" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy msgctxt "tfrmmain.actsettaboptionpathresets.caption" msgid "Locked with &Directory Changes Allowed" msgstr "Lås faneblad, men &tillad 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 msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Vis skj&ulte/system-filer" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortering efter &attributter" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sorter&ing efter dato" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortering efter t&ype" #: 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 "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Aktiver/deaktiver filliste for ikke at vist filnavne" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Dan symbolsk &link..." #: 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 "Ko&ntroller arkiv(er)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturebilleder" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visning af miniaturebilleder" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: 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" #: 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 "F&ravælg alle af samme type" #: 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 "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" #: 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 på &WWW" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Sikker sletning" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Afslut" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Mappe" #: 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 #, fuzzy #| msgid "Directory hotlist" 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 "Vis mappen fra det højre vindue i dette vindue" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "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 msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Gå til roden" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "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 #, fuzzy 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 "Vis mappen fra det venstre vindue i dette vindue" #: 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 "Sti:" #: 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 "&Annuller" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopier..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Dan link..." #: 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 msgctxt "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 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" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Filer" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markér" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Netværk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Vis" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&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 #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Annuller" #: 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 #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hjælp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Genvejstast" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Tilfø&j" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 msgid "Case sensitive" msgstr "Forskel på STORE og små bogstaver" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: 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:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "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 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-komprimering" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Bredde:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Højde" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Bredde" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Slet maske" #: tfrmmultirename.btnedit.caption #, fuzzy msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Indlæs maske" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Start!" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Nulstil alle" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Gem maske" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Multi-omdøbning" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "&Aktiver logning" #: tfrmmultirename.cbregexp.caption msgctxt "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.extension.caption msgid "[E] Extension" msgstr "[E] &Type" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Definer tæller [C]" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Søg && erstat" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log-resultat" #: 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 msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Cifre:" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] T&æller" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dag (to cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Ugedag (kort, f.eks. \"man\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Ugedag (lang, f.eks. mandag\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Tegn ved position x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Tegn fra position x til y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Time" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Time (to cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (to cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Måned" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Måned (to cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Månedsnavn (kort, f.eks. \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Månedsnavn (langt, f.eks. januar\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Navn" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Tegn ved position x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Tegn fra position x til y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tid..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Type..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Navn..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (to cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] År (to cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] År (fire cifre)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 "Nyt navn" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Placering" #: 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 "Å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 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 msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Flere URL'er" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkelt filnavn" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkelt URL" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Udfør" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Indstillinger" #: 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." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "K&opier" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Sl&et" #: 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 "Andre..." #: 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 "&Start!" #: 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 "Indstillinger:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Format analyse-tilstand:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Aktiveret" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Fejlretningstilstand" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Vi&s konsollens output" #: 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 "Tilføjer:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Pakkeprogram:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Slet:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Be&skrivelse:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Type:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Udpak:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Pak ud uden sti:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID-position:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID søge-interval:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Op&liste:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Pakkeprogrammer:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Oplistnings-afslutning (valgfrit):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Oplistnings-format:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Oplistnings-begyndelse (valgfrit):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Password forespørgsel:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Dan selvudpakkende arkiv:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&uto-konfiguration" #: 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 "Eksportér..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: 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 attributter &ændres" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "For de 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 oprettes, slettes eller omdøbes " #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Når &Double Commander er i baggrunden" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Slå automatisk opdatering fra" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Automatisk opdatering ved ændringer i filsystemet" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "&Vis altid ikon i systembakke" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Skjul automatisk enheder, der ikke længere er monteret (Linux: Unmounted)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Flyt iko&n til systembakke, når minimeret" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Tillad kun en kopi af Double Commander ad gangen" #: 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 \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Sortlist følgende drev:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Vis filendelser" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Justeret (med Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Umiddelbart efter filnavn" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Tilpas tekst til kolonnebredde" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Horisontale linjer" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Vertikale linjer" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&uto-fyld kolonner" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Vis gitter i panel" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Indstil kolonnestørrelsen automatisk" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Indstil kolonnestørrelsen automatisk:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "&Gamle kommandolinjer" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Mappehistorik" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Søge&filterets historik" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Faneblade" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Indstillinger" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Søg/erstat historik" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Placering af konfigurationsfiler" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Gem ved afslut" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sorteringsrækkefølge af konfigurationsrækkefølgen i venstre træ" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Angiv i kommandolinje" #: 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 "P&rogrammappe (transportabel version)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Br&ugermappe" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "Alle" #: 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 "&Slet" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Ny" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Omdøb" #: 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 "Gem som" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "&Gem" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" #: 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 "Generelt" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Markør-grænser" #: 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 "&Baggrund:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Baggrund &2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Konfigurer visninger for &filsystem:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "&Markørfarve:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Skrifttype" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Størrelse" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "&Skriftfarve:" #: 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 "&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 "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Tilføj kolonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Vinduets position efter sammenligning" #: 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 "Tilføj en kopi af den valgte postering" #: 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 "Tilføj en separator" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: 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" #: 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 "Slet valgte elementer" #: 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 "Indsæt mappe, som jeg indtaster" #: 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 "Åbn alle grene" #: 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 "Tilføj..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Slet..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Eksportér..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Hjælp" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importér..." #: 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 msgctxt "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..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Tilføj også destination, når mappe tilføjes" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Udvid altid træ" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Vis kun gyldige miljøvariabler" #: 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-å" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Favoritmappe (omsorteret med træk && slip)" #: 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 msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "Destination:" #: 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)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "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" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "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)" #: 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" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "fra en favoritmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "fra \"wincmd.ini\" i TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Gendan en backup af en favoritmappe" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Gem en backup af den aktuelle favoritmappe" #: 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 "...alt, fra A til Å" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...kun en gruppe af element(er)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" #: 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" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Menu af testresultat" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Tilføjelse fra hovedvindue:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Fra alle understøttede formater. Spørg altid, hvilket der skal anvendes" #: 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)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Når tekst slippes, generer automatisk filnavn (ellers bliver brugeren sprugt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Vi&s bekræftelse efter træk && slip" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Når træk && slip bruges:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Placér det mest sandsynlige 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 sandsynlige ikke er til stede, tages det næstmestsandsynlige 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" #: 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 #, fuzzy msgctxt "tfrmoptionsdriveslistbutton.cbshowlabel.caption" msgid "Show &label" msgstr "Vis drevnavn" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drev-valgboks" #: 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.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.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 "Baggrund:" #: 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" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementets attributter" #: 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" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Brug (og rediger) &globale skemaindstillinger" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Brug &lokale skemaindstillinger" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgctxt "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 "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgctxt "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 "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: 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 "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgctxt "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 "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Tilføj..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Slet..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Sæt ind..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Omdøb" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Udvid altid træ" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nej" #: 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 "Andre indstillinger" #: 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.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "en separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "en undermenu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Tilføj en undermenu" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Sammenfold alle" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...kun det aktuelle niveau af valgte element(er)" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Klip" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "slet alle" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "undermenu og alle dets elementer" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "kun undermenu men behold element(er)" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "valgte element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Slet valgte elementer" #: 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 "Åbn alle grene" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Sæt ind" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Omdøb" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...alt, fra A til Å" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...kun en gruppe af element(er)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sorter kun en gruppe af elemet(er)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...indhold af undermenu(er) valgt og alle underniveauer" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy 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" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Tilføj" #: 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 "Ne&d" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Rediger" #: 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 "Nogle funktioner til at vælge 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øb" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Op" #: 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 "Handlinger" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Filendelser" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Filtyper" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Ikon" #: 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 "Handling:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Redigér" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Åben i editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Tag output fra kommando-prompt" #: 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 "Åbn" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "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 msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "Åbn i fremviser" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" 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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Bed om bekræftelse ved" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopiering" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Sletning" #: 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)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Sl&et til Papirkurv" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Fjern skrivebeskyttelse-attribut" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Flytning" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Kopier kommentarer sammen med filer/mapper" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Vælg &filnavn uden endelse ved omdøbning" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Vis &valgboks for faner i kopier/flyt-dialog" #: 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.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Udfør handlinger" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Brugergrænseflade" #: 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 "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Vis handlingernes fremskridt i:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Stil for auto-omdøbning af dubletter:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "A&ntal overskrivninger ved sikker sletning:" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Vis markeret kun som ramme" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Anvend flydende farveovergange (grøn - gul - rød)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Brug inverteret v&alg" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Markør-grænser" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Bar for brugt/ledig plads" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "&Baggrund:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Baggrund &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Markørfarve:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Mar&kørskrift:" #: 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 "Lysstyrke i det inaktive vindue" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Farve for le&dig plads:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Farve for brugt plads:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Valgt farve:" #: 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 "&Skriftfarve:" #: 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ø&g efter en del af filnavnet" #: 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 "Find filer" #: 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 "Brug hukommelses-mapping ved tekstsøgning i filer" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Br&ug Stream til tekstsøgning i filer" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Standard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formater" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Sortering" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" "Forskel på STORE \n" "og små &bogstaver:\n" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Forkert format" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Indsæt nye filer:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption #, fuzzy msgctxt "tfrmoptionsfilesviews.lblsortfoldermode.caption" msgid "So&rting directories:" msgstr "So&rter mapper:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Sorteringsme&tode:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Flyt ændrede filer:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Tilfø&j" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hjælp" #: 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 "I&ndlæs ikke filliste førend et faneblad er aktiveret" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Vis firkantede parenteser [ ] &omkring mappenavne" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Fremhæv nye og ændrede filer" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Tillad øjeblikkelig omdøbning ved dobbeltklik på navn" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Indlæs &filliste i separat tråd" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Indlæs ikoner ef&ter filliste" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Vis &skjulte/system-filer (kun for eksperter!)" #: 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 <mellemrum>, flyt ned til næste 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 "" #: 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 "Tilføj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Sl&et" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Skabelon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Filtypers farver (sortér med træk && slip)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Kategori-&attributter:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Katergori-farve:" #: 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.btnpatheditfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Intern &editors (F4) skrifttype:" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Log-skrifttype:" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fillister:" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "&Bogviserens skrifttype:" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Frem&viserens (F3) skrifttype:" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Tilføj genvejstast" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopier" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Slet genvejstast" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Rediger genvejstast" #: 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 "Omdøb" #: 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 "&Filter:" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "K&ategorier:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Ko&mmandoer:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fil for genvej&staster:" #: 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 "Kommando" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "tfrmoptionsicons.cbiconsexclude.caption" msgid "For the following &paths and their subdirectories:" msgstr "For de følgende &stier og deres undermapper:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Vis ikoner ud for punkter i &hovedmenuen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "" #: 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 "Vis overlæg til ikoner, (f.eks. &pile ved links)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Slå specielle ikoner fra" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Ikonstørrelse " #: 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 "Vis ikoner til venstre for filnavnet" #: 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&lle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "&Alle associerede filer inkl. EXE/LNK (langsomt)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Ingen ik&oner" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Kun standardikoner" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Tilføj valgte navne" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Tilføj valgte navne med hele stien" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorer (vis ikke) følgende filer og mapper:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "&Gem i:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Venstre- hhv. højrepil skifter mellem mapper (Linux-agtig navigation)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tastning" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+bogstav&er:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+bogs&taver:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "Bogstaver:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Flad &brugerflade" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Flade iko&ner" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Vis bar for ledig plads på drevknap" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Vis lo&g-vindue" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Vis &handlingsvindue i baggrund" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Vis fremskridt i menulin&je" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Vis k&ommandolinje" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Vis &aktuel mappe" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Vis dr&ev-knapper" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Vis tal for ledig &plads på drevknap" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Vis drev-&valgboks" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Vis knappanel for &funktionstaster" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Vis &menulinje" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show tool&bar" msgstr "Vis &knappanel" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Vis tal for ledig plads p&å drevknap (kort 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 &tabulatorlinje" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Vis faneb&lade" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Vis te&rminalvindue" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "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.gbscreenlayout.caption #, fuzzy msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr "Skærmlayout" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Se indholdet af logfilen" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Medtag dato i logfilens navn" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Pakning/Udpakning/Test af pakkede filer" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Kopiering/Flytning/Oprettelse af link && symlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "&Slet" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Oprettelse/Sletning af &mapper" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Log &fejl" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Opret en logfil i:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Log informationsmeddelelser" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/luk ned" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Log su&ccesfulde operationer" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Fils&ystem-plugins" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Logfil for filoperationer" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Log følgende operationer" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Log følgende udfald" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption #, fuzzy 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" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Fjern miniaturebilleder for slettede filer" #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Vis logfilens indhold" #: 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å &altid til drevets rod ved skift af drev" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Vis advarsler (kun med \"OK\"-knappen)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Gem miniaturebilleder i cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniaturebilleder" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Angående TC-eksport/-import" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsfil:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC exe-fil:" #: 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" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bredde x højde:" #: 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 "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Åbn med..." #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Rulning med musehjul" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Valg" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Tilstand:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Antal linje(r) ad gangen:" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Én linje ad gangen, markøren følger med" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Én side ad gangen" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" 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" #: 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 "Associer 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øge-plugins giver mulighed for alternative søgealgoritmer eller eksterne værktøjer (som \"locate\", etc.)" #: 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.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 "Pakke-plugins bruges til at åbne arkivtyper, som ikke er understøttet af Double Commander internt." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: 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 "Associer med" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" #: 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." #: 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 Palm/PocketPC." #: 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)." #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&I starten (navnet skal starte med første indtastede tegn)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "I slut&ningen (sidste tegn før et punktum . skal matche)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Indstillinger" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Præcis navne-match" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "STORE og små bogstaver" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Søg efter disse elementer" #: 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 "Aktiver fil&panel ved klik på fane" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "Vis fane, selv om der kun er &et enkelt faneblad" #: 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 "Bekræft lukning af &alle faner" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Begræns tekst på faner til:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "&Markér låste faneblade med stjerne (*) på fanen" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "Tillad visning af faner på flere &linjer" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Op åbner nyt faneblad i &forgrunden" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Åbn &nye faneblade ved siden af aktive fane" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Vis luk-knap på fane" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: 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 "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Tabulatorposition:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nej" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "K&lon knap" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Slet" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Rediger genvejstast" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Indsæt ny knap" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Andre..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Fjern genvejstast" #: tfrmoptionstoolbar.btnstartpath.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapportér fejl med kommandolinje" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Indtast kommandoparamertre, kun én pr. linje. Tryk F1 for mere hjælp til prametre." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Udseende" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "St&ørrelse på panelet:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Komman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hjælp" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Genvejstast:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Iko&n:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Størrelse på ik&on:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Ko&mmando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Ballon-hjælp:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "for en ekstern kommando" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "for en intern kommando" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "for en separator" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "for en under-værktøjslinje" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuel værktøjslinje" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini i TC (beholder eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbar.miexportseparator1.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Øverste værktøjslinje..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Gem en backup af værktøjslinjen" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini\" i TC (beholder eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Gendan en backup af værktøjslinjen" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "fra en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimportseparator.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "fra en enkelt TC .BAR-fil" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "fra \"wincmd.ini\" i TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Knaptype" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Bevar terminalvindue åbent efter udførelse af program" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Udfør i t&erminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Brug &eksternt program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Ekstra parametre:" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Sti til det eksterne program:" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "K&opier" #: 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..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Start!" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Andre..." #: 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 "Værktøjshjælp" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategori-tip:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Kategori-filter:" #: 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 "Eksportér..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importér..." #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "&Markørfarve:" #: 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.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Bogvisning" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Eksempel" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Baggrundsfarve for bogvisning:" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Skriftfarve i bogvisning:" #: 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 msgctxt "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, ét for hver valgt fil/mappe" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "&Dan selvudpakkende arkiv" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Kryptér" #: 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 msgctxt "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:" #: 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 "" #: 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 "" #: 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 msgctxt "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. Kombinér med:" #: tfrmsearchplugin.headercontrol.sections[0].text #, fuzzy msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Felt" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: 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 én operator er sand el. falsk)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Luk" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Hjælp" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vælg bog&staverne, som skal indsættes:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Ændre attributter" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" "SGIDS&GID\n" "(Set group id)\n" #: 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)\n" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "&a Arkiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Oprettet:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "&h Skjult" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Åbnet:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Ændret:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "&r Skrivebeskyttet" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Medtag filer i &undermapper" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "&s System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Ændre dato/tid" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Æ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 #, fuzzy 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" #: 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 msgctxt "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 #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Opdel filen til mappen:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Antal dele:" #: 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.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 "Operativsystem" #: 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 "&Annuller" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Dan symbolsk link" #: 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 "&Destination, som linket skal pege på:" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Navn på linket:" #: 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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "&Luk" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "&Sammenlign..." #: tfrmsyncdirsdlg.btnseldir1.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "S&ynkroniser..." #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synkroniser mapper" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy 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 #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy 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 #, fuzzy msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption #, fuzzy 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 "" #: 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 "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 msgctxt "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 msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Beskrivelse:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Registrer streng:" #: tfrmtweakplugin.lblextension.caption msgctxt "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 "" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Om fremviseren..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Vis \"Om\" dialogen" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: 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" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopier til Udklipsholder" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: 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" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Afslut" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Find" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "&Find næste" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Næste" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Indlæs næste fil" #: tfrmviewer.actloadprevfile.caption msgctxt "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 "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: 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" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Preview" #: 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 #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.caption" msgid "+ 180" msgstr "Rotér 180°" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180 degrees" msgstr "Rotér 180°" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.caption" msgid "- 90" msgstr "Rotér 270°" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate -90 degrees" msgstr "Rotér 270°" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.caption" msgid "+ 90" msgstr "Rotér 90°" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate +90 degrees" msgstr "Rotér 90°" #: tfrmviewer.actsave.caption #, fuzzy 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 #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Tag et skærmbillede" #: 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 "Vælg &alt" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Binær (fast linjelængde)" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "B&og" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Hex" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Kun tekst" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Ombryd tekst" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Billede/multimedie" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Plugin" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Stræk" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strækker billedet" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom ind" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom ud" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beskær" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Markér" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Male" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Røde øjne" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Tilpas størrelse" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Fortryd" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Fremviser" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slideshow" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stift" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Markér" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Male" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slideshow" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Visning" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Om" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodning" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fil" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "B&illede" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "&Udskriv..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rotér" #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vælg alle" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&OK" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Filhandlinger" #: 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 "&Annuller" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: 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 "Kø" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy 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 &baggrund" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Hvis fil findes" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Højde" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Bredde" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, 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?\n" 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?\n" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annullér 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 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 "" #: 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 "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 "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: 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" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopier (%d) %s" #: 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 "" #: 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 "_'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.rsdiffdeletes msgid " Deletes: " msgstr "Sletter:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Matcher:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Ændret:" #: 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Af&bryd" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortsæt" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Kopier ind i" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Kopier ind i alle" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Afslut program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorér 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 "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Spring over" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "S&pring alle over" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: 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 msgctxt "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 msgid "Speed %s/s" msgstr "Hastighed %s/s" #: ulng.rsdlgspeedtime 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 "" #: 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 msgctxt "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 "" #: 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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 "Eksporteret_fra_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Spørg bruger;Overskriv alle filer;Kopier 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 msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Spørg bruger;Undlad indstilling;Ignorér fejl" #: 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.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 "Definer valg" #: ulng.rsfinddepth 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 msgctxt "ulng.rsfinddirnoex" msgid "Directory %s does not exist!" msgstr "Mappen %s findes ikke!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" 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 msgctxt "ulng.rsfindscanned" 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 "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Start ved" #: ulng.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Ledig plads: %s. Kapacitet: %s" #: ulng.rsfreemsgshort #, fuzzy msgid "%s free" msgstr "%s ledige" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Åbnet dato/tid" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributter" #: ulng.rsfunccomment msgctxt "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 msgid "Extension" msgstr "Type" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: 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 msgctxt "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.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Kunne ikke danne hårdt 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 "" #: 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?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopierings-/flytningsdialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Sammenligningsprogram" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Rediger kommentar dialog" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Find filer" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hovedvindue" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: 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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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 "Kan ikke finde reference til standard-panelfil" #: 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 "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 "" #: 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 "Indstillinger for kolonner" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Handlinger" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Rediger" #: ulng.rsmnueject msgid "Eject" msgstr "Skub ud" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: 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 #, fuzzy 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 "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortér 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 "" #: ulng.rsmsgapplicationname msgid "Description: %s" msgstr "" #: 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 "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Du kan ikke kopiere/flytte filen \"%s\" til sig selv!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kan ikke slette mappen %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 msgid "This tab (%s) is locked! Close anyway?" msgstr "Fanebladet (%s) er låst! Luk alligevel?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Er du sikker på at ville afslutte?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Kopier %d valgte filer/mapper til:" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopier \"%s\" til:" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: 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" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Slet den delvist kopierede fil ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Er du sikker på, at du vil slette de %d valgte filer/mapper?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Vil du flytte disse %d elementer til Papirkurv?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Er du sikker på, at du vil slette den valgte fil \"%s\" ?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Vil du flytte \"%s\" til Papirkurv?" #: ulng.rsmsgdeltotrashforce 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." #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Indtast filendelse:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Indtast navn:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-fejl i arkivdata" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datafejl" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Kan ikke forbinde til server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kan ikke kopiere fil %s til %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Der findes allerede en mappe med navnet \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datoen %s understøttes ikke" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Kan ikke indstille attributter for \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kan ikke indstille dato/tid for \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kan ikke oprette ejer/gruppe for \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 "Undermenus navn" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "" "Filen \"%s\" er ændret.\n" "Vil du gemme?\n" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overskriv:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "" "Filen \"%s\" findes allerede.\n" "Vil du overskrive?\n" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Med fil:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, fuzzy #| msgid "File %s is marked as read-only. Delete it?" 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 "" #: ulng.rsmsgfilesizetoobig 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "" "Mappen %s eksisterer.\n" "Vil du overskrive?\n" #: ulng.rsmsgfollowsymlink 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 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 "Eksportér alle" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksportér 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 "Importér alle" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importér 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 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 #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Samlede antal gemte posteringer: %d\n" "Backuppens filnavn: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Samlede antal eksportede posteringer: " #: ulng.rsmsghotdirwhattodelete #, 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.\n" msgstr "" "Vil du slette alle elemeter i undermenu [%s]?\n" "Svarer du NEJ, slettes kun menuskilletegn, mens elementer inde i undermenuen bevares.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Ugyldig fillængde for fil : \"%s\"" #: ulng.rsmsginsertnextdisk #, 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\n" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ugyldig sti" #: ulng.rsmsginvalidpathlong 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 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 "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Find TC-exe filen (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgctxt "ulng.rsmsglogcopy" msgid "Copy file %s" msgstr "Kopiér fil %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Slet fil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fejl:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Udpak fil %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Dan link %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Opret mappe %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Flyt fil %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Pak til fil %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Fjern mappe %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Færdig: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Dan symlink %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Kontroller filintegritet %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: 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å måldrevet.\n" "Vil du fortsætte?\n" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ikke nok ledig plads på måldrevet.\n" "\"Vil du forsøge igen?\n" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Kan ikke slette fil %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ikke muligt." #: 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 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 msgid "&Delete %s" msgstr "&Fjern %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "Forudindstilling \"%s\" findes allerede.\n" "Vil du overskrive?\n" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid msgid "PID: %d" msgstr "" #: 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?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Omdøbe/flytte %d valgte filer/mapper?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Omdøb/flyt \"%s\" til?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Genstart venligst Double Commander for at udføre ændringerne" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" 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 "" #: 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..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: 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 msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: 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 #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fejl! Kan ikke finde TC-konfigurationsfilen:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration executable:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Fejl! Kan ikek finde TC-konfigurations EXE-fil:\n" "%s\n" #: ulng.rsmsgtcisrunning #, fuzzy #| 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.\n" 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound #, fuzzy #| msgid "" #| "Error! Cannot find the desired wanted TC toolbar output folder:\n" #| "%s\n" msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fejl! Kan ikek finde den ønskede TC-værktøjslinje outputmappe:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 "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 #, fuzzy #| msgid "" #| "Saved!\n" #| "Toolbar filename: %s\n" msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Gem!\n" "Værktøjslinjens filnavn: %s\n" #: 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 "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Brugernavn:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Brugernavn (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 "Volumen-etiket:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Indtast venligst volumen-størrelse:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Sikker sletning af %d valgte filer/mapper?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Sikker sletning af \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: 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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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 "Billede/multimedie" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Netværk" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Andre" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "&s System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afbrudt" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Danner kontrolsumfil" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Danner kontrolsumfil i \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics #, fuzzy msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Beregner" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Beregner \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Samler" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Samler filer i \"%s\" til \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopierer" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopierer fra \"%s\" til \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopierer \"%s\" til \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Danner mappe" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Danner mappe \"\"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sletter" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Sletter i \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Sletter \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Udfører" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Udfører \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Pakker ud" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Oplister \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Flytter" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Flytter fra \"%s\" til\"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakker fra \"%s\" til \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Indstiller egenskab i \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Indstiller egenskab af \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Opdeler" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Opdeler \"%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 msgid "Testing in \"%s\"" msgstr "Kontrollerer i \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Kontrollerer \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Kontrollerer kontrolsum" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Kontrollerer kontrolsum i \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" 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 msgid "Wiping in \"%s\"" msgstr "Sletter (fuldstændigt) i \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Sletter (fuldstændigt) \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Behandler" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Tilføj starten;Tilføj enden;Tilføj smart" #: 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 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 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 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 "Arkivtype-navn:" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associer plugin \"%s\" med:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Først;Sidst" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassisk, ældre måde;Alfabetisk (men stadig med sprog først)" #: 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 "Aktivt vindue til venstre, inaktive vindue til højre (ældre visning); Venstre vindue til venstre, højre til højre" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Indtast filendelse" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Nyt vindue;Minimeret til proceslinjen;Handlingsvindue" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Dynamisk" #: ulng.rsopthotkeysadddeleteshortcutlong 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 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" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Kommando" #: ulng.rsopthotkeysdeletetrashcanoverrides 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 "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 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 "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 msgid "Edit hotkey for %s" msgstr "Rediger genvejstast for %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ret parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Genvejstast" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Genvejstaster" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ingen>" #: 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 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 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 #, fuzzy,badformat msgid "Shortcut %s is already used." msgstr "Genvejstast %s anvendes allerede til %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Ændre den til %s?" #: ulng.rsopthotkeysusedby 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" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Pakkeprogrammer" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Opdater automatisk" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Egenskab" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kort" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farver" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Kolonner" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Konfiguration" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Brugertilpassede kolonner" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Favoritmappe" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Træk & slip" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drev-valgknap" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Filassociationer" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy 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 "Filvindue" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Find filer" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visning" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Filtyper" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Faneblade" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Skrifttype" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Fremhævere" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Genvejstaster" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikoner" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorer-liste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taster" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Sprog" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Logfil" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Diverse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mus" #: ulng.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" #: ulng.rsoptionseditorplugins #, fuzzy msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugin" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hurtig søgning/filtrering" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Værktøjslinje" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Værktøjer" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Værktøjshjælp" #: 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 "Ingen;Kommandolinje;Hurtig søgning;Hurtigt filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Brug venstre knap;Brug højre knap;" #: 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 "" #: ulng.rsoptpluginalreadyassigned 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 "Deaktiver" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Aktiver" #: 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" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Navn" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registreret til" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Søg med forskel på STORE og små bogstaver; Søg &uden forskel på STORE og små bogstaver" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Filer;Mapper;Filer og mapper" #: 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 "Skjul filterpanelet, når det ikke er valgt" #: 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)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortér efter navn og vis først;sortér som filer og vis først;sortér som filer" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetiske, inklusive tegn med accenter;Naturlig sortering: Alfabetisk og numerisk" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Top;Bund;" #: 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 "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Kategori-navn:" #: ulng.rsopttooltipfiletypealreadyexists msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 "Æ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;brug samme indstilling som for nye filer;til sorteret plads" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Filer: %d, mapper: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kan ikke ændre adgangsrettigheder for \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Kan ikke ændre ejer for \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fil" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mappe" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nævnte pipe" #: ulng.rspropssocket msgid "Socket" msgstr "" #: 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vælg en mappe" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Vi&s hjælp for %s" #: ulng.rssimplewordall #, fuzzy msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Kommando" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "Filer" #: 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.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 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)\n" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kunne ikke danne mål-mappe!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Forkert filstørrelse-format!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan ikke opdele fil!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Der er mere end 100 dele! Vil du fortsætte?" #: 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 "Vælg mappe:" #: ulng.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 "Kunne ikke danne 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 "" #: ulng.rstimeunitday msgctxt "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 "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: 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" #: 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 "Fremviser" #: ulng.rsunhandledexceptionmessage 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 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 "" #: 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.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 "Netværk" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commanders interne fremviser" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Ny størrelse" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s ikke fundet!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.cs.po������������������������������������������������������������0000644�0001750�0000144�00001267336�13424362040�017233� 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 0.9.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2019-01-27 14:36+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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porovnávám... %d%% (ESC pro zrušení)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Vpravo: Smazáno %d soubor(ů)" #: fsyncdirsdlg.rsfilesfound 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 msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Zleva doprava: Kopírovat %d soubor(ů), velikost: %d bajtů" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Zprava doleva: Kopírovat %d soubor(ů), velikost: %d bajtů" #: 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 msgid "Fo&llow links" msgstr "Ná&sledovat odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervní prostor" #: 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 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.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 "Ko&mprimováno" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "Složka" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Š&ifrováno" #: 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 "Jako te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption msgid "Benchmark data size: %d MB" msgstr "Velikost dat: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Uložit soubor(y) s kontrolním součtem do:" #: 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..." #: 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 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 pravý blok" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopírovat pravý blok" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopírovat levý blok" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopírovat levý blok" #: 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.acteditselectall.caption msgid "Select &All" msgstr "Vybrat &vše" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Krok zpět" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Vlevo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Vpravo" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "&Uložit vše" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Uložit vše" #: 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.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 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 čím:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Vyhledat:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Směr" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Rozbalení souborů" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozbalit i s cestou, 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 oddělených podsložek (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 soubory odpovídající masc&e souborů:" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Nastavení vlastností" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastavit na &všech vybraných souborech" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Pře&skočit tento soubor" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Poslední přístup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Poslední změna:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Poslední změna stavu:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sym. odkaz na:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Název" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Z&rušit" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Zavřít" #: 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 "Zrušit hledání, zavřít a uvolnit paměť" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Pro všechny ostatní \"Najít soubory\", 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.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 &pomocí" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Vybrané složky a &soubory" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 "V&yloučené podsložky" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Vyloučené soubory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Souborová maska" #: 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 "Pro všechny ostatní, 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.cbcasesens.caption msgid "C&ase sensitive" msgstr "Rozlišovat velikost" #: 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.actbenchmark.caption msgid "&Benchmark" msgstr "" #: 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.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 "Pro všechny hledání, zrušit, zavřit 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 "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.actfocuscmdline.caption msgid "Focus command line" msgstr "Zaměřit příkazový řádek" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: 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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umístit kurzor na první soubor v seznamu" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umístit kurzor na poslední soubor v seznamu" #: 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.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.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Nástroj pro h&romadné přejmenování" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Připojit síť..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Odpojit síť" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Síť &rychle připojit..." #: 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 "" #: 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 "&Zabalit 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.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, 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 "Zamčená, při změně složky vytvoří novou záložku" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normální" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zamčená" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Zamčená, ale dovolí změnu složky" #: 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.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.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 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 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 "&Určit..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgid "Case sensitive" msgstr "Rozlišovat velikost" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorovat přízvuky a zpřežky" #: 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvoření nové složky" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Zadejte název nové 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Výška" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šířka" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Smazat" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "&Upravit" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Načíst" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Obnovit &vše" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Hromadné přejmenování" #: tfrmmultirename.cblog.caption msgid "Ena&ble" msgstr "Povo&lit" #: 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.extension.caption msgid "[E] Extension" msgstr "[E] Přípona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhledat a Nahradit" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Výsledek protokolu" #: 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 "Nah&radit..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Č&íslovat od" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Šířka" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Počítadlo" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Den" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Den (2 cifry)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Den v týdnu (krátký, např. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Den v týdnu (dlouhý, např.\"pondělí\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozici x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Znaky od pozice x do y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hodina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hodin (2 cifry)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (2 cifry)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Měsíc" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Měsíc (2 cifry)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Název měsíce (krátké, např. \"led\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Název měsíce (dlouhé, např. \"leden\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Název" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozici x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaky od pozice x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Přípona..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Název..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Doplněk" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (2 cifry)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 cifry)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 cifry)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Upravit jména..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Načíst jména ze souboru..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Starý název souboru" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nový název souboru" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Cesta k souboru" #: 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 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 msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Více URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jeden název souboru" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jeden URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Použít" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: 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" #: 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 "" #: 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 "" #: 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: 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 msgid "Background 2:" msgstr "Pozadí 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Kon&figurace podrobného zobrazení:" #: 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.lblfontname.caption msgid "Font:" msgstr "Písmo:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: 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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Nápověda" #: 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 "Cíl:" #: 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í" #: 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.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 "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti interního editoru" #: 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 "" #: 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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Rozšířené položky:" #: 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Gradientní přechod" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Ukazatel volného místa na disku " #: 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 msgid "&Brightness level of inactive panel" msgstr "Jas neaktivního panelu" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Uka&zatel barvy pozadí:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "U&kazatel barvy popředí:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "&Barva vybraných:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer format:" msgstr "Hlavička a patička:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: 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 "" #: 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Pí&smo konzoly" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Písmo &editoru" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "&Písmo protokolu" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "Hlavní &písmo" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Písmo cesty" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Písmo výsledku hledání" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "&Knižní písmo prohlížeče" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "&Písmo prohlížeče" #: 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 "" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Seřadit" #: 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 "" #: 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.cbflattoolbar.caption msgid "Flat b&uttons" msgstr "Plochá t&lačítka" #: 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.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 "&Komprese/Dekomprese" #: 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.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.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.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)" #: 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.)" #: 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.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 "" #: 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í" #: 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." #: 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)" #: 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 1" #: 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 "Potv&rdit uzavření všech záložek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potvrdit zavření uzamčené 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 "Zobrazit u uzamčené záložky 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 "Otevřít &novou záložku 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 k provedení když poklikáme 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "K&lonovat tlačítko" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Upravit kláveso&vou zkratku" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "&Vložit nové tlačítko" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Vybrat" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "Ostatní..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Odstranit kláveso&vou zkratku" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Navrhnout" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Plochá tlačítka" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Oznámit chyby a příkazy" #: tfrmoptionstoolbar.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." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Vzhled" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "&Velikost lišty:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "Příka&z" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&y:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Nápověda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Klávesová zkratka:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ik&ona:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Ve&likost ikony:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "Pří&kaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametry:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Výchozí cest&a:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "ToolTip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Přidat nástrojovou lištu se VŠEMI příkazy DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pro externí příkaz" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pro vnitřní příkaz" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pro oddělovač" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pro podnabídku nástrojové lišty" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Zálohovat..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuální nástrojovou lištu..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - nechat existující" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - smazat existující" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Horní nástrojovou lištu..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Uložit zálohu nástrojové lišty" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - nechat existující" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - smazat existující" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importovat..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovit zálohu nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "z souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z jednoho .BAR souboru od TC..." #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z Total Commanderu (\"wincmd.ini\")" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.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" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Vyhledat a nahradit..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "ve všech výše uvedených ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "ve všech příkazech..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "ve všech názvech ikon..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "ve všech parametrech..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "ve všech spouštěcích cestách..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačítka" #: 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: Ohledně voleb jako velikost písmen, ignorování nebo neignorování přízvuku, tyto jsou uloženy a obnoveny samostatně pro každý kontext použití a sezení do jiné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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.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.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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Režim knihy prohlížeče" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Ukázka" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Barva pozadí v prohlížeči knih" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Barva písma v prohlížeči knih" #: 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 "Konfi&gurovat" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Komprimovat soubory" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "V&ytvořit oddělené archívy, jeden na vybraný soubor/adresář" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbalovací archív" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Zaši&frovat" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Pře&sunout do archívu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Vícesvazkový archív" #: 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 "Také kom&primovat se jmény cest (pouze rekurzivně)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Komprimovat soubor(y) do souboru:" #: 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:" #: 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 "Více pra&videl" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Méně pravid&el" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Použít obsahové doplňky, v kombina&ci s:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Doplněk" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Pole" #: 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)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Vyberte znaky k vložení:" #: 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 msgid "Created:" msgstr "Vytvořeno:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Skrytý" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Zpřístupněno:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Změněno:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Jen pro čtení" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Včetně podsložek" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Systémový" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Vlastnosti časové známky" #: 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" #: 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 #, fuzzy #| msgid "Directory &target" 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.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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizovat" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizovat adresáře" #: 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 "Ověření 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Obrázek" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Doplněk" #: 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.actzoom.caption msgid "Zoom" msgstr "Zvětšení" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Přiblížit" #: tfrmviewer.actzoomout.caption 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýraznění" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Kreslit" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Změnit velikost" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Krok zpět" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Prohlížeč" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prohlídka" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pero" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zvýraznění" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Kreslit" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prohlídka" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Zobrazit" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: 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.miprint.caption msgid "Print..." msgstr "Vytisknout..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat vše" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Spustit" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: 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 "" #: 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" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: 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" #: 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 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" 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\"?\n" #: 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 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 msgid "Copy (%d) %s" msgstr "Kopírovat (%d) %s" #: 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 "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: 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 "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr " Přidáno: " #: 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.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.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 msgid "Speed %s/s" msgstr "Rychlost %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "\"]\" nebyl na řádku %s nalezen" #: ulng.rsextscommandwithnoext 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 "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini soubor" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "standardní DC .tab soubory" #: 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 "Určit šablonu" #: ulng.rsfinddepth 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 msgid "Directory %s does not exist!" msgstr "Adresář %s neexistuje!" #: ulng.rsfindfound 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 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.rsfreemsg msgid "%s of %s free" msgstr "volné místo: %s, celková kapacita: %s" #: ulng.rsfreemsgshort 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 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.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?\n" msgstr "" "Varování! Při obnově záložního souboru .hotlist, tento bude smazán a nahrazen jiným.\n" "\n" "Jste si skutečně jisti, že chcete pokračovat?\n" #: 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.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?\n" msgstr "" "Nastavení s tímto názvem již existuje.\n" "Chcete ho skutečně přepsat?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Jste si jisti, že chcete obnovit na výchozí hodnoty?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Opravdu chcete vymazat \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Nastavení \"%s\" bylo upraveno.\n" "Chcete ho nyní uložit?\n" #: 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 "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: 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 "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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akce" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Default>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Kopírovat název s UNC cestou" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Vytvořit zástupce..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odpojit síťový disk..." #: 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 "Mapovat síťový disk..." #: 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 "Zabalit zde..." #: 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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Špatný výsledek CRC32 pro soubor:\n" "\"%s\"\n" "\n" "Přejete si ponechat výsledný poškozený soubor?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nemůžete kopírovat/přesunout soubor \"%s\" do sebe!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nelze odstranit adresář %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Nelze přepsat adresář \"%s\" neadresářem \"%s\"" #: ulng.rsmsgchdirfailed 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 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 "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Opravdu chcete skončit?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Kopírovat %d vybraných položek?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopírovat \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Opravdu vymazat vybrané položky (celkem %d)?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Opravdu vymazat vybrané položky (celkem %d) do koše?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Opravdu vymazat \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Opravdu přesunout \"%s\" do koše?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Nelze se připojit k serveru: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nelze zkopírovat soubor %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Složka s názvem \"%s\" už existuje." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s není podporován" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Nelze nastavit atributy pro \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nelze nastavit datum/čas pro \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nelze nastavit vlastníka/skupinu pro \"%s \"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Oprávnění pro \"%s\" nelze nastavit" #: 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 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 "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 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 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 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 msgid "File %s changed, save?" msgstr "Soubor %s byl změněn, uložit?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtů, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Přepsat:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Soubor %s existuje, přepsat?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Souborem:" #: ulng.rsmsgfilenotfound 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 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!\n" 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!\n" #: ulng.rsmsgfilereadonly 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 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 msgid "Folder %s exists, merge?" msgstr "Složka %s existuje, přepsat?" #: ulng.rsmsgfollowsymlink 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 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:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Nalezení souboru \".hotlist\" pro import" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Název rychlého adresáře" #: ulng.rsmsghotdirnbnewentries 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 rychlého adresáře" #: 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 "Cíl rychlého adresáře" #: 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Celkem uložených položek: %d\n" "\n" "Název souboru se zálohou: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Celkem exportovaných položek: " #: ulng.rsmsghotdirwhattodelete 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" 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.\n" #: 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 msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Neplatný výsledek délky souboru pro soubor: \"%s\"" #: ulng.rsmsginsertnextdisk 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" 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\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "Chybné hexadecimální číslo: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neplatná cesta" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Kopírovat soubor %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Rozbalit soubor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Vytvořit odkaz %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Vytvořit adresář %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Přesunout soubor %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Komprimovat do souboru %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Vypnutí programu" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Spuštění programu" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstranit adresář %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Vytvořit symbolický odkaz %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testovat integritu souboru %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Nevratně smaže soubor %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Vymazat %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Předvolba \"%s\" již existuje. Nahradit?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problém při vykonávání příkazu (%s)" #: ulng.rsmsgprocessid msgid "PID: %d" msgstr "" #: 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 msgid "Rename/move %d selected files/directories?" msgstr "Přejmenovat nebo přesunout vybrané položky (celkem %d)?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype 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 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 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 "Název nové záložky:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cílová cesta:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Chyba! Nelze najít konfigurační soubor TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Chyba! Nelze najít spustitelnou konfiguraci TC:\n" "%s\n" #: 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.\n" 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.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Chyba! Nelze najít požadovanou výstupní složku nástrojové lišty TC:\n" "%s\n" #: 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.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 chcete proces ukončit?" #: ulng.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Uloženo!\n" "Název souboru nástrojové lišty: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Nevratně smazat %d vybraných souborů/adresářů?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Nevratně smazat \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "s" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" "Chybné heslo!\n" "Zkuste znova!\n" #: 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.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.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Pozor, nalezeny stejné názvy!" #: ulng.rsmulrenwronglinesnumber 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 "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: 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 "" #: 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 msgid "Calculating checksum in \"%s\"" msgstr "Přepočítávám kontrolní součet v \"%s\"" #: ulng.rsopercalculatingchecksumof 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 msgid "Calculating \"%s\"" msgstr "Probíhá výpočet \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Spojování" #: ulng.rsopercombiningfromto 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 msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírování z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírování \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváření adresáře" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Vytváření adresáře \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Mazání" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Mazání v \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Mazání \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Provádění" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Provádění \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbalování" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Vypisování \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Přesunování" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Přesunování z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto 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 "Zabalení" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Zabalení z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Zabalení \"%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 msgid "Setting property in \"%s\"" msgstr "Nastavení vlastnosti v \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavení vlastnosti z \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Rozdělení" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Testování v \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Testování \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Ověřuji kontrolní součet" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Ověřuji kontrolní součet v \"%s\"" #: ulng.rsoperverifyingchecksumof 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 #, fuzzy msgid "Wiping" msgstr "Otírání " #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Otírání v \"%s\"" #: ulng.rsoperwipingsomething 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 "" #: 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 msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Opravdu chcete vymazat: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Export nastavení archivátorů" #: ulng.rsoptarchiverexportdone 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 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 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 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 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Zástupce %s je již použit." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Změnit toto na %s?" #: ulng.rsopthotkeysusedby 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.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 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 msgid "Icons" msgstr "" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Byla provedena změna v \"%s\"\n" "\n" "Přejete si ji uložit?\n" #: 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.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 "" #: ulng.rsoptpluginalreadyassigned 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.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;Natural sorting: alphabetical and numbers" msgstr "abecedně, s ohledem na diakritiku;přirozené řazení: abecedně a čísla" #: 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;Nabí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 msgid "\"%s\" already exists!" msgstr "\" %s\" již existuje!" #: ulng.rsopttooltipfiletypeconfirmdelete msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Opravdu chcete vymazat: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Export tooltip nastavení" #: ulng.rsopttooltipfiletypeexportdone 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 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 msgid "Field \"%s\" not found!" msgstr "" #: 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 msgid "Plugin \"%s\" not found!" msgstr "Doplněk \"%s\" nenalezen!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Položka \" %s\" nebyla pro pole \" %s\" nalezena!" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Soubory: %d, složky: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nelze změnit přístupová práva pro \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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é.\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.\n" 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é.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrat adresář" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Vyberte okno" #: ulng.rsshowhelpfor 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 msgid "Filename" msgstr "Název souboru" #: ulng.rssimplewordfiles msgid "files" msgstr "soubory" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: 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.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 msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Souborů: %d, Adresářů: %d, Velikost: %s (%s bytů)" #: 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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;Přístup k oblíbeným záložkám;Roletovou nabídku záložek" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Počet nahrazených: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Žádné nahrazení se nekonalo." ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.ca.po������������������������������������������������������������0000644�0001750�0000144�00001235431�13424362040�017200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2012-08-14\n" "Last-Translator: Jordi Casas <jordi@refugi.com>\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: Català\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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" msgid "Fo&llow links" msgstr "Segueix enllaços" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserva espai" #: 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" 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.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 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.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Desa fitxer de comprobació en:" #: 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ó..." #: 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 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.acteditselectall.caption msgid "Select &All" msgstr "Selecciona &tot" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfà" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Surt" #: 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.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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "esquerra" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "dreta" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "De&sa-ho Tot" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Desa-ho tot" #: 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.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ó" #: 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.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Configura propietats" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ajusta a tots els fitxers seleccionats" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Salta aquest fitxer" #: 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conté:" #: 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: 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.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Últim accès:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificació" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Últim canvi d'estat:" #: 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mida:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Enllaç simbòlic:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Tipus:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriu" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Sensible majúscules/minúscules" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Col·locar el cursor sobre el primer fitxer" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Col·locar el cursor sobre l'últim fitxer" #: 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.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.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" 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.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.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.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 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 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 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.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nova carpeta" #: 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.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Alt" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ample" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Esborra" #: tfrmmultirename.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Edita" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Carrega" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Reanomena" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Restaura" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Desa" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Reanomenat múltiple" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Permet" #: 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.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E]xtensió" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Comptador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Cerca i Reemplaçar" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registre de resultat" #: 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.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C]omptador" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Dia" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex]xtensió" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x]xtensió" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[H] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[Mi]nut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[Mo]->Mes" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mes (2 digits)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nom del mes (abreujat, e.g., \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nom del mes (llarg, e.g., \"january\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]om" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx]om" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x]om" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensió..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nom..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Complement" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S]egon" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y]->Any" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Any (4 dígits)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: 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 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 msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption #, fuzzy #| msgid "Múltiple URIs" msgid "Multiple URIs" msgstr "Múltiples URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fitxer simple" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Simple URI" #: tfrmopenwith.misingleurl.hint 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.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 "" #: 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 "Con&figure 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.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.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "A&juda" #: 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 "" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 "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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa indicador de gradació" #: 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Indicador de l'espai lliure de la unitat" #: 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.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicador de color de fons" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indica color de primer pla" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "tfrmoptionsfilepanelscolors.lblmarkcolor.caption" msgid "&Mark Color:" msgstr "Color de la selecció:" #: 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "tfrmoptionsfonts.lbleditorfont.caption" msgid "&Editor font" msgstr "Font de l'Editor" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "tfrmoptionsfonts.lbllogfont.caption" msgid "&Log font" msgstr "Font de Registre" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "tfrmoptionsfonts.lblmainfont.caption" msgid "Main &font" msgstr "Font Principal" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "tfrmoptionsfonts.lblviewerbookfont.caption" msgid "Viewer&Book Font" msgstr "Font de Vista de Llibre" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "tfrmoptionsfonts.lblviewerfont.caption" msgid "&Viewer font" msgstr "Font de Visualització" #: 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.miseparator1.caption msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Botons plans" #: 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.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.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.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.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 "" #: 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.)" #: 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.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" #: 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." #: 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)" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Botó de clonació" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Esborra" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Edita drecera" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insereix nou botó" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Un altre..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Esborra drecera" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botons plans" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.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" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Aparença" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Mida de Ba&rra" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Ordres:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paràmetres" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Drecera" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Icona" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Mida ic&ones" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Comandaments" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paràmetres" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ruta d'inici" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Indicador de funció" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipus de botons" #: 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.btnbackgroundcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Visualitza en mode llibre" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Exemple" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption" msgid "&Background color in book viewer" msgstr "Color de segon pla en vista de llibre" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "tfrmoptionsviewer.lblfontcolorviewerbook.caption" msgid "&Font color in book viewer" msgstr "Color de Font en vista de llibre" #: 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 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:" #: 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 msgid "Field" msgstr "" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Tanca" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "A&juda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Accepta" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Accedit:" #: 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" #: 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.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.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.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.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" 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 #, 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.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.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.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.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gràfics" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Complements" #: 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Apropar" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Allunya" #: 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realça" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibuixa" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ulls Vermells" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Canvia mida" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Desfà" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visualitzador" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositives" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Llapis" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Destaca" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pinta" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositives" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Visualització" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: 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.miprint.caption msgid "Print..." msgstr "Imprimeix..." #: 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecciona tot" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: 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" #: 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 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" 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 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 msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Velocitat %s/s" #: ulng.rsdlgspeedtime #, 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.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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 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 msgid "Directory %s does not exist!" msgstr "¡La carpeta %s no existeix!" #: ulng.rsfindfound 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 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr " %s de %s lliures" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Accions" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself 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.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed 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 msgid "This tab (%s) is locked! Close anyway?" msgstr "Aquesta pestanya (%s) està blocada! La tanco? " #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Copia %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Esborra %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Envia %d Fitxers/carpetes seleccionats a la paperera?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Esborra \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Envia \"%s\" a la paperera?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "No puc connectar amb el servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "No puc Copiar el fitxer %s a %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ja existeix una carpeta anomenada \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La data %s no es suporta" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "No es pot fixar atributs per \"%s" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "No es pot fixar data/temps per \"%s" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "No es pot establir el propietari/grup de \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "%s ha canviat, Desa?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "%s existeix ¿sobreescriure" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly #, 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 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 #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "La carpeta %s existeix, la sobreescric?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "¿Segueis l'enllaç simbòlic \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta invàlida" #: ulng.rsmsginvalidpathlong 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 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 msgid "Copy file %s" msgstr "Copia fitxer %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Extreu Fitxer %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informació: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crea enllaç %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crea carpeta %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mou Fitxer %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimeix en fitxer %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Elimina carpeta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fet: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crea enllaç Simbòlic %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Examinar la integritat del fitxer %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Esborra %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "La configuració \"%s\" ja exiteix.¿Sobreescriure?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Reanomena/Mou %d fitxers/carpetes seleccionats?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Destrueix %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Destrueix \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" 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 "Sense canvis;MAJÚSCULES;minúscules;Primera Majúscula;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calculant" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calculant \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Copiant" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copiant \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creant directori" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creant directori \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Esborrant" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Esborrant en \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Esborrant \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Executant" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Executant \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extreient" #: ulng.rsoperextractingfromto 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 msgid "Listing \"%s\"" msgstr "Llistant \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Movent" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Movent from \"%s\" to \"%s\"" #: ulng.rsopermovingsomethingto 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 msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, 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 msgid "Wiping in \"%s\"" msgstr "Netejant a \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 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 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 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 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 #, 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 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 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 #, 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 msgid "Change it to %s?" msgstr "Canviar-lo a %s ?" #: ulng.rsopthotkeysusedby #, 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.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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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 msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fitxers: %d, Carpetes: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "No es pot canviar els drets d'accés per \"%s\"" #: ulng.rspropserrchown 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.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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Escull una carpeta" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.bg.po������������������������������������������������������������0000644�0001750�0000144�00001311670�13424362040�017205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2017-07-17 08:36+0300\n" "Last-Translator: sstpr@narod.ru\n" "Language-Team: Language <sstpr@narod.ru>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "X-Native-Language: български\n" "X-Generator: Poedit 1.8.9\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Сравняване... %d%% (ESC за отказ)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Дясно: Изтриване на %d файл(а)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Намерини файлове: %d (еднакви: %d, различни: %d, неповтарящи отляво: %d, неповтарящи отдясно: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Отляво надясно: Презапис на %d файл с общ размер %d байта" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Fo&llow links" msgstr "&Следване на връзките" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 "" #: 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 "Принадлежности по 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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Съхраняване на файла/овете с проверочните сборове в:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "Избор на вси&чко" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отмяна" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Из&ход" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Първа разлика" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Ляво" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Дясно" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 "Мак (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 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 #, fuzzy 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.actsaveall.caption msgid "Sa&ve All" msgstr "Съ&храняване на всички" #: tfrmeditor.actsaveall.hint msgid "Save All" 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 #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Отказ" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" 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 "Посока" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Задаване на &свойства" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Път:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Група" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последно използване:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последна промяна:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Мека връзка към:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Вид:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmfileproperties.sgimage.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmfileproperties.sgimage.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgimage.columns[1].title.caption" msgid "Value" msgstr "Стойност" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Приставки" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileunlock.btnclose.caption #, fuzzy 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 #, fuzzy #| msgid "Cancel" msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Отказ" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "" #: tfrmfinddlg.actclose.caption #, fuzzy #| msgid "Close" msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Затваряне" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption #, fuzzy 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 #, fuzzy #| msgid "Go to file" msgid "&Go to file" msgstr "Отиване до файл" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Търсене на данни" #: tfrmfinddlg.actlastsearch.caption #, fuzzy #| msgid "Last search" msgid "&Last search" msgstr "Последно търсене" #: tfrmfinddlg.actnewsearch.caption #, fuzzy #| msgid "New search" 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 #, fuzzy #| msgid "Start" msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Начало" #: tfrmfinddlg.actview.caption #, fuzzy #| msgid "View" 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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 #, fuzzy 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 #, fuzzy 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.cbcasesens.caption msgid "C&ase sensitive" 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 #, fuzzy msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Внасяне на всички" #: tfrmhotdirexportimport.btnselectiondone.caption #, fuzzy 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 "Сглобяване на файл" #: 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 #, fuzzy 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 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 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 #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавяне" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmmkdir.caption msgid "Create new directory" 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 "" #: tfrmmodview.lblpath3.caption msgctxt "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.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmmultirename.btnedit.caption msgctxt "tfrmmultirename.btnedit.caption" msgid "&Edit" msgstr "Об&работка" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "За&реждане" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Пре&именуване" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Очистване на вси&чки" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Съхраняване" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Множествено преименуване" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] Разширение" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Брояч" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Търсене &и замяна" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Брояч" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Ден" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Ден (2 цифри)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Знак na положение x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Знак от положение x на y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Час (2 цифри)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Минута" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Минута (2 цифри)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месец" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месец (2 цифри)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Име на месеца (кратко, например „ян‟)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMM] Име на месеца (кратко, например „януари‟)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Име" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Знак на положение x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Знаци от положение x до положение y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Време..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Разширение..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Име..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Приставка" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунда (2 цифри)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Година" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Година (4 цифри)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Промяна на имената" #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Зареждане на имената от файл..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Прилагане" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" 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 "Позволено е само &едно пускане на 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 "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" 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 #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Водоравни черти" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Отвесни черти" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" 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 #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Дневник на реда управление" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Дневник на папката" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Дневник на търсените файловете" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Папкови подпрозорци" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Запис на настройките" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Дневник на търсенията/ замените" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy 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 #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Папката на приложението (преносима версия)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" 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.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to 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 #, fuzzy 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 #, fuzzy 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 #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure 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.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 #, fuzzy 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 #, fuzzy #| msgid "Add..." msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Добавяне..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption #, fuzzy #| msgid "Backup..." msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Запасяване..." #: tfrmoptionsdirectoryhotlist.btndelete.caption #, fuzzy #| msgid "Delete..." msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Изтриване..." #: tfrmoptionsdirectoryhotlist.btnexport.caption #, fuzzy #| msgid "Export..." msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Изнасяне..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption #, fuzzy #| msgid "Help" msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "&Help" msgstr "Помощ" #: tfrmoptionsdirectoryhotlist.btnimport.caption #, fuzzy #| msgid "Import..." msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Внасяне..." #: tfrmoptionsdirectoryhotlist.btninsert.caption #, fuzzy #| msgid "Insert..." msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Вмъкване..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption #, fuzzy #| msgid "Miscellaneous..." 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 #, fuzzy #| msgid "Sort..." msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Подреждане..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption #, fuzzy #| msgid "When adding directory, add also target" msgid "&When adding directory, add also target" msgstr "При добавяне на папка, да се добавя и цел" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption #, fuzzy #| msgid "Always expand tree" msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Дървото да се разгъва винаги" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy #| msgid "Show only valid environment variables" msgid "Show only &valid environment variables" msgstr "Показване само на важащи променливи на средата" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption #, fuzzy #| msgid "In popup, show [path also]" 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 #, fuzzy #| msgid "Target:" 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 "" #: 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.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.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.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" 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 #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Поставяне" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Преименуване" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" 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 #, fuzzy #| msgid "Add" 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 #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Премахване" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Премахване" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Премахване" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" 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 #, fuzzy #| msgid "Up" 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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 "Брой на &повторенията:" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" 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 msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "&Яркост на бездейното крило" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Подцветка на указателя" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Основен цвят на указателя" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark 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 #, fuzzy msgctxt "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 #, fuzzy msgctxt "tfrmoptionsfilesearch.dbtextsearch.caption" msgid "Text search in files" msgstr "Търсене на текст във файловете" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Файлово търсене" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgctxt "tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption" msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Разпределено в паметта търсене на &текст във файловете" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption #, fuzzy msgctxt "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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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 "" #: 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "tfrmoptionsfonts.btnpatheditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "tfrmoptionsfonts.btnsearchresultsfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Шрифт на &конзолата" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Шрифт на об&работчика" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Шрифт на дневника" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Основен шрифт" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Шрифт на &книгоподобния изглед" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Шрифт на &прегледа" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Добавяне на клавишно &съчетание" #: 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 msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Из&триване на клавишно съчетание" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy 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 "Преименуване" #: 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 #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Заповед" #: tfrmoptionshotkeys.miseparator1.caption #, fuzzy msgctxt "tfrmoptionshotkeys.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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 #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Само обичайните значета" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" 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.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" 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.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 #, fuzzy 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 "Сгъване/ разгъване" #: 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 "Презапис/Преместване/Създаване на връзка/мека връзка" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" 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.cbloginfo.caption #, fuzzy #| msgid "Log information messages" 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 #, fuzzy #| msgid "View log file content" 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.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.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 "" #: 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“ и т.н." #: 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.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 означители или свосйтв ана изображения във файловите списъци. Могат да се използват и при търсене и в пособието за множествено преименуване." #: 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." #: 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)" #: 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 "" #: 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.edruntermparams.hint msgctxt "tfrmoptionsterminal.edruntermparams.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 "Ключове:" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Удвояване" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Об&работка" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Добавяне на бутон" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Друго..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Премахване на клавишно съ&четание" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Плоски бутони" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Докладване на грешки в заповедите" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Облик" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Размер на лентата:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "&Заповед:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Клю&чове:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помощ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Клавишно съчетание:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "&Значе:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Размер на &значетата:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Заповед" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Ключове" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Пусков път:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Подсказка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "за външна заповед" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "за вътрешна заповед" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "за разделител" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "за под-лента" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Запасяване..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущата лента..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "във файла .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "във файла .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "във „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "във „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "във файла .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "във файла .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Търсене и замяна..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnbackgroundcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Книговиден изглед на прегледа" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "&Подцветка на книговидния преглед" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" 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 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 "Време:" #: 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 #, fuzzy msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Папки" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint #, fuzzy 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 msgid "Field" msgstr "Поле" #: 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 "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Добре" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Accessed:" msgstr "Ползван:" #: 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 "Четене" #: 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.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.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.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Затваряне" #: tfrmsyncdirsdlg.btncompare.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Сравняване" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption #, fuzzy 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 #, fuzzy 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.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.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.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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графики" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" 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.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Увеличаване" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" 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.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Изтъкване" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Червени очи" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Преоразмеряване" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Отмяна" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Преглед" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Изтъкване" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Начало" #: 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "Когато файлът съществува" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight 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 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" 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 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 msgid "Copy (%d) %s" msgstr "Презапис (%d) %s" #: 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.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Съвпадения: " #: ulng.rsdiffmodifies msgid " Modifies: " 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.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Отказ" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Продължаване" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "За&мяна" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" 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 msgid "Speed %s/s" msgstr "Скорост %s/s" #: ulng.rsdlgspeedtime 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.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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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.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 msgid "%s level(s)" msgstr "%s равнище/а" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "всички (неограничена дълбочина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само текущата папка" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Не съществува папка %s!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Намерени: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Име на шаблона:" #: 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Свободни %s от %s" #: ulng.rsfreemsgshort #, 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 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.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?\n" 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.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?\n" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" 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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Действия" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Смяната на папката на [%s] бе неуспешно!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Премахване на бездейните подпрозорци?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Презапис на %d избраните папки/файлове?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Да бъде ли презаписан избраният файл „%s“?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Да бъдат ли изтрити %d-те избрани папки/файла?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Да бъдат ли изтрити %d-те избрани папки/файла?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Да бъде ли изтрит избраният „%s‟?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Да бъде ли изтрит избраният „%s‟ в кошчето?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Неуспешно свързване към сървър: „%s‟" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Неуспешен презапис на файл „%s‟ в „%s‟" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Вече съществува папка с име „%s‟." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Не се поддържа дата %s" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файлът %s е променен. Да бъде ли съхранен?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байта, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Замяна на:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Съществува файл %s. Да бъде ли заменен?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "С файла" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt #, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Вече съществува %s, замяна?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Следване на мека връзка \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories 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 #, fuzzy #| msgid "Path" msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Път" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries 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 #, fuzzy #| msgid "Name:" 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete 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" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk 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" 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Неправилен път" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Това не е поддържана приставка!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Презапис на файл %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Извличане на файл %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Сведения:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Създаване на връзка %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Създаване на папка %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Преместване на файл %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Сбиване във файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Изтриване на папка %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Готово:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Създаване на мека връзка %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Унищожаване на файл „%s‟" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Изтриване на %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Преименуване/местене на %d избраните папки/файлове?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" 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.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Унищожаване на %d избрани файла/папки?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Унищожаване на избрания „%s‟?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "с" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без промяна; ВИСША; низша; Първият знак главен; Първият Знак На Всяка Дума Главен;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber 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.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 msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Изчисляване" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Изчисляване „%s‟" #: ulng.rsopercombining msgid "Joining" msgstr "Сглобяване" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Презаписване" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Презапис от „%s‟ в „%s‟" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Презапис на „%s‟ в „%s‟" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Създаване на папка" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Създаване на папка „%s‟" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Изтриване" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Изтриване в „%s‟" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Изтриване на „%s‟" #: ulng.rsoperexecuting msgid "Executing" msgstr "Изпълняване" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Изпълняване на „%s‟" #: ulng.rsoperextracting msgid "Extracting" msgstr "Извличане" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Извличане от „%s‟ в „%s‟" #: ulng.rsoperfinished msgid "Finished" msgstr "Приключено" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "Преместване" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Преместване от „%s‟ в „%s‟" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Преместване на „%s‟ в „%s‟" #: ulng.rsopernotstarted msgid "Not started" msgstr "Незапочнато" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Задаване на свойство в „%s‟" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Задаване на свойство на „%s‟" #: ulng.rsopersplitting msgid "Splitting" msgstr "Нацепване" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Проверка в „%s‟" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Проверка на „%s‟" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Унищожаване в „%s‟" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Унищожаване на „%s‟" #: ulng.rsoperworking msgid "Working" msgstr "Работи" #: ulng.rsoptaddfrommainpanel #, fuzzy #| msgid "Add at beginning;Add at the end;Smart add" 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "" #: 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.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 #, fuzzy 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" 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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлове: %d, папки: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" 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.\n" 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.\n" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Избор на папка" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: ulng.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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ������������������������������������������������������������������������doublecmd-0.9.8/language/doublecmd.be.po������������������������������������������������������������0000644�0001750�0000144�00001406550�13424362040�017205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Full Name <zmicerturok@gmail.com>\n" "Language-Team: Language <zmicerturok@gmail.com>\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 msgid "Comparing... %d%% (ESC to cancel)" msgstr "Параўнанне... ‰d%% (ESC каб скасаваць)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Права: выдаліць %d файл(аў)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Знойдзена файлаў: %d (Аднолькавых: %d, Розных: %d, Унікальных злева: %d, Унікальных зправа: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Злева ўправа: Капіруецца %d файлаў, агульны памер: %d байтаў" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" 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 msgid "Drop readonly fla&g" msgstr "Прыбраць п&азнаку \"толькі для чытання\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Вы&ключыць пустыя каталогі" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "&Выкарыcтоўваць спасылкі" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" 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 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.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 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.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Захаваць файл(ы) кантрольнай сумы ў:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." 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 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.acteditselectall.caption msgid "Select &All" msgstr "Абраць &усё" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Адвярнуць" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Выйсці" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Першае адрозненне" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" 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.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "tfrmdiffer.midivider7.caption" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "З&лева" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "З&права" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" 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 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 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.actsaveall.caption msgid "Sa&ve All" msgstr "Захаваць& усё" #: tfrmeditor.actsaveall.hint msgid "Save All" 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.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "&Улічваць рэгістр" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Шу&каць ад курсора" #: 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 "Напрамак" #: 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.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Задаць уласцівасці" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Задаць для ўс&іх абраных файлаў" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" 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.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.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.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" 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.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Шлях:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Група" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Апошні доступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Апошняя змена:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" 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.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Памер:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Спасылка:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тып:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запісаць" #: tfrmfileproperties.sgimage.columns[0].title.caption msgctxt "tfrmfileproperties.sgimage.columns[0].title.caption" msgid "Name" msgstr "Назва" #: tfrmfileproperties.sgimage.columns[1].title.caption msgctxt "tfrmfileproperties.sgimage.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 #, fuzzy 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.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 "Regular &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.chkhex.caption msgid "Hexadecimal" 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.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.cbcasesens.caption msgid "C&ase sensitive" 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.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.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 "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.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.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Размясціць курсор на першым файле са спіса" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" 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.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.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.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.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.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 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 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 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.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmmkdir.caption msgid "Create new directory" 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.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Вышыня" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Шырыня" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmmultirename.btnedit.caption msgctxt "TFRMMULTIRENAME.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Загрузіць" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Змяніць назву" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Скінуць &усё" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Захаваць" #: tfrmmultirename.caption msgid "MultiRename" msgstr "Змена назваў некалькіх файлаў" #: tfrmmultirename.cblog.caption msgid "Ena&ble" 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.extension.caption msgid "[E] Extension" msgstr "[E] Пашырэнне" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Лічыльнік" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Знайсці і &замяніць" #: tfrmmultirename.gblog.caption msgid "Log Result" 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.micounter.caption msgid "[C] Counter" msgstr "[C] Лічыльнік" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Дзень" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Дзень (2 лічбы)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Дзень тыдня (скарочана,напрыклад , \"пн\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Дзень тыдня (поўная назва ,напрыклад \"панядзелак\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Сімвал з пазіцыі x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Сімвалы з пацізыі x да y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[г] Гадзіна" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Гадзіна (2 лічбы)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Хвіліна" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Хвіліна (2 лічбы)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месяц" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месяц (2 лічбы)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Назва месяца (скарочаная, напрыклад \"стдз\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Назва месяца (поўная,напрыклад, \"студзень\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Назва" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Сімвал з пазіцыі x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Сімвалы з пацізыі x да y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Час..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Пашырэнне..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Назва..." #: tfrmmultirename.miplugin.caption msgctxt "tfrmmultirename.miplugin.caption" msgid "Plugin" msgstr "Убудова" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунда (2 лічбы)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Год (2 лічбы)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Год (4 лічбы)" #: tfrmmultirename.mnueditnames.caption msgid "Edit names..." msgstr "Рэдагаваць назвы..." #: tfrmmultirename.mnuloadfromfile.caption msgid "Load names from file..." msgstr "Загрузіць назвы з файла..." #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" 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 msgid "File type to be opened: %s" msgstr "Тып адкрываемага файла: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Спіс файлаў" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Спіс URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Адзін файл" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Адзін URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgid "&Apply" msgstr "&Ужыць" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" 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 msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: 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 msgctxt "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 "выраў&наванымі (з 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 "Фіксаваная шырыня слупкоў" #: 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 #, fuzzy 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.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to 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 msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure 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.lblfontname.caption msgid "Font:" msgstr "Шрыфт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Памер:" #: 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.btnhelp.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION" msgid "&Help" 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 "Даданне з галоўнай панэлі:" #: 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 "" #: 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.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.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" 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.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" 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 #, 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 "Параметры, што перадаюцца загаду. Доўгія назвы файлаў з прагаламі мусяць быць у двукоссях (пры непасрэдным уводзе)" #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." 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.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.gbextendedcontextmenuoptions.caption msgid "Extended options items:" 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.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.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" 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.cbbusegradientind.caption msgid "Use &Gradient Indicator" 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.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" 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 msgid "&Brightness level of inactive panel" msgstr "&Узровень яркасці неактыўнай панэлі" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Колер фону &індыкатара:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Колер інды&катара:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark 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.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheaderfootersizeformat.caption msgid "&Header/footer 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 "&Пры вылучэнні файлаў прагалам перамяшчаць курсор на наступны файл" #: 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.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" 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.btnpatheditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNPATHEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsearchresultsfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSEARCHRESULTSFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Шрыфт &тэрмінала" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "Шрыфт &рэдактара" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "Шрыфт &лога" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "Асноўны &шрыфт" #: tfrmoptionsfonts.lblpatheditfont.caption msgid "Path font" msgstr "Шрыфт шляху" #: tfrmoptionsfonts.lblsearchresultsfont.caption msgid "Search results font" msgstr "Шрыфт вынікаў пошуку" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "Шрыфт прагляду ў рэжыме &кнігі" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" 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.miseparator1.caption msgctxt "TFRMOPTIONSHOTKEYS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" 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.cbflattoolbar.caption msgid "Flat b&uttons" 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.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.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 #, fuzzy #| msgid "View log file content" 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.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.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 "" #: 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\" і т.п.)" #: 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.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 "Убудо&вы змесціва дазваляюць выводзіць дадатковыя звесткі аб файлах на панэлях пры пошуку альбо змене назваў файлаў" #: 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." #: 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 "Уб&удовы прагляду дазваляюць праглядаць ва ўнутранай праграме прагляду файлы розных фарматаў (выявы, табліцы, базы даных і т.п.)" #: 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.edruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNTERMPARAMS.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 "Параметры:" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Кл&анаваць кнопку" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "Рэдагаваць гарачую& клавішу" #: tfrmoptionstoolbar.btninsertbutton.caption msgid "&Insert new button" msgstr "&Уставіць новую клавішу" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Абраць" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Іншае..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Выдаліць гарачую& клавішу" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Прапановы" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Выплыўныя прапановы на падставе тыпу кнопкі, загаду і параметраў" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Плоскія кнопкі" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Паведаміць пра памылкі з загадамі" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Увядзіце параметры загаду, кожны ў асобным радку. F1- дапамога." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Выгляд" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Памер &панэлі:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "Зага&д:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Парамет&ры:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Даведка" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Гарачая клавіша:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Зна&чок:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "&Памер значка:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "За&гад:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Параметры:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Ш&лях запуску:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Падказка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Дадаць панэль прылад з усімі загадамі DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для вонкавага загаду" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для ўнутранага загаду" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для падзяляльніка" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для дадатковай панэлі прылад" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Стварэнне файла аднаўлення..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Экспарт..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Бягучая панэль прылад..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "у файл панэлі прылад (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (пакінуць існуючы)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (выдаліць існуючы)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" TC (пакінуць існуючы)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" TC (&ыдаліць існуючы)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Верхняя панэль прылад..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Захаваць файл аднаўлення панэлі прылад" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл панэлі прылад (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (пакінуць існуючы)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (выдаліць існуючы)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" TC (пакінуць існуючы)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" TC (&ыдаліць існуючы)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Імпарт..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Аднавіць панэль прылад з рэзервовай копіі" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль прылад" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль прылад у бягучай панэлі прылад" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль прылад найвышэйшай панэлі прылад" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "з файла панэлі прылад (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль прылад" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль прылад у бягучай панэлі прылад" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль прылад найвышэйшай панэлі прылад" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "з адзіночнага файла TC .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль прылад" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль прылад у бягучай панэлі прылад" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль прылад найвышэйшай панэлі прылад" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "з файла ТС \"&wincmd.ini\"..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль прылад" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль прылад у бягучай панэлі прылад" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль прылад найвышэйшай панэлі прылад" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль прылад" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Знайсці і замяніць..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "ва ўсім вышэйзгаданым..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "ва ўсіх загадах..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "ва ўсіх назвах значкоў..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "ва ўсіх параметрах..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "ва ўсіх пачатковых шляхах..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" 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.btnbackgroundcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNBACKGROUNDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btncursorcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnfoundtextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNFOUNDTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnnormaltextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNNORMALTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnsecondarytextundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSECONDARYTEXTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnshortcutundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNSHORTCUTUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectabletextcolor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLETEXTCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.btnunselectableundercursor.caption msgctxt "TFRMOPTIONSTREEVIEWMENUCOLOR.BTNUNSELECTABLEUNDERCURSOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" 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.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Прагляд у рэжыме кнігі" #: tfrmoptionsviewer.gbviewerexample.caption msgid "Example" msgstr "Прыклад" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Колер фону ў рэжыме кнігі" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" 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 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 "Час:" #: 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 msgid "Field" msgstr "Поле" #: 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 "&АЛЬБО (любое супадзенне)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Скасаваць" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Даведка" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" 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 msgid "Created:" msgstr "Створаны:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Схаваны" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Апошні доступ:" #: 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 "Запісаць" #: 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 #, 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 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.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 "&Добра" #: 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.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.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.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" 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.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.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.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 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.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графіка" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Убудовы" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Па памерах акна" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Усе выявы па памерах акна" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Толькі вялікія выявы па памерах акна" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Маштаб" #: tfrmviewer.actzoomin.caption msgid "Zoom In" msgstr "Наблізіць" #: tfrmviewer.actzoomout.caption msgid "Zoom Out" msgstr "Аддаліць" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Пакінуць абранае" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "На ўвесь экран" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "Пдз" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Падсвятленне" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Маляванне" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Чырвоныя вочы" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Змяніць памер" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Адвярнуць" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Праграма для прагляду" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайдшоў" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Аловак" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "tfrmviewer.gboxhightlight.caption" msgid "Highlight" msgstr "Падсвятленне" #: tfrmviewer.gboxpaint.caption msgctxt "tfrmviewer.gboxpaint.caption" msgid "Paint" msgstr "Маляванне" #: tfrmviewer.gboxslideshow.caption msgctxt "tfrmviewer.gboxslideshow.caption" msgid "Slide Show" msgstr "Слайдшоў" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Праглядзець" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Пра праграму" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" 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.miprint.caption msgid "Print..." 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.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" 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 #, 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 "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" 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 "Калі файл існуе" #: 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 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" msgstr "" "Файл кантрольнай сумы можа аб'яднаць файл, але яго не атрымалася знайсці:\n" "%s\n" "\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 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 msgid "Copy (%d) %s" msgstr "Копія (%d) %s" #: 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 "_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.rsdiffdeletes msgid " Deletes: " msgstr " Выдалена: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Два файла аднолькавыя!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Супадзенні: " #: ulng.rsdiffmodifies msgid " Modifies: " 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.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 msgid "Speed %s/s" msgstr "Хуткасць %s/s" #: ulng.rsdlgspeedtime 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.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 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 msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext 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 "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 "" #: 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.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 msgid "%s level(s)" msgstr "%s узровень(ні)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "усё (неабмежавана)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "толькі бягучы каталог" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Каталог %s не існуе!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Знойдзена: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Захаваць шаблон пошуку" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Назва шаблона:" #: 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.rsfreemsg #, fuzzy msgid "%s of %s free" msgstr "Вольна %s з %s" #: ulng.rsfreemsgshort #, fuzzy 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 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.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?\n" msgstr "" "Увага! Аднаўленне з рэзервовай копіі ачысціць спіс існуючых выбраных каталогаў і заменіць імпартуемым.\n" "\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.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?\n" msgstr "" "Файл з такой назвай ужо існуе.\n" "Перазапісаць яго?\n" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Сапраўды аднавіць прадвызначаныя значэнні?" #: ulng.rshotkeyfileconfirmerasure msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Сапраўды хочаце сцерці набор \"%s\"?" #: ulng.rshotkeyfilecopyof 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 msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?\n" msgstr "" "Файл \"%s\" быў зменены.\n" "Хочаце захаваць яго?\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.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Дзеянні" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucopynetnamestoclip msgid "Copy names with UNC path" msgstr "Скапіраваць назвы ў буфер са шляхам UNC" #: 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.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 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 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Хібны CRC32 выніковага файла:\n" "\"%s\"\n" "\n" "Усё роўна хочаце пакінуць пашкоджаны файл?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Нельга скапіраваць/перамясціць файл \"%s\" у саіога сябе!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Немагчыма выдаліць каталог %s" #: ulng.rsmsgcannotoverwritedirectory msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Немагчыма перазапісаць каталог \"%s\" файлам, што не з'яўляецца каталогам \"%s\"" #: ulng.rsmsgchdirfailed msgid "Change current directory to \"%s\" failed!" msgstr "Не атрымалася перайсці ў каталог [%s]!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Выдаліць усе неактыўныя ўкладкі?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Гэтая ўкладка (%s) заблакавана! Закрыць усё роўна?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Пацверджанне параметра" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Сапраўды хочаце выйсці?" #: ulng.rsmsgcopybackward 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 msgid "Copy %d selected files/directories?" msgstr "Капіраваць %d абраныя файлы/каталогі?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Капіраваць абраны \"%s\"?" #: ulng.rsmsgcreateanewfiletype 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 msgid "Delete %d selected files/directories?" msgstr "Выдаліць %d абраныя файлы/каталогі?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Выдаліць %d абраныя файлы/каталогі ў сметніцу?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Выдаліць абраны \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Выдаліць абраны \"%s\" у сметніцу?" #: ulng.rsmsgdeltotrashforce 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 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 msgid "Can not connect to server: \"%s\"" msgstr "Немагчыма злучыцца з серверам : \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Немагчыма скапіраваць файл %s у %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Каталог з назвай \"%s\" ужо існуе." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Дата % не падтрымліваецца" #: ulng.rsmsgerrdirexists 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 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 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 msgid "Can not set attributes for \"%s\"" msgstr "Немагчыма прызначыць атрыбуты для \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Немагчыма прызначыць дату/час для '%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Немагчыма прызначыць уладальніка/групу для \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions 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 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 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 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 msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Загрузяцца выбраныя ўкладкі: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Захаваць бягучыя ўкладкі паверх існуючых выбраных укладак" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файл %s быў зменены , захаваць?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Перазапісаць:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Файл %s ужо існуе , перазапісаць?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "З файлам:" #: ulng.rsmsgfilenotfound 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 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!\n" msgstr "" "Даўжыня (%d) перавышае %d сімвалаў!\n" "%s\n" "Большасць праграм не зможа звярнуцца да файла/каталога з такой доўгай назвай!\n" #: ulng.rsmsgfilereadonly 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 msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Памер файла \"%s\" занадта вялікі для файлавай сістэмы!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, merge?" msgstr "Каталог %s ужо існуе , аб'яднаць?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Выкарыстоўваць спасылку \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Абраць фармат тэксту для імпарту" #: ulng.rsmsghotdiraddselecteddirectories 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 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 msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Захавана агулам: %d\n" "\n" "Рэзервовая копія: %s\n" "\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Экспартавана агулам: " #: ulng.rsmsghotdirwhattodelete 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" msgstr "" "Хочаце выдаліць усе элементы ў падменю [%s]?\n" "Калі адкажаце \"Не\", то выдаляцца толькі падзяляльнікі, элементы застануцца.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Абярыце размяшчэнне і назву для захавання файла выбраных каталогаў" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Хібная выніковая даўжыня файла : \"%s\"" #: ulng.rsmsginsertnextdisk 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" msgstr "" "Калі ласка, ўстаўце наступны дыск альбо носьбіт.\n" "\n" "Гэта дазволіць запісаць файл:\n" "\"%s\"\n" "\n" "Колькасць застаўшыхся байтаў: %d\n" "\n" #: 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 msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Хібны шлях" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "У шляху %s ёсць забароненыя сімвалы." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Хібная ўбудова!" #: ulng.rsmsginvalidpluginarchitecture 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 msgid "Copy file %s" msgstr "Скапіраваць файл %s" #: ulng.rsmsglogdelete 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 msgid "Extract file %s" msgstr "Распакаваць файл %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Інфармацыя: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Стварыць спасылку %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Стварыць каталог %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Перамясціць файл %s" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Запакаваць у файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Выдаліць каталог %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Завершана: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Стварыць спасылку %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Праверыць файл %s на цэласнасць" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Сцерці файл %s" #: ulng.rsmsglogwipedir 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 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 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 msgid "&Delete %s" msgstr "&Выдаліць %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" ужо існуе. Перазапісаць?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Не атрымалася запусціць загад (%s)" #: ulng.rsmsgprocessid 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 msgid "Rename/move %d selected files/directories?" msgstr "Змяніць назву/перамясціць %d абраныя файлы/каталогі?" #: ulng.rsmsgrensel 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.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Абярыце тып файла, каб дадаць пашырэнне \"%s\"" #: ulng.rsmsgselectedinfo 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 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 msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Памылка! Не атрымалася знайсці файл канфігурацыі ТС:\n" " %s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Памылка! Не атрымалася знайсці запускальны файл ТС:\n" " %s\n" #: 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.\n" msgstr "" "Памылка! ТС яшчэ запушчаны, а для выканання гэтай аперацыі яго неабходна закрыць.\n" "Закрыйце і націсніце \"Добра\" альбо націсніце \"Скасаваць\".\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Памылка! Не атрымалася знайсці каталог панэлі прылад TC:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Увядзіце назву і шлях да захаванага файла панэлі прылад TC" #: 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.rsmsgthisisnowinclipboard 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 msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Захавана!\n" "Назва файла панэлі прылал: %s\n" #: 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 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.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Сцерці %d абраныя файлы/каталогі?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Сцерці абраны \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "з" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!\n" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Аўтаматычна змяняць назву на \"name (1).ext\", \"name (2).ext\" и г.д.?" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без змен;ВЕРХНІ РЭГІСТР;ніжні рэгістр;З вялікай;Кожнае Слова З Вялікай;" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Увага, назвы дублюцца!" #: ulng.rsmulrenwronglinesnumber 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.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork 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 msgid "Calculating checksum" msgstr "Падлік кантрольнай сумы" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Падлік кантрольнай сумы ў \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Падлік кантрольнай сумы '\"%s\"" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Падлік" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Падлік \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Аб'яднанне" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Аб'яднанне файлаў \"%s\" у \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Капіраванне" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Капіраванне з \"%s\" у \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Капіраванне \"%s\" у \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Стварэнне каталога" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Стварэнне каталога \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Выдаленне" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Выдаленне ў \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Выдаленне \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Запуск" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Запуск \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Выманне" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Выманне з \"%s\" у \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершана" #: ulng.rsoperlisting msgid "Listing" msgstr "Спіс" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Спіс \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Перамяшчэнне" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Перамяшчэнне з \"%s\" у \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Перамяшчэнне \"%s\" у \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запушчана" #: ulng.rsoperpacking msgid "Packing" msgstr "Запакоўванне" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Запакоўванне з \"%s\" у \"%s\"" #: ulng.rsoperpackingsomethingto 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 msgid "Setting property in \"%s\"" msgstr "Вызначэнне ўласцівасці ў \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Вызначэнне ўласцівасці з \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Падзяленне" #: ulng.rsopersplittingfromto 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 msgid "Testing in \"%s\"" msgstr "Праверка \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Праверка \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Праверка кантрольнай сумы" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Праверка кантрольнай сумы ў \"%s\"" #: ulng.rsoperverifyingchecksumof 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 msgid "Wiping in \"%s\"" msgstr "Сціранне ў \"%s\"" #: ulng.rsoperwipingsomething 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 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 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 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 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 msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Спалучэнне %s для cm_Delete будзе зарэгістравана, таму яго можна выкарыстаць адваротна гэтаму параметру." #: ulng.rsopthotkeysaddhotkey 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 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 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 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 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 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 msgid "Shortcut %s is already used." msgstr "Спалучэнне %s ужо выкарыстоўваецца." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Змяніць на %s?" #: ulng.rsopthotkeysusedby 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.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 msgid "Fonts" msgstr "Шрыфты" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Падсвятленне" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Гарачыя клавішы" #: 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.rsoptionseditoroptionschanged msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?\n" msgstr "" "Параметры \"%s\" змяніліся.\n" "\n" "Захаваць змены?\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.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 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.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;Natural sorting: alphabetical and numbers" 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 msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete 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 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 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 - Копія (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 "" #: 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 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 msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлы: %d ,каталогі: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Немагчыма змяніць правы доступу для \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Немагчыма змяніць уладальніка \"%s\"" #: ulng.rspropsfile msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" 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.\n" msgstr "" "Пошук файлаў з убудовай DSX ужо запушчаны.\n" "Неабходна завяршыць яго перш чым пачаць новы.\n" "\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.\n" msgstr "" "Пошук файлаў з убудовай WDX ужо запушчаны.\n" "Неабходна завяршыць яго перш чым пачаць новы.\n" #: ulng.rsselectdir msgid "Select a directory" msgstr "Абраць каталог" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Абраць акно" #: ulng.rsshowhelpfor 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 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.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 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.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: ulng.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" #: 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 "" #: 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 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.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.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 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 msgid "Number of replacement: %d" msgstr "Колькасць замен: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Замен не адбылося." ��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/����������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�014172� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015664� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/release/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017304� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/license.rtf���������������������������������������������������������0000644�0001750�0000144�00000046750�12562436721�020051� 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-0.9.8/install/windows/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016432� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/lib/x86_64/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017370� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/lib/readme.txt������������������������������������������������������0000644�0001750�0000144�00000000213�12014201074�020415� 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-0.9.8/install/windows/lib/i386/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017123� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/install.bat���������������������������������������������������������0000644�0001750�0000144�00000004424�13375537761�020051� 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\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 mkdir %DC_INSTALL_DIR%\doc rem Copy directories 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.zdli %DC_INSTALL_DIR%\ copy doublecmd.ext.example %DC_INSTALL_DIR%\ copy pixmaps.txt %DC_INSTALL_DIR%\ copy multiarc.ini %DC_INSTALL_DIR%\ rem Copy libraries copy *.dll %DC_INSTALL_DIR%\ rem copy plugins rem WCX copy plugins\wcx\rpm\lib\rpm.wcx %DC_INSTALL_DIR%\plugins\wcx\rpm\ copy plugins\wcx\sevenzip\sevenzip.wcx %DC_INSTALL_DIR%\plugins\wcx\sevenzip\ copy plugins\wcx\unrar\lib\unrar.wcx %DC_INSTALL_DIR%\plugins\wcx\unrar\ copy plugins\wcx\zip\zip.wcx %DC_INSTALL_DIR%\plugins\wcx\zip\ rem WDX copy plugins\wdx\rpm_wdx\lib\rpm_wdx.wdx %DC_INSTALL_DIR%\plugins\wdx\rpm_wdx\ copy plugins\wdx\deb_wdx\lib\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\ 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\ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/install-help.bat����������������������������������������������������0000644�0001750�0000144�00000000556�11610361336�020760� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rem This script run from create_packages.bat rem If you run it direct, set up %BUILD_PACK_DIR% first set DC_HELP_INSTALL_DIR=%BUILD_PACK_DIR%\doublecmd\doc rem Clean help directory rm -rf %DC_HELP_INSTALL_DIR%\ rem Copy Russian help files xcopy /E doc\ru %DC_HELP_INSTALL_DIR%\ru\ rem Copy Ukrainian help files xcopy /E doc\uk %DC_HELP_INSTALL_DIR%\uk\��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/doublecmd.wxs�������������������������������������������������������0000644�0001750�0000144�00000005167�12564066701�020407� 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="http://doublecmd.sourceforge.net"/> <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="INSTALLDIR" 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="[INSTALLDIR]doublecmd.exe" WorkingDirectory="INSTALLDIR"/> <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/> <RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/> </Component> </Directory> </Directory> </Directory> <InstallExecuteSequence> <RemoveExistingProducts After="InstallValidate"/> </InstallExecuteSequence> <Feature Id="DefaultFeature" Level="1"> <ComponentGroupRef Id="HeatGroup"/> <ComponentRef Id="ApplicationShortcut" /> </Feature> <WixVariable Id="WixUILicenseRtf" Value="license.rtf" /> <UIRef Id="WixUI_Minimal" /> </Product> </Wix>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/windows/doublecmd.iss�������������������������������������������������������0000644�0001750�0000144�00000010535�13611064300�020342� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=Double Commander AppVerName=Double Commander 0.9.8 beta AppPublisherURL=http://doublecmd.sourceforge.net AppSupportURL=http://doublecmd.sourceforge.net AppUpdatesURL=http://doublecmd.sourceforge.net DefaultDirName={pf}\Double Commander DefaultGroupName=Double Commander 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: "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.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\doublecmd.zdli"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\pixmaps.txt"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\multiarc.ini"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\doc\*"; DestDir: "{app}\doc"; 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\*.dll"; DestDir: "{app}"; Flags: skipifsourcedoesntexist [Icons] Name: "{group}\Double Commander"; Filename: "{app}\doublecmd.exe" Name: "{group}\{cm:ProgramOnTheWeb,Double Commander}"; Filename: "http://doublecmd.sourceforge.net" 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-0.9.8/install/windows/convert-zip-msi.bat�������������������������������������������������0000644�0001750�0000144�00000003355�13375540651�021443� 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\doublecmd.inf move doublecmd "Double Commander" heat dir "Double Commander" -ag -cg HeatGroup -dr %PF% -var var.SourcePath -o include.wxs candle -arch %CPU_TARGET% -dProductVersion=%DC_VER% -dSourcePath="Double Commander" -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-0.9.8/install/linux/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015331� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/update-revision.sh����������������������������������������������������0000755�0001750�0000144�00000000452�12650252770�021017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # DC revision number export DC_REVISION=$(svnversion $1 | sed -e 's/\([0-9]*\).*/\1/') # Update dcrevision.inc echo "// Created by Svn2RevisionInc" > $2/units/dcrevision.inc echo "const dcRevision = '$DC_REVISION';" >> $2/units/dcrevision.inc # Return revision echo $DC_REVISION ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/update-repo-ppa.sh����������������������������������������������������0000755�0001750�0000144�00000006751�13611064300�020700� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script updates Double Commander Personal Package Archive (PPA) repository # Set Double Commander version DC_VER=0.9.8 # Set Ubuntu series DISTRO=( xenial zesty artful ) # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/doublecmd-$DC_VER # Directory for DC help DC_HELP_DIR=$DC_TEMP_DIR/doublecmd-help-$DC_VER # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR update_doublecmd() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # 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 # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_SOURCE_DIR/debian dch -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 else debuild -S -sd fi popd done } update_doublecmd_svn() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Prepare debian directory mkdir -p $DC_SOURCE_DIR/debian cp -r $DC_SOURCE_DIR/install/linux/deb/doublecmd/* $DC_SOURCE_DIR/debian echo '1.0' > $DC_SOURCE_DIR/debian/source/format # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_SOURCE_DIR/debian dch -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 debuild -S -sa popd done # Upload archives to PPA cd $DC_TEMP_DIR dput -U ppa:alexx2000/doublecmd-svn $(ls -xrt --file-type *.changes) # Clean rm -rf $DC_TEMP_DIR # Exit exit 0 } update_doublecmd_help() { # Create output folder mkdir -p $DC_HELP_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Copy help files cp -r ../../doc/en $DC_HELP_DIR/ cp -r ../../doc/ru $DC_HELP_DIR/ cp -r ../../doc/uk $DC_HELP_DIR/ # Create doublecmd-help-x.x.x.orig.tar.gz pushd $DC_HELP_DIR/.. tar -cvzf $DC_TEMP_DIR/doublecmd-help_$DC_VER.orig.tar.gz doublecmd-help-$DC_VER popd # Prepare debian directory svn export deb/doublecmd-help $DC_HELP_DIR/debian # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_HELP_DIR/debian dch -m -D $DIST -v $DC_VER-$DC_REVISION~$DIST "Update to revision $DC_REVISION" popd # Create archive with source code pushd $DC_HELP_DIR if [ $DIST = ${DISTRO[0]} ] then debuild -S -sa else debuild -S -sd fi popd done } update_all() { update_doublecmd update_doublecmd_help } case $1 in doublecmd-help) update_doublecmd_help;; doublecmd-svn) update_doublecmd_svn;; doublecmd) update_doublecmd;; *) update_all;; esac # Upload archives to PPA cd $DC_TEMP_DIR dput -U ppa:alexx2000/doublecmd $(ls -xrt --file-type *.changes) # Clean rm -rf $DC_TEMP_DIR �����������������������doublecmd-0.9.8/install/linux/update-repo-obs.sh����������������������������������������������������0000755�0001750�0000144�00000007773�13611064300�020710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script updates Double Commander Open Build Service (OBS) repository # Set Double Commander version DC_VER=0.9.8 # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/doublecmd-$DC_VER # Directory for DC help DC_HELP_DIR=$DC_TEMP_DIR/doublecmd-help-$DC_VER # Directory for the openSUSE Build Service (OBS) DC_OBS_DIR=$HOME/.obs # OBS project home directory DC_OBS_WEB_DIR=home:Alexx2000 # OBS project directory DC_OBS_PRJ_DIR=$DC_OBS_DIR/$DC_OBS_WEB_DIR # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR update_doublecmd() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Prepare doublecmd-*.spec file cp -a rpm/doublecmd-*.spec $DC_TEMP_DIR # Create archive with source code pushd $DC_TEMP_DIR tar -cvzf doublecmd-$DC_VER.tar.gz doublecmd-$DC_VER if [ ! -d "$DC_OBS_DIR" ] then mkdir -p $DC_OBS_DIR cd $DC_OBS_DIR osc checkout $DC_OBS_WEB_DIR else pushd $DC_OBS_PRJ_DIR/doublecmd-gtk osc up popd pushd $DC_OBS_PRJ_DIR/doublecmd-qt osc up popd fi # Upload GTK2 archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-gtk/doublecmd-gtk.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-gtk/doublecmd-$DC_VER.tar.gz mv doublecmd-gtk.spec $DC_OBS_PRJ_DIR/doublecmd-gtk/ cp -a doublecmd-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-gtk/ pushd $DC_OBS_PRJ_DIR/doublecmd-gtk osc commit doublecmd-gtk.spec doublecmd-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd # Upload Qt4 archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-qt/doublecmd-qt.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-qt/doublecmd-$DC_VER.tar.gz mv doublecmd-qt.spec $DC_OBS_PRJ_DIR/doublecmd-qt/ cp -a doublecmd-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-qt/ pushd $DC_OBS_PRJ_DIR/doublecmd-qt osc commit doublecmd-qt.spec doublecmd-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd popd } update_doublecmd_svn() { trap "stty echo; echo; exit" INT TERM EXIT read -s -p "Enter password: " PASSWORD; echo echo "Update Double Commander (Qt)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-qt?cmd=runservice echo "Update Double Commander (Qt5)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-qt5?cmd=runservice echo "Update Double Commander (Gtk)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-gtk?cmd=runservice echo "Update Double Commander (Debian)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-deb?cmd=runservice exit 0 } update_doublecmd_help() { # Export from SVN svn export ../../doc $DC_HELP_DIR # Remove text files rm -f $DC_HELP_DIR/*.txt # Prepare doublecmd-help.spec file cp -a rpm/doublecmd-help.spec $DC_TEMP_DIR # Create archive with source code pushd $DC_TEMP_DIR tar -cvzf doublecmd-help-$DC_VER.tar.gz doublecmd-help-$DC_VER if [ ! -d "$DC_OBS_DIR" ] then mkdir -p $DC_OBS_DIR cd $DC_OBS_DIR osc checkout $DC_OBS_WEB_DIR else pushd $DC_OBS_PRJ_DIR/doublecmd-help osc up popd fi # Upload archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-help/doublecmd-help.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-help/doublecmd-help-$DC_VER.tar.gz mv doublecmd-help.spec $DC_OBS_PRJ_DIR/doublecmd-help/ mv doublecmd-help-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-help/ cd $DC_OBS_PRJ_DIR/doublecmd-help osc commit doublecmd-help.spec doublecmd-help-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd } update_all() { update_doublecmd update_doublecmd_help } case $1 in doublecmd-help) update_doublecmd_help;; doublecmd-svn) update_doublecmd_svn;; doublecmd) update_doublecmd;; *) update_all;; esac # Clean rm -rf $DC_TEMP_DIR �����doublecmd-0.9.8/install/linux/rpm2cpio.sh�����������������������������������������������������������0000755�0001750�0000144�00000002462�12523377401�017435� 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); }'`" 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 ;; *) echo "Unrecognized rpm file: $pkg"; exit 1 ;; esac ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/rpm/������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016127� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/rpm/libunrar.spec�����������������������������������������������������0000644�0001750�0000144�00000012105�12436430260�020622� 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-0.9.8/install/linux/rpm/doublecmd-rpmlintrc�����������������������������������������������0000644�0001750�0000144�00000000201�13333553565�022026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This line is mandatory to access the configuration functions from Config import * setBadness('polkit-untracked-privilege', 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/rpm/doublecmd-qt5.spec������������������������������������������������0000644�0001750�0000144�00000002763�13611064300�021454� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# norootforbuild %define doublecmd doublecmd Name: doublecmd-qt5 Summary: Twin-panel (commander-style) file manager (Qt5) Version: 0.9.8 Release: 1 URL: http://doublecmd.sourceforge.net 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 beta 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-0.9.8/install/linux/rpm/doublecmd-qt.spec�������������������������������������������������0000644�0001750�0000144�00000002664�13611064300�021367� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Name: doublecmd-qt Summary: Twin-panel (commander-style) file manager (Qt4) Version: 0.9.8 Release: 1 URL: http://doublecmd.sourceforge.net 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 beta 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-0.9.8/install/linux/rpm/doublecmd-help.spec�����������������������������������������������0000644�0001750�0000144�00000004105�13611064300�021663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# norootforbuild %define doublecmd_help doublecmd-help Name: doublecmd-help-en Summary: Documentation for the Double Commander (English) Version: 0.9.8 Release: 1 Url: http://doublecmd.sourceforge.net/ License: GPL-2+ Source0: %{doublecmd_help}-%{version}.tar.gz Group: Documentation Requires: doublecmd BuildArch: noarch %description This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in English. %package -n doublecmd-help-ru Summary: Documentation for the Double Commander (Russian) Group: Documentation Requires: doublecmd BuildArch: noarch %description -n doublecmd-help-ru This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in Russian. %package -n doublecmd-help-uk Summary: Documentation for the Double Commander (Ukrainian) Group: Documentation Requires: doublecmd BuildArch: noarch %description -n doublecmd-help-uk This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in Ukrainian. %prep %setup -q -n %{doublecmd_help}-%{version} %build %install install -d %{buildroot}/%{_datadir}/doublecmd/doc cp -r en %{buildroot}/%{_datadir}/doublecmd/doc cp -r ru %{buildroot}/%{_datadir}/doublecmd/doc cp -r uk %{buildroot}/%{_datadir}/doublecmd/doc %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/en %files -n doublecmd-help-ru %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/ru %files -n doublecmd-help-uk %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/uk %changelog * Fri Jan 21 2011 - Alexander Koblov <Alexx2000@mail.ru> - Initial package, version 0.4.6 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/rpm/doublecmd-gtk.spec������������������������������������������������0000644�0001750�0000144�00000002711�13611064300�021521� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Name: doublecmd-gtk Summary: Twin-panel (commander-style) file manager (GTK2) Version: 0.9.8 Release: 1 URL: http://doublecmd.sourceforge.net 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 beta 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-0.9.8/install/linux/release/��������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016751� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/pkg/������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016112� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/pkg/environmentoptions.xml��������������������������������������������0000644�0001750�0000144�00000000361�12707472132�022623� 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-0.9.8/install/linux/pkg/doublecmd-svn.install���������������������������������������������0000644�0001750�0000144�00000001055�12707462472�022262� 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-0.9.8/install/linux/pkg/doublecmd-qt.pkgbuild���������������������������������������������0000644�0001750�0000144�00000002302�12707462472�022227� 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="http://doublecmd.sourceforge.net/" 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 beta qt } package() { cd "${srcdir}" install/linux/install.sh --install-prefix="${pkgdir}" } # vim:set ts=4 sw=2 ft=sh et:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/pkg/doublecmd-gtk2.pkgbuild�������������������������������������������0000644�0001750�0000144�00000002312�12707462472�022453� 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="http://doublecmd.sourceforge.net/" 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 beta gtk2 } package() { cd "${srcdir}" install/linux/install.sh --install-prefix="${pkgdir}" } # vim:set ts=4 sw=2 ft=sh et:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/org.doublecmd.root.policy���������������������������������������������0000644�0001750�0000144�00000001556�13277114141�022272� 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-0.9.8/install/linux/lib/������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016077� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/x86_64/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017035� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/x86_64/qt5/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017546� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/x86_64/qt/��������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017461� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/readme.txt��������������������������������������������������������0000644�0001750�0000144�00000000311�12014201074�020061� 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-0.9.8/install/linux/lib/i386/�������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016570� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/i386/qt5/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017301� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/lib/i386/qt/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017214� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/install.sh������������������������������������������������������������0000755�0001750�0000144�00000014324�13573157206�017355� 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" = "x86_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/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.zdli $DC_INSTALL_DIR/ cp -a doublecmd.ext.example $DC_INSTALL_DIR/ cp -a pixmaps.txt $DC_INSTALL_DIR/ cp -a multiarc.ini $DC_INSTALL_DIR/ # copy plugins # WCX install -m 644 plugins/wcx/cpio/lib/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/lib/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/lib/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ install -m 644 plugins/wcx/unrar/lib/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ install -m 644 plugins/wcx/zip/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/lib/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/lib/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/ # 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/lib/samba.wfx $DC_INSTALL_DIR/plugins/wfx/samba/ # WLX install -m 644 plugins/wlx/WlxMplayer/lib/wlxmplayer.wlx $DC_INSTALL_DIR/plugins/wlx/wlxmplayer/ # DSX install -m 644 plugins/dsx/DSXLocate/lib/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 touch $DC_INSTALL_DIR/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-0.9.8/install/linux/install-help.sh�������������������������������������������������������0000644�0001750�0000144�00000001573�12407307365�020300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # 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_HELP_INSTALL_DIR=/usr/share/doublecmd/doc ;; -P|--portable-prefix) shift DC_HELP_INSTALL_DIR=$(eval echo $1/doublecmd/doc) break ;; -I|--install-prefix) shift DC_INSTALL_PREFIX=$(eval echo $1) DC_HELP_INSTALL_DIR=$DC_INSTALL_PREFIX/usr/share/doublecmd/doc break ;; esac shift done # Clean help directory rm -rf $DC_HELP_INSTALL_DIR/* # Copy English help files cp -r doc/en $DC_HELP_INSTALL_DIR/ # Copy Russian help files cp -r doc/ru $DC_HELP_INSTALL_DIR/ # Copy Ukrainian help files cp -r doc/uk $DC_HELP_INSTALL_DIR/�������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/doublecmd.desktop�����������������������������������������������������0000755�0001750�0000144�00000001021�12673234105�020664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Name=Double Commander 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-0.9.8/install/linux/doublecmd.1�����������������������������������������������������������0000644�0001750�0000144�00000004300�13403227672�017356� 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-0.9.8/install/linux/description-pak�������������������������������������������������������0000755�0001750�0000144�00000000234�10774773057�020375� 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-0.9.8/install/linux/deb/������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016063� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017701� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/watch����������������������������������������������������0000644�0001750�0000144�00000000155�11516774223�020745� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������version=3 http://www.rarlab.com/rar_add.htm http://www.rarlab.com/rar/unrarsrc-(.*)\.tar\.gz debian uupdate �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/source/��������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021201� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/source/format��������������������������������������������0000644�0001750�0000144�00000000014�11516774223�022421� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/shlibs���������������������������������������������������0000644�0001750�0000144�00000000014�11517020145�021101� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libunrar 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/rules����������������������������������������������������0000755�0001750�0000144�00000001775�12222000001�020750� 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-0.9.8/install/linux/deb/libunrar/postrm���������������������������������������������������0000755�0001750�0000144�00000000137�11556027124�021161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e if [ "$1" = "remove" ]; then ldconfig /usr/lib/libunrar.so fi #DEBHELPER# ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/postinst�������������������������������������������������0000755�0001750�0000144�00000000076�11556027124�021522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e ldconfig /usr/lib/libunrar.so #DEBHELPER# ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/lintian/�������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021337� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/lintian/libunrar�����������������������������������������0000644�0001750�0000144�00000000054�11517020145�023075� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libunrar: package-name-doesnt-match-sonames ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/dirs�����������������������������������������������������0000644�0001750�0000144�00000000044�11517020145�020561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������usr/lib usr/share/lintian/overrides ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/copyright������������������������������������������������0000644�0001750�0000144�00000004602�11516774223�021650� 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-0.9.8/install/linux/deb/libunrar/control��������������������������������������������������0000644�0001750�0000144�00000001051�12436425752�021315� 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-0.9.8/install/linux/deb/libunrar/compat���������������������������������������������������0000644�0001750�0000144�00000000002�11516774223�021111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������7 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/libunrar/changelog������������������������������������������������0000644�0001750�0000144�00000000224�12436425752�021565� 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-0.9.8/install/linux/deb/doublecmd-help/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020747� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/source/��������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022247� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/source/format��������������������������������������0000644�0001750�0000144�00000000014�11644070300�023452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/rules����������������������������������������������0000755�0001750�0000144�00000003345�11610363331�022033� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. touch build-stamp clean: dh_testdir dh_testroot # Add here commands to clean up after the build process. rm -f build-stamp configure-stamp dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs -A usr/share/doublecmd/doc # Add here commands to install the package. cp -r en $(CURDIR)/debian/doublecmd-help-en/usr/share/doublecmd/doc cp -r ru $(CURDIR)/debian/doublecmd-help-ru/usr/share/doublecmd/doc cp -r uk $(CURDIR)/debian/doublecmd-help-uk/usr/share/doublecmd/doc for pkg in `dh_listpackages` ; do \ find $(CURDIR)/debian/$$pkg/usr/share/ -type f | xargs chmod a-x ; \ done # Build architecture-dependent files here. binary-arch: build install # We have nothing to do by default. # Build architecture-independent files here. binary-indep: build install dh_testdir dh_testroot # dh_movefiles dh_installchangelogs dh_link dh_installdocs dh_installexamples dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_strip dh_compress dh_fixperms # dh_perl # dh_python # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/doublecmd-help-uk.doc-base�������������������������0000644�0001750�0000144�00000000527�11610366102�025651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Document: doublecmd-help-uk Title: Documentation for the Double Commander (Ukrainian) Author: Rustem Rakhimov <dok_rust@bk.ru>, Максим aka Ma$terok Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/uk/index.html Files: /usr/share/doublecmd/doc/uk/*.html �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/doublecmd-help-ru.doc-base�������������������������0000644�0001750�0000144�00000000472�11516546640�025673� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Document: doublecmd-help-ru Title: Documentation for the Double Commander (Russian) Author: Rustem Rakhimov <dok_rust@bk.ru> Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/ru/index.html Files: /usr/share/doublecmd/doc/ru/*.html ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/doublecmd-help-en.doc-base�������������������������0000644�0001750�0000144�00000000535�11516546640�025647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Document: doublecmd-help-en Title: Documentation for the Double Commander (English) Author: Rustem Rakhimov <dok_rust@bk.ru>, Rod J <rodmac_shiels@hotmail.com> Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/en/index.html Files: /usr/share/doublecmd/doc/en/*.html �������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/copyright������������������������������������������0000644�0001750�0000144�00000002136�11516300753�022707� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 Name: Double Commander Source: http://doublecmd.sourceforge.net/ Maintainer: Alexander Koblov <Alexx2000@mail.ru> Copyright: © 2006-2010 Alexander Koblov <Alexx2000@mail.ru> License: GPL-2+ 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 package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/control��������������������������������������������0000644�0001750�0000144�00000002404�11610363331�022351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Source: doublecmd-help Section: doc Priority: optional Maintainer: Alexander Koblov <Alexx2000@mail.ru> Build-Depends: debhelper (>= 7.0.0) Standards-Version: 3.8.4 Homepage: http://doublecmd.sourceforge.net/ Package: doublecmd-help-en Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (English) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in English. Package: doublecmd-help-ru Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (Russian) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in Russian. Package: doublecmd-help-uk Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (Ukrainian) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in Ukrainian. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/compat���������������������������������������������0000644�0001750�0000144�00000000002�11516300753�022150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������5 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd-help/changelog������������������������������������������0000644�0001750�0000144�00000000246�11516546200�022625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-help (0.4.6-3256~ppa) lucid; urgency=low * Initial release (Closes: #2931241) -- Alexander Koblov <Alexx2000@mail.ru> Thu, 30 May 2010 21:04:07 -0500 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/��������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020021� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/watch���������������������������������������������������0000644�0001750�0000144�00000000144�12277451532�021063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������version=3 http://sf.net/doublecmd/doublecmd-(\d\S*)-src\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/source/�������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021321� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/source/format�������������������������������������������0000644�0001750�0000144�00000000015�12277451532�022542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/rules���������������������������������������������������0000755�0001750�0000144�00000004576�12706221352�021117� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/make -f # Set temporary HOME for lazarus primary config directory export HOME=$(CURDIR)/tmphome %: dh $@ override_dh_install: cd language ;\ if [ -f doublecmd.po ] ; then mv doublecmd.po doublecmd.en.po; fi ; # 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 beta gtk2 ./install/linux/install.sh --install-prefix=$(CURDIR)/debian/doublecmd-common ./clean.sh # Build Qt4 version ./build.sh beta qt ./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 Qt4-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 ; 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 cd language ;\ if [ -f doublecmd.en.po ] ; then mv doublecmd.en.po doublecmd.po; fi ; # Clean up temporary HOME rm -rf $(CURDIR)/tmphome dh_clean ����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/patches/������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021450� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/patches/x-terminal-emulator.patch�����������������������0000644�0001750�0000144�00000002012�12673235470�026405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Change default terminal command to 'x-terminal-emulator' Author: Graham Inggs <ginggs@debian.org> Forwarded: not-needed Last-Update: 2016-03-14 --- a/src/platform/uOSUtils.pas +++ b/src/platform/uOSUtils.pas @@ -63,11 +63,11 @@ RunInTermCloseParams = ''; MonoSpaceFont = 'Monaco'; {$ELSE} - RunTermCmd = 'xterm'; // default terminal + RunTermCmd = 'x-terminal-emulator'; // default terminal RunTermParams = ''; - RunInTermStayOpenCmd = 'xterm'; // default run in terminal command AND Stay open after command + RunInTermStayOpenCmd = 'x-terminal-emulator'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '-e sh -c ''{command}; echo -n Press ENTER to exit... ; read a'''; - RunInTermCloseCmd = 'xterm'; // default run in terminal command AND Close after command + RunInTermCloseCmd = 'x-terminal-emulator'; // default run in terminal command AND Close after command RunInTermCloseParams = '-e sh -c {command}'; MonoSpaceFont = 'Monospace'; {$ENDIF} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/patches/series������������������������������������������0000644�0001750�0000144�00000000032�12277451532�022672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x-terminal-emulator.patch ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/patches/hide-build-info.patch���������������������������0000644�0001750�0000144�00000001061�12673235470�025441� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Do not display build info in window title Author: Graham Inggs <graham@nerve.org.za> Forwarded: not-needed Last-Update: 2015-02-15 --- a/src/fmain.pas +++ b/src/fmain.pas @@ -913,13 +913,7 @@ if Length(UniqueInstance.ServernameByUser) > 0 then ServernameString := ' [' + UniqueInstance.ServernameByUser + ']'; - Result := Format('%s%s %s build %s; %s', - ['Double Commander', - ServernameString, - dcVersion, - dcRevision, - dcBuildDate] - ); + Result := 'Double Commander'; end; var �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/doublecmd-qt.lintian-overrides��������������������������0000644�0001750�0000144�00000000357�12561673162�026001� 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: shlib-with-non-pic-code usr/lib/doublecmd/plugins/wlx/wlxmplayer/wlxmplayer.wlx ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/doublecmd-plugins.lintian-overrides���������������������0000644�0001750�0000144�00000001405�13040630040�027006� 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/wcx/cpio/cpio.wcx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wcx/deb/deb.wcx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wcx/rpm/rpm.wcx 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-plugins: shlib-with-non-pic-code doublecmd-plugins: missing-depends-line �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/doublecmd-gtk.lintian-overrides�������������������������0000644�0001750�0000144�00000000361�12561673162�026135� 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: shlib-with-non-pic-code usr/lib/doublecmd/plugins/wlx/wlxmplayer/wlxmplayer.wlx �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/copyright�����������������������������������������������0000644�0001750�0000144�00000043730�12673235470�021776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Double Commander Upstream-Contact: Alexander Koblov <alexx2000@mail.ru> Source: http://doublecmd.sourceforge.net/ Files: * Copyright: 2006-2016 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/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/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 src/platform/win/uNTFSLinks.pas src/platform/win/uthumbnailprovider.pas Copyright: 2009-2016 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/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/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/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/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/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-2016 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-0.9.8/install/linux/deb/doublecmd/control�������������������������������������������������0000644�0001750�0000144�00000006522�13005054732�021432� 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 (>= 2.6.2), fpc (>= 2.6.2), lcl (>= 1.4), lcl-gtk2, lcl-qt4, libbz2-dev, libdbus-1-dev, libglib2.0-dev, libgtk2.0-dev, libqt4pas-dev (>= 2.1) Standards-Version: 3.9.7 Vcs-Git: https://anonscm.debian.org/git/pkg-pascal/doublecmd.git Vcs-Browser: https://anonscm.debian.org/cgit/pkg-pascal/doublecmd.git Homepage: http://doublecmd.sourceforge.net/ Package: doublecmd-gtk Architecture: any Depends: doublecmd-common (= ${source:Version}), doublecmd-plugins (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Provides: doublecmd Conflicts: doublecmd Replaces: doublecmd, doublecmd-gtk-dbg (<< 0.8.0~0+svn6777), doublecmd-qt-dbg (<< 0.8.0~0+svn6777) Breaks: doublecmd-gtk-dbg (<< 0.8.0~0+svn6777), doublecmd-qt-dbg (<< 0.8.0~0+svn6777) 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 libunrar0 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, doublecmd-gtk-dbg (<< 0.8.0~0+svn6777), doublecmd-qt-dbg (<< 0.8.0~0+svn6777) Breaks: doublecmd-gtk-dbg (<< 0.8.0~0+svn6777), doublecmd-qt-dbg (<< 0.8.0~0+svn6777) Description: twin-panel (commander-style) file manager (Qt4) 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 libunrar0 package from non-free. . This package contains the Qt4 user interface. Package: doublecmd-plugins Architecture: any Depends: ${misc: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 libunrar0 package from non-free. . This package contains plugins. Package: doublecmd-common Architecture: all Recommends: doublecmd-gtk | doublecmd-qt Depends: desktop-file-utils, ${misc:Depends} Suggests: doublecmd-help-en | doublecmd-help, libffmpegthumbnailer4, libunrar0, mplayer, 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 libunrar0 package from non-free. . This package contains common files. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/compat��������������������������������������������������0000644�0001750�0000144�00000000002�12277451532�021231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������9 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/linux/deb/doublecmd/changelog�����������������������������������������������0000644�0001750�0000144�00000016176�12706221352�021710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-0.9.8/install/linux/convert-rpm-txz.sh����������������������������������������������������0000755�0001750�0000144�00000003655�13375540651�021013� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script converts *.rpm package to portable package # Script directory SCRIPT_DIR=$(pwd) # Source directory DC_SOURCE_DIR=$SCRIPT_DIR/../.. # 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" = "x86_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 $DC_SOURCE_DIR/install/linux cp -a lib/$CPU_TARGET/*.so* $DC_ROOT_DIR/ cp -a lib/$CPU_TARGET/$LCL_PLATFORM/*.so* $DC_ROOT_DIR/ popd # Copy script for execute portable version install -m 755 $DC_SOURCE_DIR/doublecmd.sh $DC_ROOT_DIR/ # Make portable config file touch $DC_ROOT_DIR/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-0.9.8/install/linux/build-install-pkg.sh��������������������������������������������������0000755�0001750�0000144�00000001740�12707472745�021235� 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 SVN svn export ../../ $DC_SOURCE_DIR # 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-0.9.8/install/darwin/���������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015456� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/release/�������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017076� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/qt4/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016166� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/qt4/qt4pas.patch�����������������������������������������������������0000644�0001750�0000144�00000011506�12454266763�020447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: Qt4Pas.pro =================================================================== --- Qt4Pas.pro (revision 1) +++ Qt4Pas.pro (working copy) @@ -12,7 +12,6 @@ VERSION = 5.2.5 -QT += network webkit TARGET = Qt4Pas TEMPLATE = lib DEPENDPATH += src @@ -155,21 +154,7 @@ qprintdialog_hook.h \ qprintpreviewdialog_hook.h \ qsystemtrayicon_hook.h \ - qgraphicsscene_hook.h \ - qabstractsocket_hook.h \ - qudpsocket_hook.h \ - qtcpsocket_hook.h \ - qtcpserver_hook.h \ - qnetworkaccessmanager_hook.h \ - qnetworkreply_hook.h \ - qwebframe_hook.h \ - qwebsecurityorigin_hook.h \ - qwebdatabase_hook.h \ - qwebhistory_hook.h \ - qwebhistoryinterface_hook.h \ - qwebpage_hook.h \ - qwebsettings_hook.h \ - qwebview_hook.h + qgraphicsscene_hook.h SOURCES += qt4pas.cpp \ qobject_hook_c.cpp \ @@ -335,32 +320,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 \ - qnetworkcookie_c.cpp \ - qlclnetworkcookie_c.cpp \ - qnetworkproxy_c.cpp \ - qauthenticator_c.cpp \ - qwebframe_c.cpp \ - qwebsecurityorigin_c.cpp \ - qwebdatabase_c.cpp \ - qwebhistory_c.cpp \ - qwebhistoryinterface_c.cpp \ - qwebpage_c.cpp \ - qlclwebpage_c.cpp \ - qwebsettings_c.cpp \ - qwebview_c.cpp \ - qlclwebview_c.cpp \ qcoreapplication_hook_c.cpp \ qtimer_hook_c.cpp \ qabstractitemmodel_hook_c.cpp \ @@ -434,20 +393,6 @@ qprintdialog_hook_c.cpp \ qprintpreviewdialog_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 \ - qwebframe_hook_c.cpp \ - qwebsecurityorigin_hook_c.cpp \ - qwebdatabase_hook_c.cpp \ - qwebhistory_hook_c.cpp \ - qwebhistoryinterface_hook_c.cpp \ - qwebpage_hook_c.cpp \ - qwebsettings_hook_c.cpp \ - qwebview_hook_c.cpp + qgraphicsscene_hook_c.cpp # end of file \ No newline at end of file Index: src/qt4pas.cpp =================================================================== --- src/qt4pas.cpp (revision 1) +++ src/qt4pas.cpp (working copy) @@ -15,8 +15,6 @@ #include <QtCore> #include <QtGui> -#include <QtNetwork> -#include <QtWebKit> #include "qobject_hook_c.cpp" @@ -182,32 +180,6 @@ #include "qstylefactory_c.cpp" #include "qgraphicsscene_c.cpp" #include "qgraphicsview_c.cpp" -#include "qsslcipher_c.cpp" -#include "qsslkey_c.cpp" -#include "qsslerror_c.cpp" -#include "qabstractsocket_c.cpp" -#include "qudpsocket_c.cpp" -#include "qtcpsocket_c.cpp" -#include "qtcpserver_c.cpp" -#include "qsslconfiguration_c.cpp" -#include "qsslsocket_c.cpp" -#include "qnetworkaccessmanager_c.cpp" -#include "qnetworkrequest_c.cpp" -#include "qnetworkreply_c.cpp" -#include "qnetworkcookie_c.cpp" -#include "qlclnetworkcookie_c.cpp" -#include "qnetworkproxy_c.cpp" -#include "qauthenticator_c.cpp" -#include "qwebframe_c.cpp" -#include "qwebsecurityorigin_c.cpp" -#include "qwebdatabase_c.cpp" -#include "qwebhistory_c.cpp" -#include "qwebhistoryinterface_c.cpp" -#include "qwebpage_c.cpp" -#include "qlclwebpage_c.cpp" -#include "qwebsettings_c.cpp" -#include "qwebview_c.cpp" -#include "qlclwebview_c.cpp" #include "qcoreapplication_hook_c.cpp" #include "qtimer_hook_c.cpp" #include "qabstractitemmodel_hook_c.cpp" @@ -282,17 +254,3 @@ #include "qprintpreviewdialog_hook_c.cpp" #include "qsystemtrayicon_hook_c.cpp" #include "qgraphicsscene_hook_c.cpp" -#include "qabstractsocket_hook_c.cpp" -#include "qudpsocket_hook_c.cpp" -#include "qtcpsocket_hook_c.cpp" -#include "qtcpserver_hook_c.cpp" -#include "qnetworkaccessmanager_hook_c.cpp" -#include "qnetworkreply_hook_c.cpp" -#include "qwebframe_hook_c.cpp" -#include "qwebsecurityorigin_hook_c.cpp" -#include "qwebdatabase_hook_c.cpp" -#include "qwebhistory_hook_c.cpp" -#include "qwebhistoryinterface_hook_c.cpp" -#include "qwebpage_hook_c.cpp" -#include "qwebsettings_hook_c.cpp" -#include "qwebview_hook_c.cpp" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/qt4/lcl.patch��������������������������������������������������������0000644�0001750�0000144�00000006413�12632341440�017766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: interfaces/qt/qt45.pas =================================================================== --- interfaces/qt/qt45.pas (revision 47328) +++ interfaces/qt/qt45.pas (working copy) @@ -12411,7 +12411,7 @@ procedure QGraphicsView_invalidateScene(handle: QGraphicsViewH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsView_invalidateScene'; procedure QGraphicsView_updateSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_updateSceneRect'; - +{ type QSslKeyType = ( // QSsl::KeyType (1) QSslPrivateKey, QSslPublicKey ); @@ -13284,7 +13284,7 @@ function QLCLWebView_create(parent: QWidgetH = nil): QLCLWebViewH; cdecl; external Qt4PasLib name 'QLCLWebView_create'; procedure QLCLWebView_destroy(handle: QLCLWebViewH); cdecl; external Qt4PasLib name 'QLCLWebView_destroy'; procedure QLCLWebView_override_createWindow(handle: QLCLWebViewH; hook: QLCLWebView_createWindow_Override); cdecl; external Qt4PasLib name 'QLCLWebView_override_createWindow'; - +} function QCoreApplication_hook_create(handle: QObjectH): QCoreApplication_hookH; cdecl; external Qt4PasLib name 'QCoreApplication_hook_create'; procedure QCoreApplication_hook_destroy(handle: QCoreApplication_hookH); cdecl; external Qt4PasLib name 'QCoreApplication_hook_destroy'; procedure QCoreApplication_hook_hook_aboutToQuit(handle: QCoreApplication_hookH; hook: QCoreApplication_aboutToQuit_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_aboutToQuit'; @@ -13797,7 +13797,7 @@ procedure QGraphicsScene_hook_destroy(handle: QGraphicsScene_hookH); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_destroy'; procedure QGraphicsScene_hook_hook_sceneRectChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_sceneRectChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_sceneRectChanged'; procedure QGraphicsScene_hook_hook_selectionChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_selectionChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_selectionChanged'; - +{ function QAbstractSocket_hook_create(handle: QObjectH): QAbstractSocket_hookH; cdecl; external Qt4PasLib name 'QAbstractSocket_hook_create'; procedure QAbstractSocket_hook_destroy(handle: QAbstractSocket_hookH); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_destroy'; procedure QAbstractSocket_hook_hook_hostFound(handle: QAbstractSocket_hookH; hook: QAbstractSocket_hostFound_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_hostFound'; @@ -13898,9 +13898,9 @@ procedure QWebView_hook_hook_selectionChanged(handle: QWebView_hookH; hook: QWebView_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_selectionChanged'; procedure QWebView_hook_hook_iconChanged(handle: QWebView_hookH; hook: QWebView_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_iconChanged'; procedure QWebView_hook_hook_urlChanged(handle: QWebView_hookH; hook: QWebView_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_urlChanged'; +} - //======================================================= // Dynamic Qt Version //======================================================= �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/make-unrar.sh��������������������������������������������������������0000755�0001750�0000144�00000001350�12217301130�020046� 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-0.9.8/install/darwin/lib/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016224� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/lib/x86_64/����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017162� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/lib/readme.txt�������������������������������������������������������0000644�0001750�0000144�00000000220�12014201074�020205� 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-0.9.8/install/darwin/lib/i386/������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016715� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/darwin/install.sh�����������������������������������������������������������0000755�0001750�0000144�00000005127�13573157206�017503� 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/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 -r doublecmd.app/* $DC_APP_DIR/ cp -a doublecmd $DC_INSTALL_DIR/ cp -a doublecmd.zdli $DC_INSTALL_DIR/ cp -a doublecmd.ext.example $DC_INSTALL_DIR/ cp -a pixmaps.txt $DC_INSTALL_DIR/ cp -a multiarc.ini $DC_INSTALL_DIR/ # Copy plugins # WCX install -m 644 plugins/wcx/cpio/lib/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/lib/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/lib/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ install -m 644 plugins/wcx/unrar/lib/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ install -m 644 plugins/wcx/zip/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/lib/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/lib/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/ # 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 scripts mkdir -p $DC_INSTALL_DIR/scripts cp -a scripts/terminal.sh $DC_INSTALL_DIR/scripts/ # Copy directories 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/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/create_packages.sh����������������������������������������������������������0000755�0001750�0000144�00000007757�13611064300�017646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Set Double Commander version DC_VER=0.9.8 # 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) # 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 '-H: Help 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;CK_HELP=1;; -D) shift;CK_DEBIAN=1;; -R) shift;CK_REDHAT=1;; -S) shift;CK_SLACKWARE=1;; -P) shift;CK_PORTABLE=1;; -H) shift;CK_HELP=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" ] && [ -z "$CK_HELP" ]; then CK_DEBIAN=1 CK_REDHAT=1 CK_SLACKWARE=1 CK_PORTABLE=1 CK_HELP=1 fi # Export from SVN rm -rf $BUILD_DC_TMP_DIR svn export ../ $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 beta # 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.bz2 package mkdir -p $BUILD_PACK_DIR install/linux/install.sh --portable-prefix=$BUILD_PACK_DIR cp -r doc/en $BUILD_PACK_DIR/doublecmd/doc cd $BUILD_PACK_DIR tar -cJvf $PACK_DIR/doublecmd-$DC_VER.$lcl.$CPU_TARGET.tar.xz doublecmd fi if [ "$CK_HELP" ]; then # Create help packages cd $BUILD_DC_TMP_DIR # Copy help files install/linux/install-help.sh --portable-prefix=$BUILD_PACK_DIR # Create help package for each language cd $BUILD_PACK_DIR/doublecmd/doc for HELP_LANG in `ls` do cd $BUILD_PACK_DIR/doublecmd tar -cJvf $PACK_DIR/doublecmd-help-$HELP_LANG-$DC_VER.noarch.tar.xz doc/$HELP_LANG done fi # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR �����������������doublecmd-0.9.8/install/create_packages.mac���������������������������������������������������������0000755�0001750�0000144�00000003326�13611064300�017760� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Set Double Commander version DC_VER=0.9.8 # 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) # Create temp dir for building BUILD_DC_TMP_DIR=/var/tmp/doublecmd-$DC_VER # Export from SVN rm -rf $BUILD_DC_TMP_DIR svn export ../ $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 # Set widgetset if [ -z $lcl ]; then # Use Qt4 when build 64 bit if [ "$CPU_TARGET" = "x86_64" ] then export lcl=qt else export lcl=carbon fi fi # Set minimal Mac OS X target version export MACOSX_DEPLOYMENT_TARGET=10.5 # 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 beta # 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 # Create *.dmg package mkdir -p $BUILD_PACK_DIR install/darwin/install.sh $BUILD_PACK_DIR cd $BUILD_PACK_DIR if [ "$lcl" = "qt" ]; then macdeployqt doublecmd.app fi mv doublecmd.app 'Double Commander.app' hdiutil create -anyowners -volname "Double Commander" -imagekey zlib-level=9 -format UDZO -srcfolder 'Double Commander.app' $PACK_DIR/doublecmd-$DC_VER-$DC_REVISION.$lcl.$CPU_TARGET.dmg # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/install/create_packages.bat���������������������������������������������������������0000644�0001750�0000144�00000004122�13611064300�017756� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ rem Set Double Commander version set DC_VER=0.9.8 rem Path to subversion set SVN_EXE="c:\Program Files\SlikSvn\bin\svn.exe" rem Path to Inno Setup compiler set ISCC_EXE="c:\Program Files\Inno Setup 5\ISCC.exe" 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 Create temp dir for building set BUILD_DC_TMP_DIR=%TEMP%\doublecmd-%DC_VER% rm -rf %BUILD_DC_TMP_DIR% %SVN_EXE% export ..\ %BUILD_DC_TMP_DIR% rem Save revision number mkdir %BUILD_DC_TMP_DIR%\.svn copy ..\.svn\entries %BUILD_DC_TMP_DIR%\.svn\ 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\portable.diff %BUILD_PACK_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 Copy libraries copy windows\lib\%CPU_TARGET%\*.dll %BUILD_DC_TMP_DIR%\ cd /D %BUILD_DC_TMP_DIR% rem Build all components of Double Commander call build.bat beta 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%" doublecmd.iss rem Move created package move release\*.exe %PACK_DIR% rem Create *.zip package copy NUL doublecmd\doublecmd.inf zip -9 -Dr %PACK_DIR%\doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%.zip doublecmd rem Create help packages cd /D %BUILD_DC_TMP_DIR% rem Copy help files call %BUILD_DC_TMP_DIR%\install\windows\install-help.bat rem Create help package for each language cd %BUILD_PACK_DIR%\doublecmd for /D %%f in (doc\*) do zip -9 -Dr %PACK_DIR%\doublecmd-help-%%~nf-%DC_VER%.noarch.zip %%f rem Clean temp directories cd \ rm -rf %BUILD_DC_TMP_DIR% rm -rf %BUILD_PACK_DIR% ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/highlighters/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015205� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/highlighters/JavaScript.hgl���������������������������������������������������������0000644�0001750�0000144�00000045574�13130707705�017773� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8.1"> <Info> <General Name="Java script" Extensions="js,json"/> <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="0" Date="37650.2974113773"/> <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="0,16777215;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Functions and key words" Attributes="32768,16777215;False:False." 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="16711680,16777215;False:False." 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="16711808,16777215;False:False." 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="10485760,16777215;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remark /*...*/" Attributes="10485760,16777215;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> <Range Name="Strings" Attributes="255,16777215;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" CloseSymbol="""/> </Range> </Range> <CopyRight>Rule file for UniHighlighter Delphi component (Copyright(C) Fantasist(walking_in_the_sky@yahoo.com), Vit(nevzorov@yahoo.com), Vitalik(vetal-x@mail.ru), 2002-2004)</CopyRight> </UniHighlighter> ������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/highlighters/DCErrorFile.hgl��������������������������������������������������������0000644�0001750�0000144�00000006345�13072371501�020012� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8.1"> <Info> <General Name="DC Error File" Extensions="err"/> <Author Name="Skif_off" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="0" Revision="2" Date="42820,0524461111"/> <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="0,16777215;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="8388608,536870911;False:False." Style=""> <word value="line"/> <word value="column"/> <word value="in"/> <word value="of"/> <word value="Stack trace:"/> </Keywords> <Set Name="Digits" Attributes="8421376,536870911;False:False." Style="" Symbols="0123456789"/> <Range Name="Date" Attributes="8388608,16777215;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="--------------- " CloseSymbol=" ---------------"/> </Range> <Range Name="About" Attributes="8388736,536870911;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="|" CloseOnEol="True"/> </Range> <Range Name="Exception" Attributes="210,536870911;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="Unhandled exception" OpenSymbolStartLine="True" CloseSymbol="" CloseSymbolFinishOnEol="True" CloseOnEol="True"/> </Range> <Range Name="Address" Attributes="150,536870911;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="$" CloseSymbolPartOfTerm="False" CloseOnTerm="True"/> </Range> </Range> <CopyRight>Rule file for UniHighlighter Delphi component (Copyright(C) Fantasist(walking_in_the_sky@yahoo.com), Vit(nevzorov@yahoo.com), Vitalik(vetal-x@mail.ru), 2002-2004)</CopyRight> </UniHighlighter> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/highlighters/C#.hgl�����������������������������������������������������������������0000644�0001750�0000144�00000011731�13130707705�016136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8.1"> <Info> <General Name="C#" Extensions="CS"/> <Author Name="Vitaly Nevzorov" Email="nevzorov@yahoo.com" Web="www.delphist.com" Copyright="Copyright (c) Vitaly Nevzorov, 2002" Company="N/A" Remark="Created based on UltraEdit:csharp.txt"/> <Version Version="1" Revision="0" Date="37612.5337957176"/> <History> </History> <Sample> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="0,16777215;False:False." Style="" Delimiters="!"%&'()*+,-./:;<=>?@[\]^{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="32768,16777215;False:False." Style=""> <word value="as"/> <word value="auto"/> <word value="base"/> <word value="break"/> <word value="case"/> <word value="catch"/> <word value="const"/> <word value="continue"/> <word value="default"/> <word value="do"/> <word value="else"/> <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="internal"/> <word value="lock"/> <word value="namespace"/> <word value="null"/> <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="stackalloc"/> <word value="static"/> <word value="switch"/> <word value="this"/> <word value="throw"/> <word value="true"/> <word value="try"/> <word value="unsafe"/> <word value="using"/> <word value="virtual"/> <word value="void"/> <word value="while"/> </Keywords> <Keywords Name="C# Data Types" Attributes="16711680,16777215;False:False." Style=""> <word value="bool"/> <word value="byte"/> <word value="char"/> <word value="class"/> <word value="decimal"/> <word value="delegate"/> <word value="double"/> <word value="enum"/> <word value="float"/> <word value="int"/> <word value="interface"/> <word value="long"/> <word value="object"/> <word value="sbyte"/> <word value="short"/> <word value="string"/> <word value="struct"/> <word value="uint"/> <word value="ulong"/> <word value="ushort"/> </Keywords> <Keywords Name="C# Preprocessor Directives" Attributes="16711808,16777215;False:False." Style=""> <word value="#elif"/> <word value="#endif"/> <word value="#endregion"/> <word value="#else"/> <word value="#error"/> <word value="#define"/> <word value="#if"/> <word value="#line"/> <word value="#region"/> <word value="#undef"/> <word value="#warning"/> </Keywords> <Keywords Name="Operators" Attributes="33023,16777215;False:False." 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="checked"/> <word value="is"/> <word value="new"/> <word value="sizeof"/> <word value="typeof"/> <word value="unchecked"/> </Keywords> <Range Name="Remarks //" Attributes="8388608,16777215;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="8388608,16777215;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> <Range Name="Strings ".."" Attributes="255,16777215;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" CloseSymbol="""/> </Range> <Range Name="Strings '..'" Attributes="255,16777215;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" CloseSymbol="'"/> </Range> </Range> <CopyRight>Rule file for UniHighlighter Delphi component (Copyright(C) Fantasist(walking_in_the_sky@yahoo.com), Vit(nevzorov@yahoo.com), Vitalik(vetal-x@mail.ru), 2002-2004)</CopyRight> </UniHighlighter> ���������������������������������������doublecmd-0.9.8/doublecmd.sh������������������������������������������������������������������������0000755�0001750�0000144�00000000237�11740433676�015040� 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-0.9.8/doublecmd.png�����������������������������������������������������������������������0000644�0001750�0000144�00000007254�11324050326�015176� 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-0.9.8/doublecmd.lpg�����������������������������������������������������������������������0000644�0001750�0000144�00000002027�13351504717�015177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectGroup FileVersion="1"> <Targets Count="10"> <Target0 FileName="components\chsdet\chsdet.lpk"/> <Target1 FileName="components\CmdLine\cmdbox.lpk"/> <Target2 FileName="components\doublecmd\doublecmd_common.lpk"/> <Target3 FileName="components\multithreadprocs\multithreadprocslaz.lpk"/> <Target4 FileName="components\dcpcrypt\dcpcrypt.lpk"/> <Target5 FileName="components\gifanim\pkg_gifanim.lpk"/> <Target6 FileName="components\KASToolBar\kascomp.lpk"/> <Target7 FileName="components\synunihighlighter\synuni.lpk"/> <Target8 FileName="components\viewer\viewerpackage.lpk"/> <Target9 FileName="src\doublecmd.lpi"> <BuildModes Count="5"/> <Mode1 Name="Debug" Compile="True"/> <Mode2 Name="Debug + HeapTrc"/> <Mode3 Name="NoDebug Full Optimizations"/> <Mode4 Name="Nightly"/> <Mode5 Name="Beta"/> </Target9> </Targets> </ProjectGroup> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.ext.example���������������������������������������������������������������0000644�0001750�0000144�00000014565�11606362170�016655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Double Commander extension file # Based on Midnight Commander 3.0 extension file # # All lines starting with # or empty lines are thrown away. # All actions for file is showed in "Actions" submenu of file context popup menu # # File format: # # [extension1|extension2|...|extensionX] # Name=Category name # Icon=Path to icon # action1=command1 # action2=command2 # actionX=commandX # # Where: # # [extension] or [extension1|extension2 ...] - list of extensions (case insensitive !!no regular expression!!) # Also you can use "default" keyword as extension. In this case, if command had not found for sought file type, # then will be used command from this section. # # Name - Name of this category (showed in file association manager) # # Icon - Path to icon that displays for this file types in file panel # # Action can be: # Open - used with tap on Enter or DblClick # View - used with tap on F3 # Edit - used with tap on F4 # other actions only is showed in "Actions" submenu of file context popup menu # # Command is any one-line shell command, with the simple macro substitution. # # Macros should be (case sensitive): # {!VFS} - for archives - use virtual file system # {!EDITOR} - call editor (internal or external by configuration} # {!VIEWER} - call viewer (the same) # {!SHELL} - use shell from configuration to execute program (see mplayer) # <?command?> - execute 'command' in system shell and save stdout output to file and transfer it as parameter to previous command (see rpm for example...) # %f - filename # %d - directory # %p - path(directory+filename) # Default commands [default] Open=xdg-open %p ### Sources ### # C [c] Open={!EDITOR} %p Compile={!SHELL} cc -O -c %f #Link={!SHELL} cc -O -o %d/`basename %f .c` %f # Fortran [f] Open={!EDITOR} %p Compile={!SHELL} f77 -O -c %f Compile and Link={!SHELL} f77 -O %f # Pascal and Object Pascal :) [dpr|pas|pp] Open={!EDITOR} %p #Compile={!SHELL} fpc %p # Asm [s] Open={!EDITOR} %p Assemble={!SHELL} cc -O -c %f #Link={!SHELL} cc -O -o %d/`basename %f .s` %f # C++ [C|c|cc] Open={!EDITOR} %p Compile={!SHELL} c++ -O -c %f #Link={!SHELL} c++ -O -o %d/`basename %f .c` %f ### Documentation ### # GNU Info page [info] Open={!SHELL} info -f %f # Manual page [man] Open={!SHELL} nroff -Tlatin2 -mandoc %f | less View={!SHELL} nroff -Tlatin2 -mandoc %f ### Sound files ### [wav|WAV|Wav|snd|SND|Snd|voc|VOC|Voc|au|AU|Au] Open={!SHELL} play %f [mod|s3m|xm] Open=xmms %f #Open=mikmod %f #Open=tracker %f [mp3] Open=xmms %p View=mpg123 -tn1 %f 2>&1|grep -E '^(Title|Album|Comment|MPEG|$)' ### Multimedia ### [mpg|mpeg|avi|asf|mov] Open=totem %p #Open=xanim %f #Open=aviplay %f #Open=mtv %f 2>/dev/null& #Open=gtv %f 2>/dev/null& #Open=plaympeg %f 2>/dev/null& #Open=mpeg_play %f & #Open(big)=mpeg_play -dither 2x2 %f & #Open(gray)=mpeg_play -dither gray %f & [rm|ram] Open={!SHELL} mplayer %f #Open=realplay %f& ### Documents ### # Postscript [ps] Open=gv %f View=ps2ascii %f View with GhostView=gv %f # PDF [pdf] Open=xpdf %f #Open=acroread %f #Open=ghostview %f View=pdftotext %f # html [html|htm|mht] Open=opera %p #Open=mozilla %p View=lynx -dump -force_html %p #txt [txt] Open={!EDITOR} %p # StarOffice and OpenOffice [sdw] Open=soffice %f # Open Document Format [odt|ods|odp] Name=Open Document Format View={!VIEWER} <?odt2txt %p?> # AbiWord [abw] Open=abiword %f # Microsoft Word Document [doc|dot|wri] Open=soffice %f #Open=koffice %f View={!SHELL} catdoc -w %f || word2x -f text %f - || strings %f # Microsoft Excel Worksheet [xls|xlw] Open=soffice %f #Open=koffice %f View=xls2csv %f || strings %f # DVI [dvi] Open=xdvi %f & View=dvi2tty %f Convert file to Postscript=dvips %f # TeX [tex] Open={!EDITOR} %p TeX this file={!SHELL} tex %f LaTeX this file={!SHELL} latex %f csTeX this file={!SHELL} csplain %f csLaTeX this file={!SHELL} cslatex %f ### Miscellaneous ### # dbf [dbf] #Open={!VIEWER} <?dbview %f?> View=dbview -b %f # BitTorrent [torrent] View={!VIEWER} <?aria2c -S %p?> ### Archives ### [tar] Open={!VFS} View={!VIEWER} <?tar tvvf %p?> Extract={!SHELL} tar xf %f [tgz] Open={!VFS} View={!VIEWER} <?gzip -dc %f 2>/dev/null | tar tvvf -?> Extract={!SHELL} gzip -dc %f 2>/dev/null | tar xzf - [bz] Open={!VFS} View={!VIEWER} <?bzip -dc %f 2>/dev/null?> Extract={!SHELL} bzip -dc %f 2>/dev/null [bz2] Open={!VFS} View={!VIEWER} <?bzip2 -dc %f 2>/dev/null?> Extract={!SHELL} bzip2 -dc %f 2>/dev/null # zip [zip|jar] Open={!VFS} View={!VIEWER} <?unzip -v %f?> Extract={!SHELL} unzip %f #Extract (with flags)=I=%{Enter any Unzip flags:}; if test -n "$I"; then unzip $I %f; fi Unzip={!SHELL} unzip %f '*' # zoo [zoo] Open={!VFS} View={!VIEWER} <?zoo l %f?> Extract={!SHELL} zoo x %f '*' # lha [lha] Open={!VFS} View={!VIEWER} <?lharc l %f?> Extract={!SHELL} lharc x %f '*' #Extract (with flags)=I=%{Enter any LHarc flags:}; if test -n "$I"; then lharc x $I %f; fi # arj [arj] Open={!VFS} View={!VIEWER} <?unarj l %p?> Extract={!SHELL} unarj x %f '*' #Extract (with flags)=I=%{Enter any Unarj flags:}; if test -n "$I"; then unarj x $I %f; fi # ha [ha] Open={!VFS} View={!VIEWER} <?ha lf %p?> Extract={!SHELL} ha xy %f '*' # Extract (with flags)=I=%{Enter any HA flags:}; if test -n "$I"; then ha xy $I %f; fi # rar [rar|r00|r02|r02|r03|r04|r05|r06|r07|r08|r09] Open={!VFS} View={!VIEWER} <?rar v -c- %p?> Extract={!SHELL} rar x -c- %f '*' # Extract (with flags)=I=%{Enter any RAR flags:}; if test -n "$I";then rar x $I %f; fi #compress [Z] Open={!VFS} View={!SHELL} compress -dc %f Extract={!SHELL} compress -dc %f # cpio [cpio] Open={!VFS} View={!SHELL} cat %f | cpio -ictv Extract={!SHELL} cat %f | cpio -ic # gzip [gz] Open={!VFS} View={!VIEWER} <?gzip -dc %f 2>/dev/null?> Uncompress={!SHELL} gunzip %f # bzip2 [bz2|bzip2] Open={!VFS} View={!VIEWER} <?bzip2 -dc %f 2>/dev/null?> Uncompress={!SHELL} bunzip2 %f # bzip [bz|bzip] Open={!VFS} View={!VIEWER} <?bzip -dc %f 2>/dev/null?> Uncompress={!SHELL} bunzip %f # ace [ace] Open={!VFS} Uncompress={!SHELL} unace e %p # Source RPMs (SuSE uses *.spm, others use *.src.rpm) [spm|srcm] Open={!VFS} View={!VIEWER} <?rpm -qivlp --scripts %p?> Install this RPM={!SHELL} rpm -i %f Rebuild this RPM={!SHELL} rpm --rebuild %f Check signature={!SHELL} rpm --checksig %f # Compiled RPMs [rpm] Open={!VFS} View={!VIEWER}<?rpm -qivlp --scripts %p?> Install this RPM={!SHELL} rpm -i %p Upgrade this RPM={!SHELL} rpm -U %p Check signature={!SHELL} rpm --checksig %f # deb [deb] Open={!VFS} View={!VIEWER} <?dpkg-deb -c %p?> �������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�015241� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/�������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017036� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/Resources/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021010� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/Resources/doublecmd.icns�������������������������������������0000644�0001750�0000144�00001336024�12452226616�023645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������icns�TOC ���`ic10�Ɲic09�dic08��it32��~~ih32��il32�� Bis32��t8mk��@h8mk�� l8mk��s8mk��ic10�ƝPNG  ��� IHDR���������+��IDATx %YU"Νr9gV<$(UPSQ8O}ln<S*d@Ayʡrw߉sNȺ'"^{}NwH   eb�AAAAP�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�    ��   Z�z+5ztϞVgtŲy&,%k8%8e,IX@= }-x:Gt>QQ'oo}<0,v5ŷ`{jמkvUliSMYT}=,6YVF}# |YH ͦZtyÂfBK:%9%k dXrQ6d"ke)K';;.ޥ5��ul]`W&pE%WR® J,;@i:r0yb.NNb(9۷^w w>_oא}i9mfc9䒇l{+Z>:Zkz6Pz˺ݥ۞9w_izfg.&bfC5k< U;|ׂOoyz gNIrx~u/\8L�.Yͭ/WW(Ltor�`v��P�������������fm+�;{[Kľ<j7 AK\��\e4=OPžR:�P7���� �`.��0z�������jf��X4I>L/fB��>sCS?7>%~OY� u��� �����������fm+�PFS ϷOK>}ԗh> th �`knk%?~7_N]CWI�* ���06� �� ^�������ٯ �@z3Έ}x,73̀�� ph_6a)MF��z�*[l� �����������fm+�Pn۹I}{:~o! hH� ͒.'Ӕ6G?����-6�f��s�A �������P6�_\.wdN&u'4" �` S7ٟeϰ6M}�^���j3��� �������Yop �ԯ�H[nOC̈́.��'TJn&+��Q��_��[7�@�<Z� n���AP;�@p�B}'f?dh@�Xdz+5~l)Ii���P;u�T����z��D �� ^G:7-4jX��D~'ןم$4I/ 1����P;u�T����z��D �� ^6gYvϼ.�\d}V[3ߥ4]��� �@6 �Pn��ϺV����`m6�f�z;B_2KOלω,�+V:bb�XZVWl*$15zh�ˆ;�< }P*o{6M zs1�@n�#m/j}ClE�P_@sEn[v�obϓ\qdewWo/;i�V6�W*_CO~~aߌ:oWBT�2ʎ',Ggꖓ4%P� X ^~?Jh6,v=@$42<B4:;6~=:BCCC~DHUX巺`"f-ż �*^.{6 ֨&N0N@"4A�IU�ԇ՚]l׍_h̰Y~i(c]04i;zOW]6stnfMtLwN̶i�}X_ͱ ��uu{ҿJRzf�`xx֮YCcc: h;i'9P {`@�q���@�X� r�-����P`iO4497g`0&�R~͓s_][��_vٺ(_Z6&@>vNҿvN�q�@ �Tk`@��A�d��~ � .��-x�I33tt|߱i �zZ mY�� %K}c<_Ny?6:rk��� f#�* � p2�� �o��P?>�e?�}c$�hIB}ӹw:H/�^f__8�V֯_O7l5Wk ��T� b#�* � p2�� �o��P?>�e�7_@<E>C b.3)K~-g?H�@d}Kz}kS�=kƍh:~M��D t�P!��^� r�-����P�?=ہGΝy��2Fso^;=Fu" � nn3=+;;j~]1W 6t Zގ�* �1�@��tz�M�����@2�o x 899(�7%{)^yӅoT>H�@$~_ʒDc �VҦMhƍGy ���~D t�P!��^� r�-����P�5?y?uTtFn>?sS@A�?񱩙I)yr0?_oʹ\���l�JB��:\ �@&�[��Au�ԏ�n� {}ĉ)zr&# �Чn^J(~i-iZZ,1���@`KG��U�@e��"7�� �~|��uˬ�P2Iֱc4?R�̲v 'V1/�syq(mݺ6nYԯ�9\)f#���40 ���Dn2���T�@��Yy�/Sͣhbf&ȭ�ȵ@4Rn:?#^�_vٺWK I(]ڰ~�@ M1�D t�P!��^� r�-����P�GNy@@X~m}ߪ):W1)��~ާ$HJb_,�O߶umٲEE �zqez W"HoC-Ԇ^)Dz*�W%1EJCB`P.j,TܥB.^t|QL\pW&"�ꋀV2HHmi|>w؅VS8V=!@m<ȓ__ :�(ֱG; ԋE={,{H[~b+N�� l��׭۷w7b�$M(}Ű4a݄?4tE�vxg$tů`Ϣj=>~^2ddN ҇%(eXB$, E@ܡ;TMs~,оZmg Bwn7\7%[.ٛ�.җ9sF,_]ɤM_؂%��yÁ`}&�cvlAk׮u(�h'i@v$1~0% �t��X��T{�A �@5��@7�@]�l7.3g �( ѹ3nF4f&g?Q+F��~׶/nI)�\D��H۱|��| ���*).�wp,��q|7L��o��}��u�tpmp}8t[@�K4fobKV��,}X~ �֭ۦ[k&)e?~5K��\����;8�8k&�7�>n���>@ J:@ULÿ&:o cgΪ+�QFMV)+A��;o8m'L}κ7oLUT�tF[-'wzqI�4;�+���`Pq�ws�0� �P� 4CA+C'NtX�:,coyjwkl� 3^;4?-ymgG�022BwUVU�I>+o/0Y_��M��@�T��\3� �q�5�{`FH]7NICD�֝fk�?}꙱^�uiΝjj�b! �h:v��W,��=�� �` ��1�@U-_QGم#v�dza'B4Y3e#� |1߮ �nM4 -~?,a\_��M��@�T��\3� �q�5�w>9c}d;<&�:nO/["�@Խ}PjnXVyՙޔc=AK&(ݶm �p1b�p�� *X��n������T;%`"\[n j�ݷLt0��ں+}U@jO7ՓOOډ?Y�wX��N��}Wq��;8�8k&�7�>n���bY'K2ƺIe̺sKý[ت�n[؛:9#7v'Oy�eδ&R;&�;,t��o�ʾuJK{�A �@5��@7�@]c�jLycmԗ{syZNIC. h�p׍~Ew,�\z%uV"ALN7�PwX��N��}Wq��;8�8k&�7�>n���b;7<k8c:9\Z�pRc.ۉ;hㆍ[G7фqqI�4;�+���`Pq�ws�0� �P�Z|�uɓd_[|ohV$�ƃ?@δ;[E+k~ݻwq}يK��c� �@�l�Ԋ� �` ��1�@B9}[g?>g Ǧ4Gqk^z;Iiu/w^ZzbS<ɧ'tT|[���'��B� �@5��@7�@]c�j�ִ s#whf~WYFӔ]so o)hE;jsLtv><<LQMdLO��;�@X���` �V,��q|7L��o��}��u��g)/챙tYN8-]Z1�H>}~^z߿`ro@2< ��j�'��B� �@5��@7�@]c�j7�r�R͵ɹ9̌7Go0"KZ+�yN(3wUw>44D@�vӨ$͗ b؟ �P?v�8��ԏ�:�@X��n������T9�+!@'HQggc9&0^}c.N�`>M>N|z~>?66f1nN)����� �j�0c�㻹f�|��k �P-f@ʷhNOMGs ¡/#keًnB3-^<Z�ڳqzviB{*� _/͚5c|?ʧ[ �~��qb�;�-t�Z��\3� �q�5�`�@|(t&cwXȟPm@[##CtV_|-{�p h]�ٳ֭[al#Oӑv�����@�T��\3� �q�5��@]҅a3�ferǚmղ�wx??Ž;hӦM~Ɩ:E �v��qb�;�-t�Z��\3� �q�5�`� �{z,72FmSٖ_<-[�p?/]`PT�۶mm[7g���c�p�� *X��n������T}� W4x,q'W<Y�5ꛦ_-K�p֧-jΎ �`ƍsN?c �HZiwb �~��qb�;�-t�Z��\3� �q�5��5zg<J>u/FFCãzi:l ^�u4@�^2�բdx]�ԏ� N,��c��P+�8k&�7�>n���bx�Pƌ:ڎ?z^:597urךk R~��HӔFFF+�dhC-/{Wd��c� �@�l�Ԋ� �` ��1�@/>�ȵoutw`ff9Ds =FT6IJ,[�?/bBs�`׮ݴ~%i���c�p�� *X��n������T}q�\ڙ�Q:M}a{ Q,-+�_*<ƍi}=|Ͽ'2��ĉ�~���j�ws�0� �P�Z�Z+ xy[p]2-SlO N�|ҔM6(=�h&)4_?Ww{�;�@X���` �V,��q|7L��o��}��u�ž�@�+�>rtzjbی f|:lo F�h?=��}jyQ.{#��c� �@�l�Ԋ� �` ��1�@�ֵ3${fz>r^2aS;:5s`,�]7\"J1�عsgFuO pU �P?v�8��ԏ�:�@X��n������T}\Z@N{ybfv2v-kGג�!6X> �ذaܵlRKC�vܡ�ĉ�~���j�ws�0� �P�Z�JڶA&}GS-�,˾gz{h^iVK�uISE�Z-+:JGY����;�+���`Pq�ws�0� �P�Z�ԝ Pwz~>}@29gJZ�Η쿤)?tm�c&[!�@]c�;�+���`Pq�ws�0� �P�Z�ZE#/'|G-v�|+X=Ӝ4�,ס�`ժUl6%iJ)?���#v��W,��=�� �` ��1�@?�ȵ.a՗0=ub 725;LsZ�}݄5v�HYmJ���\�\����;8�8k&�7�>n���b_� _`C�pjrh@X8� 0ך{lwђ�kGv�شy3m߾ikRq`11���c�p�� *X��n������T}i�\�®y/>8}ĉ*� [kӌ$�WO?N7|@kh.rq?Nik ,a ���0�\����;8�8k&�7�>n���b_:� jgA}f6M $'¡К=f{($�3%ɟ|]:3!,i ���0�\����;8�8k&�7�>n���b_Z� W> `سIM -1-9�WZ5=1p6~�Xf ۿ^C{4���|��X��T{�A �@5��@7�@]c�j/=�0Y�@?o6PetܾM5Kq�]7$-�yC� .LS���;�+���`Pq�ws�0� �P�ZK� ��G'g6Чp?25R\-)�<gS$�իi߁Jt.Z#̚H4�vܡ�ĉ�~���j�ws�0� �P�ZK�$7$�&\|a:~B8� 5S�_vٿo7뎹�{i$m���x��P}�T]S]� *X��n������T}i<%C֕z9*�N׽mrT<-�37<Ԏ q2ccc N˅����| ���*).�wp,��q|7L��o��}��u�žt@�XdsC Ff�~UTgZ2�3/;puZnqEخ{h|:$(_u�8���;�+���`Pq�ws�0� �P�Z�;mۘs/GΜ<ѿ,5oފ%�|I(eqE(r80K[-As:|N�����P?v��[��b�㻹f�|��k �P-v`f�Z&r};tvzZZ6r¯4[qXۮ;klɔh"l]~XP!��)���ZD�T��\3� �q�5�0\3�ٖ|@iN~D�w[$Z,�ǝ7\Ig]tF$=�J3Nܡ�ĉ�~���j�ws�0� �PxexK�f�]m:?3wmmSpEZ�;_?j]m߾6nFO4ma��W;q�'��B� �@5��@7�@]�lޖ�1��xc'�؇6=!ͯk4h�\۱i}k%NK.JJӔvôᳳT��|��X��T{�A �@5��@7�@]�/��\qZJS߾IY =ٹNЩ*]QL% �T玗]k)wk䋰i׮]�`T7ob|y57v��x��X��T{�A �@5��@7�@] �? Qv3sMI�wmLCN& e~S]KjR�ߓB۵gWJ(b�!]% K:p��P?v��W,��=�� �` ���Iw[㖎�; ~mnB{?{Aǩ~U7(�U >r[a.(.CCCtW-S~^n1�W_#'>NT��j=�`Pq�ws�0� �Px�@~ �؟ŰYj� _ҽG{ ߢ~IߏBrŻggpj�T-sKaJn"lMtɥۃHKE �- c$ڷ}@t?l��qb�;�-t�Z��\3� �q�5n.vVwXeg6Wa)P؏s�BǞC'Nh{B{y e �B}9?u§EؾhllUpґ/H{�jy{A�7�@X���` �V,��q|7L��o��}��uŮ�0vb/X:�0ÇۦӤ *�vnj%蚫"ldd^~yxӡΣz)�roHuw/i8tRwX��8}�T]S]� *X��n�����Wݷ�AV㳢7]W-�6%B?ow ~ɾy6}18Wql�b%±OxzG1֭h˶]j Q2T>o(3� o;cM,](/^`0,t��o�ʾuJK{�A �@5��@7�@]cY}`bo3ܱ}7� mCO=J3�F?鹿 h @Uk~Iʹ. 蚴_"�MshPKk@o[1"R {O[�T��}Wq��;8�8k&�7�>n�Ʈ^g~@ *E߬f�( ̜�KwLͿUjo[e7?IiZY"RctAvE}Iz3�<:3| ."A5��T��}Wq��;8�8k&�7�>n�ƮDFBP7L$ݧc˘C�r� \yEGK&�@FwN_f P I}v׾c# --uWN:4Vik@8h¨;/`帓 TMO��o�ʾuJK{�A �@5��@7�@ucquLJ^3�۪a}iVl� _"~c+/Oo8ٴpJ B^x6@S�u?vio4O~ڳ׎{wCnI;ǚ� �<qzƉq>.{$D |�闐��j]� *X��n�����S}!s�3M>KŃ! z r@_>^ϝO?;?�\Bɹg\fl'aۆ5‰. J 4iQ:<X �8I'iv߾Uc6Ne@box^`0j��7�@e:%zܥ=�� �` ��nBGoٌ̎$=쌮`, c�%r -,{M- :"X ɎB�o� 4j;Ͻ]5F7;t'1vgT{�TNWE=so_7XXh� Y��j=�`Pq�ws�0� �P%{~@}$=#i!YiHP_ߠXZչ?|NNN:_uf~zTَ�F ǒw^KGGLٸe3mݶMi맼5Nש5�bHv,iEwA},Dp` $E�`-��q%$(�q��;8�8k&�7�>n��ͱ*}8a-0NFj!~� W<B<~\cx91Oϼmn>nWh� ȿd/ % ݡRkZv1BP|_?<:C[o/P 2C/Ev}s|y^[]k;}\�8B�{�A �@5��@J�9'vs 8|1 .`A]o~6=;d/b�]@KNELLН>h͖=|M C_��UF>vޛZigs'i]Yo;ix?z(_ ˺ 1gOT] cb<[hdfyeօ񡃉޾{ <<]l��\��og=�� �` �{%o_gjί\SޭIzY~)BaµPfG}KF'r>.2o|g:#;5KChK8x]�Pe >zOQ^-իiϾ >Is;Z� Cbwc<iE/<o?;St`3)9q@suBnۿ_oW�*).�wp,��q|7L��o��}�0m逪|~묶Ow  c\l˶Ϲ<_ (~zՎWZm:/:3mϱ� h_xR_h~s-ya I �"�-g䝉=S˓ !Sڦ9l 5aY yj;}��3�`Pq�ws�0�ǽ@` lGu#O!\C]5�F=ߞ43صAaM9Lgǎ7s[gv>Ȭ� ݷWo;)"�D{cǮ]4>wL<iLdxS-s*}&IQ�_~^QN7 ]ڸ=IMύALa4u^3��@�P!��;8�8k&�7�>�\ŃܻfCst]Vϥ7>1vٻ8 OGqg?mkIu�)(6;{>#^ds{ivWFV:b*#ʾ^j!6~[!sj(wwjk~K&JFDkl�f�Bb;:-�ρn޷vZgFQ/0��3�`Pq�ws�0�ǽwRܡ?\DO1f+A7K5�|F7YџCFi ,N^kunz>zR^7x.n?\>اoS�W=/#_ϽZ~ �ʏnc9<޴]}>?aù.}۞`-fzp Hed7^M][aG~nLU��}Wq��;8�8k&�7�>�Ϲ9ڻ.ؙw"mOt[f?t B{=bB>W4 �,y_<?t_K~{Mc B>ofdNM�\Mm �I{?^J` A4hdtߧp">&@\L�7&הq:VLKܵP.�w/n-(ڽ)Kɮ~ =�<�og=�� �` �{��V79FVW3䦭}i^s]%_R$80#P�`j[ �~r? 5ُ �%~p{''"[fZڱ{:e8 ݑ�[v�tx}'mOK"ED6Q|mu}iof0K:n<[��X��T{�A �@5��@b�aoGBiEt˶6X 0SO.܏z3l%] 5 � `"=0=qnB?h~s?EG!6h �Toڧ�//4-Mh-M �ԓ,OR/g�:>waF> ]p6�9間tyD?I̟ݬ W>k�?Uo�ʾuJK{�A �@5��@b�ۖ�#7lx\)+`߽}t9h,[r-K[Ur&y:ꨢA`B`fv_}:tdi P{ �Lɿ/�0k�NXvϞH>6_|@3~{ymt;[wL`N4?/ч#ΐ[�l3cg*ښ}K ;�D 2�h6k{Mm4� X�P;v��[��b�㻹f�|�^L� d6^-ɼ>GzW/Py|9Zp]&nw١M;WQ{+2YS)OP_F4)(� NK/{ΦUR|JdVak[5omV?Ħ'�v>9+KBjsn{ɷed:fۈ~"3 C5�L >cz?>p!me@>0@Iv@E%ǽ>W��X��T{�A �@5��@�V򝹬)`NH3x5Mv73Gf7v⍙m)LjI}{Sb�X/'@w=<Xl?1ϞIMCA�8�_ﯾKwz7O^a }BNf@<th%~@yobo~ML9q\ocN*ۏ]w?ӖImɄP悄yvnNCt-H$�ڱ�B� �@5��@�굳of7Y|~ n3d7#1[*0u,Xt P~,O@kP,B^g�@3sCTێ}ϩ/,s٧H�L0@Z<s; �x%ſS[FoMy ��[}]F_|,0<� ;^Ì sbFƋ7TFg - �@?/'~^zՙo2k<d  Q}t�X]�p�� *X��n���� �lUY|f2&Jq4]rk�m(3]$?c^D~5{�{jJk=Ձϼ55�L>2X�gн40/+�L/7o|hf=�*�M7}Fݯ8u[ |sdtv'd%Sy\:<~;M3�LL�.co=~lwtqsMcZuˀ.ٿr DUUzc[31}oszf!�Ϣ.8�P;v��[��b�㻹f�|��B3Cܺ#3&}eސˍ~n('G[5hL>53Ҕ9b|2m*~V*~`Y@[�zCբ�wxMO\?,;߻mvf*?U@�cb�)wK3�Vюݻ]1Q 'S=S.sngگQ·l#|mͷ�hHp 3ᰜ\JJҥя {*=\�?+}�O;H��c��P+�8k&�7�>&yڸ-W!++7_{ �W(~ܥ܂f$6YuՀK 4"ЗA`^�k}<70So޾b3,{m3 o"1ϤmSo7�dtqgp[ɘa'5z5m߹wٟ9!Z#'�Xj�긯wʸ+m9m,>yj��4#躄'{d\ƀx{hOf7 _H1#"}[k߹)�@:%zܥ=�� �` � �`&:,;=ٶJ/S7_#T3.Omg�A[z4}5=rۆK|1!+ }~:~b,<Pۦ;%r_  R?~�y�RMg߭W[^-^f-]};wr6Ź#<[�O]{`{vֹ#GbK4/'LFݙ<τ㥟2&)׍Η� Rì'0>f~1%&~dRLi}έ%��j�` �V,��q|7L��o��}ܱӷ%d\C d2شk�hr| 1qXg*#]"Q}= ӥwK uLA�Щg�ut4|鉉s^<<eo!s_#~05ww,�@kqyVEi9qB^B} ǿ3�<Ml1br>xnD1�l3Μ' Pn$-|F>)hls/aէ:)=*3|^|�wNwi�0c�㻹f�|� �mylug;P`H\C28KL'?B~ ~Yv{vf%�`$ۊۇd3~VL d}:7_=.-#G3g;;㺼w`fH�Bf@�Iۍ�H-o_ѴC1L @ _l&$Zٮ._ �?Lۛ4oh5=N�oYF  WZoS|.N _�F : y_]s=E,N{~�v���j�ws�0�]51b{ߎztWׂ;MW3-vSLfJBiz<kB9E;ܠ��4y0kGCN9+3sy}`zudO& w@@ �=Mkd?+_V~&ڸy Sw\_N;�}zG 9C-:̌e.!6#ޘkt^Dgrom+LVO .d20P:J#p2K~ K��").�wp,��q|7L��o��}qS �`6k5f*^pf [*K/'rb2'jWg�Pm1y7�w2Lf\EF 5�ۏxf~h>v<Yn0�Ȳ~p6{5 |Z� B� whχ[ir?�V&<ڰisrZ w2'�`e C[�,ö|q1DcWӏ3x{>6%Ibnc9P'Rg�v|*0?uӰ2Z�D]S]� *X��n����}0o\a^HTZVhSat36%q4e2C/'LG+�5M?_�bvg#:3�mVf.{w$,d/'5j;*�LW]wZI)�}[h|z%/f iҢdht�@HDbT-ơV0J4lJcmBPVO Fvɋ��@# bs,.h{l>3oj5Vg~��q|Wq��;8�8k&�7�>n}Y&&Bh5^3Cy43#46`2<9Wˈ33`\~c~ t(  H}6Zys^j 76ۈ8uy5e>#v ב9w '�� ~7lk8MSq ^6ICٙ&]$)qتU422MYLl ~D7I8"$Yf &Q6;KlnLt_{t -LOS'~cPi�ZKnu}5W[�]0bOlUytuIfy.ѝւV{��b3�`Pq�ws�0�r_ۥ2][H�Ok{Vwg/5'cW~Px\lsm_ gH. v 8цWگQjkfoM["(h'-S'ىWzep\kkr'DeI - �nYԹo/MS*^WَöTXֽ!c<LO]4s ;wf϶i;}fO AuF8_VM5 6|0cr^$[I"&ѼeC= rJ~v1B ȭo!t}=}tG@�ZD�T��\3� �q ~5[`[4NDfe-�ޑ+Dz~5/g�(O;%AOfϖ _Gk/w)޺VoB6n it|F׎4N[JU{}˓&x���,>s`lc4yQzZt9a$k}>fM d^DspA?5Ya3&(2_:[�,‹F"�8uJK{�A �@5��@7 z8MiiG?;JgPoG`zϠb,9W AWGo|$~ӕWѦ=hͶmJ2? h �Ҽa/�?{Æ ��,M`nN3'iltቇi(G `�~�#ń^WyBBZ@yo .\ @}ܡ /XdH:"+(�@:%zܥ=�� �` �kJcZߦlEk�XΧFۖ3n>Wg�u lg7# =n(*M_w%mػIknU6544<L�Μ9s+^񊯐>o �@��z,͜~.;¦|?|<ַ+ k L]K$t}=߾V>ҮLuku<@A5B7M;H3:¬o��b3�`Pq�ws�0�f!_44h> }i'N̅uw`RDxF[P3}sͼ0� &[�mn&kmU7ڵH+h�"1w%~�=&O`Fm&lI>ut @F/$<(Ai}\'^ǜB?Cw} 6( � B��� NC��ia5Ojkʾ ?),WW. Ќ+=8be_Eh�!<6{AI_@73&>C^Fh'u[Z�0P��x��knfϞO>?�MM:С/ ϸ.5%yL񾭷XGIe辰:3O |{ع><@Cw.:��Ԏ;4v�8 �k�P{?}Bf1'(Q]N73x]H2`/'}/mt$߷fW�Ǖ:ҴE[]t鳟K[Ck6m1�E��t ���I3.4lCt٧uƵ iFy]8O0_l)Pf�_?_N6ɷ nP/lǘ92�ڻ�!��;8�8k&�J�̲4J%fd\.#^/ee^sm#~3�~b3}@fC `RiZYدݾ.}Ѷg<6O\BckRIe�2l޴i��PtoS_Mzc*(791聀zO>kg XF0?{@5(vn_(n�aTC.YtU���Ԏ;4v�8 �k�P{?E5�8s'W+Mg qD_7^|K{0q?rb83�v;ϸ9ϣ=W_C<:돌T�Syի^/xQ�<��5la&OsN+tkLb( +_BW_IoÄV"�ijvMʬ�CBoL>f M+� �T��\3� W�p~2EHϗ*x_lHbT_M50K4zI9Wg/g�Ŏ w-Z^b}O[.Ʒl/z-�o:�@���Ԥa?(:uv_fԍKE�}v%&m-2K  A�3S@:`|o(W~�,��;8�8k&�J��۾hMɹ̰ɾqP r$_| �] ɽ%(kw}/i}j:KP��P_u��A+_dpētة |ˊQz')FOY?%E, 4, n~A"CF^V^ 5-�93�b3�`Pq�ws�0^�KUttS쉿SM{{uŋg_.FV[o <[!I;s۾--q�@׶Bc��a��ZG/=iQz}+l0oɷ~9aue0\@Kg@M(F3LP@G; W$Nv��1b�0c�㻹f�|/W�| �sSnݢ/~4%oy�{<گ+>~0Ѷ՗l+^y/Pkh% �{}Q@��4}~NvKЩA"~F+|m0 ņ.Fip*U|P(�W/% #Y �!��;8�8k&�r�מKmm1㈿\M$LL62WϷ16E{2v_iӞA׭#hk�"1���ZZXX ǎЉo|bzͭJ{I&ЍfG2ŞQ Hcǃ�ʺD?eY~8!؋)!t]t)k h^�P;�`Pq�ws�0^.�UT7ƒL~$/4os?gb/GuY!gr!Wq) W;w?rӆEV �脭G� g�@KE3әӉ/}+b `ht{A'¾�qzD nO}@su HHES蒖/ �wi�0c�㻹f�|/u�[®F+^ IY~9/$H.0'"\]3 G 3I?_g,I2#7/hqw ZZb�૤O�x[~��Zjʲp(=ͯw>N7�V&hp*{9QW_]ҹ}At6r\Bf d$v�Fd13W]��vܥ=�� �`@_] etX~l dDIl3�,u3�U'^ غ{1 ۷|�N8Wզ����@15y4/#wp>9soK S(o_cۿe@Z3H_ ^ oxt-f9��~;C�wp,��q|7L���iڿyeu@ğ?R~N2ɧ.g\B[Om-0�p%R{#=kw즧i}?ݴ̈́V���� Ȫӧ׾41z|ߗNjt~"i?ɣx%%uL 5>d21#9O/ �P!��;8�8k&�R�V90yT:36'E".~[ 6P=گ˘mڑ]svzګ^C{^B߼B�� O]8?#w}N3a1A9/</%Ժ;b (o(#ʢZZ�>O{$:- 2%l�wi�0c�㻹f�|/�<mџJ?[J)Q}Ou$/}(3�\I �MK86z =U=5ۺW����9 8ϳ#w|ΞTF껯ehmE#Qa?N�X4kA6@@~o)4�j]� *X��n��ߋ�0O[slb;Q|HWNS�zeLgh?qe�2 �ɆO&}c_Smj ����jNr;ܹQwLWЌ'd.w:l*k3.ׁ�� #e}(K)I4wR�vܥ=�� �`�%ll~\_wyFiĝ %ǝ3Χ8/ڐtAf_/B;F}W_K.P4���@P4'G=ymuoFȳxʀ5?_�y}šuRolP^v~S6���.�wp,��q|7L���|JtSH>/׋WYƛ'z +..t8,S5)mv:<BO_J/ݎu���@P#ZS}{M߅^g䧩#>H 7 ɏ0.=omCe#Lp$Hw2ηKIu ��`Pq�ws�0^L� ,fNqK-%\o8'E|g�#zD[ (mywӎnj Uz W����Ը ]Of4 z#"\rO* qe:vͮ]'3"Sn@>-_>[W)fM5�� *X��n��ߋ�>1ۘUY.7.{qqɉ<߅ b{xjzO,]vK>h���)[XSG>^v;^I/  XbvNYoY($<1`|{ X}YW+ft7�� *X��n���ɪ|}L1r>fȣ׮ğz<+=3~er6ȅL=}>׼.iZ����]MO'9GMs&Y�Io<q?�& A�c%8� #[+h\4Bk1*�,��;8�8k&��ɿncL9&\rb_K3�x_@blT�^ڗu|HjD����tQg}ة# 蝺ë́eH|u@;4 9a.: 0&FPO`Ls[g;�l��;8�8k&��+cfK3CG %>!FT&j>vWs AA����h43ycy͞9I4}'{IMu  7�JHC[߫R8 ?-ׁ��6{�A �@5�{�BgJb%̖',}VMK4}(h[y+}Ͽ[M ����&<%�dO ;]@Le<`b6@Qk0b "#2/)6XL��wp,��q|7L��A�Wq]+]$Oyԟ?}Q}LL˘E#|;3[;iϠgoХW>CX����uzN|3YY0O$^r]{=L}(IB�}`2If�X�wp,��q|7L��A��b|N͗%gLL~=eI}-4Pf�0]]= ҟ޽H?Ov} ����E#G |&Zg~"@F�g(  _Lv~Ipb=C��|6��m.�� �`4�)'>~ߙG>lqTN{4t?ߖ.8ziYG~V_&B"����-)Б/~=|erHMM Ȕe}�6^^^c"4^`c k hNĸmr_^=��`Pq�ws�0n�$k y>qv@rO?@ Oƕ3/|eyv6/h3:>N˿A^b h ����zпyMy_n[0 ]O BQzqM֟1`Z@!hlqx^�D��Z�� k&�w;e}-Q]/KI6ї?w>_ӷAHqtKߤ,J[-7 ���� hI+8|_A�8zo$%Ur;O}%��"m��@-\��5�;s^K}Q!~+yWF!dK53�X1{.}{i˾v���� h©OǏ;A�t{�FÂ-�ed_W rAn )6.I}[��D��Z�� k&�wY>QyٖIUb~mO3#W2f�')߲ %"����ZvpؑO}P5WWr ր?=1@/i6�qS.pMj5<�D��Z�� k&�wa}L/[G6ʏÀ"9WĿ,CrA~^j[%&����Z>?A|]g>(6o/5-WH3�$ŽzmFE C"Fʷ ؒt]9�C��P6�ws�0~3g9]jI-BRĽ{YFL| qFYeb_F5v+~'_sj|AKT����5u [CM2&`:҂Έ~ߎ6=c1ӏXZP~@i4;I'aN�@}ߡ ��e �໹f�|W}?\֏:ero_ؗ#)f/a{ٰ%.����Z1<}{S_ 0m@L<&d�� r7bfczl�fY P-`P �:�@X��n��UOwS08ŧ Q҇�i= 4/>y,{ Jk7o h����VΟ<AVv꫟W[A@a�WNgm^.k@@QTODYP7 F"��m��@-\��5�;$ӖiGyL< %݄gQ?O�UnBܮ^K_u.xZf���G޿{@}6IЙ1@jo PFDB=ELe�ro��[��b�㻹f�|3[W/oɽ~\}nԟOϕX?!mKP'cm9[a���� hܓӡ{3;wD'=7ρr]H� R  R}cHz-�{ ̲@`QJ۾/3<�:�@X��n��>rBg=-)ʴϽf Q$E( uߊu]ç"\�`@�.k\ѕ $3&D&V[9sOjoz}^-#xv_hPWh>DQɺAaL<{_"1� � #% x'I!'`�0ڒ�Z@~4�hՇ ^Ԓ{黳�3la;7L�}{I}m_0Zum>⟮)r2r}~= >` ��@n8/?$</R(o 8 o8T @ר/҈~9�Nɛq^H]w�|�Ж-,�Two'/зpx= ^%d?"pԧ?ݏu X�``MXt篿 Ds[IbB@�ܐ!@O >l J, .<It�ڲj0Y�pMwzL'ҿ<<]_{? t>O5k@>ٰq'B___/`�͛,^4"/ W^h^OJ "'6hmJ^lȾ|q,�Lg-[X� �GߖW@"$f!<_/W ܦ3p}EY<B0�+;>5fL/`�Q�Z ObG,!�IA�#Z +h�#�jh�)nº;w D/t�ڲj0Y�p-J",0 jLpyzԶ_׋Kwxe7uO` �,�0nF_}ضfSCurNE !% 鉝�=V@d$�qc @I�,�Mg-[X� �GߘSmm|zdAMz]^L%ii_'?Hg ةs�3۟g� � $�x�mVj�H�f{ b+@1��X )B7<s�1la;7L�}p+B/|=kZ]pCÔŻoUB@hD�hD:%`ay<3�� Fغi<}ubg9d@�IQ�D�?Q)Otz:V2_H+J\`6la;7L�( T[k믽E-� p�g|񨿽y F`�&^YbY5�ҫ��*c_' k,�T@r(!@x ) d52v_h�Y�h�sd۞*7 va/cM�B4!!-Ɏ)!@&�N{!pY3  �X�`0 Qz b˺5V �Bh�!'�pF  x*%�{>=U�m7qQ/܁z�-K@5}wn,�X�WAc{5*_{;FDJB%z?t?5 ;vG 0c,��`0*Ds6x*?қ@�\{"]0!lE͂�~y7D�շag�p �ݲ-,�Tw -�ɼ؀ C{蓽! !Jy>N5!�#5> ^SĈ` �,�0`|Ylz-XK�x:,H$RROZ ̻UK�k(:n�ڶ,�T3P�m_@8h9*!W}�wȿyw3/Թ\^S\Hgt o:B4sV `0J�� Fw⹟^ KnQث_$�u` "g�#%@BF.T4@G]�u �ڶ,�T3P�m#_kGFMCk gZ$9^C\pw> `�al\bGh�82 �H0".0E�auU40C@.^: �ݲ-,�Tw9l�O@^ ׽gi.Y@{x9w,2� �  ndKK<KAlݪ�ȾhL$3 ص�@ �(��98^)(_v1GFX�ݥma;7a)�Og=j$/"<GО~\"G;)e��"nb"ONc3g i�*g4d@@Ntq@b1{˻ x@vj@{S�;D;NGQca ΢gavM&QXwy Ǝ-1J� � c'^(o~65À)d)()"@F=��u|Rup @='@.k; � v�O0}}z4^O _d|!8&!.0r];w@/`T �X�`0۶S?N,h'}%8D:��s�IXgΤ~ o%@�P@Y�h}�8=.lmAڟ(�4$T^{8Aȑ,Q9X�`` 2ֽb" ztC@ �@2�U0nN�bAvyEB?�ڶ,�T3P�m�嵷$#G0EFMP B@mh f pyfΆ7eˮ$1��4Mxy�xtl�V@ S�zd%`ܓ]# �m]v�( �|"xy2"*^'MWy.zЉ9S|^}O9 W b0 �,�0 /g4@̻j��#%�rRR;atq@J@׸/wn].k; � v�`z3ijhVwyԇv?s(?~¯N{]a0] �,�0ö-k%V?pEH0 5�R/�@6mPq4!Ȱ~ Im&𽉺s;\,�mwYY�f,�~�R#3zM:@=Zz}tq90rr_ X�`` 8"@V 0S DoJ�;TXǝ݊uO�Wg@vj@G�p3?KF~?OW_XCX =!2"4Ϝq4c2=�X�`0=Mƒ_ ^yE5ҟZp(�d@򲨏Ӽ#Xw0�ڶ,�T3P�m}Eȿ{ 7g_M0i}_*c/` X�``8᳿ORB@"!�&)*}�O"� �D�yը}@.�жemg�n �ydž-$?nK}>ȻZ&ȿY_D}KQ�� .]^9mD �x !`yUP/h q-�8n!Xy�7.�ڷj@'�'Iq9Un>7M3Ǚ|_ePCM!aԤ)pW.ɻV3A �,�0a֭u+#Dyɔ�8R�OPE�9"@2��@x9OwB"� �m]v�( ��P-1׊�D!fn?x΄#G '� � X_oI۷y {�Lͺ�& BHd@` ܹ"� �m]v�( ��?7_ʌ</Ҷ׼xA)?�G@cH8 aC__3 �,�0b+|Y{1`,gH h{B",@GȔ n�&-=n@۶�P@Y�h}g?!^ue7&-z*PdٟO!})|K0f„r`X�``bF̯C,ŏu+% m7}( )`PM@2;"x@ yFy׍mg�n �q@UwkcͪXS)�P"E/K$hY*n.` ��X𥟳S=KF�q;4@�Y�kdP�о,�T3P�m@&9D)�8S)�`,#/97]uy]``�1DqZxsŦeKuϽo~@}8cq�@%+S��T´;*Hcm>@�P@Y�h}0?d8?EqA군NIv|0n]\`�1ܶ {J01~@ �]S� !`,mFtsX�hv�( �V�ZF'Ht.>Y�|yB;.Mp싖ȿv9nOA.,"�,_xX�``4{uߎoZ近oH?ۂIvܭ/�/d("8]w:�ڷj@�k 3 3mHIw>9XOCZǚ?wؙ^'  �,�0!K^zhn|u� tȹ^}]$�ExE:- hFa}Y�f,�۾@xZS/�W;nB@. O�]Mۜr`,��`00 Es-xw�U/dbPBk X bhrkx/ �@5e �y^}O_\cɿ /,FCԖ"u?;y_FWB2Z�W+V��ha OCkO=�ZTLm>;�"@L�/�P,�T3P�m9@$'�PD8~Wo !{?�r`%�Pd �,�06/wǯJH \�% �?�\@UH@""� �@5e �~/Dz>YM9_VCpx<nY1ڣ@Q,��`0*+V_=Wl}yk�$M 62@f�@5m>O`}Y�f,�۾5 A XF|B4&fȼ:^/j"D&Ǐ: rѷaN]81$.7J`�Qm]qXȽd?U@�X>@')�f *XDۼ>@۶�P@Y�h}y H ({{"eٷ]_Ff(8ÈQ]41dP��?AV P7<& IJ0P5``F L :f G{X�ݥma;7̞�|{?Z�pٴ~Z;"}r&y.gs.`0/$n6#,��`0z뮈U m}@ Y�pP@@(*wB�kwi[X� '�[!ىbEȿn_mw>C}~Sϼ ƐyiX�`` VgEF�� ~~5�"j}e;z�? Y�ݥma;7A�c99v# ٗ Dx?`o"bo0} V%n&�݊+ �,�0~ًpgW�Sf�H?ZoLRFD]R�je$H�@mC �T{,�tҶ�PMߝ �"o#�?"?Bo?)"I*K `-)c ] f*w FO @,��`0=~JlYbyw1 (@ B �Lm@=C}wE�kwi[X� s�ByC}gz% ڤB)*]� GD9N 3qb `0UstB� / �,�0. !.?+"��8@�$�~�;D�Az,�tҶ�PMߝ�<8 ,�&!�=:|W?ѣ;@7X�``ta ^{Xv�1T\ό�P"Z. �@�g/uwdvj0.�EȿjLC4OR�2~ǵ\_.9mp>r`T&y2 `��D7g{xg,?�\"��Ȏ7 b 5 € /@w.m �ݹavU�;4,D5</II3Y_y">w<eﳹi�Y�`` ,o})�W_C � )&A= �ݳ-,�Tw5 0L]CRD_ I�gmv}.2(:|A˦DX�`` .^}l!mױy)� K!hd?9am�1;@w.m �ݹavE�(B]l/ػ!"#Q 2]�Qp߅))w F�Pv&��X�`0k%YcR#@OH )$}�`!@8f0D�,"�]K@5}wn.�hy-%'ɿF{\_Nq%qr` S 'W7� � u&KgM/-LA�H<"$�"��* W�,zD�'�}K@5}wn�t7G=Ga} D&+`Ԙ.,1Qg-g�Qcl۲C�"�j�X]D,(ϭ�gp]�s� _?DIEBGhEȿfhI{r1Qg?ضwۛߪ�zO9唇�� bmpߥ O=[!lI#�p!A#"@�f �#d5�`@.m �ݹavL�kz / P�h~cQ L;dG(ɽACd$=/#]Pl<TmwVze˖}i��4oef<Oн+0 %H@\�ED�I9Y�hҶ�PMߝfG�;H|Z;c qOEFP|xݑpg·ra2Q*[iPu�X�`0a ^uXy߭DV|f �cv�R@rJ0�g!1;@n#1λ{�оݥma;7�_J�c/&ɿ@F�YǼ>_WB2=:^^�m˗/g�kn֏bٟ�t@ D="$S jz �| {Nڇ:#�P@�PMߝf˲ȿ%"Blss]K*۳`?Uԅ(*,P� � Gݤ_қ˪௉�Og@%|"�ٯƈmK\?͠n@�о-؂^MAV�H_Fn/k�ɿ|}=:i;;)�%,��`0jF=~S�H)$zz@=[͙d|O}Zvg ~/`Y�hߖ""h[v_\/g 1wl.DζUw*r�� F on}RЫC"@�/G@QE;) �]�sìD�p QG h_2ݖM қO+d?E|G`wr(:ޫv!xY�`` 3<O_K� T'.@bh@_4V ke}K@5}wnm �>zzSmȿj)Iz "BO>Z1z%bi3ͯȳ��Xt׭≫/D�@%hDT1,*&mˀ la;7̶�m `/u$_'*�G D[b15H@h],b{�Veˎ:�X�`0K_�ѭ8(.$̻DE�@'�mˀ la;7̖\GQn�(Bf'*@F DGk/wC*bg�BX|9 �,�0G<cϾO4 \ },`@+GF}N�-,�Tw yᵯ01Gp/W$]ShZ| oE0חH!B@}}��)sxʯŷ]/*hy&TSD:O`}K@5}wn- �߾&&7G!g^(PY�|_mçχ9GS1j &l`IU<X�`` nY<"^w�B`� C�!TqSJi{=j �dE�3^iEcRN/oIҋ�H ?$4=saO*wq=&lg/߮�Э�,��`0jgų_GEE� �43 @��ƳuM �@5}wn\fȾ~.g  :R�\?�m]?|?y;]HFπ (YWۋ*=,��`017^<H�*?]3 HAM@E5�/H>eTu/wY�*j0 "rڻ"_nȿB17~t\>)."cPЫ$n(^;`7ͮy�X�`0boC{J0"� EM�5Q���@ɮy �ڷ-,�TwY�@h|-!:m~5wr{\#us8m"� � c#??7)4�#:F"]�nC"A l� Wz.`k]��Vmp7F;LUCo�?Ӈ=l0H\/.v5kk+X�`` D7r쎛"�,z�)c\"@ڽ%z��=�j>,�T` �ݹa"<}/f>g$u>BAV&2(Ŀ#>I~ Lb{]We`�ydڶlٲ#> ,��`0_X6O:� 6} N!"@+dkH[KϾ;. �@5}wn^['?cOV BXSvfo<g0F{3umo*��M_kO+GWE,rLtإP� !�- �@5}wn �V;>V/@|#P/@ao+wц9ıl{aoU(`�ܾ<GJ�2_FKR@'? �b| �]�st"< Mm!@d!O9`8&l"4ll{wm+ɯ��`dؾmsū?UHU \"� +�)EP2ڇ� la;7L_a'OY/W)�?fa}\#FXC Lum HmNXeZ� �,�0 F.mw|Lz&�ЄqJyuL0$ZAWǚ{X��s,%�H; 7gp!`,0xo\ #F*wj:^;CnTg�(ͯ>b*?GE�2 GHH  jQ>k]Y�:` �ݹaZȿva"_ t6X(H#"�\_7rp]GIP쯋l{&�-_nɓ'�` +ۛ:'D�I(`�f ` MHtB�n O�0a [X� SEx�MCtt.>=_nG5ᤫ;(wzÉl{]P�Z)jժ#N;ǠGx 7p( � >V=$M\6*2�q�\�YQ@�b"� �@5}wnWFX16OI9NySO[$UsCGo;0}ה8�&Bl'{�R@F����`0;o_}1�ēHe �,^@ �X< la;7,D߽_XH1.{�'$_"D>ݧ>s9܅ l{oboG�0�JЫ�2 � Q1翉}Eyf <ߘWPqDu|eݥma;7̶�/I)+AE~)k}ZRH bPmmw@�0E�( ]@~�`0B˕#͙�)) Q�Y�\"@V�#@[�PMߝ&t"? CeU>km UN#tޭzH %b';yQȶ+V3Πj�@Om�r�0yjʹb3bn� dEBī/>Sb'yuw�ڲj0%Qmwdy^/_1t? I]_ B 40i-^}e^kQɶݬjG�вr>"�,�0 Fmf_>,^ax�P,(93(,'N la;4L�{o �yH$WCܿ0ӦI=w2D.v:ފ%�P@�0=8C&Mg� zlZn;"ܼd~_Q@'f*~cWwe�j�GƯ'HmZ{Z!?ɿ)Q?"1pU?qv,<:.NPg@i�W>SO}I��`0]ƺԵ􀎙#(t�_=�L ݙY�hm�}W<L-Fh#T^=3 >AӴ$"�bBЀu 8{2WgPT;lж ~J�yBj�~�`t{3B#ю@W k�(Y0n zxG|f[X��?KGPZ�UOWy~/* =Q_ :ԅNwoCA=cl1 �`t_FؾYPmCۣ,@㢀#!g@Q�ɇ.G`ܻ3 �m ie9"! ׎�蟝L,05S�CE'`̕(zL %;YQ -�w\�0) [g`0GJ,/B.TۡuoQxHo`Nj`,:��j�G |�Z�@z�)h_�sy;eR%u2Q7;AmM[�(� _жU!�ছn:d„ w�`0Gl]_>GIzj@Gy3X�sJ�}"� �@5}W4L�PkDK-|=߮o"&+AU*]ՓH l;?m/c`[y{��(�O� cepW6Z�\ I�)q?鏢"uUͮA�V,�8`>°8tUeH~=?MC8ǎ7=~|+D|CH"l?ζw �\P�馛e`0K^;?aU0/ �^w@"@R/7S @+=rpQ(��``X�p0}�j�?9&fJHy8 tZ";-}>u^dmg뀺 ;;I3�"��G�|#:lٲl6l۶-9oL}3*03hEM)`<0e5vt}'B2xUZ؃.V! G|#F>rĠ83F}#;0 Ƃ[oV@=�-+ ); �/ @ XX�hm�}1L߱Bv°Ok�yV \F8䣟=?SP;^<7�۾e lۼ m[_}lxnX[_�ͭ[QdysK9Y߼G֡ʞsn9P>�G,g IS#Gq>lW@}#>9RD8#ρÁesG\rswy64S�c_%L�Fcc<@8)u6}Cd؛z3R Ω�@^C00dN_vc�vQw;LS˜`̴IS` 0b1Ct{{woCJ }_=dз9D�9 �� .G,�T6 �]~w/C�D?fws\A6}8i۶D~ӺK/%a+a0r;K07HO .{" /A[FO7m9Ҁ,)m`swU�0Ǘ'�b�yLD� F' ͘Ə@h{+(7vs�+vCqz?aeO3kT 95i2#Yn ܾKaG�2W 4@F�� =5/�B"� �mlq|}%�_'aJEGy2M@:YEq'~7bD1ԙlپuFxu�_^YlXֽ�<,l^'/ 9ASdAF=[5f`a49Qb}K ?��˾@|:;H�Ȃ?ȽF͘O0t9#�N/bJ 桑80a߃`]c#Mk$0bupguoEWHp3`9� X�h�ayM[\$]'Ue /_EdQjIW4iu&kum۷5k`KKa͂a'`CZ;%ѧbm m6- �c( K= @( � @Xߴe@}�P �5BE�<n"MFoF.E�LHS�05v/��z'b�Jѷ=(ҝI֯t{Ľ g<{Dg0Ű' d~lWE]���=v*|D�u3X�hm�}0""rvԊ�:B5r7<fmpW._j6m6o/.u^O?+}^~iMŎ޴ij$@syF�rبè^{# 0rNoڲV�r\>x~C"�xL* @~R �LP90?6}~$�xO(gwP|~0>u+T|cwv<ρaq]q<ų?Y0֯_�"kJ0CTtW& 8�j�G%}3?ݖtc#p �;UJn{tkšw k<Ǔ˄?|ڴqdF �F�̶)gGW0�K֯K�z>G^Ո׀u�O�gZ��77IY@>ܛI>cg7aBv(F�P. /P?iPuDY]D`~]LڑSCw|_1 #d A` �R8 z' F`waK[<]*OA-ث/3,e?x♋]_&ll}0j|93҃m\}OGb-Rx6 t9Wc�jjY8`΂b&$Kߴe_hoN0h~]H `F77)Y��?c.;e�~0hg�U{r}9}[cmMͱZ;a(}I~ Lk`I<M!ؾu+-V8E$Rq�W*@< @�T�D��j�G"Dn_^~^@SHoD?B MyW1jtl;_Wۣi6X{z ,B(3}D(DߣpGz*~ʴGЧ*K֭{,4k�ѧ>`|S�#�Xv k,S }ڜ@|H9;�@9̳{4렇З}I^�9eտ�lO?y晐Fӎ<|D0a<�1xUpgĪ*a2?@�x�V̩}�#xD�h�g'Z#[aH+!�Gm-W*Z!+yAy߽O۩ac^=̿g`w94^h7RЊMБ? D�+Zcjk-�.S$[ �ZCGO6my"=YvE��9OPL#�)G!��%�Яe < TlWoW27<=bFȳ^ ӎ<&s`0fd`0e= Iz@` L-�d;� �y�v.�@�GeFע�@yvlmyfQb`()̼  ܅0חX]G/6붇`#[{$g~Luz &B�-"Qu�P @f{VT ŋ}*QBL7m-#�cO ~N � |KSPT*y"�L0QRLL r*'�U�qQJ΀,g`M�0<^Bw 0a7L1p!h^X򻛴i@z3@�T|y D��j�GeFg 9zTU|*z:RKb �tүfPsp,s:^'ll{.g&~9Xx۟j]=s빘K-D�m�v|Q* {[|D�}K|[g �ID� N P$@\.`m<;$х( 8}L0AN%#�}u7-�@! i�1szY�Q`N;sd�ADnGĦf[�@)KG`R4@TD)Y7 Bb�,�8.3�~&y{?^z e3gÉ]5jԽ~BB]'ak.꿠iS"@,:@?AGТd]h}$շvL�PQ�Hf�y%�q݂` ~s v߈+�6F�<qsqJb.ۄfOGܞ�P];tucx9S a7k8łt3:xى3v>0uo Mb�z%v T�jj@E(sjPl{2%�=e �`�GeFԩ&� W/iE0vh]AYkae.R^6luQjE`џoI zZd  L(فެZ{PF�QN"@ �w-rW$Pg=. �x_8yG�(`Zyρg$fPå8>5 M)w#r2#tO�GOt?! ն`;*7eZ`0r?|�BOz#M $QT�+1/F`wQe{>҇i��@�H?rqe.q}AA]lo΁c-]MexsE#>u} ,K�9bȒ>| o+*Ll;-FɦsM!gˮmm �<t�7gA,�`f%IUUWп$>5 v=5Sp2j`7ш<qLn{]Qwddy`;ph 0#{_/?|Fz�F*@ Lo;@MX,T@]-�h�̈<�4}WD_ g%*:8_*T.m쌪/nxgÆŋm IW^Qa'kX5'�ǽkțB υkf {\yҰF�c|K9hy[νb �z+"@ysB|pΘ5 &L@v�|�VᢰE AD ZFM u4S@ȃ1M'>S6eFEsƌ̛�Ԁ�*U0P�j`G H ]LAk K �m2#Ž3�p$Id/Hq FS=yv}W/x/auLeZLCrv#28N4 `"f3Լ$zAʼn}nG#�>v�Wڵp"j#cxZ}ݦ]UzU�u=o R�WkO%+3f"�k}~g=@8]R�u< Ċ*ĶlYGѼ(QSwo}7L?`1e>Hpߗ>)p`�Tٺ"Y?V& `*07񈢶�@�G%Fck5(8_!TbGۏ߁F]PNw;v=lZ<^hbjnүsdrN{}fh v:+gt1t8P)�f;Wߔ/#�_*�vWE]ۜ[�>f�, d˄��{;u9꾨`rU/�(=]^}Tl]'3PaS./)]� r3툷0kW `0Jџ\#F-Eex&xRI- $c6F`w�: s9hI? Ȕu 3|)x旿Eɢ&Ȉ60"�R r::v�@if�tI�E�:�8/xj��amwQ:\/�9i��DW`g+@1�)�+4 >3ߑs|kNJRX1_d"=rpDDp+6Q;̈́9z0u∦3-ENq=�)h)�$jW$o)�$XE @_E+�@�GG"ъ_vLԥ6Cws3o\ }#7ls֭䞻k�mǩh.@ A"~�LeQ?;2<pE�$WUH .`X �Sq_�PYv"5�pz> 4% H�Hvr<K�>Јg(_0.Љv}'ŠfTp{(>0k�(j D!qƘq;Ooxs0bT^VxeU25 d^0^zM] T�-_#*{� �}0xF{7_Bt;?�'!LsUc{n CWA!�^~Nn'Ԍ�\Qq"=ۗ__U C=G�X# �XTxޅV_1�ʐVɿwU �"?^Is@ZgGN3Yy�_Z^)<Tm/tS�Ec4oxy@2BwQA�$�Ҩ�4`漿][0&=a0.,f1г��=�eȨ�2`G�V,�8.0"0a2Ү=F�3?-(Lq@Pbk?x&q_^mo8, ˗ӿi/~/F 1�Ҩ6uLҏa<JG�S_ :&&Ip-ǎO,�,D�jf�AG6 mVd_�ߞ4wiCi�+γf[�ZHWӎ";�! ˝מQPAX)0@L02eL#0ވE䃠ë~ov<M}0qƬ1O xˏSb®�T(Q+ (�X� y앗]؛Cet@3Rbʿ7;ޚζ}s7\/uGO-P#Nz6"-k. dMRo׿O-ym{KOE�8cc$�܎R�D �0hي?od�6ED�mw'}lm :slO�m,� �y\ˮE�@Kn⎌QcR|?)vK04g)߇sr@@<5O-T `ȼ9; F: P@�Y�p\�s�sQ kB�/ۆٲ) '^cm?j:_bg)/QxWM?Emҏ;"�^~G4?'k!Tv]A~"�x[�&��0ap?M'"7wTl@%�LMYH|@yg?}Σ/z]Hd}Y!6٢�&Wj.x"xlS�L D'%.qs`.PSR�ɺ"T @�ya-(',�o�GP=~n|fz;?9I(T@#x8 mg;+}'Cz%yx϶_nIwN�}$t<F~Az;|bH_åI/Ҷ�J�Ȣ<Y m}G�PUWc+V 3oT�1eF�wH"�`??X)�~4B7N/~MBJTH=a} ~}k"&8TJ\P/c/fcާ|08s`0 J􏿲R"HkQ(�GT�/KHl[D@ �H�@3 {F?@?tW7 Fm]GK}aC@A}OC\khm[ڢmsIl{&ڀ@djے-y_5q:GK 1 ��}k&X-�D�Ѓfmˊ�}qsy,O5:(�" Zsj m &Lȩ5x1r;bBX`/>Iي)i3j L& Ķ[&m|EOYL04 gd48L0�mvK�PECO� ~=g׽* ӓ7 q`0`1NcPsplr`c뒀!ryt4j,d>(Ϩf > GۦVљ+)Gt/�\#q �km @�5J�h_*U.�=&(=vIs5ڗ�vP�F |]q^"4:w6=[i1,4Z)Yh0GE77`žKcbœ_>GKSOI=rA_A@*@ �B{PL$,�`~ʉBV)��3hb@X>eCK}UN}>+/)"t[X=�flmX`ж)�EMښn%ݷ��LJ}߂kV$�D{�w3o$:!�#" p� $֦,r�̵ :h|;Q;(;3>1@f[ox˔@~F?=><} cXo}Mv%�g R�V� �~(�(��h�@ܲ�btn?PS�1<F7G~s[�PWm߰|<{m⯼`w-lojX k~$A5;d[9ZSGȶҾb)�b%�� U@ĿlĔ2[8X6`GCGD��J!7M؋tg 7q>@y\b̍m \G>V$PT)0h}G3AeacH`WO}od D �*>))О$>@+>X� �X֏OQ7e(_FUS#t*y 0w~L@ؾuFY7`a 0뎉IMϽ�.&)m` ])�IxHz=@.x56nQpm,+#h"@E�T5{= +כ5�}F�P] *Ma%A+ uNӯ�\0P^+=}6ƌN?v>Pf0!QeݛLj$fA@ RqA ��#@R,� �YE 2l˛ WA=ݎ~s[$n(^;j{$T[/W_MW^f n/ [ <' y*QH U (ւz-g]ȿfSh7% Ncy`��(&�;�YqIzD�o]�k/F퉶iQǘ/Gr["fE`/�%uLL7fxvk/1GV/0(r{ f*@t�Zdu�ݐ<X�z �I?焷}F{0TQf�sNz(yL-YM_ [s~?5.v%#W=5eʒn".;�OHxv6vM}SuDV*ӋY�pM->�uh"�+z5+6�i�ca+��r@ٚ�jIt;#X�Xd\QK� cm!@VRQS_>ظv r1PK⯢� vM��rHc ,�P �-h)�d!</4 0cpŏ`ܔPWԅΡnVƒ\/})AϐJ'#�Pk׈�ɇ<65%$F6^;N_ -}[%�e�0Ѿ�P2T(ߔKk/�M[Ck�@Ex@Di~LqP+]i lO -%0mަBn8 v?mA_/ ?V<$i `@DP���0:6"�c1�`]%(tm|X� ,#|e}l/ ei�3 0B)0oJ]@]h]o߼0g>p?I8u ?a "B -ڏ2Ik9ȿϙ7{Uz V~<\z! O�0 5kօ &�^J�Z3nO �( �'F#P=G{ zW �^zԪ^_gv͗/ifԁ=FDfl{CE1Dn;bFむA5"d�(�s:^�`ThWY"iLPlxF`3M ZˮpE߉:ԅN]a٣ý^[֭q=Ojf% ^甃k$8Zθsyx+pQNƲN@̔*;k?NJ\��8`R(�|�}#�{fx�Û-B@0+"F4@xst )FrBACU/ѴJ"CT�kZ@TZ%- ..�(�S�0׫ĵE?KP9 �dU]u1W�0#"@z^:"D&DSf ^;n}кɶez5W攱dd4(QR}~ kmq{<ݶ:D�$T$Q[,4 XÍ[wjp�J �fcP#�$B査չcٵ/e@/v۹J<06I/\Pk`~U[(n,ο'bM[!8?q@(�2 G{sD88R,�T �.zȿO|dxq Ԣ;8R׻Cn?߹ 6&Z'/I7:@G~|L u;w>WDA 6c@k�g+"�jE�K)tR�V:��(=g �Ta^(³BlQB@"BYN-PW+ ՘v8>7``,6o[>H�@}y F(�oA@^ /� ,�[)z^z^GF/_ ғ^ZL/G,ukTZ;jۗGDE"^?�!E\}T2ާ ou_@o! W/D�+�D{r@Gt�0k]">B"#S@(B8mN`@ 0�V}2�Oy'`4pOcb0|ŗ>wq+B.T�WA@ N IB�M,�To �6$G8T_KDG?G Kaޯ)xzR7;!ܾw5Wᡪ`".CD�4I;=~^@A'О=;I?>E u� ~!*::�@P2�е?S[�k�uíN�pE�Bms#Jqb򄏡fB^& iᘡ`h.>p%;ir/1K/[#^wQ}dU0Ғ U@/^yQ�,�8���M|&CE! 6a:Ӱɶw./_N% iMQ~VF>\ğS�3\WEI'\>B_&-,(zA�hiaJr0\B}SeD�1X\b㏈~nc݌�0j$_p|C<3@_zYi4@1:lj͛?!۬T�/eT�NQ�AŢ�S;+߮//4{:60�䟖U~"?yWFpYl{!<ƒ߻"7?m9� ʪ:'_v H4-�-!"78ޮfئ�0=Fn9yWcJ,�ٮ?�J LwG?yP;JE ό \RUZF)!mԋߎ`1PFϣ/\ھkIBOA@DqR�Hs�X��,DS F _(p=�;>sO85뽯0߼nsŰuޯe (_-?M=á]l-Tt@`y:S[_jFD:(l)a&�Lk�6!@=�V}\>%v^_C�I_hRiK>=!hy~0yTƠ/[=l6s?(\fӏOP5^вG�/x=]A A�,�tz �8%�X]I}ߟ _=[? mi;}q;)_zүBsF׿y AU@=0W)cnO8�@ OWOk8S`�J� wնCF@XVP%jۂ�)ZB�~Ys/}z_DhXٞI@ xng%>O$Dmg[o1~:l }SVAxZ@s@- il~|~k'Jm!G�Ў�7�?hKy3%FUM@<{Q�`,u}]'-[kuɿ F==v? >Bf;?[~E )�~pY}- J*�Nv L@tB�P Nt-�W}S0=:ɋpdSq4{N࠳.O{A_zȦ{qX}z(pOGM kN�KaR E � ? *�`Q�H=k�il� G-OՋr k-rl\LϱyzUע8<О%m�@ԷZk�j3 v:ǭ@ݪW�G@`�Q}f~!{L# o3S��2rmwv �Xя*hS!{P{qs Q/ܸf53/'LiKD(N(�>*= gJIFZ/q�`Z?MPk|0~9m=tz لKx3H5 /PԘEU_9Vh!8E^C&=]]7V�a,�Oҩy/Ύ?+\XA� zaף0mr KÝ{)! 4 m�'@yv&rOg#GB9Uۋ9?~uz<5-`&Z@�[�WM��@C�uWnj7)�I9Ŭ9_r<󶿃:w_~`?5o=1$?4!�sChdXgE_-32�6݄-Zh-jT\+``"�ζMw>L8e+;U4�ܝ ӷ^LoZ/bV4 /GN`)徔!:l*ܶe3SE8).ӯ(�Q�˜R[E�PE%�'}l_cR �?,&�}F W^#ƌ-u]u 5{_;?6JOT0]uy3!OPk�3և g(t#kg\W_վ˂��`-z"DN>B+ tl E" ԲF60H~N4QPyPM Ƌ^c4`}!~!^{Yww&m ' _(�s@X`jZC�WI+ *}P^N},RR�lᅱ. A$zqi7PP6cooE F [hW0.XTȜD0S�v_~�qAr?6ƹ3U= �.  �E(;μ7mւ<Q5 pD@V}d}pytmD]<PE@FN;oO  } ^nG'/]|4T�dsAk$# ٤J%Q/bκ,�T�9GtbFfe#ѿPM2ߊHcw^r4J]Ӫ0j{ܶU͐ӏIV ?5*Y8ʻ7g: @mIw��,��q(Zrcj'Ixv~{q"@#B{Ԏ6<~OFvYO=mW~zd�_F$kF�fX@?KP9 �de]T[L7B yGW�,�R<:L{R׳,z2m clߴekgucO\9R2/^Ll'^I*X^߯D 7VN�X�^^l :�ATxR$B+jd/�j)�`:ҋ|";~ЧS8i�N<:Q�et~' �~.8 y_Z-�4v$ϔk\{ ?(c';ؾq#IMfy\?Kb8"ԳB_v^Eh'f@E`^@ {T-8)et|%0j�xBi9@ Ň{zq]{./+lgo^{ohGQ%~/+[ ad3a,P`SFEED@@!* "82:2_vى]@ ! v}vwuwQrwz~g?MW;xю,l<]�S i ��G9xARꢞW? ^puƤGu^ ABֿݟN>Jz/M^5 .� ^5_)�Uk�hN1I헢?. ��Pn0  p͌zkS`@ (� |5 ƞT|1:^)~qq@)<4V])ߺtcS]hG?O Q� ~��S;L�]Y�o}ݢ>ˠ@ 㟁?yaF/=tBل {%?99[K �P?OnY'!oXW;(?p#����Ю⏓HQ&Swך@� ]Qb[O &cQ<ƕ ҳ^n>Kl%(�s([@$cT ��s?o::a sbQ/}3F~ (ZpF%91{w^||]bA-0hyWP\Dz8?��p` ߃bn:~+Q���<�`}ta,6ըS?~\x>y6 _ǒwGW&8S Pn5v;fv4fxt*!sof]}Qx�p�@@� ;]�0E!�}eUX,ۼ�yb�&y[6�1춄<=o-^ sf ˞^|V`57v(_$(dXK;0Hk"�J$r�@ޮ}��l�҇1až �E 1�hq_%ba�y?*<4n"_ &´/OX 2Hz{z5<l׊O !BЎ�%Q�١! �@�(zXاd.<Ǐ^wpu04zvJm^IKn=DXx1l<_KaXCo^_Y/3�qV!5@w �n��A�t>ͧV zs_.ǹ%qa/.F`}SX#0.|8R@ 5cn']MlK/Jz/5\wX}L_�!$�Pύ �L[ʽ�8xEMG?m�U8`^kWBWIPtz푇`Y3!^2ܪ@ y`|ud5ϩK8?�.5_-ŘNf#�Жޮ}��y�@mw`wڅ'UX�4ǤpP � " `Ҿ-C2FNGm4uنh&{7V6 ��Zv �#@I@bES@� �y?M&Wa&\ :/c2ez>s/$lC\4cٵ3mEH<y+7-'^�m7  �.̣nx8V[AqKh{cyAӄcA� Dj>u(l ަ >tp%gj�pHx(�Y�|- �4� ;]�0M6pܙ= �6vEhɐp{wɰ{y|)p^Ikُᱟ(K\$�c B=�{x?XOqRx<QT$�P۵o�=��XaNmܖ~y�}E~~/eg*GW`;Bl?)xG5< @+}"{ pI/h F0#@I��Y++�0!�.�("rKeg1S}Cvs C(שgk߃QQxg=�( ~5_ �595俐P@@z�f5XP@I=�Ku]&�C!�@�@7h)S^ȆoC�T>Њ)UyߌU E9䀏O})j4o{5yދN7FQ� C[@%"Ua+p?J���?=Z?Rݏ= 6}O4&+Г5pwgnah}?~YcP*tVmM…'w?I�k�z(��fNqNL B�ޟ- )aoHu1?n`ـ~P*ҽ:19-xsC' 0Gp�|D(?]/Q �O�CMm)�҈.W:cH<~`󯀨胹eu丹Upj\Ys1d7{m?uP:�φ<]�@T۵o�=��\fjz>~ d^Sb �L2z�qC a)`A ?uݤ_FjP*ҽʣb`! �wFdQ�s�:_�`gsk2>k< pn^cM a~ ]~ӳryy=SjYVr>7'49r%Gt)3OB�-]&�C!�@�KomrcpHh- j<XlHƙ)<Jʮ8�Auwv9hIߊm1gs!3- �p(L8�Zy�m[ x�mߦE}_;�`��>no{ :j+%CsgëYλ7m\U�=4,�އK D7Ծ5-,\~G�@7`�B� �:uۻbhlgLVFB_3RT�2b r`:Sv]:55zߗkB-x:BCQ�<S4,@��mkoxפsaʣ\x>' 8k -"i}՛og2?M ~`*cb6yK/~rEڷaD+v2]&�C!�@� �pQ_Č`0K�} wF  I[f V5z;~Yc cX݇{ lٓKQ�yk�j@x�9 � mѿn=\iǀ��_OfX) Ϸ?Svxxy<ׯvϙ-c9BҳmW.[ s8>NU||Lm׿? a?_׿8Ce_oe-\, �n��A�t>ۤ;sl*gIװB?Hc@W/q,Ư| 3@o ӎ?75FYw.gHQ�|ACIQ� k���`2ʢ��su�] Ve�τWo m`[y>LX{(z֥k矓4o*P�,4m?? �͔d6m � ��}֣MwԖi8LKh# { b%]k@�^eZxցR{ul$�CG}1] uy?Q�j0^YfG��\`U|Ux>wZbaY!/Խ?gI酅ſ..�hne_K K~]?b�G�t_��@]tgֶ8,v2c]jH)b4@P-Cu&v̎,G?͚GyrEk@b`.Q�2�H�A��hU�P}k �O �8z9�g]ܗϧ7 W/ n=S/P-q1`Y)�MH6i7PLݔ.uk�z(�� �p/e} FOF`(̰AxxxvCMIE|#q;E Z/<բ�2@#IeZV �@�_WZТHN)g{Q$%=IVs;#[�_�V)b�JjM�9Ŀ$0yo\g}0 ׉�@=B�B� �:u;6�m}3LE>?^C�1D 43&QQ Eס'>0Ҥ_KQ�!@y�7^U�B �ۦw1֙�f�wt�ڿ%>y0iʎ^cI en EtoZ.<^._xMS�9u_coگg%.1<ȇ81z\�R]o׾ �P��4�{ +eK4^TMk  A u�tע{ߌ!пӾΖ|+)\OP@HJE$w0U[nz0E�F�ڔ.>zӃq6z!+Ҫ*z<<~Ma�) en EϐW.zm5,yd-}ۋ1:-JV;L�@}{& ��}֣@ /Oa2}-zp2TfoS�d�'_π$#kPS l/q@[ /-P�� �Јx XwmrO�s?1 1 PRTjQ'{5>~c{l½W]rb|=-[}Et_Fs01M?4"_E�o�@ץo~���x߶łI2qF {)v`Fⶁr~Lf.(~wZ{<Q7{[lG~5 ��xtK) �{u��|S6 �yx7yyDZOoZcm8n,-9bt>~uW3MuYSIǢ_uJM4�LeQ~FIT_�G�t_'�@��E�➿E86]�@2A�#!|0V�/?ccjDE4H[Q�,ۦ�'_��{^̝;�($�h^M��\S>rx>EOџ?Қ+ K5.yfs0_G_frtc(|r}��݀� ��}֣e}3Yއ(E�TP=IR(2};yH3EB}?U�Xdr�Q�LQT@�m�~ϓ]Aq� R۟</GCC?1kYwI(zu?}W\o8*_,S�t]x??� +kB�o�@ׅ�A�t>Ww,p]n@q^ 5*qce�5;oElW2>HȺI_ˋB�ChdErC! K�zn� k��/c\y?>I/nJ(s i_ya{I{Ř_,M )�ſM?`9Ƕ M�]�!�ЩGo_ݽƤ'k Mf:_�V YKϯA�9DUGJ1`:7uE4~?$ YPt%cȤE?(8 �ЖKe�� sóB@41%�V|snQ :�|Ѯxg?̲ <G{ɵ0~$/<B#KzthX.GeT%;�VEq/�uYD*̔҅Zڻ z�@�A�t>Ww߾c>姜L+�E 3%3 P܋o�MMj!,G L1~FO<[Ѩq0|+˷?7/q@ٖj�D0&B��H*[:#��IDAT:?Mv?"b}t"HhaÎڐPҽ擎^<�eſHJHZ\f0E:M�]�!�ЩGo_ݽvT:zӦ =UzPi'L@=m1Xk`鳢үo m=<=k(�Q< @%`byhi���<*Oro�R?<ueӫc<BFV/_y pAϤE>0_X-mIqJm �v ]h]?x ]�ݷm��0Ng=z^�+x *�E<: +�L.@^ֱ <�v‘}J(VȺ/^~m�OS@;D-S/S ]KR XX*I!�Po]U%|à6?^r{tx�-T YM sќP!?[sA/�dв?r?$R?&�PEw�.�@B��@?�[aҦԬp �| 2A*Dj=ը�- l<hcpy'0U�:��(�J}Lx�[@3@��V%rRU:�``;[=gsTa/,u)�hſ-GAiT.կ[G)�N�%�Q��g�Pz`u�RT  PF h?'Ec6~ihUf~-YC� �l[o ؊O6��Y*+J�Rߪ͘0Y�_H B?m�U?ƛ{νFc0�e7W]Y3XŚſ-�+R6nB#�PEw�.�@B��@�Ugw�ܨ~٘mJ jŬWw`8h 7vehß8n hJ�D&UߕE�F�Li:?kMЄ3V|`=bz$#anGS 9hz2)�4ſ!r|Mo]K1{7Mf�N�%�Q���+t)g$T Oű|iqA{̼$=n<ZguW[2[tyK@`(Ca�y 4��h'��z8KyC?QGwɵ=頌eu_u4lՍ /荋�AYeU?@aj)�Tѝ�K �P� ��(|0A�\�_h�j]!4U V`J* Wq݄.BYYB1CѳW?}o؂P 0e_R r) �ƮnpXwmg �@̏cfl+ELA ϙy4?.U{A_@/ yn ]^7Ŵ~PO�%_Yg^g5�P??AK�҄2�;�K@�F!�@� 4� 3 �JuΘbԞ�e+:jb?7`;lO6. *oXn= b-U%% ʋ}[1@��@-7Z�`J_�@'/3>~]c'x-{*_a'Զ~ɤ4Ma?o �Ut'�`�(���_VXv+\Fı=�?; Pƫƣvbk�v>zV4i#T] Yt懲٫w=��]@�p`n`X ��@�M?_� ןnIpmpϥ <҈A44E H"7}NoB��,]��P@Ĥڂ C&R�+drd +{EѨ!vƕǵbh hp'�!BQ�@y1/buqeF4'\ �xʹmcm{)Š�R>G,N2@yeډg¤@i'{ݗ>,9Ն )�)o[+ {D]jC �ݷm��0Ng=zi��Ң^i~r:�g<�Rn? �^-(`^,pnN05fahHѝ j"y(�5 % R�t�1��G�F�??�|Tʼx[@c:{Xt,,e9_WR�4*F%@@J�%)�%a� ӝH$5vOu�m7 ���bo&�?7r/j*o q#!C+=M?eO}`DY1\+DUQ@U2v��su�JL {Ȁ�)V?Cu�P~s?e<4[ ΁WROpbҜ((^ @iχjTA\=Hj3V-<۷ѷ�۵o�=���U=@{]sT�qD+ ժa{@ v|4l<"1\c0t}Œ0g!L�ӯ(�H1}Z`*4��'~h �}^Ruػdzm�/[&}][C <^k8 J./.%J-vPK?2N�h[�,]��A�>"t b! @!:Z�y*}[{h|M� W?Oy6� ʵL�SqK �`l}V�j �D&_Ev~Q2غ/y魐B޿= 5/g̡�6 �t]��@}u�0/!�6e@ ? ]~n[ǝ5FNk>^|% C~b�ًro) @�� �pۼOϪ�/b*=�f̄w |ݓp3s(Dhk�h.�)\L[F{iT�6 �t]��@}u�%X<IƬ +cx5˟x샟m?IvtpˌCYghnQ� d��@z&C/7Z�02� (�. >X Z |?_:c#ϓ_Zn�0.<'ON\wJ*�t �j��F"�H?!�c(�r#E Ќei=,5 y.ǟMj;wП7Gȫ/Ym�П\ PM��s �Ѕc�P/�yZ*|3GKOҽ{z=5Պ�? ?��+2]&�C!�@�`PzDj�<^@�ay~h!v@#& d�@MZ{cѨq}Go$ptwWc؈M=����Gi�ܖuI���(۾O[HiQ:>p��qsb>\kl}>Ir`KJj @KtQ7-[oX~]zCBſҼ|aB�m�t �j���&M��Zle�_# (1\{`CyeCuC{.=}P4�5_l(E�[��c �9�99K ,uw ӎ; # yn Ez_7soޥ ^=u cr�y�oeuo;o>|^�ho$�uC��A�\bi�:oņq?'c”C6ݾ#XbWlvR *h38MۤsV1 �X[W*��Fsnzï8$pw}]Pt;xګNy(sF-fR0}dįC�}�.� B�SY޾�|QI}1t-l]E[jQ@+G�SQC0oG&;~CA8hիaΌ/[oJ w7E@�r?��� GPdS~D;l@?3ƍ}/G}PoWVB � � 0es_yuƐ�@ �X�5 ��# �E1U<쨺/z]�08B]{]G鼡^1HwOS~<Yi��b�"Fmd�SdY[��X.D^?�An� ΁l ~ҏk=YgD.Q�ܞ1sѿB&r?^DH+J>9�*N�%�Q��i�eq?8V .t5= d86H.rqцa!+/xuз&8Ceq[n2*�`KFQґ� �8%ϖB}8BP?9QKr^]kn;IXfw,P_ڔΗn\e^P @@n|�@{%�Pk�z(���еeØ> Knƙ +,t;-l+02a8oGc\+P%dQ;: _ST +K` _,4��־ K}1<eb.zי |"X/z nq$4Wng o`>1 :rA @a6 �.�ڽW�ezM�B��H�.?+FE�Wx@Ϗ(1lJ^/2`X^`yg$=Ϳc k�ZRX+^4�amKp��ylqLD>�n�&SOMVڷO>}Tro#$=K/o WSS�6mM N8�.;"ʾ u!�P^ �7 ��#�]K@Ad!s= ZY*@3{:hvюHFbP sO*S\Sx4�0.O �`l}U�Ưof`y?RJ_>;\ƹ%={=:/gXo1i*o[-u*J�Lo׾ �P���v_PLzL@D�pcYN3`aA Na&{~i44fV9B5]@ϼ_4�p! uLi��}1?7g{SSl۶wߠPBWBѳz 帣`Q1R9%xS%xi(�*kW+~?si!�P^ �7 ��#�\ V=_?Ƥ9 zC�㛾#>[|s=Ji�R,Zs i�[�H�J3^�\9(FNp|G/TO~g~ags~x=-) o�&] g` E +Ǥ!M6�+2]&�C!�@��j>5<X�7 º(�٫U DY*�}vZm7gU$k1/�Х~#�4��^T�`Ad]�@{*?i}sk? w>5) T C�91bҊB�@{%�Pk�z(���omSek{ @J0}~+]0oNf5JpAPty7Oeo<xi�@�6�[4�OuS�p�q)_OT#�D)?6ž7^csU+aI[/(7j �S{R]m?&D�Će!�P^ �7 ���=�- yT y �M!!6UtyGPd}|~4�?$-IH>�@rL�H��|N/`c~L�SgP?l\;luHp*�9He �Է�۵o�=���n �@�#]*Z/lƌ=v4j# P ]:\d1=+i�%�@Msy��ckU��C'<V&T�`Wøm=Xn5W�$k�(J. PY �5̻�9@]'߀}H] *J�Lo׾ �P�� �֤ PZԟXIl<@b%E�<V`Oܳ'dC1ݻb<lMEzud汼e�n-]Pr QJq[ pƢ Ӈd㤳KG EAv^w<?=# ybjDL|`A~ _�6 �t]��@}u�$莍 y/bu+i3{*KzPZ}n;_Gb(/y <z̖|Sb@nt;�?"A��ږo?d�8%XJMePp8lHԽ=,yz!~b̳> �TW#T�?G�� �fyY�;�K@�F!�@��O. @6ӣT� �H~ۊ6֔ˑD7l,{rpqZ�\���l�n�N?c"�(W�5�(� E c]ok~.I>u,^qӍYQ9 $←q�fڼI pۖ �߷m��0Ng=z>� =/uX[*@^0g N&n?5C==MwYlc62^ oOܳ&F5dAgX+B� �sXGq0H�g�XיL; nCB6CN⼹pksZP_w&],-ym@�o? �k�z(���G~M. fH˞~S*@5eod ƴ czaS/Gm({(zVys/�phlj,y�p[b[,ePAr@�@*Je�z[$�L;"XݤG¦7Х:fKoXuXx?C@/ͅCEby4LYI۶wH�o�@ׅ�A�t>WA��gfh'2T��jH')R謹 `3ɠfLml?<d0rCѳnW-[ ec��eu�r ()�S߸�t2�5TO/�]{.Yg@CfȺ=,ؒï`*?��l� �0L:߶C�}�.}cx� �@�=3P"莅 ź6\,ҙ <HM\i�Z½.i�-b@�rqLQ�[��W*~=Wtd�h'3~LsIP.o7kV z%\ j��wyӱUN(Xc�t'�`�(���pםl/u8{]qY-،eZ[h>E/46x i��@rKHU"�ܨC2� eoI!j �콟 <?}<H)�eC!? Rr�POu?LWϱXc�t'�`�(���pE.`~D*�/|_.W,J (iڙWF֝;1 H Et_5ÙjTK5p@oc@�@ۂ 6"�@ϲ%V-oøCK=#I2x0o$s/1iY?5?SbLLV,D�o? �k�z(����b#� *jA&õD . `}&PHFb(zwq [J_P��x`1 袒W �S;;p�z���l-Q�Q]觱m{u�wPB{6IT29p [?#x )~n[Aۖ �߷m��0Ng=z>�T�۩ ΍h~ޜ r 1qx�H8ϸ<?QC1CsǺ/سvpO(���J��h�9t �`X>~~ܦ\=ԭ矅N>֡/+WF*e2n(V�S�@zM�B����M� NC�mQ�ylĦ(�\Ps>:iag9I]1Ϻ/Ywiy<]�4ewF�(G ��s @o2];֛�;i C7u᥻By<)gCqTC[�5:6v�@����tg.Q� =Q[5%@ E81$G~%7ZpuWێWi۬ � !M�-)M �=[�D?X_K�6a1~,]fKy y|ܣ_`Z{E~3[OP{2Q�;�K@�F!�@��@uݙ}I@u`/ynDc/X�[ 2s-k $;#}R=sfvY@ڔ��@6"Q/ �� إO[k\0Δ0c'g3t]{.=^֍!0 fx�PG�%>Btt|7|~C�ʽ�(۵o�=���TםY �xcm[f8@j@30ԋ56Ќ[{gc_.mؒt�E���w/�_eM?pMҿ7 3O<j �w2z�OxJtfh"�+2]&�C!�@��@{3Y[*�c@ⶀ6:n;uONsS߯/_*;HV�,i��"R #p�:Nx�(�<O�w S|sq?i}ٰ9r?ڶS瞆aR+9@/K{жw5&�PMw�.�@B���ug(�^2cMP& <́�'}3Zs-&{eDz/�0Z{]ԥ��_M�%3tmv�\�b>c7G/x =Sԃj�f�` �sق�S~�hSo׾ �P�� �оrV0�? GeϚ- )mP*@ڻ?Om/GT&#Ř71Ɵ~bf�M`✚�E?�{�02�O<b_1�hm>Q AK·WGs G#x͡D oh�:6v�@����)!i�(�)|6SR0 �pn3.Ʈ?ad̆'/:]lܺ4!?ԈE�:�i-:��4>?iAҬ)_GE��2tXo~)#'˞zsSU}?3d�&o/bJGRWc �Tӝ�K �P� �@�>]�T�1 �ŖE1^B luu ٘ YW3aov�(Z��@*(- `�.Dq�.�nYtA6E`Kok?>C]5pM28Tk�( ym ZHa6mKFYsc �Tӝ�K �P� �@�>]�@KZryn-8_(X1C߉F0d};<Y(MR*om��`��vu�j�S�Ќ?Faq ZH{8mtO/^s=r)E!F'  ^y �ط�۵o�=���ԫ (�Hbaaj��b(o-JT{wys\ɰ'�8�"�hI6 :��>�C_ooo:�7&Qt x&{8D+5�X]�`YTzxY�;�K@�F!�@��@Zɞ|X��(Clc
t5`ڙߎƌGBwV ?(ƍhW[6`��S��Jz�`@y2'{ιM [KBx>Cݦgs[p˱GB֛y ^@@\)x%0߂e �Ps~�hSo׾ �P�� �PeQ��?PKlQ�Jwj\�5I{JQ@>D}|PAӝ?l/}5�`�P�3\1KA�RM&q�.&Z;�o#xO%~ z=JH/��_,��|�@M}N�M]&�C!�@��@gtA�mP�- ɽty-3F0Ǭ~ʅJ[銄`e/'Oei�y;:�E�?�0)��m?dE%6a7A~>Eԓ50焣ak(sROk�s S�x�N=ۮ1j�t �j���tNw1 �& 67*ŋaϚ) ɽw(81ZwToV Ř%݅,zxU���h ��R}o| �Lsڷ �0|q�Zw>8i~ZQF9z4o.K m@_)ȣ�]2 {;�" �8:6v�@����tEBk��W�0�X�0qXVoߘ*ctwK^y'y@K6` ��{:S/wmD=#A;fo</�_Mc'#. �T'�Цޮ}�� �@��3Y019,�G^:W]N ZcM}xH$ݻ'N:k �Lu�"G��R2�P! �ı[_&^]7@Hs0oh!4~<z�ӄ@�T'�Цޮ}�� �@� p/L% @�yi^rC(�)"AaKl9Yl$?|2:� da֧:�T��o�R$�m� ?1o_ At#? [ {�Q4zEスg��6 �t]��@}u'�?{J h'eQ�q,]�M�(�왋Fw}U%`FpEvxW2/�#J��۩�QV�>;#q}7�o0HBz>CUpÀ\YH‘D�&yv9&T6�o? �k�z(���+�M�/xE|l/�Հ�'2=8;A2pU|=g`bnOd�/A_�"l�|�@.?n�}#�(xӃxus �b `M6.ˠ<,>p۟oBuTPB�&�5:6v�@����ѽ �6O�#eQ���xۦ�QֶN_;o-؅$ގ,SC�S >2#�� �d}c�@Bcao] QێRf˞zRo-X�y�ȋnI �P��ݗ1 �� �=݋^~(Q�ͬQ�0ԋqo %d[b& `(W`g@aB۴ "�}׼i9� V#��b׬7uW 3|ݗ=49Dk?.2‡e �PS~�hSo׾ �P�� �=]h#�~K ~llk�ןA(lO>wl/|߰~oۦ:�Ez~R0]GǮ R�`*�gxX?�qt[>qltdsJ�x1Q�t%t�& \:B�j֝�@=B�B� �:u;�};b1Q�8g_xY%`W> �>ʨ1jT$M% ?_t: 3��8t��i|,}o\�r�}v@��w;&}{W?J(z{s u/ZϹ`]�/?u�S�@zM�B���^�$=rnxym~.zM�@bS2#Zo]-c_F{(zb91ȥX ��ڝ �`�.�h;Qͨ�C+h >=Cs߻XO-$jl# 0i?<4{|i?����!�ЩGo_ �%=:6Ж?S@,!b͸h׋l l}3J(n(z~ų ((�R 5Q � �Fڿ�Q$jZ�v�"a5v?`~Csug?Z |]+[R?\{.mپ*�jл=�K@�F!�@��@u� �|8/z(�w?h|I(n(zS7�$^@�f0h�@Cd� ^U� 9QL?|ا2R~27ģ�~�@t'�P��0Ng=zN�wNZgVK�e7(Q�qi�[hwM.)=|?<o� U� ~�Pw�_G5�*Ro�M "z Le !?ߎWswIO^?[PG}m[֧;z�@�A�t>Ww�澫��|) o& �d`~[O:+sX(n(zBK]ɬ9ymCQ�^4��~m�ln-e�|α�!"-f~>a{{Yw=A?z>IOeO/4K^� @zHH�;z�@�A�t>Ww�澙\у bn�0:�i�κ,;=7=QN[J B]B��@[��[J��59�5c&N=Ͼo�/!͗_;O9&z8=6PaXOZK�D*HG '�P���!�ЩGo_ �vő4��R<޹, )F95, �l/EwGײZp(*� �)�@'�@aWV^�/Laп{wOǹ')/K�fh7?Au'�P��0Ng=zN�w�7�g5�+Db[n S1+2K װBP b�`+yEW`�iߒr�PL)r)�3CR׶l"!fo>L޶!`.'�@'#+"�о���!�ЩGo_ � s1P+�\�6 `%јu' j%cvuų ��Hs(#��l�4PO o7=ϐu/3r_��+?uu'�P��0Ng=zN�*� mR¹8/p~6y{:l̆-'5V z?� -h ���MT!t"#|m<xQsKaZ `$sPu׿~qw.�Q�E}{�Ԭ;z�@�A�t>Ww�n} �C �okq �[@3.4f׸S\6l(R=?Hz� ��\ O�i 1G�|~�[ �577x5JHO}.y/Ļ��E}ㇺk۲> �#�/� B�SY޾�p4 י�l�9dWi��ֵ8hԑhtlX Fy9�< z��2�.�3MȨ�4c{vv<ryJgȺ׭/<g -]U�y`u����!�ЩGo_ �]�&�ٱd�«/*u({�v~6NYlȺ=<b/`+iH�B $o�DP�C9�D�a�7ǏVi'3dSox.�|яE.�R?NN�!�}!�`�z՝�.Vdd8��}i�q <[�knxA^ս2_�`*cRA@�H>�c*�` gL 6�C�5&;+w3x/�p" =S""|*3-*]�N�%�Q�� �}�Z�GV i��@}?qH9|Ϗ7�@è�;�(ܚ �w��\�||s`Ͷ,7!;#.9>lo7��! � OFWk{'�PS~�hSo׾ �P�� �}MB;;�M�@l(HXԻ4>ϓr\4aT1;A\TPx]�}�ypv�@\r>� �J �Z�@a`X A^? it*K�@�@ݺ�G�t_��@}u'�ো1 mi�=b]�\ws`ᅦ>qpPA*)��bؿu'�%W�$ �N�G�?���h#-7v;\뒄\NG^VRտPZ?/h(r'?+}ƣE律W٘�@5 �X�5 ���{�@h\0q@. �k7me½Zl=ԭ_~=y7 F�0F 䞻H,v � s��tqހt�S{~a~Wгmo;hT3HE}=Mse-*]�N�%�Q�� �}mB"�} �p#ݔi�"W| 7`/{x~\�K!@�Xw � +���Hs #�|o*=ap9isA-� Ÿw OFCq,mQu6&�PMw�.�@B����c1+7|I U@}ц5fIz'G8G���@Ǻ�3E`�@Yo��1�! :~g3OIӿxnPj�/��/���N�!�}!�`�z՝�.U�?nw|./WRral=+,{N;*QR {��� �w�H!� 2Cav0v݉c߿ۤ{gτO>ͷ"Sx /��;�K@�F!�@��@u/E=]�g�HMos@ �Ea18ڨɺ}lo�PT4u^aa�o:��ȧ|;��fa.(�Ư {^GEߐ$dQo,9(Y�r �s�U?]eǀ�@M}N�M]&�C!�@��@u�dM�E��p�4�+ں 3y'AAK<rlɣ@K�l�v���_�� �֙#Od~|b?/y j3|ƢE律W٘�@5 �X�5 ���{� =|bAb@3F! �{p–~s[(-.^�P. �Xv}fv�ad� R���.H}6M:xqU�mS>70o/?Lwq*mQu6&�PMw�.�@B���gЃ�u� A1 )U�p@pt0vӷϬ}n ŠD;w *V�Pho#�@DEJ��EC[b�~P]s`/$l�$u@-X�ZΔq.^]gc�t'�`�(���U�@z+S�L�:� Y��v?hhx# toO.|t�� O@պ; ��� �-�X*g�v0as-ۏ= |n� hIY�6�;z�@�A�t>Ww�u�|^M5�~`� [uhJmQJ#Nf0jIɊE}gLg8Pٛ��;d?ߵ@�%%*�0� �\+)^qT-Oۃ|CW^"*/vayg(v�UΔ.^]gc�t'�`�(���0 �Cx�ٻxq1=V�ӗ~+!ΚaތC_u'� �xDP�-ɍ��b:�@}%B4lA!Oz>s6�h}f)[!?Ye}.^]gc�t'�`�(����-t�� u�xQ/:�<7εdSaʗM?cezwֱl嫯8�S!Ԡ=zy8n+@~ ��;۶��` ]�&2g!^0佚В<Ӭ,_��6&�PMw�.�@B���^�ך @9�ȍ| �i�M� �~w;(H(nȺWճz5�@E�`j' �t3�狲-���G 3y(47pчB\-�C23�h/?+}ƣE律W٘�@5 �X�5 ���*Ep�~:�V@ï;3;Zc-n ɟ2&m+@�;0���@)sH{ t߀uQFs/' g[6iȗ� �:6v�@����׽��6^6ui�y@�ȡ>hw7ֱ En%{W78�h���[$� �-�+b � 9�l XO=�hDFa>`g�6&�PMw�.�@B���I�ܐW��n/\�~kag#Y ~x%s�� 2�5%�8S�-�d�D�0(��a{ XEAг[?xŰR?+-4#� v�;�K@�F!�@��@uo�כ!�7�n� f�=5ׁ]f^=UCPtEe ×.l�|+@_�eP@ap�{G�hL>μU;=}g>|Cٷ�6I[1'�L�ͅn_ۖ=? �k�z(��� �VV@x:�SOV4zun$#==Mz}w&N�W{�PÃ[2F4�e�`�@= �<`3.'yW(Ϻᮙ3JΛe /(T�3�۵o�=���t_n�\qhV U�o?hmw.Ig[>�pc~H�N�u�Ȯ �� �JĐ �DkWD}w#W_V �woTs�54&�PMw�.�@B���i�?��@11x[|!&k~7rCӳ?p l+/9�u'�ȍ~V ��vb,N�[n|˱~ Z4T �]u~#f/_ϋA赁�'�@ �Tӝ�K �P� �@�\�@n3+x~�w𹖬{aO\(Fn(zv[Ǿ{![胒/�:�L&�Ğ:�{{Zמ#x~Ag/7�t�9"+�'? "�qS�@zM�B���=b(�ɠgyW@! �u���Æo;N<S7mMr>��@A�@}�@5�{|~զl{U�e�`JA��� dp�n2�۵o�=���t_n�ؗ�B�lu�Z~538a/7�� `��H`��dcT� Y��@/�An� >7XN_#E%^|gk( |�"\�0�jjL��,]����׽�@yE P�>pY6W:�u{$ww/ �G:�s1R�l`w7X=wC>;��E� z�;�K@�F!�@��@u�H|ُ}fKF:6♽9?wd<o;1>(̓ȥ\ �Ԛ�&�*z�`J?f� @�t�;~X{;&!='�`|��zò+Az�TiL��,]����׽ � m#�ȍX�<:��a\1Z?c:+��@w4�қ�=�)ng\c֛wȺ 7V@� Rj�?"�qS�@zM�B���i�~f�h �p]3î_�TvuM:^7�pa/�H[G#� &���9] Ǻ ːK·%=� �$�fc�t'�`�(���� Ž{!&M;4֞�8[u!䤻Y9pXn�|+ �"���;�9T�@,� �@s �4ƌw^p@uPB~.Uw$4--@� �s@ �Pkc�t'�`�(������`3 aN�2cANW9|e'�Ј"�H��P�LZvy@ !?#IV {D!X؏9"�0��6&�PMw�.�@B���Q�y?7M��>7+�9+ѦZ}Cҽ~y؛O �`o XK���? �z�m9�`܁-�rMW�[N(owYB\�T�J`�Y?/�TmL��,]����׽.�Ťs�Gmy@9�Kӣu&y%ߗ/՝��j0�q�Ԃ1.0 t_an+̃G � v��0 �4O,N�!�}!�`�z՝�@=&65 �^<2o�yz� „->hһKȋA}Oc͟��@��n�l�T�!޹lg$s5,�L 2��+}"�qS�@zM�B��� �~%�u'vm+ هw!/&F-� @�@9m]�?�V�~}I:' ~�i��w��� ʞ�u4&�PMw�.�@B��� � Σ_�iQ/di�/(<[4 B^L�/x70�j3d���WN �]�`��/L�`l(#^q!,~�0 #ҫlL��,]����׽� ?ύ} �m(mh��o=ʃw Op3�h >n���,�<�rpYw�O~6|~E2b3N^|i <�D� z�;�K@�F!�@��@u� �+PKl[! )�G]g_U:߅P]^{/߿�D6 �m;�\̣�6voHF/[oDBP`R�R�`�*��=? �k�z(�����*�C�hi"�n6�~KQk-ҿ<�tu�@ �`�r!O��P8׊.o3`; ɈK^y'z�t�x��`�O�:6v�@����׽S�%qM�/k�)_?=7ׅ֋tws~�|�r?D�>\,ާENǝkl<@]Yp<p^�k ��#J�Bc�t'�`�(����ܷ�w /q�ע ;yÝʃ%IN䅽"`([�\*�`bK�6��@W�Д�h]θLXoHF<.<~w�@C]k `�(�;�K@�F!�@��@u�87U�6g{nOm^R���u�H��ĠF@qi\ ѣdDȳ%<&hg;��u @�W٘�@5 �X�5 ���{� 3=j�07���[7C>֑9/2ʽ��a��z�o �b�јo~dDŸ'<�ٷ�l��l�]�0WD�:6v�@����׽�Q�т �x!f̼z?{oGQgM/H%!$#"t) D. "RJ @zO-9{{s9[f;d<_5:6֮:g4�x:��u�e�.j�@aas]÷z瞪�/�K��U�@mu'�a�(���4e����/� k||fGr+.dK>�K��PemT�з�r�`c`έAjqo`믘�'K @�G �P|a�՝�@I �P�� ��#k�5sSgVQwo-[kV� qYTVM�@.W�HoO\5�,7aXjvA|Xd#�G�i�@'h�hHa�՝�@I �P�� �7� ��� _0痦M(JzkټW| �l9 �:Q4�s�`myg@ �J �#�Pca�՝�@I �P�� � �TR� 1�8ߗ)�`P_e`'-M[\wz~plKro��>?Xw5�@큟׃@��O~Q[1[ڇkHmgN;%w? ; ��_�8ћ�j�@?�ަ ��� �7�2�H9o��9�kM׮(U)wf?Ty/���$x����(}��O8|maAG%!X &7�Z�x@9�&�P[ �d�����ͯ{o�y�zs~t lyyϰw8ʽͨGf=�~+�Rǔ �Vf5GH 3!�F �N_]da�՝�@I �P�� �7�e�㏁@ة�sJXtq{s{w�  @�4�ECt�`w{TwԺZ<SxmS�*0�x?� � ,L��0 � ���_�ށ7�g�#gc5Ϣw8?M/Y9ٌ?T� �r�T4�F|uXskZV&`�t�N�-'�u �Vw�&�@"�@��@ � Y�`Or˛.<zb}=0��!��|l� � ~!�n{%!f"yqz,�P}�uN_]da�՝�@I �P�� � �s�,,o-soi?{�znc[>�0j=`$o|0_�"@�Y�@mu'�a�(���4��]t�sK3�k{&[Zt-sogu�k*QϞ��H~JKB�`UwC">~~x "GוJ' >}x펎j߲# +vOd;XƱ��@9N��h�hD�QYLmN� �|yd�5�X}ÝMצ<z63|>]F� p�Ǵ���`aկRҚr#�2I yG+bW>.+]#wÁm j??6�@?�ަ ��� ��a(�! �ΰ-vg;RϞ̧�@AqLY�`ͽX]u�Ď=�W,>z|PÀ>PVho?i?�]w�ň�@E�@#�bm[w�ԥ� ^@�!~�V}gfyӽy-,cg=o[@0"Xq�(5�B�@Rkn"�*g,��_+T?I`A8HP5YQ YWY�@mu'�a�(���4�Fv@_|>ƺ�P�@\=� n+F�Pc: V˵}AH-ɷ�Dn0 ,蛀G�#vU'�PgMm�A� �@�u/ �:�k~�V[0bK.u[s^yq�p(S8�\3�@~vvw nWWSvsOׅN~!V;&Wj�ȆQ�4�|�@{\oJ~/L~1o^�r�mj�@����ͯ{v;hz*5?^M� C=�w; >AWgW{/Ev6E2M )W{wR3�"�"0`AP}կjHfۮ�ꬷm�=(���4M�QO?T� ߹5�ΰ7ijכ\w[5x+�d�WCS]uOkYxzȡ,A>�¹oS7zG�@k�<+ oԼޥ{.vU'�PgMm�A� �@�uo7�0l+͎ro{Z�$ � �; "f˖E!aOhBW.GZ�Fmy_R +/)E�@weml170�*@GǩTjc�ަ ��� ��zV(�Xa`=͎ro{w`5&�,�՟ct)v`4~} �W nRwzz���:l)ÀO! '&(,s{,�ꬷm�=(���4m�62v7;ʽeТ)W�@L"ߍsq9T9GR�`__ Oذ/ 4 `�]YB�J*HT:2m7=�u6���_��q`iڽZD~cD�N9CSeUףʔ �P�I'�ȹ,a�2s ~�m}�t �� ��4"[ؐ�Er�t;ǣy{��$(@Ε-�t6=O7\N�z&�Ѓ"�@��@n�`6_Uo)=r˥V] 5, *\4�N?@*R @Ε-�QBJ��hJE���׽i�;ϯSؙ��.�K�0|]`lZGN~Ѽ_xu�}p?{n7�/ޡ W{w#� t6,�JU> A! HG �.6���_v�+[{䷆<L^�| ʼn} �w`;]!޹0S+���5�_ �)LF ?@L~Ac_�@I �P�� ��x �Z�pV7u5gࣻn�h�A~8;>U�J�co�&cm?5_�C6�`6�Z�lD@2pP _Иz'�a�(���4�F3|۝39Y>ֺ�@�0 }~G]Wu�ѹ �3a.߮KBjYmuW�]I�pG9)~% ܘz'�a�(���4=�;E�WטּW,oc0oljw[�g߭:'TB0_{A�@ �c.3�;Vmo/_ �c��<m�P�f[�GI}00COpz'�a�(���4= �<8E��9+nMA3|>]�p粪8diѨw)�@��`Q'9!BS޸J�"�V�*4  } > �6���_���wu�`wuV"-FJO�$�t<}0t)D��Z'e�}{H]r�ݕ�J\} >3ppJ!u'�a�(���4�� u �<<:�XmoayӤvg9�}}dq]]W E��"1iHmO}^�$<��mk�¶6pP!?@!k�4_�4"�Ш,޶u'�PL] �\ξ�q6iR;a? ��t-hξ8 O�|�`kHmy^:\�� ]C�8�lW#8+�HD�E���׽�yQ?�94gq7MjMn6�ϖ-:ϒyS/��:�@_��¸#gHmٯϞr r �4˶}�0"6޶"�|�Ј�@z֝�@1ui4�ya>Ks�nO:H˛&FCs9N;` �G�@� P?�X[c~`HmON�NzE�5]G�~�T*񔁾g mE�"�Fg1;bR�` �@s}%gG"ɚ|%l#'uH(?h5�xxC":́G�_,���l�kwgPG�@q�@A"�@��@�@Pc�n^U*@"z_?�z�c9�?e�`׾ rC"l�@x�m[�k},CJ~vLLm�A� �@�uo6� �ӎy_�0L0&7iHۗ_f瑠�:�`g�o�?Y �* SDj=נ{�$s� 8h�@I� >Fp \4e>�hJ&�@��@^/�Pve��ĝ}K�/I4>V_6T.ulsO$uH�@_��خ�3��a*@[</_i?C"8|oXq<{� D��(?N/o:}�] �|3L���׽�z�.2�"103Kʥ7.!?yF�~� f � ]�nC">H���M�| ��24�4a���4�(T�yJ �(� ZgC}ȉiH+gÖ|�:ӯp�@��Q~�0dܺe7=$RsN>l�?&� N/� �`k�@O �|3L���׽ ��@Գ$Q`x�h+X}KʥN؟u͜n ���/qO�%�W [pC"&g0s�wR9kd���O�wNV@n�Ũ4a���4E� ��>̝s�<@3�ö>iH3 s�90�Іz@p Kʀݏ=$Rk/SM�@8��'T�@}�e;20t([nrttf۴�zP���h~{ �/�9_e8+m A^W'<{ wu�§��Hk��M��|mc$޾J*�q@(���'�Z՗!o?C!�=(���4��\'�sF[09{&p���O�@�x{�ӟ�>?/RW. zo�H|��5�O�lgW0 C� �Ј�@z֝�@1u��\bGh�0r �ZG \c-&Oy^9H� 7�^Ҳl}���ͮ5ABs|=X Wd`[�t Ok@C� >ֲmlߏ<.|0ȏp M�E���׽Q� qn� �X_:},gyävм^7.8U�!0�<W-�An1���Hz@>�60�ےp /7ABfςGFm�Z ^�}'�u'�Pm[l� T6���_z�@fێG�GGWa�ޯJޑʥYO?oL#� �*�� i�Iosymnہl��;\ �\�Dz��xu]>ֲmk_Y6 _.H&اmc�@����ͯ{3�@yK�b> �V� ^i;R4. �/wa� Wߛ��(�q7.g�ͽm>vJ�� ;c'L�Z˶}~4@7`}/&���_"%��@�2��$4n}Jޑʥ>F+�8!���|k��0�90怉v6zǧ>m5�p"�P����ȴO�lگŶП,Do���_�az+�W82 �׮0#Kt=`�:R �3W"_@��<�W�}k_)v6z_�8,r",� �'�o�@kٶ_m?:' �zP���h~{�"�~5G|}OgnyvW\f?4gW�;���G@ �uX=(Ro];�{�<��2�h-۶ ]СҰa0tĂ&�@"�@��@ �u3@2b9 M��4[`v7KjqI ��$_ �=�H�/T �83�uIn�76>2EjM{Qx!\� e��J�,Jz� �m[|E3d]aE03 � ���_Z@V?�yɿ}%}m��#g5-o.zcؒNw1P'�8_v�|H� rDLJ[6FEj{- K�Ute ��fu]>ֲmk��cРT:g �&���4E�y?>@�0Y�&u1h0H*pkt+�B�Ts3 �)�ݖT6�IP_:x �"n <�W [p݃":σYa �Ld ԀvՋT"�su'�Pm[�d�OC�@"�@��@� a8 �_4&ҴuCwalR#�bG�y�@� 9/z�1`�lwvVzx]kޜ�<ү_ �@}�e~O��J~w>}e'�` ���4� N>@�|D?;!$H4YpZ˜#N)M[G*NxiW� �:*[�N}A�,�,�k{ :q$Jϝ~"z�XV@BN~7. �O�li�Nu*_#<�� �@�uo4�]4o ��v-wUw۷4m\Z63x0oW�a'x�n��3_�v^Ej{ �ȉ� :�@^?}�e>bTN1���_Z�l8ǣW�?h�Y �Gy¦X(]4WτN>�sM��*P3�K:RY�V��A>�ѹM. VpEj}%�f+8y��� +'�Zm�(F�4"�Ш,޶u'�PL]L�c/�~^�+p �:,gі7Jjx!xj�HJg��^.�$m�%#w"&Ãm}"@&% D,)""�3u'�Pm[�T7.\n'��h}Soۺ�(.�׭ӷ卒ES>&+� dg3@�@*�: �.3�c: x"ev�ۃ�k��D��h-۶{3�;-˺FmD�@#�bm[w�ԥV�qgx?+� ?giHӻW|1i��๾@V�g6�y��/�_&wvVz}`'eQ0W��Sm.��h-۶ �t �� �Ѩ�@ � Nŝ|�|m kpLi9Ry'o"vq@'�8 `` � �85�Cp 7M/aJ/,H(DY� = ��E �m[�Qi:���h~뭋v�S�p$UvY+$ Ӆ|K��Q>��g��>z*#a{Xһ޽:�J��<=e&�!hYGWO�l'�P�hD�QYLmN�1u�I? �`Y?;+kx3t=MR.<{N��8�Z^�vOP �ۉCCy>� xz �p*PtH?832Vs�<�) E�p�OȢO�*�Z˶}�ň�F�u۶�S�H�@L�8y@S�0~J Z4x{0Q �P�8Ex���i��=0RhS +@V"@y * � �m[���4>m �_0n �~'�e �`Y8q 6$i/P]�8I_^^�W��_ǝyng�� �~ї}Tsϝ{|M"g*�\4n�j��h-۶ � �� ��$�,��0 �8T0KƑʧ0_K�>�Y�@^�_�-��HV� �tnVywFj+=0㹧4�� / 1}��KK�u'�Pm[�Qi:���h~ �Ĭ"� D�OHU�?K Fgv=lR[iʟods ��<?N�q7��z��>o�>`"uwޝ_ � pޙ$/}dz�$I��@>ֲmk�@1"�Fg1;R � � =_ `>_�x Zs&٬Sا@E@�t^�@�os�*��\�X嫻kHmٯϞrL �<�)�<���h-۶ �#��h}Soۺ�.,�=�N'N?ʋ@@ �:_!8X:waJ~r[$i# �8@`+@�tf� �mC���ro_uuC%�=gBV$9�@TF�� h�dnh�@kٶO��Ј�@z֝�@}u@迯,� c�`2_�9_ c{zi7R993�݂��N:v�� zBU׫�@K�?z<" Y a{`.$E��` <�j�>ם�@m�(F � �@�u"�P;1p`6_ST>.x34�BD�$1�[�TKVyy)�|C�T;o/kHm7|p�+~,qM�p`� y~ �;{]>ֲmk�@1*M����ͯ{#: �P�8xg脍4tTxSK�~�a'�ꭺ�ۓx�:�lq0hvV's�&y�tS�D z�D�Z˶}�ň�F�u۶�jK�`)[,NtxT@=?Pۖ�nY8=hR[iޤ OK-|20ZV��O]�wuܙ�xĨtn ~ 6J{}]h;w���=��d;~1>yDD�h~ �o>bD�@#�bm[w�E5Y�@5��xW#`ZTN}Ͽ{ �C�L�T�&��//��|^? �?7{hE(i�e�A�u'�Pm[�Qi:���h~&T�@7?p= dj�,>KӶʩ}]��L:h L�,�6l�KzQ�s/.�:N.>w)@�p����_c�T{+'�Zm�(F$� �@�u/�$q';ԇĩ�A34�kp΃GW24'c~MX~w���O[�Z�OS�ۍ<�`zEKcW~~NLP8:q{���߶}�ň�F�u۶�j|y,uN�T}��Z]݋A'nt jIw#vcޒE�*9�@>� @� �}/ �J�} /P!Z0k0�y< @��gvl�>B7ם�@m�(FW����ͯ{V]T��� +;&eܠS{JӮʩe3Ë'N�ģ`f�W-� ]���;eC�!T&s)@��_[ʪvvIG¼7_G�n�@z?= �u6�@>{]>ֲmk�@1*MG����ͯ{#�ag9⎽wU�t[uAy.[XK{%k3X;;#<Ns^�l޾LV� �)��ۄl� �cr->9݃#޽Isp= )0}��߶}�ň�F�u۶�twR6Xy3ei�Pu/s{тu㵽w3hLj;MV7(W�t�@0h�)�:\ �rx�^ �@wn!GØ{pܷހ71V��pA�~qE~&e{+'�Zm�(F�4"�Ш,޶u'�`WS� W�$�v\�KN??\E 4-   ]uCyIyz؜O:�L����f?(b��1��N?:8�Waó.{p#{Deϛ6IO� D�h~ �o>bT2���_�C'� Cϯ:{bi.:2�"+l#u٥iHK'–MX /eE�d@�j�1\D $+b[^s݃#^O`c) �� �d��]ϥ5l'�PJY&�@��@ _z*'uAχN"O7oVvIfعG|i`0alpIm';졻2y`�/3���otY�@ ���@jOR,o�?�N_Jvv_44L�$� 5-�@ ϰ\outE�Z˶}�ň�F�u۶�R �HI�Q]P\;�4 o8}[N { &Xu� oxDρ<!S��MV�0�t�W_lxd]CAw,0��d��|�@N�~۶ �#��h}Soۺ�0 KQÛ�d ]sgC}I?@N9�ƌ ?}i3Ry6`'�$�WQ�;�S�% \?Q;nHm? rN�i� B&@TV'�;m'�PJa&�@��@.Guk]:w|!qH�Ŏ|XmiH7]?p�xD��zC�,ӭ��b%� ` �V־0S-M{Q/O4��01!�vy?^ �m[�Qi:���h~݋�� -:.Op G  pu5׶{k?=-˒#Ԕ�З �V��hW �l ;J�,7/ۣ忰)lzѕvԖ޻Ա-2C.W`qbR�? �x �o>bD�@#�bm[w� K � =-] ]sfByՆ.f^/Z��<?w/o.M[F*--M�Xt���[�@}�p[�%Fb">C/#?b_X<urN��4�_#�tqtZ"�h-۶ �t �� ��a?;sݥ2 :C#Bg^$:FsDi2Ry9{&pLg�!2 o�(0W�ϳ�0H@ Qc�|m}}vԖzkam7�4�ˁ#O=r�8"o�ם�@m�(F4� �@�u;z�u.9?<׍;�#1&v#^�<aE;VcPIm/?�:Y@]}@�i[2�D�D=.5_0K[=@R[jÿ{@7 C4�;+j2 �{+'�Zm�(F�4"�Ш,޶u'�mhzޢy5{&xKF�{�;x4�)~FPvTn}r0k3W�X��\I@�[&�;:<z_J�c?Hj[=q~A7 2��yՐ(TےN�~۶ �t �� �N;+an<ϯU�csP;tM9$X;;#<Vo]z �1a_h�@^@(K:� z$� Q�m}Hژ.��/Ҷ_ ϺV�_&��Ґ = ţN�? �X �o>bD�@#�bm[w�zz_/\~�o8Ie!Q]M΀UװkT!V�0I@L1r�=[�D8HH@Baa[n�Im}O_>N�ܶ@F,}1�W* b �m[���4>m �mʻn8_uY2 �FNԇ$2Jg_jk?Ci0ROᥓ̜@2���?AɵDj�K5ҟ�-p7 9!VO~@X{v4G�{̦අ�@sN�~۶ �t �� � nΙ?%{5LHĥ�&`ۿM5»W<w?l$�{N@�^�|ؓ@x,+�8XtZ%�pO`Ww{7]+ϙ�d, �OK�2>ְmk�@1"�Fg1;�=sp fYc�w5~�0˛#WKTx(~� '�)[,�ȶ@ �@p]xC$M?|)_v2 QL�~0Y�Cg"�Eם�@m�(F�4"�Ш,޶u'�.Խ`nޒ‰<�;� GGK{J~ʯO;-x�$� _A6��x<�i�;ۊdPa��xAW!ZO}o"`[7%.hc I�0n/? �02G�\Zö}�Ũ4h���4U/۝ ^Wgʶjd?/r$ɟ鉡9Wѻ5<7mJ6U#wgU77`�㌅!& ��`0?(��۴�3Ϗn;� /BC$m]z��<ۆd, g<"d (-�;m'�P�hD�QYLm�uuή@n\�x(jJ2OtE�;Nr*Hm/? L~?O�#:�£w�6yԔ#`Qg( Iws��/w lkIj[u/Y ,1�dR@|<; ��@sN�~۶ �#��h}Soۺ+�`NI0<Sf,9r}x �~$* sI<coWv5'4m٧#$�8�r@�d��~o�l� %�:8 Xs`=HR[ko~oF�C[ #�$H�~vL�e|.a>bTN4���{.^/ʬj�@7@A:,3$[+Ac'Hm;-|Q']O#u�@ �i��H'АE_e Imo9qbj<|Ls�Ԟw�e|.a>bD�@#�bm[��̟?fֵ̨qǚgN8/;2�a�b<ϒrhzA/G>&\x]i-Rnxt-5_��7?�%�q̷ �s�0M N0*WpO{֓G ߟlS@<X<��/��Ww�۶O�#M���κ;3츙6��LFCδxF8$gX ' ~|< �s9L d�!S7��]~� �?nro0Im %di?# (� / @��2v�e|.a>bD�@#�bm[V�lْ ]0W(d �i�w5�@F^şBR?�%> Wt $sM-W� w?q=�y �M� � zLvu��Y Hz!U��\:�>&յp<�]�S�@zA4�K,�� �]w�۶O��Ј�@zֽ�(߿x})�?8gǡCpw]�d%[q`̱g"ulsOƙM�7�& � ��@ .7 ��I`_/"Ij{|#f&}'vG�(�?�pYY�\Zö}�Ũ4i���dρ93u.ɾ0_/9�B[�TÏGKṷ<]N7ǿq_z=YwݩDjkt� �e�X&� N�Eq$˷?Ij{͞2<c!xIm bI@d#�@��h�4(}��4۶}�ň�F�u۶� ̺g5]�m0ġ7D�@/PѰE7"-Sxo`�@5|�%�H"&�&y�E�ϭp7 \u5Jj{=q~hʇ 1��cIhvJ@-Cx �& �$eE�ha>bT5���Py {5grSbR; �GxiG$]lFCgUHmO<ţj5aI|>-�g&qx_�<�6?$?$zF Jj{}a%s("]� ( :��@�;m'�P�hD�QYLm[��YU`υe�㙍Q7_^&N~8в\$[Mlam�@<b�uǻ5�|t� ܖ�XоmT�˷aIg=PRG6t͚짖db�ڗSm"$@�el˭n�@kٶO��Ј�@zֽ�-[ϟ o� HoW�yw]^`ɣ{EH$x^ݚ2���t�rP`�B7 o{$RUo޾T�+; en��@ m�(�mk�@1"�Fg1{Yt t \XN�dãm٣8ߋ�nErK/c0-G?WOȸC_�w 0 >.�@R��ͯ kPImޒ%i(�P�dG0&7(�&{M``U,�hU۶ �#��h}Soۺ �xK {.yο/OQo*�53-@*I@_ V?ҴSޣO~'L8(�yN� %6G� m[n$j<�L%~4�7aͽ{$RUo\u)|xqb@1H%'E��@�b@t1�x.a>bT5����|k-^b�GZfˆ\ �μ6VJh+ILl^Gj�YeXj�@q� Q�,Ĉ�)߾y�苰EW=Tӧu; F$IEyXI�Ech7S�zv~ְmk�@1"�Fg1{O�w|pM&'uةGޔj #YI@2–_N84m]?/Vwj-/?,o6?�g��@m�/+= �AHZta(3gG{m���G d�x.a>bT5���sP?_-0;3m~uy8w�GֲFr̺?3hxۿoxJ�W+L�k:�Ol��or@t~ó/HU{Mxgݗ8?ܐV @�L:J'L(<e O�zv~ְmk�@1"�Fg1{3�󗼛?':UZ|;rnq=_0p3E[=?daY}".M653 �FzE#k9}�ȶm@�<���/b�Ui9@Rz`Ϋ/(�P��C + @�}GzP@�4v~ְmk�@1*M���|ߝ7\,޶ug4 0yY�"@L�.c3?_:C7_D /b[�_Ay� ˌ� V�#6 N%�d�OZTf,'刿. @X5� 5e� i¶%+ @l˕G �hsi ۶ �#��h}Soۺ7�T93XwW�3i-_9frߙGdңؠq:4mw/Q�@8B��@�>@z-HGO]`;p5ǘgEpa)F��E�j;m'�PJ&�@��w̪?ۦLSid)$<0js�[Ϻ&vDu�/sRu�CT^�B��#xIm zxB7<T2Good>+C�ϥ5l'�P�hD�QYLm^(�:hYշUo>�`xK�q;Ț<6^{tB. I��/�Lc� $҇CT^�=�?LEΧ �@3ƍ ZT9xʋw[^/ HqU@LV*;&�@_�@Ѷ˷m[�Qi:���twAΛok7�0M<?1c tU�@pe�6��/J9;o`HH<Zgf<O!h �m=�x F� f�m/\7�� ^~Ux䣓"6 (Q�q5��tʩ5,"�Pa>bD�@#�bm[�@wwҞ�Y#iYc`g_7$;x se�>x`Q6��e�<m[� #|ŀZ��� ^=wa eG^`IBRۧ��H��Y,G�h[ö}�Ũ4m��J�9~G϶�d�Nsst`pH$$y?_0�ЇCn�f#�e��/4�/�$իoO01s?�1'4Pq]Hޤ,@�˷m[���4>mݭl3/;�,z_;ʣ^T p~_ve�My?7t`S.,M{DꝒs2�@n#m ��|<�M�^0�� XSa3O۪(8K&<J/Ȓ$TmⲀ�YnD�a>bT7��=�⼙\ok� V&,k/򈙰V|. �@7_크;G{0$_O^/IŌyP-W�0U@P&v4��y9@KO`R$ډ$իy >0K9Iޟ]+$&U#�@7V8Rzq~*�~kضO��Ј�@z=۶Ϯ:�،㎲ �ph,7Zx?^0p7iͶ;4mwӿSt-S:@q�(!�2v��<O /cP{ 0zC2$΀~<#(I/�_$qD@j*�KRE�ha>bTN7��=�s{t`]=&�/'r> 'h8P&DLx,NG>N#װ{($Wt,[R=�;Ϡ;,zLF�29"2%Ot�`n{$O':0H0 ӕR��)�(�m'H:;R�@˷m[���4>m¹߹$� rV]%'iI? 8Z'OXia/M;DZ٧I1y>*(v-�w��m ��Fy0oou_`QvD՗CL/,>d'� HJ,9�SL]ӈ�jm�(Fx� � �-^:Kf;]1�@@zwU��GQ2_'E  eW ]-NvD_/4ҏG�d�� (a�?le.�(~0M"IZu^=wn/�섀�r2蘣.ySL]ӈ�jm�(F�4"�Ш,޶uw/w4pǿq􍰭XN` x@3E98s�KGи58Ыg|-2Yц� ?߉:_S�,�\m{}16i" vLQƎ-AH M^x_4 *8 ݏiTRsL�@˷m[���4>iٲpA{�0aF(Zz[;rZ�`v`#*͵aϮqR RK} /|6_LpY8VT�v�'? /_,'sX?1;ajk=lIc<y!~ΟL` h  8"P�з]�tjF�@˷m[�Qiz�� �-W2 ,h�G4wwqj?,κ2acA")ɽAe �* %B�@_IfaȀ �@P6ö-�?�� ��kr 9M")4Sږd �0 '�8b ��@jб|p2wD�a>bD�@#�b꭫;Z,ΟSmVwN9|cg]p�xN8eH +MdK~ #d&I: �/#|"�(a;m�dڑ$r =6M"iOτO>w3N/(,JyjFv.Em'�Pm[�Qi:��㤳񟭼�<:c;Q8rN��h�gNMHF\t�}z[kS !=Ҧ  �Fesl�vA�r2�΁. &2,H~W 'Z<Sx|~:;h% �I7,�Hv%un�T�9IZj|Sn ۶O�~۶ �#��h}So^ܹ33o�Q^X{h~r^��_Jbc_2L1`},MC'w Y&�"\$?p�9u� 6' a�ntU![7\ t3lӑ iw*+nG����rn8I#C�a>bT8��V\9yjU�B|t>+w}ҹU  X< FncʰE7:.?8-d1�0 dݶ>�eOO�~4�� X}4luvDҨ{bx}s �`۞�tT�"ةς���dA��E/m�(F�4"�Ш~=3`nCIMϥ@�2ؙ7px;6W�C�H{rlm`I$Oy^=0->�dCXJ�[:O!< @�spLPm~aȘ:g?Q(&6}4 .� uv zS�.Z췆m[���4>kѿ{Ƨ:[��(\Ǥ>Gb~af¼d+{_1\~`)M{Cr {�@�z�cYQ�I4]���nF=N"eD6H5@W64p�蝄|1!�Pְmk�@1*M���]:ޒE5׽7��Q^WʣBjߏ]%x'YvqYH媟ࡰ78}[HzCXIB?:N2�l�69|F�|E9 @n9Ծ�F[]gN"ehٜT�w`_vJTJpG�@8fQ�嚶-6su Z췆m[���4>/=sx ]+/gK|xG:?֚G ~WJ"ehч¤3fȽjp13 ; '�m; U[< ��_(�k1 nokcI }I\(ȫ��dA�^K�!�Pְmk�@1"�Fg~Af9gVU�@ޯ�@r=Q� 984:=xM`.M;Cj M:}-@0:�jL�GNK�PaqO{$R9x !LWONzESx �:!�c6�sb"Լ_nx�b5l'�PJ1'�@�U{ZY,XޯH'�+qb 1c?!aIG˄49??w.?b5I"襓dOK++qF?:;�j�;˦��wmN� 4*S;��D �A@�2 /vDѢ=�e~" X )�@�^2milֵmk�@1"�FݧZ~Ӏu.36�@N}|>q՝e/*G<ɡ~ai?V(g{$Rc57 8 2J@�'٣i�0mZ%_qD�,r< oCtu >w o^wb.Sಀ hA6D i@�h[ö}�ň�F�u[NzϷuv~ag >?ar z`;/ ��U!�7�mU@jӨ< �#v ?lO"刹.<y조w ��sDS�4� o*�~ M_v�@ڶO��Ј�@3: 37NM{�KN�ʉG 8�(^uǝ}3h-JE*VE{3lio�;\yIG7�؍tj7�lcB{��i>?$Q�~�Fe+} H9ԉ; qUR�`/Z=@&N@`Y4�Zն}�ň�F�sIAWcm^&�޵*A`r*? E/T�9sG8#}$ q>҇ѯ1Equ:�;Q�Lhȟ4�- OHtm l9ᇰn{H$sMצS�0,6"�Pְmk�@1"�9=JW_m^�eS,�_(2#q@HFpđ7o;7S�T&u4[qg$_��O(Ң8F'-ۮ�m9 @!�j;u�@l9x:7H$_Q�q|'aȄ2'8'AQ!F[�@ڶO��Ј�@q-A۶= �X >8?N'tvc._H:T�B`s4HZ;ڏa3OFQc��ꪷl�L�4�pQ�n~0t?dӧGES9��dC�@rr;1& -O�Um'�P�hD�. -^Pxmޓ�evSQV%T]x+�b"dn:A`<VRP5>Yq=8PR6\�!?ޖFp(m^?% �i �8v$2 �upҙvPS~�^T�Ԏ~h*�oAm&F~ �m[���q]A?w۶e�yο/~p]E/ aO-Wa̱?.M{Bj-y˖ ؒW`$b,9?GK�TQ�jv�@i��4�t0~0A" ρO}H4 K1�4z's�!@r^ E ۲�b5l'�PJa'��v fۍm{ �&YE\&HI8_r ut1ƼԼy?9:)61{_#cyr�ҏO�zl�~)�5 (�aUh?Q_D2TעQϦ}J"�@DE?-D�:lTͅX�@ڶO��Ј�MY;k:~O��Q,뗜9S h;C˓IXO/~g_qg] ^ vDkgO~3 cţ[#^#qG9AI�ƶMOC�%m?< Өr�0h~>l~vB& Ϝr\Ŗ-Ud@ξ �!h�@\`WV'�mk�@1"��%O-[zo6�Ⱥk{c+tt!qm Yqg:(_ X HMp#g[y`>KӎZO?z&~T/ wN�ģ_b)U�@O�zl �Q]@@v�ey{+o!kcHzû(: #dg>�b�dC� H�PA 3dC*�(m[�Qi:�z�p{tzo�O5yG5gM]W8#F%Pmǭ%: T޿ 6{�9,Oǡ�"�H9N876ۄf@p\s4/A��|(V�62C�W>q1H$ 1ׅ|4yeR� D�@6 &H~g)AP mH;e+ �ڶ}�ň�F�y$=Vo[��9*k‘tz~c^K/�AeaݟpE"Y\/7-F� /?<&*_ @Kk%�Pwlg�|>+ �OʊtӠ@ �|)o*AH$ -5<3;/;r?( &F*|(LI #$�Pj۶ �#��P]> �r¨?K5-\Ry:? ,U^v/}Ưi?C0Yz>GjAu��.e�p�: CS�dXzV7 $|� �2c`ܡOv s�xʑ&�Rm�(F�4"�Ϝ$kttm[ *p`;BiyG8Oj謴wT^?$0V4w�N %K9=iY�m+tʩTi�x!@v2@Op�B[Y\nK3 j^%n?lʧDA_@O0�hWbv r۶O��Ј�@(wLpg}7.ֶFfLkGWg1at@#OqqNjXN*_;r?ǖz'}i7H%LWO=\Xh/I'�]<۵�-�eR"�ac($R zsa?HV�S@'^@ȭ"HyQi(@x,@ꯛԧUr۶O�#O�\� ?_Z"mk<S;#cϏqG<=?=3矯 vj0Jj>*-tP+}^x?K:˕�@γm ��POpy;b KQ�}{X瘓TeDǝI˥p^ P�!. ߩW4`�m>bD�@�AvO[0x~ѶYfyuòrc*< iVX gPX缫~+"ŋeޒBY?��jO: "�Pm;Xˏ`zDu�@7M2`l{}g? TO<PZ0_��9L? Jn1�PCP�: O* �zҶ}�ň�F�ܹ3pϨ|O~QAy: /�o5I@20jVz\ p3N"աi SnFQ8KI?bmbQ� 9/Զj�<\R6'z$RggRzz��/ @sLd>o:< 0*fc;|kضO��Ш�@':B�8ih0q; tU?aeyu?l1^{Le? @zs^ c+̹@�z�܎&RMhZj#e�5<wʰA"ժwo ޺wqT鿞 ʲ%YlY%98`8Mt&sc0 lG0>0 8'YratCuzU]3;z~~gzULJ ?B]Q%T�PGB3e�>fS8Ֆ\@[@k{� `p*k3YUo&M✲ ?>ImۥX- EN=mO0><B@aEe@*��xm|Tݞm�)4�adM�/:*@��$ cT> +~sMk2_-5M gߴ�iW�6O�g`t}g5h= �#H"GIuk@c_~?T>oFA1*QE1/cbЊh@JrVWCE\q1y(}�w?%_e�T�un� qߙ F6e �ɗ)~-~0 .x'l2P2l*Z(Ă)?,_@Gd ��w�Z�,@s;ԓ}-=ݬ%ʫW_Z?&� c�&ɿ"H;(=?k`4 ^}5 ^^ي~4�|,�4[UuZplWf�d��\�>+> 3?%0͠V;;?c�H >wB.O�hTtU*@�MHp?|�־C��`X�tzRo÷WH<+Xm.&e~1V9r`Bi`^)w`�]y?@_Dxd�qA*�1da�>D8OYX~s``fZ��Zӧ | ہem,�P,�,�X0f$Zo\ =];uWAdC2_(SL~ 'ȿRJ^HO,cEG\*H?Б~,�DFA@�ۢza�u�JUtU5@-( �j�0�iP'}0e!Ahz�:,h�\p(D�%@*"PH}' :"�t-} !C��`X�۠v%ݕ}|-vU0(IT@z,J@ہIKrF@U98n<}h:c0Z7\)6̛d[2;�d4_1Tu�T( @ |Q��A]KYT%g=o / / F+?_bK�D�#@}] I7^y.f: R|V!C��`A' �@Ǫ� *6S0(bSc[r' ~xs4%1-@5p{U@=,\r~�Upd ;�/%�vKr^20�� S# wഛg 7 F+䛷#_A2p?+ 5W�-~}obȾdžP,�,�XЩ@}:l t�lV@Y PSUA' Jȥ? =%0Mس>+V;`K-K`Y{dF [�`@fS53\Y��bk`v?~{ *@�x~? Q)@�"@lWB}od1dcw�Z�}`p]Hz �އKr 8^`ih0Z`!2ߋS=|ׇFtd 0s坯]#b@Z/B�@7D�(X'X�hŵBC�ef:s,hx- ݓ&:}E#6@h*�xzmSpK��`ع>Ņ*Фj;? � �t�` ky}a.$]�w쿴wT@9Eȿ( >`#4g:/IG {yaՏ|tWCi?@ZG@*[?(q X�hïZ�Ȭ2ı/i@YW8@,hAoz'*k+�y8:hAbزP�0C��`A'�P_@= �zJ~uɿE2 ]9H/uu,}bxȳ`WGqa_"$˓׈MJҶ@"TL��g6*Sgf.*�z1-_eVqlgBpW{` >wn# Q%[ٴ+ǀ�S<Km�E(�0C��`A; �I W}*nv�)UUP;wOXkOטV?_^Y j'}I F ׿'nFa+�2,/P R�+L�쿝�, &Ve?KO}};%Ah%wߝ6l~j@6 T/%)�v0k�`{j;G^Cgl@k*�6ຕ`j߆B.i@/ާh�&,T9ǴH +W wBXG]y*c7˗fIe�_H? H��Zs'�d�P3�G�J߬ghb/5q8_Wp9g';E,@Q"P|%3�fWJ(.}$}g5h' �n"׮xVB�V8Ė_>ʧ@Rʪ &E�rT.o *={^a_blO]&dZG<nˊ�VG�FA��u_ =mfv@ �"CAmY�ʒZ@!ޢ]`}7oVf�BD͟ PseU(M}g5`v� P߰|{� leaocR�A-$%W;Wj"T:ǫg`z0-he]FѷrYޟFr +_+s?=m]C�;@[ iZz@X(Ņ4 yp Q hbuv\A~M�Z0 sM/2BB>U]۹,�4;? � �� wKŻvxo>ft_X]?kޏLڄ B=mfgVؗ` vxWУ:连�`/+�KY�hï]pN�}<Y�+ 8"_{` v^f^$홊j2J�~�aJ(3 *:GvsY�hw�Z�,M %B}B:�PV8T? O^�Omc5zŶ ϩBvǕlXxG-^Y+"r@""QuĈ^w �4,�-�XP�1o8 csJ`WUPEٟFJJ �ڹ1od@K؄�jNFvZ`džP,�,�X0Z@kG__ŵ\�|œ=aFUƏۢxv:)BKe 2 e6xM/ڨg`/|L~>s22[�[J�,�4wn ӛ�㸿?_*": |�K1\ؽ~-y;Ԛ�&$T* ݖ}E�|�;I2JvZ`0BY�0Y�ht@~[6x^Kȵ=@/o=D 1/u$8_fB?D%{a_1LHs@c54`lE++�дv�[E,�,Tg#c g };P g poFw͏, 15�Q'=5%@} 0tKehC]m?6|g5`�[nE:8k;p>2cGy샶ÃE(K"<N*8$MXp,8j^VXs/_oD 3FEIq@O �j.ȿevwW � ><6@U@ p{` '%= �y�PeMN1�_Bue:=0"m;? � ��.ne*�%>ݜ.v 4/!/QevTTA P,6?a9WDq¾�cýW1iHzP�D  *?ay,�Xҟ8#Dğ.Y�H��;}~t஝w4s @v�``3,m;? � � �P߲1M^CHpVA8Vۀ6gK 8ga (Fv]`E)9`;.jn>1X_߆_,'*�~* �U)�0<~C�M�E]�!Y�=0 o p}nn7�-�ѯvа7~KCߡY�h X�`>XĮۜo]_Uz@[yT_K.uq�Z;ElF` 3p{^#lVsW?i7<d ,�4.}wu(^,�eVFgh ={ft-F{!?]~1,"Pre@E� !s( L�y�9M;>E� ,�7 �1/�$uP߸D,<+IZ7+ƒQ,.$_@EcU� Pb߶(/�u�~gE0UMx[_F}>*wU,�Dm),� �ۄ � 0a/e z1T7  A /鏈~R#E�d_QO;3AP{!�`JY�0Y�hƲ� vz=4mF[[Xiȿ Ͳ{ U:Y/y7�*E0Ņ<3^52#pϻ_#۷YrN&�TGqhe?u-O \J�kN{M�t@RP >Y�,)S/'N  H[~Z~L_ `d(ɿ?�#Æz~hk"D�p&$�aL � ۰),�gVveh �Gyp_?&PDMP?6~xާ%2#߽+d E&0G#<g* �"@Y�6fPYG@Rׄ_u= @>ݞo`$SWVROV�E@Daw" UXJ{�ZQX�D.^VD=�m/~N;j�9._%경$TE* GAh$M ui4c¾@c1cWΝdDsm5K|* 0 �kz.�Rg}= @,I,S!1X_�۷@yE@q]$�i$�5]i�D�l} %4+�|Wه&C��`�4[' �>ocF[8~Ac[4 ڹ yWH~lDpf@]/`O‚s7/c0FE(|*O �?Ng, '�дv�!}G-�Y�H`,â3 Hcҧ஋ WH}N "r�Q @MPB.g ',�7 � �>Yo�!iwԠOhٱP7@N۟bD<D9@WDS\cѿq=wDW/k�TW�VG�`!J@~@fM?/b,Xkwȧ�HYAmx8 3#1۴z{ac�E��P{�A1Ǒ)_-7Gݏ�ZQD �M롾aoX�]6)�?2*�| b_Wh-h)H*�&ʁ:@O>Z︰/<ޡ/(>+RA,�4�>Y�z*; @5�f=pt@}nZ%H1U�Dz\sl�Ŕtl [@"= �%X�Et� ӨsgkuS�HqA˪"@-עjJE|'!A\O <@ aο=Re0/-_\(-UX�'NTmY�hïO�,�y �5 ��Y�x@#Ʒsǿ�{vTнd0F2Ix;THzM6.��([+C�[kⰦ� � bO]ho& P,�m&:Q�n7/og �iᾫ)G"8^C(mlQ*/IPSׯ's<7}Q h;x̜Ek q�GfF�dEcW7X�h�ҦL_=י G�zV8|ɇ'_%`)X~ត^ݖt~نp[Hud�hyx*uwT\.gۜP,�mD(>�kع~C7[X| 2\~%;3 TBW;G}u�1{`;/Y%1m<kDJЕT~5GeGD% B�,�ï_�HPUF0I 6yW ; @9~/xId0F[\عbA)ҟyTu�z[2�P:MGb҇tC!auP,�,�X`#P_-=|هBE}#/7һ,gfssT^熶A/�P?|)0-&LSP߽ =uy#=_A[1Jj�b?�@.c�$ X�h' �sANОz.� {a>O5'g_6tMtO+? J)PP�cŜ 6۶%IΑI=J4ր� _ -x?߮ MW} "f~8,PL(u_QQ|.]@ᗘbxzNdteNYi5)�D~=s@�< �_w �Xny1Rt^ b+x%6_8荼, E~k7ã_)e?)�zkHz e.IUw١ nn^,�``ر.OS}C|W^poڞho)U&4P_a.m0/|w r)?5 =kܷ?|a_ [ tLWGdE�) 9UE�4�&�d^r&�,�J�P��`P>7j=pM„Ww. lJN (I}HqHBO[3�P׏3 J!@0:  X+)�-[7N_ �@ і@\O[7B+~yG�V.ϳ;p]shyLe`I}:4x`VW|.�p`ٗD B6c]"P^Ɋ�rnh,/ }�Q@~@vV7%P"NgPf($ߑf__t_v+6/~Ԙzce�]�8 >_ y>h離;;Q 7 �v�۠v '�/۞/{b||(S�(SiClqj �<i)ʷFQOߗ`>t<r幢 EJ$ d5��66@Ey�:(�IYn�,�Q �D|\Hg`'[]Pnm<}GHEz*��6!�hQz@F! v@ c#.X�Oe@� &W_ 7Sh� C_N;>k^/V�+ܖUKؔ_(b 'AQ_ι{o:?[ݐ*v/{|9zgE�t_*�:6BO>P,�4>4 ;ҳuz"�mY�xZ~VPY�(`fLZNj5`0:k~'M A�{ٟ" v �d�h `@6~ܩ.=uleƴ�@}g.@5@ k~;�m3!rX|iGMy_u߯@9hvޠON[ݰS7_'jr>e.Ʉ ,32@+Pt�Z*��h~"��_ڏ5 %�~ �sMx˃/nk{>r뷅 cI?m;Ne5mQgnKc4?HkP2תGN\?߇J�e�$Qk ޴~cA�0}÷-@Ĵj_�nǩNo5z/H#0TԿ$f 욄_ _h^2p﹯m[9@}=_D ˇO?7-,�4]lo<J<&f@>�4r&ϘOԽݓ&c ~z4A7Ah;�E3v)PO t;x}2�|;u�J 5n��Aa�D߮,߿[=�Qu]o̻=N9=؈|cu 5"@�xqB6ӷ|Fw9j�}?\�d{e"e_S+$'Z�дN�gC�H�#n<(g&Pl�i;eC~N=f0۞~bغdSH#bV@%°'T zߴ3tqC!>[�PQEk q-ě֒.�8 :2�([K'-8֢~` uNc[=B�M:u�}Nk�`/'{wh^ ћD2X/�PRm: DGe@3~ �os /`ПEM۳e�\(ElWkѨ~USnL˂2cl xo$}UFlK{\@U�e@D?W"dNg ~],�`�  %�;�ă"^H �8ݽi{5"ۚ/b(owISoJT(3�̈.ıK {ao!3U }f7M:/hs<|ybChs嶶_!DEĿ~GEBh'tt@gmu_ �ƕV?�HEGǭc*K v p57gݱ| صz%)(�b` �÷�o()S�lK}Wه�T$�xpb�J�ԓcV cv�p!62�*ހ,Lo;ϓۢ8N0I|U#lG$"Jd_#xE%hyNaΌjƇ} FcF?]�H`[OהK'�,�}dP@q e#leQ�Ys._Ahw |sw A(-T6=�K\�zv*�NI Pz�}C�pp`$��Ps�0zDC�6"U aoCqLۦI=h.Qm\-C*/?k!�p 9hz|[ Fga`&7�Q/*' TR�L8mY�hïy R* Odj!@Z6PY�qɓ/ {O F'`#=^[X\߹Z�r;R=]3�LroN/�9mbr}{�W!�* ��'_@쇮�m+3�Y-v] � e.3�w"Po#B}ь.XK?Z>/((Z*�A2?H[�oS,�/ k� 0 �3<8WoSߺ!O۰?+6P>@+{�3qMiNS� V$%]iϽ �<<%�M�6@�(5EH �]OVU3&aqG$OE̿m0y p �Q\Ys*SOw␭d��FIDATO\,�W(^OH3W$2B ItCVܗ�2Oվi@, @hzj^իDdK>'3˖�KgH>Xڭ5�*;I裲U`�pEha ޷O}`$} �{� 54`Mb8P/Z1�93�`p3ڡ4�D\6{AlR ʶ� JϒЗGt~)IB5c߅0}#?ф0^ 5]G}N3yOh5ʏ ?]@+K#h/Vܗ�2oվmY�sDk]�W@�i7} 'N FGGԏ�x= nvU�P-(ф�,�2A61@O뷥Gυ>|�>0ƪ�Z?wypMeH_�t ,y@nkA<�r=:M8k6}K $^/HelǤ^_^C,󵨿2lza+us/cO|XwǏ5oco+GӁZ:Nw?� �j߶,�TULQuY@)@=@/G8 F'bò_,#pe(}U�G? +2�H1bgk%!ط~T@HZ �/ړh�⇴J.I0`oX  �δ6�CUoem [W4B/iOa?Ao\@~$�67aa0_Ί&,<=V/'+J(YXM 09R6�Њ9@7`< RڲFhv\[yFßx'|FvԱATl|M?SB|V`r>sa]B[?.߯�A&]Sl��`<"nIC*..}�qY=�;G‡.�"b @M|T)�$QhK Qe�TgznwSԿr`d*致¯.WҜ5�k{:c{_,D] I_V�rХGS �=V�b.(ϝVK�g 6u3NkP FǢ?o4ZVL*i'@vǾ~U36fK�-0hCI0)�]gEE 8B�pcSv$e1>G>xѢR�PieT7ʷl۹7I�PD ){AoaEr esek4�i/i)zza ^3_6n<0{f_G<}C�Т8ߕmR@bVDSy'њ0,�-�2վ,�]�=Йh %cS*�}@e}_}&tYAt UXr@ϙ- Z@t�#[8O Qi>�X`g'@�4�J S�9U=ؐhF�h�D#63&[xE?*HXUPi^I 5_j"zpU!S!r_{[2c;>];!4H(% @r AI<M-: C:qx4 �_w�{~撵k�=t,2Bȏב}=,9 ]]pS0c;׬NY9h@??ƫIҵUb�/aKϭNp8 R!CMM3BIj�i�h]op1$`(@)-\Uf�X~ָ&A[nG�}@K7 o. c8~mml� R׬Ռ1k?PG:="Cz1%^C$+W�PU2oMυ)�TeG?5e �guG*(#O~EnS> ų.D5\ s{|6>:} t!@�PS&.~1@'V10|C|G{�C�xmFK1@��z �}}c\1 @UD_=&CmY�jCۢ5I?E襭ƯG]Ԉ?u;gzǞ ƞmxKR/�k? d!*Z "_ڲ��waCx_nbQ;FT�, ıo0 ~˻a?k`5#7.Y\BFҁ&d;zY�S �H:a=szy;My<5��*8�\W7T!`f"U\_pei餒�w vk$ ! ҭST*lH?>'5¯}8/?'F`i r`ߗ.r.ѷv<pѿ ѿ)9Iw*���͞�,<�h!9-6�54�("/Ui*=YsfcFb|l{ɢ9PrJ&8^1AןYٮĠr>�٩-Ezt0v;Qx �{�l�Ss`.u][ j ۿx•5�}|%LE�r7]{3�q{o_̜u-TQ?m~y.*W?P1bJd%zf \& F#\(?"VL?N/7HAG/�{շ)ސ в}jv^O:zv @|>7 ڶ|XLѮkL#q,OF(+:J褝۟'G/�U�h^.�x/1ud�Jq2 �%bHI)�ԗ �#0!+"a �M#`Iz /{) 8OϠ�h{,_u Fs$ 5?>,%_8_ éx?X%_ˌ,� �{J<{R;2ofHr3̥rNL$u.{٫c,#Oѯ|vZQl [e ؃?UqE}3�ݷ.Fur�:\S��YS3`.q8D;1Ԩ~MO] |ձv&FDuԈ5 {n=hS\Wsc%Ƅ_s9 g#؏g̗:;c0Z$<xYPԀN/RIlU � �{w+�_f5 s,wOe;IW|࢐`yă?Ǿeصje&+}Ltj�,d[8 �}Xk�u K�3ϖ �[B�tV�6�Bhኚ KffW9 }Q 6_XB{,>GeZnμn;3 l_x(l3-H/?�G?tL �UrÝ�`?,�8}{,sZ<98EsDELh O}jA ' X 5ЃE58|t]E\{ g e)۷ϩ�D] �}ZL�GX G~GoV�4^py >H'٭ �F9ѓ"{ټzeTEva+aڠ m}tUW}Ϭ _cN ? cS_X�NDž(H|Y?�P  �8O|�3�b �վ+GXՇM�P ��jF `k~x+ళ^= `o/#6FN`:2}�uB>,me.�\Wa.pNܟ��]A"8/�^]>wnD�h?-\&"",?/>U*�Df �j<3�Fj�`RHߎ3/Ouf#6үDBB sd H{q?E1Q-tʿ$™/CP/Wä G`OY�h7 �վ}�l)&){(EbSd֝nEc/s!7#mRXr7`~ q__nM'S��cH^�9Iͻl[>6؞?IN�*h5*+!�zưk}ԉ�C =w+?{K35�;L3�]Upj�"~~gt5hA@e�؅jҏ?JlJ(j�m){4ScMEo6ěZ/-'ζ<_?KY.h!hUd��?fsH{-Ÿeҕsqj?�9㩞7~zM) -O~пySю h&b^?y3S um+|+Cy[P�V2{@��|8D >dNM5J�J_ijWDvm&)Wо]<ӳ �{ �WԽe�w!Y]o@|L]`%Ȉ0?ori~q4@<zŶ`OSkE �LsR�tIW �:X�msaE�џP>�e٧G0+ ) z?^kD_ lm7%.Vda �Uפt0 �b)�qd^MfbPA E�z5OJ� >Eڞeӧ�t;j��k'gQ7 �{&:%\ԜVh”S_�Q~s`r?Wڅ3w>x0EKܩX�h7 �C]�US$ W K2C֧X@iABCV#}uwӳV@e:8�s:2�!V8�>"@�jB�h'?~' �Ppy2w�A7Qr��5pF H[>ڨl+w~則F's:Dݼ1T$K=tB ;gj�r �K-eb �acl�v_~P_= nQo//Ҁ F`a ԧ�DڽO괒Jvv�*|a){HMt܈I[�zMLhgm<U~q~`U" �͒,�,j}irbT\ m$7կ&@".r@dd d{]{πE= DC:K^f.@GZY�:_Y 4UNJ�@o@3! B]Se� Q�CfLN4/ `;VϏ`ui N�ܿ(yLm6@?&�u%��Бd�| |m<^]ەw D�JO~~C"�#Κ'5�&F�PX3�S�n/},* }B5\g#6 0SaM:W<} b/_$ۻ"R~ȢFeY?"Uh �:X�m\*�YEBF#_E�U¯0l}+ᰳ A `yk;X_ ؑ+aֆ; 9.Hg@Mq{UC#kq9j 3VkS��` >�p0Ф?4+v2Z%�TF?zPL)5C0X@8sT UsVo[мWzv mu|t AG0kaѧ^'u4L`0|,өeF. vt? �w\�X� ߡ�qz#ALU,2 z�qWҀ p ɶ[}ם_; ;wԪ3t3O;E�r!ݕ�Ч��-S��z ko8F}lMm?|ŵkNO zĪU�Ab `w;PۢeTU}WU*}vK3b  JIG SOxN4Y'Cwd0AغD}l> ޖw5%'RN/_Z'~ H[�t�04߶g͎��zZ@~ �hթ�o$Ko@o` wê&VtUzjB-BwDgW';z3uMpuv)*�X�Xྨ*)�T�6h0+_o7~~yEQm&~�⇘L�Ћ*vhWIzU$ͷr2&>0mXĤǧ1Bm&h}b۽H{ZA3KQs?Z -gawU햏e�2+?ߪО;ZE�YٟԨ~4.�J+ 4^t''2!cpδxPKۍ??9i]}cOEPw=B#y�E�~](CH~@{ �`Q_{1윉?M\<E?Ō.k;�a /#0HeO 7y>sa'”#O&|T;C Hb~%!I7&z:?Q~9@~Z<E# p@qaf�} �w߱ME3VFuAZ*0'U,8gWr FH2t ۖ>mXU�`kmڏ*0&p�#{<_*��Y �?pT �� ^]֛=1}G �*T҉3P �׺ !"\@AE#hSSh5?Xrĉ#O`7,"qY?:)�_L90Y?3KQ��P,�`9xlRe' UŤ_ާE(ί 5SZ*P|Cc0{ܕN a رj%`5w1H@jI{kIz$`<X.Y�G5 ��@ @RE+�[@hi?T�@QᄖD�V-ugiD-2b`#Zc,ߖn`#qsNG_tdZp`.֭.~o-RP3SxCS_ /_�,�4;Ho_۔`EDf}�_0VhltO |0a~!7` AX= ' $0nICa_<Z5Kdf*�D{o�&}R?l"B=VG_|Pf�L#:32tu5�Q �AP|S3 *Hev;[p(L8xCmuM1 K%v/]b(;a<?/IEI>?*mPM:q\ڄ�u_{ �x>r)]t�=_U,\4� |\h3 6^E�Pls�s_a]&">EH�05� v�磷\�(SM"�|yL�Zr0Q�~hڈ!�"; >E|3Ub eeT!}5m&_ &,:"C }s;y|}bmR��;id)je{0tG�@5/g4`]~D#AMVd1,*�=cx1u%!7`0lKÆ5~v^Mڒ\]y=Ep7>G95-b�z�E~$5�pd�mG]�Z/@E]�p !I;ϛ@cH8ɱ�j�(iV? �ǨZ0�mv9tO ?n0~ނhà{}? uD? W/Ȩ0|RuT 0(�@;*E86Pq\*2}0說y csŰyebعjag �!hKC)�`'�"m<#9�n @ MVjWJλ2;I偄(@%%?}7 uVy1hiqssD)ols*?ؾAxsբt5￘l,MO>v!,�4\ImF B;5(®twÉ~>`0 ԁ-O<f lIDæ%Ks YD[Z6YZJH�HXy�p4_ǫM? �C+۷>w}$�LgKj<\.ncV-QF{E%۽/`- l�~x` ~ҷ"v(DTD*Ig�3| |Jf?N/ O@b_fLNW`td0ɊxvX;V&?+a{j",TO�(�@q\F.`Mc> �W71@D�=jz{k" ?P2�yZ}~5�@h(qWۆƍڤ)5i*tMg4Q,& ƞQG<O|\4"Qz׼"r_@�dF-_$>俴/,�`ݧ,6K!S>r @u=,R(z�S|t)F2F͹2c}[@}N\W>`BU�p]K"�PS�lR0�S�<."FYm雁l[%�ǎ8v]i`ZWWW]8H_3V(cA?j_4�CTײ"_`HEvd%Owk&Aϔ)Q4As_Cx7udѿZTF�yJ2�@ @{PS�9zR�Z�j$'SE�mdM0WȊ�b Wa8?F21x`�nI�) 5^ӟп} WO_zڟf}YXVe8Ir#z/h\!=mS_PD'q3yj7tӚ~xG�l k񹯾y,4?x3Ҷ 1᷿'oF $<j޿ޏx?V/yEBY�hï}̃o F'P"@Y@Q~dYZ)�$G^x)ƋCn&`-"Odh.]~W2@tWe`0F;.G"SxdP5  d@)�HT顥R,�``| K-c6@fEf>P ,SFA!],(/{)"LYtH e0D �>z~֬�`�,�0 ap6xCgu}3Rb?npl>rS�`gs�ۊe@Oʒ*H �aP|mgU Fg���[hѣ,�0 BcSg}ae?*Ss9�Do!YvvBY�hï̓o} ~zȖ⏧ Ě</7+?`0N�x.d �EM�p x�<u'Ć_/MEjz1?E*"U06]HWBY�hï3̛ol#+]`�83�@pf@p߾ 8!7`0 *��?@�` ?V蛰/;&~:O(WP �eJu?.'DO.$;;G�<`{,�.�vn,+A(7 ^}fe0A �eC �I\� c_*e&ϖz,ȿ܎9ԼR @sq͞�zL �o,T�t}IeiCȳ f?`^r -a�UpD�J``0F{�!P?GYoLy/"-p(o.$;;K�ȼE�描"��: jPrzALzzkniGr c1cY^ �^zC9� ؽj9< w ɷL(�؋iP R [&�DHY�hïs`�6:G�P'OL:`^ȍf0QE�/>.E�GE�:�`0ÌK)׮Bޒtr �2/%I^<r<jŞ�zL �mJ�jPӈ=d�ua@f _c9pʧn޽ 1j#@q*^ތ�@``0Z|sV_ }/H�EpD?*iz|�q;�u_{g �re_{*Hm(`=)t�]׽; N5n\Ma0Q� U ��`Oro / ~MFᅌ DK ,�[Am-Jo#e{R0<@~+�sֈW�j~q~M143ԚƊvυ?|uo`3:\�� @g`0Zg9Iq!?= ¬^@ Qzj?Q'U$,�4@e�Pdh)qK=�"#mʵo{oȍa0G ��zU>z�h N;oċr @TzW?g�أĨ*zP@~{�y˹%I5E�?!e"a8!7`0F*�� m*[)� ,�0 Fs`__ӖSYj�wѿ~Q`#$+>sI: �_ww�>un_fH;#d$(�jQ@u @OTc/({Cn`:L�Zpt}C?Y�`0aS+o7"B~J ?Pet�ۑQ$*ɿ5f:�u_�?U"LŞ@9_Aƹcse��` p?S>,&1 ƈSGy+j@�X�`0-lD~@Je �/a{ ;Bi߉$;ǎ�w�ja*@M/c@ ĿJ{̀?ߜ`0�X�`0QGuV+?^"2i0+P &+F�B�@X�5.E釪|��?k?8`>,V��`*lG|_E#Dr>gQ Elo+!⸾#PJY�hï}l ��/#PtM80E< V�x<8㟇iCn` X�``0F ۷cW+v/{R!sȿ N˚Ԁ%1"�4qqJY�hï} �Q?T� mUQe!)�B0Um ILr cX� � 1* ]scZѾ(l(_@'ʿK/E6FN\zN%,�4>6Ͽ)5�qW=�\3-h5�.9S9N3=qRȍc0�� ck/{$~u?#gDѿ+(R(�@ O@3{�=^�m֦"@,*PE�{@X @SGgQ W ƍy R��`(�<~b5cN~O^/�B\|zN%,�4>vޯ�S=R"\5 >`f2'r e`�1z|R/#u>L�-5=$\E|K Z 1wIg'i>|.>N�:O kmyF9O0gq\ QWWMd0�� cd̟Ub$ R/LSI#T�b?۫UU?T@~A҇ݷ"_v? vOK�a"@\E870 H�� cȟņy6O俆ȷN#$�h?(E0/?aGb`|g,�C@�=SqSS�}! ;[@ ` :C`0#��X�`0aAy_#2_?+lWĄكݰڅ�u_{a V(_K{,Ȧ$h@q]n "@>^G°`0M�� cX/?5ӟ4^2& c"^n`=T@~C҇[�7U;&!^kҮ:D:%D=EQw`y;n` ,��`0Æ?:W$za>5c�+*?&td� ߙ= �uې�3}�q[-dZ(2�JPt`kv c`�"$"Ee0W;fQIL@"t�ٳ�@X I) ;Ϸ 5^P%hIM@"9` -a7`0� � r,MbO]z>%iQ%bA-*?O/ٳ�@X IoG@�m.!�"�.0# |kз'f1 F�X�``0ZFW>%6ϏMr./S)�?B��Tha@Ӿ3{�!#)�d}W�x~K{I}PLҩp߽|xu�1,`�h D~kŦaY?J_._ȷ~+Z@;f,zR�ٳ�@X Ii %}"* �J�@dK"~gu%*h,��`0MC BloI5 8_E)�ʋJ/ /ɮeU�ºmHh�'6@2`U�*D�`]Ȝ"\8+v �X�`0/N~jtF �zF S}OSszP�Zu_X� ۆ�yM�0c/m)�y{`�6�g�vSqpܥqn `X� � 1dw?~__Eva'}E�?( J?Y� ۆw�,� +)�&d|D�() Ӟuu=abMd0 ,��`0Cm]O=l[%5Y?[e [uJBJ �zO�Zu_X� ۆ�yg``@~Fu FE�D��r*~ϩ'^)25F2 �X�`0` n ]˞"gd^TM9Q>�]z: $>=' �/,�mCG[�ȼ&qL"("Z% |DI. 6=f2  �,�0 F7\ ,/Rȿ$7 Dټ?3Jӏya �2c�Ъ�a6$smPlJ%V@"@ s,9+2 F�X�`0 oY'21GʊZE�EBiZ &[�Fwf�a6$]�@$y Б2uׅۜnp9ݠ|uܾS`T���`0ص)X֍Dg&5^Tu5��D%Wc@ !,�꾰�@X Io'@F}Da#@ѧsH|�-b>DB,ȏN'^{L9pQ؍e0{<X�``0*{/|,^_IqY3�)x��C*FvY�h}ann@[h&j 'edk|wO^z-8`0h��`87қ?ȻiY_TtQIq� �;gnnO(#%zn@�r*k y߅`ǂ�� Ê߽EzGݧN(L_ YESŸK{�Fwf�a6$l/̷[ȶdUn@!h*|/{ `0H��`>&6y˨>X?:/_DEYB(YfN,�̞�ºmHz �YKo 6YD�ݶJ0j�PB�U,�bxC'f3= ,��`0 ;/; 5Iea?& >(}?!�j �0;ksG@Y�Yߙ= �uېv�0ߴ j &l,<ٗ2<>> =pǀ�� @U})U)G]_FWQI2_E%*`'ٳ�@X Iow ;T/m\"2�ٚԉDsW]v �X�`0;x|C"޾ͥWɿPɿ.zq@0 G3[-{ O͉ǂWd`d}g,�mC;A�ȎVEl/M(�V%jQ }цm]H'\ n<`�wGGs}*W2 O"n+ �A w P#�03{�!"�daڒ^6Q)E�T�ї�xZ@?^8v Ƙ �,�0=kzK"BZ$�H_iߌ俆$ujA5OQ\ {u��03{�!$�dVa?Mr_Q"*��8Fq�v]U Ƙ �,�0=>{pK\t:=wsDD!iPr EqJxы$ *Ad ! !y;>jvZ÷VUή|_rzzUߞ}׷V]쉫?O't44W(% |iR@7O&s<�Nd� ƈ� ҏ[0ݧ&c�Y$U@ U�-|sNA2��XNOo^/Km/'\}^z@;YC܂ r'x2�tcDz -]L�w#ڝ�gdH '[^x:< V 2��Xfqw{W&忤k_/O�a@�Yc~l8d�t/XBN@Uy!�A7F�ypx8&)=ݨ_�DժT/ p � qV/i 2��XFׯLMcςaI?Ŀ$�>h�A[?+miȀc0^O�nHogn_dDv  0�l&�CMk9x>3GAAщ  � �{? aXޟqY8ȁ?v=W�(29}@<�1"@g1 oEu@WL�)=  3oM/ @A �2�(((:GÝl<iPޟB:T& }e@�P&]^}?N X.}�h6w'�A7Fw�Hs&cwL�G$p&@6 Un�bul.<m k%A��{n}!DSan%)br-+KQ�~ q XSWf�]Nd� ƈj�&�Sx?26ҶlY2�Yy‰?/ 2��hpE1mpX c~Oz�KQoςiO �Nd� ƈ�  hL k0Q:V '#~Ώ%uA�� �{WGg/߮2J�6x~?|�y>&n7/OZ�h4w'�A7Fw�HXpn[[0@�v%Rq 0!0+WX^^P0? |@؟K*Ek �2�(((:;|6su8lH��xMu/ 7@&MG@<�1"k@„&(Ul$},¯f1`QGL��xI7<Y_X8RPP"� #qo]ԓft/|@W$|T`/_ 0-G@<�1"@¦/񋛣HY& M{g>9@vLl?}_r)((d�@AAсx彌-.J>)OA>OֳLc^}_]'"/+_W~fx ` �U aKb< F7ٟ.?fC�eΌlE|>!W7ak/2��hqD3pbselR?xӤ~�\��'}: /`u¿APx ` �e au{֋M;G8|@ 0* Zo_/ 2��hiLq+Ǝ=|&!]fa `gڝ�R/3\1װT֯KI�N@Uy!�A7Fw�2{8 n00MC{l͇zBҮwSMAAѸ  �  ĥп_y|g�Z�[&왛;ܩHn�߆  Fs'x2�tcDr0�@LYtn0(04�pɜxdHħ;/@@AA  � c]lظT 7ަҧa^@~yZ`jl3Ӟd�4;#җ#*b 疰f:$ �00�\KwPuʐqHg=ê%A��-^ ]lqz&0�/)_@ԏI?&@/+|Cn  � �LԻpMZEySo=MmC!�!Է>l?OAAQ{@�Ecq(wC_:ΚH{�ĒQ_c6e\y+WkW|d�t;#җq6�`3"&!r/�!؜z\egabZ  � |sP?#lezɿ=`P �LL{M%h@hH׼2�:ŝ�@Ѝ�׺s3/T b!]V�+?Gæ<%� >!y ˓K&rRi{F7]c^d�t;#җo㖫t�Y@ T� ]fP厔vۃ }y8 APPP5� aqி'6@A{,Ky}Ӓ,Ah0Ȫб�v!m"[ � |71&y�-&]X)�U֩ܠXg'z.blA�� ?p9tV}y\?ևAbfR/Au fX}3_d9ٷE:�U �Nf¿QdR֥խbWBCYѐy_&ћZ߆]K@�Eb!¿dOx-*~NǴ^ _;@I"^D{_Žv/cd�T2�tcD:�*ʏ[P3Ǽ<I&="yCI�}K΂^ % 2��9~AC^|\?zSL( 0K|C Kt LۆEzmE@<�1" � nbw`Nx>03 _2T<0a#<7~N|+_ % 2��)}_ߺ믖Vo6 ͓&T�ĿVү<+*%Fd�T2�tcD:�xD$JKM&R/CĻD 0HAH 0Wl~CXu{2)(($� b=veG/dlX^돏WJ!')�eu�Eq?^@E@Ґf~x}ʝ�@Ѝd�)x ! s>[qup:A`^h%\X O_=?:w '� b1{pEqk6)&~�Ce�/M'ܪ-W @JՅ~y(x [ �Nx!<z[ذ_ۆhHC @0"SNmnKAAQY@� {S_ -J_yi>Q"/`dV �8Ȱ�K@; Nq'x2�tcD:�pn W 0쥏 h(@]PX ~%''LAA1r@�Ǒ|z%11r\ 'ܸOI@ Kbm�2�Fo+w'�A7Fmm4 >[ƌ�kŀ`Rn'cHPWݷ=#�d�PPP,Q,N>).ċz!�0 JJےe&<,-sCD|&ұo$2�Fo+w'�A7F΍nJSa1�5|O1@7d W3~7abZdSPP 2��X8t_hԻd3s載IK_j,ryo"2�K<�1" �n,;X�ᥙ zR} IqnTLn ߃mg=A��Kڵz/2>?{gŽh, žEg<)^�6/#_)~fŀ/2�ŝ�@Ѝd�f3n]ݠ_2 o2}Pn�Z `2$\uK΂g`ŖOAAd�@AAQAxʏC-NO?Y"^P oW~^ w6v)�} �N@ynޕ bxK2�S1L .V} T{+Wɿ&A�A��#S_NCA3D {!/JA`*׾ Xj �U\ �x?l" B�nH'`4nV;b*D6�0mH�: f0I^,0爆Ħw6|S`=Q  � 1{pǎU?Lڦ ?G�u?}β} w 8AZfBqTC %�*/Nd� ƈt2�*hw n $:jmɚEf` 7Ċ [Ep0 4� 3<^v𳟀 t9,D|8'Crs,kR/>Yſ;t2�ŝ�@Ѝd�Tf?O4VvU#x@U�8S5f�R>]?7L[8 )� 18<KX4}س/V�$[IT#m�'@)gC� (mORP�V-O�nH':n]Tn �JՀn0,P|^p@Юp{~�% �2�(((7^/쓔a`AQ̟˴ٱzmW#2Q:=o@>O�nH'z]1n.dLQ5�P͂"q1dX@XwgoQPP�d�PPPX8#7) ·%}٭^7Xq I�VBI?w@8lڄd�]./Nd� ƈt2�۶[G_?mź@GB zgC b,Pr|ߋuM>Ų2��@/g`_)6)gW{tLQf(x\H1P,uLg) X } �Nq(E.#Urr ݦW�V �a*cB�4?�EA@�||ldD~$}0郒E$nOEz6Sj{ur~td~/HM.d�]./Nd� ƈt2�ruf⿂Hw1D'̶8)W GF@nb:x_Zd�@AAt}*x㗰GKx~1ᏖC> *Y;l΀h{)>Y!o��\^ǝ�@Ѝd�[BJ/o7T� <LS�meqG _` d�@A#9t|?D=6?.T�$I<\\Ѕ͇�(Y=^u=Cپ- pP\^ǝ�@Ѝd�[V-`=6aX+CKc%jd_ckv솓W`#@RP,  � S7^ ]v M^wK/,É>a�`]gC�@17t*]z]M�\^ǝ�@Ѝd�y`Enn2U V(RYl`WX:�۾v~x dP,  � eX_f`9*|6�D}' qA"]A0e�܅N@<�1" sG#pc=j�X5^GV@ W؍ ?픁@XA��&r#<g3;ZP~( ?V?0} 1!›.ЎNnI^1}6gC0:w;#�x@IH z &i6LU�bXφS~ӾH@�Ec.bӷ}0Q_0ӘG0/رa U �fY'ZHs4D-O�nH'^nnvnS5�۵Lpڌ�5/0±7?#`sBPP<� 1sǭ#7M(eX}a$Qf/�WfܲuУ0 i[)" nq'x2�tcD:�w/ƪ7W9 /0F:^E + P%[`0Bxh`l|Ƴ_ �d�PPt.f<o\gy:d*%�t"^g6P8$Aoz&CVm WcAH "�w'�A7FnfXSĭn`:FȖU�ldn4Pa *a=R8֟| CAѲ  � đnG>v?+z|dN�fJ9�^qh@K/ x_8,;?|_�[Yu5&mMd�t;#�h7C\u"7&A).Rj �pč�틷[8aO_ �d�PP:*xnW(nb�]cbS\>�׾k=Sn7D-O�nH'Rnj�[#v5.V 6#em�*ou?;a'&JA  � V5]qab}&R}UK�v/V hY.�4/<Az¶Yo?}�6E-O�nH'ܬwWE4BGHt+fnx0ЎMaO0n_b)(d�@AѪ{AxC_ Ds@WP!æf)N�HUn�xx0 CD:�Nd� ƈt2�̋I؋ u"= /]+e�Hk2wЍ� bU +`~V/ 2��hELx3�VV?օ@ W? XAƝ _�IZ1W�C4g@D:�Nd� ƈt2�HHU /^vEbb buY3PzL<zK΂~gaӳe �2�((,"8/ |;7 h Gڧ_oڬ �A e." nq'x2�tcD:�v ׅT�G_1Xέ o��p?CE=Sgl8u? |hz@�E":6 O~嗱D;0a2N?[?| >zf$υpC'Ӿx<ASl."_Q*�w'�A7F>me"aX~"W1HyU#�� ?3?o? {}5Vt}((d�@Aјvx f|D3Gd@G_.O`W+G#@O�&Hs[*D]amd�t;#�h'2@@~@uyE C&# 喸έ?qXhc 2��58_6yBg\Wz�,b0�HXx?y`b?3 Q4�5|N-bWhct9Z*�w'�A7Fnn؉_�`fT1�`J� *HGbQo4m;Ů?噰_ U\LAA��߆c J<2 P.8}9.Ags �_&)w'1kHtEt2�ŝ�@Ѝd�[j�P0PX dV H�FQ !_~�vt]MAdA��cţ?O6G_i_*gvb!�Of H\fE>˧" nq'x2�tcD:�`�0Q>y[ľuS5,U+0> ~y@SmӚaϏvxL[t J �2�((6۾9(?/[&K#/?lM2 @' ޮ/;n q L0+LnɆ#Wk|v^r} �N@Ǹ8w#h/jW(�|.Omw-| 8| �2�(($C^O|lM݉>Բx^0ԣ/I1B�Ѕ4Ǎ? .,/;VN@<�1" nqx[m3XdXaVz&0d>f 1x _oqjN]?bf׋l@�Eeȷ]Ɏ~+<](jT=Y/(ܳ!n_2CcROhZ1 0nH'[ �N@E}bn`%* 0|0 ڻ/?G:Vj :Iz=/]xl= MNEA��#/?rWeGq`Vezo>�  0e9P?L.Co�gŲK9T/�mίgKE:�Nd� ƈt2�ōݸ꤁`7ʄH&ɊA6#v;BX,y k /9�l}!U�d�PPx[\| 9ԍ_63-MxK0r6?S3y;(] >7 RA$11HD}`h�`Z�cӋ[?WL^ۖt2�ŝ�@Ѝd�tۄg5ܢ4 1f6N}G__( 5?8Ow{((  � Go}ȍ_hp"^t@z~yY?W�H"=g} HۦtD&3i(TO3�U~ryiw'�A7F-"<Sr6Ÿê V6�{<0,2@2ɗe�,tup"7^v� PP�d�PP# 7=?r8ۄbx@, H�Af0^1� A?;O&76_SkC� v+�2/sK<�1" nqոPn�@[�pnYvȸJė �B_SP�d�PPo&<y}Oer}q*AYNK~u| ِ[X _.??. )x!̇0_?w;#�;ieܦEtca 3@&j�LU 焷7 ڰN lyidP �2�((`qL5xM7Sm|,_ދ(_Lj^*^ze|hVļ�0׆� a #4N#)W 0_?w;#�;>ǸMb6#vLS"3 !�ELL1'fB ش%/_"\UX.A@y睷O6�C5{wMn`w}gPN`g-'eۉID`R ?怌?~q!Oi6@i6f�>qAXs|>O�nH'[x6n@yA*B<;FpƤ!�eHuƝsq뀍>Ƨ?ýׁn{/4�;o�M#O[:?z IJM\g�Y/"Zw_a;CZ` ašr6 6GܿK}m�/w\^ǝ�@Ѝd�ts­V� ^v,g\܎ HabVm1rsAFMn8:O_NE {f#(z`�3sw7gG}:lJџrK%v`>fm mM`#m|=9ʰbBE�k8K+X ʼ]./Nd� ƈt2�펷s(\/24@ݮlņ `b�#>�0pR'b�.bܦT֟L8!xƩ4w2�L-@L�EOUx-_LH/0~q}3Nꗋh|?so}P/-kARՊc^}:�/w\^ǝ�@Ѝd�tƭNnm0.CM*WQ�S_T|-:fͼ6?׉uaCVl ݋� �ҩWa��{=r?~ l{7%tIU�c vӋZ}>X] rĐPo �q谅>F?ω-D' r} �N@ܪ$Fl�`w ;\&n4  VڌqA/kv~lykvG ��GG5�G2�(laa0q7Ñf"Vz"^ uLa�ж! L1TKmѶə̂tm4F_Md�;]./Nd� ƈt2�/nOnyYjZqK"_7 ^t�3*mf-<bm7U#n<w' '&]rUWn��XX<zf;nY>~Ná"^2``3~lx5rs H]`*Xr^D~^w&TSdp 2�˝.q'x2�tcD:�vǗv*l &ڍXw3 :4!4VeN)!�63Z]`:~NN M1\(0�\?bک1�d�PT>0,7Cf߰z3y@ 0Y)c_\`F [2CafjGUu&`χi бK fs} �N@sw-6�0"sALb:a`pqr1V \ֱF fs_ݳwP!kvfEG "j<;ᅰ � [Dfaa;aرq`|Bٸڻ7?q7"_?W?7 ^記O2` cBۥv 칊MnδjhC c6E�sK<�1" nqww7�=6@SbX ؄HW &q+�ԟUSnn`Iq_(ꉶ�~)o �l=�߸>\{'{.8vߝ؃y~ X Vɣa(�S8fJ2{zV�g/�=P>g-Wc.=vQ2�l_?w;#�;ZnfX͋I K4z&1l=W3yն&�0T"猿YKMV֟t2Rf޾nC8PUm�;]d�,X<=pg,d\{ncFʸZ r9(WQc!1d[O�X�_8eR?<XPMa+ӷ}T8d�4;]./Nd� ƈt2�_nY _`& %QcZ@ϹyE)/js'&@} z+V j8aPT-3�IߊKn� ֑߄ O>= O<<x{!6Ã[-z"ʂt=Ož(ܱuӸzڒcbn*@zƜrb0`y5c'v>jm!t2�K>O�nH'[f^x36 l `L) `6�Lss.bXkvbmP=j|;<x� �2�-.: !{|ǀ-.H._ ݧ+B( s� yh/:ʭ3;7[`,\ktf߯="PQ0'9~ryiw'�A7F-nws* V`V\q\CQu�f~m_Vs3�l&j>zk2sāQrޛe-5�0�-�|;w޽;d�4'`r=~KȡA>_cg\^Ń�[G_􌋩"0ǣc�&~X2@s�@74T<b۱H\.^3 9~ryiw'�A7F-nwx �Lf,m r-X-d8<;as�9Rl^(LS50`ҳ?Uj`ۉcW L�So8?MNr�w}s��\|`ݨ@Ha0xXJP/y Cfg>h j;ŗ{r(Oȭ -v"G̋I_UǶak0CGRXd�;]./Nd� ƈt2�o)mE.b>:I4La3DsK?X68έd^S\P\!$ؘ\zNNB؟OBAIb�_5x] k6ȈO t?+#\DAo*`E$Аħ, «t/u.d1E(o˿C!.iL7&x<hu_37>�P3$m^, Ew>i<-<scj\a K@۹s|>O�nH'[z �4<+Dܸq`ɣ `(KonDZϣ�։?-6"[̼q C>ou_H&&!g@8fbP]0ϙÚ<Rʹ"`}A%`H'f _loן<`(p0d<x'1Q�/K/ #){�l3U'>¶�[  u քL*!27x 1q&?hK֓[T+^tע/mhN4r"Z"藎(f.nλqa `{NWut2�K>O�nH'[z �Y�Fcj] 'a0 nfK/[6+22L,xƅ-L� (\۠Y~'Aǥź`po,_t͟nŗ\ṺG }P >7ٌCgx/ NE<\�M�k։bpIcR_v͋$ח{ Ҿ P2c>@:i=.{dAG}�j9+^ϢhC)f?WU{ nq} �N@0�=F1�̨$y7$rӶ؍:Z� 7Mjݷ,H&C–sy)4iLM/w �Q*X14�?]VuoǢ]cf�[r@=?Zpə. 23rW $+ `M0zp`r𭶤�&?nX"Q�[KAwtL?[ ca6}~6y@2}LKۅg܆]󄽞}^zu�Ds2�Ν.q'x2�tcD:�v7�HW[ehʍ$y tq(= Ӑ+-S{Mm�`�l7N M:{[0�d`EPs5 c5�xG`3wo**;36Djo@ V@1ݪ}�Tb�0wW_q6Zf"9ztfnE^ǯ])K 3"':! afRy邞Y7l2Pd�t;]./Nd� ƈt2�o3༾ܶ}IJ 0wm�m2{a֫k 1<"̸߶XB%!_¾~Ad/.JF�j|*�Uu)Kx)Uo~a_b_>�`L΄hxWm%zIA~.C�}U6?24 L yԶY"'9�w\^ǝ�@Ѝd�tl@gBJpȜp&jTAf$ E~Ep č*Kh�c@7�͈apsЃ_YG-tя-�y%2 C3Xw;߹rK鏘4 ` lE2Tj�X2n0vyQԶBwDި ص|=ݩ �B[d DV (0@Û?^wŒv_?w;#�;m6nv-ŰʱnA63t7aE:)bmJ^�n\b'7<N8yD|tvm`Dj?f`.>>W9BeS5?LoI? r-}, �!#o)mp�39;+\\�H͔ľnUȱ�P9L�*3V x;Dn뮻6e1' /'`9~ryiw'�A7F-nw| �scˬjﶽטYq6!]T1`@]ڮ]vpbx~&k[\b)��lj 6Q炗W<\l�:]Af肿@6@ن�#V .\tη.`xyܪT�doȜ cRT5|߼@cVP4q?E k�5 zq&-=im_#j`&#œGZ# W[�0/sK<�1" nqk�sk7nfFLrmpkH#tS^}3ؐ_Oi`6im̹W ׿~Ǵ%VSm|]_,J؃Ce<>Kcџ^vliC �ek3�T�dd/oyFH|>@~1D�'Jun qڂkట !�؛\m`7 0ȪvLDvC[ �K$S^F.E{ �_yiw\^ǝ�@Ѝd�t~�Uqĥf߱&hC[7]'s_7Q`sD73,9U]XӺ{t3m%10]a D]Hg6bx,]�@w2�ֹ.wƎ2xFQ`�g΃KE?J8b  a\%w5Voù-}EnKEֈAmr1XM5�0zpn9eb�.vq} �N@1�p3')B\P+�LftłY.EX,fDQ+Q\a;V�ǹ:<!�AV 7؛?vlPNĿwT6_wb8 ̈́p&;&AL_>g^=i($'ۆq#r^p�ذd{>bMn?�ƫ䏥mDϣo\t�rn �rǒ]>/sK<�1" nqg�p�!:XQ!NoYli&O܈1|Eު3dEܶR_} UjK�(xUa_i|ݑ|> 9|`ۊ "hN:m륲#4Ĝ0d6/p/?{HoZ;<^`oc``ݦ X:V6 jRb^OAe!=Mt<D /�sKs|>O�nH'[n�Us nP(HH132:4”w%˅U&Iѵ j$xHE[{sW !�麃ua7A 셟[X~fc7� ^FkLEDFELdz քv)k0LDY �U�@ցam�g6.2z}�<Mlqy,ظ{<zfe9̓9& `tyiw\^ǝ�@Ѝd�t< �#꼸 xxCm j;\P#]oK1sf`9,O"}) (�_+51/V󟘝? FG[�6.iy7j`cg%\J�b�Q4@{jcm x@s¯ zK!2fn;K@۹s|>O�nH'[g�,sxn1'ئ(kNd6qv^d2UXf"$s"{[ f�%Cyk, B+4AA. //2�G�Oև�$�bg*r%975Lj�>�pzMhǂvcDF-VV˘~ [,Ma!_Gm@AcM"�r 2�F.vq} �N@�047Gd\u ˵}>X9CyT=jo1XM2�l? nT$C{ Nje.)0�sۣyaF5�L%Y�Em"wXϒ$ C w`TC524ih7V.ndwXxx,ŪlF m'ÊZ4^WQJ s} �N@d��zV]}ikn EwM?SVAvYx-C�xF`waMN:B҈CK0�u&@g{R.��؛/\&Z�J~cr2�q.%*Ǜo#|:enjCj*o>~ .n9(/p1鷇6D*&9~ryiw'�A7F-nw<�6/I^rOa0Qldufwt.k.`%$�BO w�ŋو#.Eח1�6�[�m+{W.FU_W?&`^C' Reo^cvC 7q!ϸA^zqAĻ.6aK 2�d<�sK<�1" nq�pv=(F]DE^J`f30KlKm1�_xqA~*/ ]:�oEmn_qwH9=4" YV `H =DKU2Ο1km1XowQ}ч.KZҟ`MP|QnsMDKd�x2�.q'x2�tcD:�vǓ+FYhF:p("Y2Ds`K ؇:'x(ŽG5|l~f1a9~۝F汭L%B/UL\Ћ`C(|A-.�L(D1mu ]+ ^w`}:wh`ybEW;>/ ~n2�Ν.q'x2�tcD:�vǓP$F m`0G@~وmgF 9FI,Lj0�x Lw�0E/96Ch/+�P׹i'{u'<ԑCNg*~uNX̖LR+m.^erw6Dz>g^6d^MZ$?scly1-zz7 s} �N@d�T͜r lzݱy ݅\pR0�xz^>RЃ'+xavailOF�>RU|{{agf=_{r!zL\g0 +)]vQ4 +@^d*Ŷ`wڦW#cIѭ]*v]{[�d�;]./Nd� ƈt2�'*_$G.hg[܈{tTzyccVW�@o N7- ΙF>7) 1-1E�lV$̐|tO-P&~+V2ɏE,3{oɸp eY0AjN)3[݄n6ErYd�;]./Nd� ƈt2�'*n oq缸DQ̰kOK[ D^{ʋIfn ` U<k }d>by鱅"}n[_J�u9O;aj[Lh9 0U_0 �Orwrt;sOqa:~`A]2�]>/sK<�1" nq� ҥ0�Tkjټ݌(.k*F\<7 qS@< Vrq�0aOwg, ENm2`Nߔg>d]awoL_ [t.pXc|kOEm ѹ]9~ryiw'�A7F-nw<�Uq/EMť~yє1!bˋ&}M91WAr @,�O="%#M`*7�L8O碉 i&E!pGAorBAc2�KwnY~Wf�Yv.s0%�hy!`9~ryiw'�A7F-nw<�Uqo;sIJR#5]7�6ƿ|Sʺ;- i"}pfW.gUU`뒉� *Y:tR~>�,%%n} \r^rB7p“B8s|>O�nH'[x2�7a]z2/"K.8bA_R�>*oñJ3~؍�~C74UWw <K.>kǞm+&+IH+"ؒ'a�Kj�8.I43~mf+�Ũ,r#7' qp} �N@d�TKy�@Uح?/5�To.~&ʛb{WN+(|G558V } BmUؙPa)Y, �n=צٹ]vNԗ,voGoNF �sK<�1" nq�ۗ wX[`Qmó%?*Wo`O'�"`w_<pbs6.?}AA=={X^XpB0n-`asxWErnB8s|>O�nH'[x2�寂ٖjK^z-]&'<"n_Q �^}|)bt<F3 $Ũ/m?}`@rvŖY4#L�(KokT߽`/&C r˭�hy!`9~ryiw'�A7F-nw<�Uq/77/V�f-s{en^D!�HX*l۶QZTa�8_޷}S/;M,6k"J rɫ�u 2�IWgheBNF �sK<�1" nq�ۗ)Ssky)o\ y-n?|uܼ{:1(4: WjhTe�*o8TE&Y&7l8 깋W!Fh-/nx2�|s2Z^�w\^ǝ�@Ѝd�tO@Uܾ0�QM*�ݾe- etx!�m,><SF(>Wby!oOF]c%6�Aor2kP?_bsg0έ]d�d0_?w;#�; }2�`�r3R *#߀ٞ/y̟PS/1�W?޷U/S?bEwq(<O'lPt^UT�֥n[G1/� s} �N@d�T�"s nus �^/>L4| toJT@Ub qB?ՁㅪONN]a�{ '#nn2�Ν.q'x2�tcD:�vǓP/ �y}c�_{}KڊX|9K{3<~BR�#W!d)0B5�V N PuJ>`P4�݁�hy!`9~ryiw'�A7F-nw<�Uq�0]fKahFq}Ѓ qOӾA؛?w~Y+8c\@Oܴ7� �3(l}D+@[�Xqqm: �ߜ2�.q'x2�tcD:�vǓP/W �="l�&- &@Jv�ϟxax/kM$m�:{YW0^Cq.[N`z=|;+�= P77�msK<�1" nq�ۗ lKd�hܼ8i�"f^.leQ܎+9' �1.�1NL^oC[,!o}� s} �N@d�T˿ "n`�"3zf,o}FS �k.:kԎC 0^k �P;X�>o2�\d�d0_?w;#�; }�Kn;r7 i7'g}�XIM5�{!WLM &W�Щ_]O@d�;]./Nd� ƈt2�'*n_~2��z /]Ul1�y3k/ �n�-U�6_A#޼A!{"}]OoNF �sK<�1" nq�ۗ nqCpE: @ϰn�م/eh'<[lt*^s"q�^z (֠ "tu<�9-/d�;]./Nd� ƈt2�'*n_~2�½)|X5a44 �mM/>5Fk �W__al�_}b?U*" �nn_~2�&9~ryiw'�A7F-nw<�Uq-n_"}K x8ڠoI�M_U 6qhT�+; U�E:&$)ܾd�M@۹s|>O�nH'[x2�'[ܾ6ls�|؇ǹ46�ؽ0U�X�}"3m 0d�ۗ �h;w\^ǝ�@Ѝd�tO@Uܾd�tۗ߆]k5(%¾0܀K8/Y,3�}펕/w1�ߎT)aB@ rP77�msK<�1" nq�ۗ nq\ouG�zMmS<5;#�3~Y7Zg�? sqck?\�:% CMM2�O@d�;]./Nd� ƈt2�'*n_~2�onaU{nzfk?E+ /['ؐs5�L,Bo.3  `ܾd�M@۹s|>O�nH'[x2�'[ܾZV '`l)'a ~?Zi�wĭt�O7׋Nq WH0Vn_~2�&9~ryiw'�A7F-nw<�Uq-n_~o)p 0� zpG:jA™eZן;>|�k"�=&8��'nn2�Ν.q'x2�tcD:�vǓP/?�+X˅N;O2a\�8:ߛ}ax/;͈�<zžw.k�Nk�P `ܾd�M@۹s|>O�nH'[x2�'[ܾ"O9?\,//_f6�|ޭ0 !\k�82�x���+/?�usv_?w;#�; }�/c׺#O B0']pLs�k.c�߭Lc�ppojj0��'nn2�Ν.q'x2�tcD:�vǓP/?�X>�r91H&3ޅ J5gg|=V�<-�k|�S'd�O@d�;]./Nd� ƈt2�'*n_~2�%am9*Eͻfw>_V7�x\u΄0\ .df1p�C pK'�sP77�msK<�1" nq�ۗ nqsɾ)oo� ( bg]8y4/:a�{? G7�< ;'a2�RIܾ�ۗ �h;w\^ǝ�@Ѝd�tO@Uܾd�tەXq?!Q�ck>,Dˢ/Yx_61�>sξc `�19+|:�d�O@d�;]./Nd� ƈt2�'*n_~2�ʿ1(C-2HK=#~hft�q+F|=m8{�׃pr'`dn_~2�&9~ryiw'�A7F-nw<�Uq-n / ½a7Bo0SZƢ7_8~hnt�8<_zݞ~�౵ &t �NLI�ۗ �h;w\^ǝ�@Ѝd�tO@Uܾd�t.Zepk}ȸctvLϽ�2�x\ʽ/ :y< �"L8e7�"7�z>�#sP77�msK<�1" nq�ۗ nqk⿵ǵX^ 7]Ɗ?Y/ ͎�<:gAZ�10яc6�x �d�O@d�;]./Nd� ƈt2�'*n_~2�mզ=uxwgc]aܯeI{pct`m>� S `tn_~2�&9~ryiw'�A7F-nw<�Uq-nxwB.]F91<2# a8Y�ͽ6Y(6�x-�ۗ �h;w\^ǝ�@Ѝd�tO@Uܾd�t[$i:֠Egt?�<<ﷂ��^h�<nLN n�sP77�msK<�1" nq�ۗ nqxO)Ep٣ZuYLj"}_y{�+~uFlG5 �\'� R\'7' qp} �N@d�TO@ypu˵΃/Lc0};vE /jٹa�r'iD+ �'&pݫ"}]OoNF �sK<�1" nq�ۗ nq�֑bROW�/<AnWt�qٻ_c]�ߘ;&4FWo=\'7' qp} �N@d�TO@w,k]+-OŒ W6`Egof:3n_, Ǖn��<qva"P60�8!`p V\'7' qp} �N@d�TO@yt?"`:,}o_m;c� \}u+O�@X�1' /E[Er: �ߜ2�.q'x2�tcD:�vǓP/?�f⿇ʡ5 ~߃4�"`yX6�+^~ pgv"L}D_ @[*җd�d0_?w;#�; }�h/_Ompwm,g09e�D axL�q+-/` c]G̝_\O ȇ�mEx2�|s2Z^�w\^ǝ�@Ѝd�tO@Uܾd�wodZx"`"(a^7ec�<:]4a\yaf5��" T/�hy!`9~ryiw'�A7F-nw<�Uqn&Hy8f[t؉!3a acY�<8B:zk/ua�U/�hy!`9~ryiw'�A7F-nw<�Uq |{ !D;By'ήl �WBlutyKo6e'40)"}]OoNF �sK<�1" nq�ۗ fss6ʹ! tۭ�xE~YN,ka?S�ƐqR  ݨ"җd�d0_?w;#�; }�h&71Y <ťw n j1� /c݊eo�޿ xcMC¢~P?A�0L綁d�P77�msK<�1" nq�ۗ fqs*%YB5D|X?) Lo3d�\y`?^X<1=T\vtmIlp~\'7' qp} �N@d�TO@3_ͅ? $sCId|},Jr1鹟)̮�ø&n>8!(�-azhGP 4ҡ\'7' qp} �N@d�TO@|?6j�#ha]?ed�sZulG!^9 #C*2�w a\'7' qp} �N@d�TO@=ܓvj �o z�쏙w3�اcm^W �%9ƙ �|H VC*6�>c�2�� s} �N@d�TOyo?+]G1�%P_pso<`i]2�`|Ns8;[C@6$` �1x5�zlp+Aäd�,E�hy!`9~ryiw'�A7F-nw<�Uqܼby*aYN^`|JԳfLd�X{X%O@ 8A߳-e �1°, C6_@A;�pB8s|>O�nH'[x2�'znIxd`% g[0� "NϽ̩,  .?{ CQk�oM6� 0n�7�.x2�|s2Z^�w\^ǝ�@Ѝd�tO@Uܾd� ~P'k�~NJ;J@̻F, !<g>OW�iL�K * !d�x2�|s2Z^�w\^ǝ�@Ѝd�tO@Uܾd�qmLc0�7c�#x{>U,M9gϋtgfq(@a;oy5�0`�$� ᤂ2��: �ߜ2�.q'x2�tcD:�vǓP/?�2wD'%?.`&nMAFh ~A/z{/|, #.?{3b!uU�<a�(ַ_\U9vw)ۢA)%BĆHbB4%&jx1!jb*QZhAA5D ZiwgvwݝΝ}ܹ%39{gٙP nYT}MgAߐj_kbTǚ_LCUPG\vv]_(/+-a �*(1Jz!w> Oeնpж(4Q>0'Cdfٱ_R4M\Y1Mµ3e8}1�eOei}$f:�Jݽeڮo,�= y3J+I�ɡxrK=ֽv&zF)J9w(2LvC�ҎzN.tOxB^]X"yhr) ]W�4(LJ:l]zj҉@ҠI:_9]u}?˅qu>vœJ̼ �9}7 F#�zf'�~5R�/@#@ P>@<,@  @;qzV~*X*�t75Č[  ;6}&N8㮯[�,# �دR!��9"�hsD�C!�"�*G�E�T5A�$S�(>V/YK ~-)}=1փ�{N<;k|=1crac��#@_6G8@1,2}xX<MU@R13fRӎeGoxg =�5qkE_9~1X|"�@�o@v�}�P�Ű�a�4UM�IŤok[qv2we.1?'@�ȑo[`l[11#`s?!+ 5?@e2?4�X�YrD�G�(4@80Nx9Qc}g^Iz@qzc\pk{!�z;q}6K~F�a �sD� �B�(E�T��j�H*Rw8?vѤ3W>wy瑧 [J@� 羰Fݞxby`�n3+ 5?@e2?4�X�YrD�G�(]D&mO͔d0,뉩WT�2GoJfwII\xl0.&`Ű!���9"�ġ�a�#�"�i �5-xy?^lj@w5;5-B� p-Ffov7�\R\} :C� HP00 8@֧��aW�80thN�tM{֭yTVM:0h!rkE  :C� HP00 8@֧��aW�(ngR#I;??W2 lZ�^r!{fo [@�4L|w]`#kܕ}/YЮu;߮x@\nµfME_u@Q�}X��Qc!��)��5/�w;Ss'gi�O2`x֭cuv㜻~@U/X2wbCEsW՟h&O"7nɖoz\&�HϱPm'�j'= I _W)єEz4ۥ5'vJڶP*yil;I}s7̙N@+:]hxnh?_TOkL'.Ƭ)>#o澌w{vbu=O7- �lk!|8.�^ztI?j.V 8ѼT;Ѽ' Hޛw%dfr ]w͚\9(FN%'I@s*͸rQw܏bW=em-]�P=�i(7nIFj.^�PC,�Žuo Ƭ8I^˓.MBW �qOu?jYŦA�^7Z9̭D�.  U46 !6@{# �$:@]3@ I7'a'̢_e8ӌL~XwSY;@{��Y5Kc#�b#�[!��8K#�5#�q`O9pY�+q=ه\ٗA�"��MՌ�(�h2.��@�dU,�ȏ)�b{%CC �Vw\{ιu>"�c!�jF�$F�cϷB�40p@5DG�kF�h_hԬO?ySQ&,Uơ6ms> ~'>�P�ȪY = `l�M\t7 cF;y%Ei �V)ŗ/l_2Ύ^� �H[D�4U3ɸ���W]# ?rw\0sf~%nt؈?{S6c@�hf@y@q��� 3fYG@~%q4μ'g~~|(V Kn}ٵob3x1/ !6�`&"���@f\uͲ``gϛ`z?4fV:p�82jn 6w>[ۯ- !6�`&"���@f\uͲ3>:ks/=fLG*2�-n'73asn# !6�`&"���@f\uͲޜ4.K^u&<6c"5X �`;jZӽzp1n:ܺm� �kF�߉�(�h2.��@�dU,�[Ǎ`kٙ{O~O\ �` vwfٍaM?1l`dš0.ƛx7o ];4&(N:rRNYҐC{,Leeu.~ք}_LUn}^~#td4Zu_:)8ݷi#YD�hTv2kOⵝ4N'm~O&}8=yd?V���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h���������������h�������P<`i+`����IENDB`ic09�d��� jP ���ftypjp2 ����jp2 ���Ojp2h���ihdr������������colr��������"cdef�������������������djjp2cOQ�2�������������������������������R� �����\�@@HHPHHPHHPHHPHHP� ���d�S� ��]�@@HHPHHPHHPHHPHHPS� ��]�@@HHPHHPHHPHHPHHPS� ��]�@@HHPHHPHHPHHPHHP} y€X W%QIߙxQM H8<OiiZ7lŒ|E %A5間MV$_<NL;<ޡ#~*-ᥤ_<%ڼJ'&HhW`ΚjBҬGy 3]2on.jpQav]/b NCdgICR1ȯ|ޫ5Bi?٨<Y]8_~� y Ab RDIH]h02Tl9C%N h/p(.'PX]ad,'nj>&M2/\9D9!,ψ5U`E�h ,AQ܋G\qNU_8s;-"i \~hV|*3z#ĜWLpt,Y g,AҒ.l?¯t><unt4ݖ V<e -O]k"ȍVg`!z|ǎ !Y4%}=Z%4PefNU5+,\mdI7ɐl"HZ3 p>\q-~WJmεm'16 ]ZȒi#mG"p DkH&^qGZ`eQ e8^qu#0'P)r 8/ Pyˮu :6HJ(5 {XRT4: qCk2ӕd{`cmd7jF(HF k܅izjx2fz=wBK,*ł}j PY?TƅX1ݲDG@'_W9!F**<#1~{sco ]"qQ)\d<t1�ƙc۹&*+^!}I$(FMB^q YDwYØ=",*{.T1Dʡ32kv¶*mh$)wc>6=<Q9/iW$ 40fg=+S")%pˍ|Lg <8f3H$WtRzop+Dy<RN#=_m oe~^=fFhDw2}7ʩQ(8Z%P�9G?ylDtP0=5e~j9#{Ҕx yMOv]1{zVxiXe �DSD.p0c"5Fk =-O$z*e.$0)ԲFo!ˏFq*l$DOZ -’+M:b͂ZgqPB]B <k"U]Hkwh2rT,AȨX9OGUZ# *'ϑT:i*syLt896CK9O3&0XcISȁ)5֦rT6 U6z o i S zeĩ`2]Ĕ+;ʖϾȏ¾IFS@�zhe,wkzhg8ҝsEpvǮ_<{s}N<!wR=;|=ϖ<gVo2f~Z[+ �¿Jm (J;`[z,L;CѦ㗦wnraIg:5�.%le'5H!s5"8fu)g-; JK",˚ 2偮MA3!ɤXpYdleQQ b߶\8o�, Kzq?]Zb&`,9Sxv[ 2h"Y} r7ã6F29% fӅ*')2 ֦e!.qO!_r 8`}Wh:oF b`K0|^]Bڙ#S 8l+X^1$(A�Fʥ)gDdJ.k_{JO?Q|<uȏ;j [QH7|5M'\&2P#tOĒ" hzDcFυ)B3n{ȋ#*oh%T{tv(oPQx-*UjGC*i.QjڠVc.tf9)VFwyW y5|yDWƔ̯Ǣp wEI32"R+Χg51FwTE<b',,CX!T7Qr]<,![B&ZDwz(Ԛu>;v0{[ޛGz 洶 yOEۧ7bڲJϩ9%[Ǫ.†N%ME�ɞl.<FX]7D _)2 ֦e!a oyԇ*!ns0apWYyZPک.naʩދ[1 ,G̱CP3x#kU}l$E`M1nir5 =a^=QZWs0c)[ZC2:oɄʺg?[]ݩ!?ߚ` ^{Ò<am 9 GgDk |kȋ xK20a@,9ƂV~]w\D6B.AK״Ud5$�y4Y]*v'-Q 9۴$J??jD( &{? A I:@^�ᘹA.`M-ǢYI 7\rQ9I;#bٮew#6laq n[Sh$ uJCI1Wgz+b6厢kȁosZ7<K� F]7esᶤ$q5/*|C5Rg # PB6,\5?E'<#X2v}K/ f{9 7Q1\Bj^H,*3pWTF +V^j,my9y-bu~uժ*j'xdž&PunJ  b;X:hOwR;-<h'7O?{!Yظ}B,݃qj!7"jwf#u!/xarpN ڎv XQ>4"/>A!/w[wn34cъD6c"O1f '`!7�aKXaT}/_RЍ,^!gs)EM,Sijo% ֚W5B|nU yo>|bɓ "Ddf&/M(nb#6޿7S[&O#kK>>l,`B|fωA%aKP[:Ϊu 3 8+4&_|zR Jے ֥N\i+| ]9()oHI$C*D i:C 2Kal{Riu#{)S*joTݒH Gwȶ%LO V+^{e`n5zGJ<N"*u<Bh9x׹)iߧ%;):妣^<(y_AD枇}ЅKqYe.W`IofSU=h:p>(<+ 7%rv61Te2FUX5Yʗ܍4G?[J3AϮ?Z030~x[p18BnXr*.?JឌEd\(@Gl9k"/[zmjD<-z 3!Ў 'lFe 3CXQ�xێl+=E.Z.67k-s=y0DDm*Byߟ)xsp2QK8wrt> uu<srIiyUZj9"I\ `G˵$\|/ ܚ}Îb3S7 )' GN=9}·~Zc5UEnO'S[eʈ71hhmK %{u8z+xDq)! MàY~\N%-a|%w/2}xoU]=)f S$_ ^](c,QYd: a1p0G(Qف܋npFO!aɊGA!oyfgB8('@]}(0~N@ mE%DJ: v];qeЕd@.hXK)I&>Xʅ}`opv(g?¸FAc! m Mֶ&ݠ t6S,|P QaT7) p4�倪|nP_(G6@=أ?yٹw%/\9J#�P.j{<ӘMQmsx bDVEXk1Am<BES! <>!DVxY|~[N;87K[r`$_¶Ն<SU6!7byt~ގG5#|w|$28v^ZldY,CckY=VTw;2Q&v"YLU|up 챚eQ5a# R)f XN% Y R ΀u.ў,+z|G!/ oIyMEVȭQ0&>g qPi P\ixF& u{f[BzcH5` ,z7.K%J7G3�AŸTY�vɻBBa3@vQTbM#sUfnG+CiVw;u'_�Iλ>jKFS#_nf,G)ƐU򦤩"ſQ 6T!=)NN\٬ RE{4$q jnڿ$4ak "&25'Tje~HL1ވQ~]@0Qhr yItNכG@C6q^/m&Dٳ={N;)6�辡@/-V DU,L| }X^c(`sMbt#A1ְV̑?�` ̥R Y=G-4a0׿ Ca֞_F$3P4ǭF_p,BkmEMyۗ]4ʅYc4i*(3-C| Isi,W`VØɔZ"C=3du1-6ȦCMb Ć d#a*2xc ys:A?8+BXMM~,r>LI-oKdb}}-۠~Iʌ,9sD5sx[gn Z+"oFpg=k#ښQ0GHxac!w`R.AH/aD(;{,e,ROxystxCRM1> V"AtǒR< ʦNX wƕV ~e?,m%< n43uhYL`)r#Sxy≧C3C6b]Ӹ=elҩ̓?.XyZ_u*0Мg?*^ z7c-|۲ʶMEwO:5{.]qŪdY3(ɱ006KiXDUgS*e=-s6Q tCچ B2g~5m@wCcy"֞*}ꖟGA!%؀IlrtV$sڅ+\6hm=g%<�xj*A0Av0[ɓ~+|LR۸߽}wڵIȣ:+L.";)fYѠTɏD[ne-z[[<]]kU@grG=°GRdy ؂rA4[x鈍yIXNKc9 ϵZ>Wf2G<V!yGݜ ]y;$߿w)u=CVS].h<@tx cё/Hd[O9RIQ&ǩp t.bJMC!- T2woC# ϽM&)eF SX5DNa>F !9{՛9Z4t:\l%=;D9R-O^wC2f='1=߼Θq}08Po;%i?"[9$yRh_@$V~cy45.3<b[Ms:ƃߕR.L˪>!Ymc Oο<{R[Y6|/;^P$>'lK >Cqx=&%Mo@ȮVlEܺmܹo 9m8Eb5r6mXwj".QbNEf "9=iued~\d4^5ղ}3 eŧ-?V*fhGdzY{0LN~H25v8-J(Wnq '<41[+F fyL~<[U`Uŗ[mTC\wZ`%oGُQ%L(L.b& XllTey XOOTNY-N(k1 ^Piۍ529"pkQ_ߝu? ? a1g]m:#lE;To\~ 3IJ=6*ٳ%" +_VbHQ/C)`T4`E3x12qW< [)`5d##BdST'73 YFyMO;4>'<N-]΀Y[\|ѤЍfɈ% ; *븉;c{AP bGQ=0P)5̔ :i찋ڢ$%s�Q/ 1p%#/8l SNa S*HFx8P� ]+���aiNQDP{ CǁXZӢ@1%60ۡpPty]$2K'H,0}, |MVUhif ФU,տ.|F\*mTN #)O90=xoQ/�;-?":vP"97[#-<`sK "3G'-QRӢ~jѺq:@0YIM>z/Ѫ~w(X+\ 3zOJwh"7\jоNfCXg\@1%#=eJgvj#>qr}um鷋1—0 =tyM `< XjcjX㇑2g`@F<Jp̳}2hCe7%?{`;z43*f|@/&SǕ9�)=%_;~fR҉jB wT><pL"j!w6ds+3|%=R>v&!H%^C XY:IDo#dVhk\X+6o0 S:v˶o<Ka2D]SkVħ q^#CL-Yi�5:bl75%U =tLse_N1! /窭voAЄO_GzR; %%n@ k(j{MԜAEc ÄGhW;:!|Q:$U,w+�70_zy,=,F�oIFMhG- ߽}?xD-Ołշ,[Cȵ&is/qڄ<w2AdN*|QJ2�jF"2o#w2%xVS&[*2@,K6*yNU{s /dعVtj 92n#-l6>W}3@˽:pZ"%?EVѫ 'gg�0Z4}ټOw)@mGHmHp2 y[ TDqo# "2 _!JTf'v{C7BR}y , ˕B&S8#|"]{F\(x^sF.Q7 P/6KbCS>;xY"\+RzQHR*_vqn9l �98mI-v"ঘŸ?pr]R̔ĕ8HSd PKx*l_5ڽ]B&!,T1wd1*'Ij)YAW # "em;~…ڴ2w'vTAն+m_-}yWΚe9tZkxI6@3ۉ̭X]SwR=hqQ*ji1X#ĐMH[)tFBNzQ,ff8Z{W& 6&1%+,h UuލD]p6,AON~>q9M>bf]oi]@'f]")M}ν#…#hěø~k?≯MuzVp=ʘ +ʍI5[NMv:`Bhan^jwib"M1Z *D< e< ^vbKJf34rE;4 HUm>L6#?Cе#['h/CjB3ӭo B\Xd_!IF?[ FqVD#YeZV+dI{nh rwq>iôn[}$7Ό)�ڃ�N6/I4p ;E?琢0[x~5I8A#7Dxk;6Ԙvʨף IlD<A2 s+Y@̔r9U+Bd;_)yS`EwD>%:b5*:*:bﮢwςu {3>q9Z;Xea g;Xi^8h|5abC<FIܐ P+ګ#oāV\ҌUgYx0yՀۤ"ׯu Dhp#d(Ӟ% }bqF^5W#9-v/ѯ2>ª\5#: #+-!(2詈zB[$m"}j2V(?*a[z VQ]eGu3՚(,oIAx ś<{iZd0%,y\< ,u ͉q7yšrNHT/CkB`msnc3jC&*?bn:Cb[*N!)Wr',@D .l4~qMJG9< =PA88̔[޶^&_)E,֫^FZV'zZŎQ_to ~$AUN\b=_\?^'',^ r";zB#7e͏ Pe2x2늸'=M}.lofUF̴�C 2ܩL8A3COʋ~C X+U I{rc4@/Uxܩ\?aAo̳}肿 I|%mw|+)_olZg Bo֑ۛ/.Bx8ӮvѨ 1A�XX|i\˅ m2AE߲'FH[Ph :T`vY>/g/u%;1@C&=j פZwaf&;cQhƠPÜlJx}벢 ?g(ݑx J27&TW"'u"c䆒ŠkKpJ /N) [mѼS8H)bж؟[_lŽ^L�/ujAci[4F#Zmn UÈQ13r X=rblg<t87Uψ&OЦgw;㉦2 v7G @ytCjmH]ʸDŒ$RO;l DzJk#oUx-zs䥼('>рWFXb /eƲ {~6cQ4@tvB }"c֬fvD U*W56+Q -,A;{ŊZjFRS;R@?2)hf epMedJZ)J f ,NҘG,(IEwSi^̐7NODQ_s0gаBx>~w3G!(ԖreJ\y EQDC4H;¼\Z31Az2\_3νZqU)!NGr{;b]8n_@?j߷rQW}0Xͥ wm-BaDx4Z00WNuv%b^g3JUT2 ЩQ%Pa˷DAT^M7\0B?8N}z0"s4LtU*W rJ4Jk)<鯈`2ӧk X[qE̼dVs:/KU6gWڴ*Tu?sߜ#Ef#l!ȗ!`'7c&c%1!9.';Y(ћi/( ՜cuE' E\j"ڦ"G]N4Wz/O\_)K=f0C<M5K5%^O,DgŖ<*z6 btq^ONRsJ{'XoƯ!j60Pt<NNx[P¼JuԶ.ӌC̚e ?-z-pj,⁂<;\K* jNJwe' EGG36߃m2ʵ aC~#WrsF+j sfFH{"߼ 늜C %LqKOz8[PݞyXd gloQR+D-L$)@ M Pk(= cc] 3H�a /Hֆ%87 |t^-o[^605|gM֗!{[TpZ^L!(l!RN2P*2'u3@E]6< #]yZ4HCJ [4, .o3|9n HvF-C|(E{-Й }de m5B(<9-{XR.mDMVk\8gٹcF6m63R�G䲰8TtUީX�t*b)\1+Y h"~j!)n$_ *?5akE�لyvCg`kaZ$- nD" EDKNR{2žPf8/ J)y1$3F7He!քb2m' iuEa+#H&>|QIo* %{՗AQS5v,%ii}-7iTS!|9Ĭђ~+{$楸OB ~[(nۘ+NwhЃ2ⓗj$eّ w6NJ=lx[Ɏl�ճJf+ryd F0ݩ0L,Z 32b1IrY}֎wOJ*5aQ..d# סL;v,6_lξk3ZgF5Ek FΊ]DNR Xw-;\YnT8A,ŭ{͌u-Y&dk~麓 J$FtA sf0ޱ )t(@EuDQ. G>= R8˖GO̴h ;Mĉi ߨL\~EDm%MakfGh$y4SoHO΋T+x4X]:P䚗t@GAjAq[ɵ>(]$CufRT. OFpVdh Dmeo6 |Jjq"/W0�,b@MAn[SU1b{@l]̌.Uѷ N?@xRiՏ3nўtQy`X+rҭ�op]ZSZE&>V=̮RGFCC~t #H:Ju]\n%͏45Ul=ad~u\�Z57H^vZo`?gjh`sVVe4rJFkѥT1(D1HdgāiNjYyűD1gc\?],8?6~ 4wjVSg@zUxK(N]I}Ә'/ewF.wIHi}:0F55 -78O,M"?v+[gj~seKKJk ^"!_MyS5Ίq6&+{$L<'PK =ew8(&L}Gi!()^rJM&3/J]>EJΦXG,a&K0*nOZȥhҶ:Z_j gJ逸A<a#F6@=~t`ZGQ B1z1+e|,$yvAA{l@9WpUK)ف+ܠ<ǀ5Q ?"I7 aݰG4RP!QY-*Hiy(L+==P~ߊL_7Cf]]: Sbw6઄,˱?O¬H Ih_ZdKPmͫn2vQ9wl=`r1l !.}O vfFyfmx)A-&iqn^7QB#8,ƕtB%) oA[."y f *E*%e9r3Ku_|Vejw&?~*mW np"cKh&Lp!>4ZZc}/]8L >G?S2_F5wM]̘4h):tZQIphM{^CcC56[F /ݺ!CQ{o@f[;B >PxtcJ FBEziŇZlc[KU)xF]Lu3UcBw\z2ȵ^Bj$X6hme|AD2c"2FiE?mт_ ' mFG'V,�72F}M 3CPO=# bϜm=؅+xƿѪ~Qw2Bk-VsRk0atWjW8Sxo3VP̗.a騘pC"L()4K;\Nv9u(4!TiΞ&\]8g$Zd> -(B7O ZO57pŃ䊥͗{ю!S<A#yTfՉ uÔp%Ef\U"qQ$A(ߟ!N1Ks%gr6! YI[3XJ'f20B sE0�TLmzt7֍h-6T?? ƭ%:;F_lޘ'+9k%j׊m/R6>lbVƢ ��f/~Iҿb*??<V{V#VPg i|ҏߴaX:Hc'!i?D^X VO:'\O@o@LYrD0^wG^q_luĞi Vnި}+E6E2o5~Jb*N K'|NǷ.�!SڪϤ5|Q yFV}G s<E$KȢeKO%P;8$Z:<%#W8t.|.m բ=: ]iB֡<BQlP߲^s딮@Dn) {?8@džhxu)A@ k͘-f.+陮 Yd6icͺW ZKKLAҨ,l[na GDؼ~i-?Eb``Q <"* U4PEJhAf0aEXڤ5wl%IQ[(1Tc?3sĺ|Iixm=:B̠Z1N)%ϝVq`=6tb55ۜ* h* $C.bwG66b\7Y8vY�aCasE8rדi9ʓ $G-eU.I,ֱ^h O~5*goݽH {Zofل짫ۘ�1 _K)gWDn7ygWjxbW(:qnu6<yO/dd/|Y%g@:ZNhd#} |/-g@rg <cm˲?(9we>I?3?y%{hXVmȩoMBv\=E3 N^Hs m-A_&z+.Y(ѧq# #4Jfپfr8G*7VT.cOMQfH!R G?vu f,k/al#XVRRm{:oFbKۜ405-LlnM.1gc6�S*Xx\n m;Eɦ t>|(ĥ$23~\̄cz9 G9jȜ@:69?;=aep$>umV mS{�T՜<HKބv�lnoZT~=t]dձe?w梢0^ j neS%QN} eCWrC/ǁC{W={%Mull8zc˙/Y}:7MvŽ:~i}̭HUs˨X@=h}?&@hZz: 3YTzr#ƐLJX�<,pÍ=,YY#n$Gɩ(  oy< ʆ*)#xF.fltgDE"8Ԓ+Gof腃+ZO-u$? l#C& i[;cDrk"MDff2~ W8bprj=/.)L 9lf"w Iz^tr¥_kdv& DE?ܩTx!ͣsdȬ|srK](Ŗ2Adt,!7�Klu/Vnqgr2�}[GWw !c3Fщ:ε$5^zԒ�MS<l3-&MǮs"fE MV[3$ wIWsg6W&y ߷q@,y&ɖBr`sꪟHz7 9l@mtl[OTvCRj2Cw'$-Dotf'LQ%*֩{xڰ#2.c5xAaڅ,Y+9#7CsGe6L/\k.z;&ǻrm]uHڋݭAH&|DB`[e;ۉ^ȷK"24JbS8+ K-*@?cWK#Lnzۃ(1hX%L/oMr$hqRɸE�bCvv^7G>Ƣ^U*(j;wlA|^ř*eeq1N$LoHQD6[>ޤoIllZ͆b|}xR{~)y [6LrKYm-/m)-иyμƹBt¦O0]B X7Ab# !O*>aU{Wo,\8qvbV?#oy6-C xu*`D("*<^ɋF=𸗽[~|Kw'zcء~5o6D9ɡRk~[^s\c;60|lH{mwZ**(gj# Yؠ(|!qBiip<e'T#(9o5Gd3Ҝn9J-G}vf^ac1I98QS.?x3baL)^>8Cne)n0.f'0oA܅T(8>]ȞEgTyGt@ODDz'imqLkty pa&]frf 3?Xg]5 ԎNԛ3kʺ& 1?iFЭ,~Jmou&=ڰ^~k:|9Ss8uh[1\BHݼY-ԟ~1c߷ ;wC6. g,PKyP ?QI, K@ָÃMbeHwHjف{ @H$)σf'BQҼ& VJ ۩k X 8fAeWmh("IJw"5&zcaE0rl!8�Υ9>FkR"0K^SG?I?W.xH;ATEYBdːF(7:=3R|(b�2ydTS 0 W DZ=xg,=>pxvk)N3"x^(V "�[R nb{Bo$%grXTjk�oudۀi&ȾuvNF Cڀ������� ߼5o#~Ɨ.!^U-?OFuaSw&>zAi3-Y u٥ ӣBg_K2+VKx_%w4$d%25\I$I$I$I$INy\g5X bvNiﱞV- я.klxx^v} 5i ݳwT!k j\U<X(7M~Q|�_Q"BwPJ-I-1P%{]R4r34rj厹$ _>ДHˡ̇ EƹLQWkϞ[㔫p\Us43?R~Y8MF%w2H2TbmHdIP<6Ohl=I u]T;x[zQ޴rz޻Ck[âWtW}�\ .?$HI BJgJ L7;͍ b]A;i<k04>rE7wq;rAl ʅcdyi-ƞAKJ8~{.+}Gb5dž":362Q>)MmeרZhK:RC)a‚$�ȧr?Lm=[UC:w-$JI$,(Ls,k-xr5ں~75Us'Xd|ۗ [Ke^"B{7w>7$`{7c^a>o"nޮ`>+2g=MZ0xԅj (R<H Te,V#]"2s2SӓD츜O6l" yZ{z(,E;fCԃw6w :rbTzrpMJ72 V- *Qð&5MS zy~'n1;v4LQ5-m9@=8?i4uLY@$ 90{ (?ޝP~XMo$~T\q|5T_MK#ք~$gߺ5%'vr#7KqqFxiB~A:dAaU1Sydͩ~6{KSYX,w)%Ùo5LvѼ#L {x@%%{~ĊB*#a-WZ4mLs^HHc8�Ί ^o4sz}A+\òW)_*9voƽA_[h 7(u!VueEHb9Gn_>A-Á.433!C,I;MP\2BG6vмO9I . *и/mjf_0q|hO[᜖TC )K8<h\U!,,j$H:Ru:5J!% S,qCLe>.Ÿx`VUKzeϹѼX3OY! l@Lo< jW'0x鿸yZf䎤Phg{EwkRI2'Jt9AVVeoVwL0=G�Źq W/CD U>T*[;9 $eH/#�яiTa7UK~AVd︾!4ѰmزTs(oGu:lq;׺bO 0zM@=(eb*Dga+YZ"Qꉿ$PcEP]Ïeo+ֆֵөj>I鋿yKL&_MvQ@ -eʖi6 /B#+?[^ŏX-йD{$sF  ';f1`>N'\�'a`05X{O.(b؁;H-il,gԏ�w{zH ᙡ4|~e";-{NM;EǎI0|Q?ۭ,b htUzsy)&�]k@6H4ChDÅ�H'jl# O83ypA{Rs[ɕJ(ZЇӭ}?�u"qL} Ys_qPr@MRLqB]]'zOkb&1# ^L~vΓ T ,b@NGZj4PROHAUR4tNCSs@'3#DI\ګ(݄VMIеZ>|n3Kxl9d47RK}@1N5xDץ&!;= 9{m|+f\>P :gGJko�.hga A)<4yGiB\oR K4t._Ch1G)nI/ Z}:YȡciJ#84o 7Hr3p[Yub ޢ\b`:fy;K\<_c>oJTI$*(77jva?ulY# v&1oC4}uj?SfcE-yd4asҥ[|9ͩY}7oSYd8e1 +dvu!,oDR- M.e\ƣTSC$7 T^vquRfh$H3GU&^xfڒ% Wjy|HwWxY1O0@.=bI)چM"(ȄwXOBnЍS3ޅ$,/=7=IKh, p,ӇEoL�qi|s.FQNʘ<αe[`BI&=RhۃʃaL4 lZX?Jrihp>s! J&Č^_.mrJf++Fyf7eymrpgL ܺ" O2rĊԍ 5qh [l4XYqf/Vr ׯ֙ mYtо2/x҅UW5K˧Z]i${z[8Xm]G]<$݈svNdEMq+|\bY0We5<t�[[!'x|;{ìzfclO-OB&wnjX4\y8TxW??.κ�6&U)dY8Mg׍lK|97:Eoo[-Oy\i_D�lt'#L&/-~;F.;Xka9TO8<-/Ryxh ?E*Ppҋ*& ˡb/ ro=*]}ZCк?4nߠۉIuU$U/ـ [j-%uFtf9ؒ( !nY}I؝fX`8rfI:!e-'WdR˫ H\ʚi=T&cT8.R?&O7O$5{YZ[F*%F5#t\;92J#B¬]@V:;w3tP8<ʤHw7NK;39~:Z�U55в+fС3<$ݲ}ͰD{Հ])C@ڂlGӮ;ILNy2ع|Ҝӓ\ZۑgȂPFR&| ˍYh ב``ߧ5B#TeL<K2|eE@#>n}iJ{c\ bc3 G=`s][Q)爣XbjKA-^1M9'i h !ŊX*%[VUf'PV=`{r��������Ͽ; 3zqʯ?u+zL)@q:+!<Gya!#p]+)鑓 T(aZ6]?Ƽ .|ڨXTaHM©|�H4g^2c=[İ5=t-r;\ Q>⳷ɃԔ�v(Ĺ 9ލo1j47N%�`sc1vk/a\ +1*M];Yl}Ru V!n x>N@i yioMep6ާ?eZpl#GnX渆~CM 0 ; cW|Z�C*q}:Mkq9Y[ĬT8TDy> =Y\oT%scTOqgʼdoKG3L|fƙ4cwbIMe x I$ 8Z)*{Tfp:5c&@C/STM3-{=&,c=mUhձئ:+Qw暂 liaKp?xh%ϮR3{Piz\M*\ޖ&ZQI}k8U }߮Z[]SJP-Vb\bVx>۱^/#h=~IrQڂA}GaQSGL \Ayk a:qSޖS3μ= |* ls ! cdo,NnUZveq8٣$п ^|*m[ ;wyGPRō TC3P *l{ Lo<uwG Vtsc異,@ՄlP%<!/ggIe9DZjhN|DLQe5m巏V Xv{$E8&}z!>e[1lX<l=jV ^IHZPBطVa_DVJ+C#]M2^5|.[ULUQaLR( @!mrI`9N>w}Y$Y^C`v|D@,Y-~GexM-ux/ꊧ/orO"M%;[ŶyXqv95ȟIdp(= l 9-�}Ɇë6X7>N E]٣ ` S>I; iKpp�ɞ4Z`Iv F{ 4㘃\jPxuzṷ 6.`: 6 z~i֬C1xWD/>JexͶOW'Gdx @ezhI˂$;umJ0Q6KZ\ )Z[{LJ.=JfҥԑF%Cp9h/7J=@a3^cNZo ?%Aiϭq&Fl߶brYaaMU`$LejSD=`P-x@JId-A.zA~/&1X{ABh9P":s}\ǡ<Єs#OCy{L"G櫳Q g2,Β5 y�Bt!\^q"qR�Hr�[˽PMF08<^kQ[{~<dLf{MgxiW Њ�U@euhPQ)AYq% n̖sRTK}-~?p5/KR;! :Ւ"#i(-A%& -Rt1fLcqQ7'̫8뤏 E] 0pP9Wi$ D/U0^R˹wY}̨ʌB nd9Zb`|M`,6ՙ7 .N9bf#ʨD]M!X%=n-[s S)N y)OxvWG0aV|"b�QmhNyRT0yfo4nkeEG"GuKOYr%Ma0w@7^BZ*# M�T *uBW\NT3٨o6]314I\iЯtXȡ2]S0_ٹQ>悔]l�,)>݃dvo#lDŻC<ƣN/fv:Gz^?4?-3wf[<`DTL*sCsAm =L W6 qQ^{~JrA.X%+>{>I2qجǔH ڮP7|ڧ0`#7(!m2\c_z{7S,- Nf"Hd2/ x݇guHĴ}ɕĵK]?ijqծ>VOvF0Ӿ1#][J`cA NbL: `!`1jaTqaLj.pvDfw&->4rJQ;}o5-OyZKE  0PI }4Ày1n & }$ s=B/bbz`^~^͆xjm"Wu\k|ǷH9]sBJs?mʅ IIO+};b<aewR9xB{#1l>mG=rQPKJ�"/c%]]HdAЀSeȍdzaFُ�,jF1g/okDS\ƢnjS $x,fÄ-�ی 3 TMNPj ۍqÎ9dع5j uVĩ�*<UAP<8gôSh͑~允洏wtV:۽:Hܞ*"iaqK`uZxvN뾬p0$юߊ!jhLf bwn3v OA"^&TmP@;jCqb6![Y[~lȤ`t%[@0^Z ڔطFy)JƢB#  <ǭ:ӎ&HAdR{Зن"Za^7<: 'pŪ\ŀ<ybf,:@�zvOҐƓ>7͓%QǴ{T|*?KI:7o=OxGeUY|IXEf/hq~ܵ5>j 4ͫU4y_4 m1@_Gʢ݈ B-c =N 5O%e#Yr\^E~"3oXFؿU TOb^`*Dma$߯w$ ;I%F_[f&o};elJJm>PsCxi3e hs`,k~u*Z*ORLuɠ;ق/=ox~:&su*WCWKbq 7@~YTSY_`[,/ߞJ$xEUodhOiOҾkSl&v- 1.ZOpyM II_g}̔=%tvI[U+c`2f35~DhoET}*{PΗ_&͜qrTr/Ң}^l\/L!&BwV"lxg3qB (c�Y'=Ӈ :r*�=o?2c&A,c {6\QbZUY&HFM< a~ [$d�Lvg8qow%23XԌ{6=@ aӱe7XW 0m4$jo 0ڀC欄QLljuz/ޞ⛠pv.�aIb / fU Mp6v}bE(C0Eq1q~0.ivuϛրkǡ ly)vYV.zrޖzY~ޡ7|_oDã_W {B6S^Q}r!aΡC/]$,e En� A &\: ? ăl0NIM "NrX!%@4r+ccT{~W|#Vn#>nu цۙB4Ivp!?w"fQ ee˜zMS_V"cOr.e!! Io:6[@xJ O%!Vq! mTy,~vfNcN{@OcJsyLS E*z_R ̷C` H|ZO/p8aθVcFR#{"*O1Omr-ݗ 'xY&́icg\,;~!| B;iWy[d{�#Qn Q5CL>H5qv&d>OJt*h&7%O.MAJ$V0qSѧ+zTO N,_72+r;?83k�ib\ z1G HeqS!Ȼew=h;VM/?kp@ Pa&qs�'<^F()tgH�Hwb?K,[MN(wt,./:E-a֐ߦA@Ro): û00cJd_$.Qf}FV9.6xIt2 ^Z"_Eή Crv AtS(QS@FT8g<̣+9KPjyz"3>R ,_bM4:)4 딺)7QG+95V{2}ޖx0p4H0{3+UזY:)%.G:&%<F:u á zJvo*d(Uz\Z5΄x['|ǻE~Hc8KR\ah8{5 x>%+z8 -qs;Մ%ٺH_ldL+~a5afѿe؉ܧwb$2eji7AI{{j=odo&IԽ_(ClWt&|,.vd QA&٪egeXLp]1忇e\<ye_kK2 JyJl| )Z*ӱ։UpS{vo2n#&i7A*\/nGcOUwcEyKkhʼnxv/P+ /su|\H;d%sF P?qyλ8fu$LW,?r+Em:A&Tn?yWLHQ#ߘ%.b\0Nr)]%*J|V*+q*xZ[ojxg7X'CxW9H}2{O-#w7@4T' f#Tt'#(!6˷| ;'8^#QO UP[.Vт�m@s*dC?ToL}fV4`,:r"ӲiFRvtN::PsV. B͎R S_BB� |:|{] &100~<R%=Mk|:3�eDDT̎3 s%zoF 5mO<ٯ3ͧw7 )QI8(-*feVmvvM|bs4Diq,sWXbYGzЁ1j^@Dǃ$3(uS~n%l&!bR 0'csH #*<9YZaY'%5u{ Q3;l �]B6+~B{i]e%/6e}v5_n_:q!'&HaDĭ##]j{2 3ں$?U)^S),}kY`$͐-ziueݘ"FԐx#pLdLߊM@RExq据8%.Yq ߭zc8EjuN 6_Ľ?^_5~|(h$̃/<D9z Qs s|#㬯<&GuXeЮx:QG�8Ų΋hb ΁�ʆK'zk孀"WԦaZ;F ,B0sAmyh&P.Pf!٬Tqxiaq3BK>Rl R \I*e^3yη.F6i2AF߱a",CwZQ20BZ#2ZRVBh[vHngrdQ7R&6?qn{iGxl tގ?Dyys2vJǏۛAMAjیqbZjp_ldFUU: D~\-bu.b7v̏ܒ +93Ԅv\MuqŰE|市`S鳃ƶ@@Mz[lYM1Q1Xϯ 5blGpLD i(o !{9ed |dyϳ\&.ݽZx`2ƵjaPW 5h p77^E<Y ]u]{t.d`Nm_b3r"I/6xoUr`JG6:�٭]U{YꦜB^i&_\aib-#NaFLR OC%c'kbY:Tu*u� (4ɶ#\l ̝K[+) �Քp7+K]v$/lSa BekN3y ~d"Ovh] z7*ٜE?ͫ`xr.a uzB8r.55s8MT>TԂ04$֩78GɩGsWkLٿDa-Lp,nan 6%~dے5 -Vhs{;z�%:̓"2B2U%%5‹G ISPQ:yb <h. jѓ^EP埧vmHV\-i!tORW9MkM?!v_MiD}4Qzg1$@$ApCiva^^b_!;~6{Vh^I, +5B•>)4 ^+# U�LU+I32v�7 L2YEWMq1D8Z/='&FpRe!95fbyěN=ݧ#D풼I~]N ?{i(c\Oz8}1rhE;'?[]"<-*8 #81X׋|~ЩՐ61rԦ/u/z*Z}yw8#ZQJm$ؗaBbԕp7/o>(x&,`{n)pD�JqTpp1]X<kaT|ޮJȁx3Vn^*?VYO�p8\Ї9\2])4=:L wybZޒAʴmB#ъ"'Yݹ xm�ӷ$�mzӋޡ$hu"_<{Bg_[uoޮFI;"gYWY(?LGtXFٙa`Ԅ�$o/!B#gZ^V؆'D&N.A#S)ӵ5TMHJC3KXc/V|Nw@ 6yT❐dNOM6$|`20/mڝݳ&>Ӂ" 9'QU{ "ivi)O,s.~^LAIwvd6߅5ar4.`B2ˣ:?w/kIOQwݐ.wW (Xƨ6`zg0|Q8J; _xxAᘰy+"JfU�AOy,~ 9ĉV`2pzR5sw?ь%%s:̞pnf` ~nF:ghz �M"ؤg &[uK |x�ۥj6LؤR~ >fԕ40Ly=kkzo9%k2^+Hy#~ ŀv=λyx}k<recCc)F(Zܽ%j2V\Cf0<T_ &*^ >nēűMVmIzX rxndTVB M5(t# [{i6]Fqל;۴\Gf.eXaCGJ瓅/smP3cdT�BP‡.O]t6q J< zh)jBR6 NA/b$sq|�O>nNAQ./jW%"|N7.>vkb's%B>L6Uyq\+�`I "ػM7ߚŘr=w5fYG\clCCDG ^X=ȇua''<.KeBfN{!Q*'̕z"FW[аwKStK+|@qsU8tT�bnќ13_3jQ%}M/@e L7f;4A�k~,|<B<B$3)NkH<FJBa}i\ohpR5{\q�997ک[+e(GњlzS` I9|Y8=fJS->9"[9$+'8ĕB{ _iP |nȏbHn:uL\!]ۧ8V[)'ـ`śPGlS)mtr!55Lp!!8o&!4L@\�ՙxT Q �AȨWAXxuX*XBz^Tvr$fNd g@`gCvG^McFеj1i{ >[ij.^۠ Ū0 =TÛCZ}O;xjxX&%>oUG =M׵�zD)V�7qsݥ`1wtגCz?%-@3f7y0"v} \G`$0>Ҥ) oM_qؾ}m$g|P℠DY/]N$OS�L*>++2T\3 1%O4i{-SE){Rb!"']Cдr`QI{Pt2gCF)]،(]9Ģr]mLew;Վ3�. y`m{ݨ_ȼ;TepV!'HcNL a"? ٱG{kɹߦb",c-'5CIt 6H%me;p&XݛKmI,Aѳq(*U-fjRC.6UT*,qOxż{ O#EӔ-4Te-YG4Q U }[Kuճ%r1*jC@', c 1I \u9! -^lWl*$F;K]?Ց}H-?-[<$ -NPA " S$m˝ "ȕAb]<{s@BE_?gH̥7' ?~HŠ)B 4{�Ķ`kx&őȚY_z]ъBt6؍ء9 vOv娲mNDRߛx$`S4l?+_ݗ\!q's!SS'|06ZH(y<jh $nӌ4%q9"a'nK=`ѵhV�Q&8~+M QK>)2?2ÅXE LTS܍<YN <p%;@0ҩ70L ^P##fP4?U|Dq RË~sЃ܇.J+ ƞ 5Sc�<S]<&g47ƒ& ሰX%k`p+h$ٴF&"E}pM /i:hK.^+@%=R쟈VMlp8qr ]?j|ca \"v SwHzb ؂F|L%rIBT.L,*\I"]rɳEH]٫?PIFUEt9[a\o7AjCﺜݎiW֦`H~j6VQ7igā'J8"֙+.4y?]li"3 \X0>1!Wpq9,^k$�XŇc"aVd`L~L##1ov Me-m7)aߝCal�b@۰\$+g&rb*vU,k.1JApLc8C+cMT_ܯj/2{al?yiL13Nu(P�U~7~K hqc/ U, S 6y?5mPboCDYŰoy7 IGL*w!uťrflth^^Zrqn+Tt6״#-RഺqX9{x�Ue;D.*&+岩GJbsB\%.7lKF-]|eЄkYz\L1OvX=ּyFuQzHIm<Ps>k$QۖS )WF*M/G_XhhP7H/&z5Ƭ#~s~ǧ>)^'qdR^gYt dUdžd@ȷ*9ogزA^2?s=D?{ 4<nOz͊aQקd_ Ùzl.t})%΁olL`qh�NL*6o1o0QzR~ފqzP~ޞ?o@Da@ݬ?yQ~2]ҥ l?'z T/ےx^mҹO&% O MEȰ/zrW%Ѻ~C̖eF�;]zp$VD8u 엮2p&}ºŧje�`8$m_Q[,#YWkL䜪6(j=#~L^x2CycktY#sZE ¾Tm:\xGRi`Z*ʟmSFαcj|$`W = msn4ؔ4}v;l+Yw$S;2DL e+nK#TzRo|jK l* n)%XEG L%x !]ZɷwA* )Ʊp5yLirsp [*f8&k Ơ2 Gd9$/l}4hv{_`FJqqkgxb @MbGcX`fO �d/'.an0q� .[ ;DQMAv4xnG?/e.+Op~[K.<V&s%ft*ZZw \Mf P^A�/}sN*'fmzJ�)QLZh{!ڻ7);ff$sϊ\xIРNq #:C۞i}Ug S++o[3e3N)وOHʘ!Rtȋ vYG|:xc"fM> ,ϒ&߹ '[[ Geb=XQ[d_K-\KNHJv~&Ium^Q}i3~1)qZL-gS}[g`*<wpg<~"`# xNaQ;KӘ �]Q0L4M N(1"s"Ϭ%A2URp@SR$f.=Xq]?x9t%~7ZupjՒk-cVs$,}rA"1ܢi=g\Iʛ k9lѫH;u8ӑ._O-[/MQ>VAr c1wRq7peOOl}tpb ˼<h`,)8V"Sg˟_@1Xֶ=3TcՆ%M*ƂCȸ $_!neS&܏'N>iDzV�<�218q]J=mߚNeH =WAgi?qYڳE ˎ6Ԩ[R`0) (u 22 9L'=i9=gM 0I߹~LJrt:DKl@ɆBf2I:xʱ!!5hH+hzX-,p zI ONp U_o.~ Au5Ρ}AIdA8ZW<xlm<tx|{_'\3&c@ճ-./u!`g͈=s*2%|Y=;"kQG2(@}n~=E8ͣ+}C=1,q՝?§�O"rf Y~Tx=n� _$7)G\iy$ƲnOtb-0kmA H2f,ꎻoJ k)`1Ӟj)K\<(m&vy#[Mτ8h?93R!eYo%^hk!Fj4C{9 }ww+ pyى(0ܣkuux sn 8vW&oH;:eU꾴@ xXEx=XU koSp'@ʾNr?%gJ}R*?~_3D8XwI/V3}!pMqh O-هqU6ʥCJ;`Rұ8W@5R ЈʰHٿ4*4(KF1Y- QU64a1uwE멳/ ~xB#;:/.aUR (10%oVe!#p6`kٻo!KÞ~)ZE /@U%-UNDS H3ؗ1b祼]ي`?y޷P4}ZqAEP&5_\;v+PZto>F0kCɊpTާ d1ʓM~{Dס`OȊ_Qڶ8ڪA`WL�`fQICyw⻗`gvOk]hn ٛ޻@H|NN$A(] SS3^4 kTx {(<5 3n%*~s>+sOCG<~s:e4z ϴ6 s/D< Ah vl> ZhE2 �ؗ+EMDfHi&?bI<֖^b/ E 4<FKGvrw is\ + ܗp[[CeUfdHLܠm\a]Up{m56?}{mܯlط|arA.%$H̜ʚQ,ĩ<늬Ƌ~Tkr C^"%0&5�10kޮa )O0t"*dhhRC#@h5k709J"tXZoOw[,8Rl܊kي?~|x!]#Ϛ~zvq+ )nꍫؒԉݾ<6rI(D.%hh4↲2 ,<w+0KBvfr^3}ae<f RE_`i.S-yCtۓhf'5<e< mA-2.33\bw"҃(!ƬY u3:+Q+&MׯA\QXn)I)}nSׇy5ixbz|O0Dn)Խ^A.[9wb7cSUk ªvѮvDZPcŚE7?19η轣o{w L) iAkZ/='&FpySl'oT. ( ^ʠX84x7s CaRW+]t͙+ƹLmXdIMF0)-2.6jWK@h_71D+cƢ&⺗ AK0GUDv8"k<ܒ, YD1:޲ Ư%8U3hE�>Dl=K`%FQK)ҾeÇ̈sݥ_#T2!BVԓ!HV̵1BN`kuz[|-Wq| D7S^$4{&TTt-2{ux }3txθLBDwRC:}xFۉF [y5{GfՑLbv:V"��k2r7^}>D|}?iǡ C($mۯCCwUX1S$5V=l-FsQ <ȡ!,ǵ:y5y9ź U{tܯsr͂&p6Yd]mJ6B}BUC|DRnLDZqQUQ$Θ3ٽUٳ*\w-x %xNB N#^ܨgj/QF,ֈFU(//tO[$v-zMI޿%홁6ᵛ"Oj019d' }Ւ_)ꥯUܜ3 ;vnHM/Tp, n2=SU(|(Reu^xlvxF)4hvDO.LQ9�Zs-I])-)l-KAdxKy=*&#,0,})37F &Oa>fqgx:緢 AݖLr!2k^ ۆFUpm"H>bjgIf{m9j%:hn|q+1+}-0JL|D[] e j9'jee "\ʣH׎sAc] ź9m Vmd[G## gEq,iM9CnrL^2I/f+̘k@_mݷз+כ]RJawb'$M KVJ =~ͧtYFJˆZX wfN{!Q*'>Z-tTew k>y4qڙ<gυւ*'6d,p>=au?pQ,2dXז:x!TK|0΄_ϯyxTmľa.jzS8罢a<̶Z!>Mgz]^Pz{yl }-ʼt7ޱǚ$-δ<wTQ%0Τ6/ԁ{%)a(UB*pd +RG Ʋ%q(I.(:Ј֯2לCϫK-@*po6Dbv]Pv[z[/f?B#-keEkREXNdJd;Ԗ5uRmVA;hݏ[A@5mB&P{`+-ǎYlֈQ^j8JHCS0FZj=J-N(p@st a8Z-sW@?ϰ�@a0R8{@씃 2dx)&vn6 br! .8ϰ^$0jE\ւۗoKDj:Q:R'6f|\ \8ؗdZ]4{ݻvfr^uC^1rO_>߹Zt糉 D㏕9W_@̦ y֚B^2d80u!C>v,Z?˨kr0 ׀> ]i C ;?aƛ>jc/d#bܾ0PA!9;̜'UwOWj|S,U cuҦ>$͢M?QϩU^O7tJ�GOQHY@^@}sȮGEܤ1̣'US&PdreøQC#'qNߏD.2MJPD0rV>ZoXY<brJ3<c f91iCfdyjDsdYM7_/}A F '`Ǐ "6!gNll{3"12aDrMb Tr$[0ճ<3$C]7*7Rn4t7م7/ ̂%:*MC4K<ݘޑЋ�f< Z:J [G{^hwh@0fbqo+MBM\s^.[q`}nMa X�Lg>pΎ bi_Ʀm^jX۔ArOѻ')+q;lsP*]<�ּE_yg�cĝ_,䘣w Mށ}b!<8I*C8TUߔA͆B /& !<]8WqbE< c,XB[}לּ=5-J_<A I8?'U3yKCaL&FT~⤥x';֌8@_ A;Iuw&XQܸBRE4&W+.?0n(y.TP;l^"\g?p�YmMZEשN:YNi bCf_8P8^* ppO0%J{#t<<i =ZngPM7CQǽ{j {ne w, P & ?-R 7K}ьv¬9 ;Qq|ND؝O'7v˖jIlpRWߩvקQ dX6q䝩PiG;dI'}Z=,]ܼH; X/HY7];::D%hiQTH.5M^2}^Qh/`/%`(k>}s?e1Նi@ ըA{JhPe&IV,˴mǠrɅkp(,MLGSJZQLbR3&ոu.Qq5o9@ߜ1 Iea8%dǭē+>LҞj;ib_ &-ɃAD~?p6S҉lLX=Je>$)fh Bwy{Ilʍ;ﺴǰ~ϲI*bxV௎E{dx2j"lB_H`T"=G˫;[8Ev,�?.ᘅVov)>5:0c3NAHC_bԡV\_c6:Dӱ<:;| b6\3*Y҅UŽŵ1%冀 %S8^ʹLzQGu. 3V}rţ#`yj5+Cu^\煐\(lI!&q9Ry9~Du6GІ#zTx<TYrt!vEM?+9 綴',}_qGiau:Ԏsm'f}WZ7+N?3+/DcPPb~^Tj4ﻀ#I]S%64<_B|xKa.wNx2>;ѻ7Xޅs2\va%|PMCM8LߋNJETK}[Y|‰)^?>ϘcĠ}Diu0 >e{+-**U$Ĵ~!FLJ[>O"AE{>ude�<ۛL=2O"]""[e"!ʬ5Ĉ:!!WQWM�xS2{ۥaؾɚ,nRCWďsKs6JoW-$6 ';4zɩ5 1Vu޲dRu';NaisX�y!rGSKAÁcWl9UlD*+>ޔX)!9QRc0 UA q Z>7 +L*]jFgZwV2 ^7]3]6XɕTx䭋0]،2P43]2K9l)-T͓x+~E 2F<\|:c7p&hxɲkcFY|_ªs_ߕ7WL._  E|.J'w?3 ́^C'# .ͮ,_1S-%PJ•T=;ArRGTL Gq`%Df]BJz:9;1^H31oV°̗p/R} `ŴZ-b:^-rGL9ruX9I3vdd2`6YF,~9VJ H ǩ7oO_OQj,xXdGA$=ɪ&W.C}K/dw|k ŧDD� $zOUmhGTH8 sd(v)-5�_|+D1jf<(p3bK'cdkP5?ynJ =_o9FgvycY"h6iP%Ծ#fR!M, r#v wmji+)I11 򨾝֒/^*=칤PWR~=ZVLj3"\ٶ+c ͲO^ѐ^(s<iwλv;cȅrBd0 '!d]ݯK*a3If9̓P_ehB $56%p{ {iWTl^hi*ޕ!MGU2ZăY0[~FmE]"MN5C WW[CvZ6ew+NC$SN%q `z2)6ؑ!`Bdi(0a gx`ܷSgࣱc={XS)}+ @b'hW^4(Ldƴ|0Ҿܝ̠yppi 7,gu" y>[yS@cD'#I?v:2T苋 @C{tz،Xk( ̃b'I4?Eٔc'OG~]ޏSc{,kTwLgl.WE}wv<%mk?Ud߬\͏z:{*{*  TpPtviSE&ϲ7k7R/}۲չ羭1vZ>M&G?Wr7t>Ns_۵߷C?n5V}ULmUn_>~kϨϨnh/҈pF=iMRR): "sri-{B 'y z"bfkS),-UsuWSc/RQ] {.o ʭ+|O!M<>.u~}S8Q(=.KC)[}L{)n<6RKdgGp%0pJFɪҲ'=+i_Z !cmGe' kmk$@yE|*' >.HRRwt%m׃}5U1SK~n,ξg$0 $h]&ŷp?P&>d\ljFuOO⠃ԦR> qA೺l |Dޫ;܍ DKVA m!6~\u$ǣ-/0)Rsc^938BP/n/*_Vʼm὏{$:6prEfYL�啘+W�?p9uf|WEmSefɽ-Y[T&\܂ Y&[KuNa,}6ce䩺=a[Ֆ\Vɤ:VZ]mWY\g,Je6bs:~ j�ŝ0sdRieO. #Tug&^ g^B~Lpj8 uяz?ў9B1M ̗tߍڎ"ѡ;-q<Amڇ #|>͡TN{|EBoF6ҚQp͒QGBG-~s\{5%H(kϗ5X)0 H xruOtUΎ*$GA-$Np]!4lmE0=JoVr5Շ-- ȕRjP uɥc;2]gzT{֦ܥ&qG~%e.؎ ,F #.e`BaM1ӫsUVj+ o!h)ݠz Lb0bbwo<#dKv mfw%?_gх �<[L5#(t={>ӑg3NxG,?dB Ki9w S-K~&?Q`SP2}V5,tH&^pHOÊH=ÊH �H6 -sa|a� Uǵp5`oF) V$p!Th!xxi 2OiVyG׫8lnaq.p aWEHc4W>9X `LѤUE2-|d,?YY꿥- >$>ey\Љ:/\A\-OSvڃ*h.PWBQ^B{<^^^^]F>7~# )b {D1g8Z<0 j_ikSĉE?Oτ //t,zuM݈IquGض긂rF@wZdnMbG׉vK$FjQvC/`SNU1͙פNSq(cY݄4.r&ZD�cH pJ7 K[ L;ioЊG<bڵ!<oK:X9Sj7 I`f&k`Viަ,!Uoӥ%q;FǺW l�ܨQ_Qi9{-]tvV|;ŪʵݾB{$ _+= `c+(QK~(E3I)|_Op!u)%Xp0=P&! ,`b Z5B=j2.TlEXVf8啨50HW彮1N N-m/,ty'NEDkR;?,6#I9!O=8D_nm%񋺳rz?61%>Ihf;Bo*[>㷹(;ܮ=a�? wz-Im{;4ȃ+k5X?'j/Dȷd&n茫+ }{,Pg.F4~?~7U^ansi}hu %}̝umlKȦLWWKxGœE+ޖ̉c2?-i%wquy yM,@A26 EWDp.e)L�<9vJ/ۮS2qqCcQh-UEM -o3OqA ϫmEOg) )B5y {3o@Õ؇.wx5O6L5'\+yWJZ/}4H$Chp'fA@h 5+pTzB~n|7�s4#̾ 郬wKYyyyyyyyyyzD#X`:#~7EhSȒ*ʽl%|`ZTٰ#zU4%0G*_=$'UH,@$kSa=~ RC\tw?B I챵'\;"|sp4Ej]6ppWH/Ce>d`.۹ԧe&\0'H+̈W1?kð0uYP*4)&l⷗V][Kium.մ,Zwɠs7l>IY>/Y}qI6${n砕mHA\gFNHϔU"AOЪM"}iBc-;?V8�ap�_@w m 8%Ip>,AsNgº -`@y9{@lrE M?U̮_צ-̲yBRXUK(@`uYQj$Ŭۆ2ȟ5& TJY|&rb7 (M{ZPc\(۠Gu}[p; Gym%q|ZcGx1d-5󈨯{,RvxX=6薹D䅕u K/qc9J9qvC# F 4#|TP=Alūb.[?Y\2uLoKMP.4k]J.YY=OƦycRBJDe2ӓ ; s9 TN:HU:r$G$yȅg~GƉ8ֲ9ycSa,ZK6ًGy3Ӱ;Qf''ߥcd'� (i_C��ӷ6l yi^?&�Ÿiq+jEo~k1gO~�9TčvjYTu wz-`=F,fO/jrtO-|NH(B(z>C"_eQK^k+ oDh<h`iEaҘMGbIcM}r t۝πrrŌy ̉A]0AR*fخ 7WSo 5k|9 5Zw(U™SܖNT^PR@~/! TK˦.1csshT,2߇n;J&}]yHk[Oq :an}regkNx\i2:@79ok G 2i<ufJ pS DHid*O_+H�Z|7H$H&P5b .yć!͜\^ ^8cm=^$ˆf2L�t{r´t K;q+xڅ}\Y4`pc796Gg*Ĕ 9Դ@ CXNCeUl8p 9L(.Dd_|{;+*"ZpB]="QPGhq UFRG6ht\LVI9QzJ`LWx 0'C&->|aRsͼ1ĢO/Iu=Tqbhg3A6 J;+)taZƮڵj $�lЇ<=UI+khQ2SVs;�oR#z{} .{ }8vT@E X s̞'pSe1 >#mlU!mYTa=qY}ÊаqяצTv$,?ժ|& RS i:Qt|6`}K85%8( _e+,>,/,/)yKj4W>3| =w~,R׀Cm߸$-Fܠ y^{ʐeB?4`I5Ÿ\n녋bt&+h{�yD0{}Ԙ]^?& ^,"_qbERH)ȶ -Id�&ev1)kW{ii*B?z0j`b;AV}n)7IPBϫh7sK\0Q'h9iuC'\] F \14.:9L5^|rD,p)-YYAi()6;HPǽi3/{͍s6))&!U }Tb7-4΀nԞ<-1Tf)+=J5!F J!ve{p"|>Vf wQkN@:4UԌZRNKq\-#f}<evVp++yv�_lJj[1Vj{m$i)R8-Ȩb8,H,ecPV:(>>Mlm^"t ,(Ckr(CIt?ȫ"DTϿk 7~6xtx=/6Z7>IMkgO>af]' ,zE\'~B@ ]Z (cymt+7M&-ڈZ_O }KزK-*0L<DTSgI3pp $?JFpʗ)YȞ'G5TMi8?|[ex‹Ր*쨬<)#N~K9`=E\ԩWā|NO$LleeJ콩̰`22O礈Oڶl'$?^tCӔ>fͨMO(ۓku>C,̚rhw-_p# b؟4v0G"߇ĐT-m QႵS0bHICuH;( E#7|:7U!1$:v612S̹knȻ}t+H}D/_0��ݯۮ~F_2.;$EyS pM”e;4m![ӄl?_]in)X648N6l>fW!ы}i*܅q)ԅnƇ̂�TMnEED:qVs3ȴ+m,s8L$Ai8sڌY/_/C[1rwjC#Mta̗!-wMAT(]0u|r}03rלd 1j4W' oW.4=s A#~njqS%z O[@E#sz-LO kGCgfa]95/:ATSp]>导2j^5JRQ aEK'r$ԾNvUS 4J7Tөn^`)IiNpWkxG!Ib$ϋ� ڨJ>[(zZ[n"tjыkd q8�DhW赗'W<q%uE'ӨP&]BXㆱ :id瘦xeXoYB-3Ъ(fO+ ZXV REƘOzUbnXY?̫zk,a\6^x Pa�0I 6DU;uN wif lH 2dA��=3m=O PiʤJIK03AwU?}⸞QG3LQ}ǭf!#MA%rp6~=q*u0h9E@|V�O`hL>ʣm�6sGMd}7/RDz:cIALɚF5.Z2F i.*_َGlZK]Y绵ڈ١ $4."̫zT`0[*Ӛ͟#ߌsW0bA;pHV3֍BJ@�!L'-օu|(脅˦XOL0u$틁I|Ƶ30d �'dw0h")1-̢#^d< w&z|vkw_G9"6�x$BS1]<шdٱ j![oi}ۿJ¡_R(!|fe{xu<! 7Nm4#S$M C߻H ye0,<GDk2 tSU<"}=1G}%gW.!?8D%0%}d4e .JF#`t2M/b|cTH  t^O|ק}7k4+7kDtw+LG<perdPz1 .5BW?r?+N αcj=@A'@DӐGkymi'd p'0#I5aeMP N1٘DP|jٛ8%6:a}DzӠHU`|N2a]8iiKZmUs'+2S[,8+3>V9]MF0Xz4$^&i-5U3Pfb$>UCv8SI#%^61HK1OrBm9B&)fLk DGQT$ęκǤ4ܾ߳Gv/èy :# A&(r{`n?[TLF`!ڞx<<߲U  J55f}@،4mQŒ%5VsdS к%}׺Oo b$#վވ#:8zN7IL~V8S1RU| e,d.*/3ā*1O` H \IdEuԜ!gγ& t ̍eyp[qE0oq;{3󩸲l: apSD:@!Hnx,$*?ZfJ :_~ؙ&/ޏШ49:bhMG01Q3 NfI)xTyj' XјLkGmTS^^饘 />h=8&b-գ\\8z0U99)E% MJ[,*YGJ H^-RIH!�0R,X<K{UJE"s`e[V&E(Lr}'%(@ABG<cFdsJ*smpy5ђh^vyJQxy$DIq kkqOUv90laxVRז )g\D|/ HȢ}?I0fchx6,aߘᨤ6YeYZ<Gٜ[]cWW2"v`~i}&*_~k[VԤ0D?yBd-Ss 8Ӊ2yإ bf&2öw#z|ıT$'5˴{Dv2Io=XdJ,s2A[;Y1SK/Xm8Jwb:nlgJQ1Fu8{H #-2$ΰD i"QQ$yJZDi1 |h! DXWiY)s1ֵ}Plf>9ʖaܰ`ȅO%Фs0{YM,I RFm3+Ui[GIrAY$ څ@ ՖĪp, �TW2m($Ga n% eoؔv>ԶLF{nkK-}W{A䞩nO.%m k'逺^hVpO2nxʏP&)-F,^jHF h # U2FID.=XQ濹)L+rb*XVy;&g2g°8q&p:뭝zqUtu =xwy,6Qx%Ъ !~'J?ygJyj%S#9(G|4a%Y/%"K<wT~c �eCQW~,InD%\L&֙f\ZL&1=@kV\\y rI&EݍWe&~蟙q ҕ罂> c}0";TxױAƥDfU jgÜȡR͛AUoVgn>d 5ϒs}, v@>aol_ՠ 1#;yImtY7LpVȏNÔ v'3FC.ur~ @щaQsXcɰ 7*zڻQQ0Vn ߂p&#=ޤ&"lN8Hob"@,祏V? (Rp*BEf&~-߰)˥1ԫ%8HrV +t 8cBf5JpS)kV^-"/#O`4BwtЗ_cT{6(tp(Ci*{+KqФK֕mZ#PN2O:9$џ2Ϋ9R{P@l'N$Zn Ot Jl$8>EB0gf(%{PfC T}Ӕo+`&=0JWA?RDk0i?tWju }bZjnU8ܻaˊG*  !Jj!F�(q<ďbncyMx! wA RtӔH,&}?iȸ*>!7\e|sET0\QWPo4H_�Ja4 (kS2A.I{Qa(R/h�6S]1d*!zQ{ti[A"7' Рirߍ!9<H;Aur8/kQ虍,0vzJB }js$lHS[qerХ 7)MJ-l^ۜ4p߶o]ú_wxF79ԌB2,< kqi_w܋I&E yO6lѨ�8)S ϝM\VGh>{& odnW}bk1Ῐ3XS '~st_}v@3Vx#<f{@pPpyGR;+SK#xBụ\_> ^*džW>,k 2�w'}Mi҃�tomX:{H_C"6LȜR;y%cS=IȠ(JipwmH0[GN],3ruW1!BfP*LZT,:zI7n3`l4"D8Y|,oĶڝ] dôx)$a+l Pi&$-nԋNM~h6϶*۟2񵐌O Awf&(~,"˝I&'iR0R(:]xPNm,�H0D{+7FDZ+On s`6U=_3y$צ/v! ؛r\@fr74O~9'7 ["ԁ$F A:jǖ#`mhW9.<*jpKkh5v[ +C78 LXz?[IM>s9a w&rwP7{8,Z;"K|6 ,hХ,̗#8 11D W|(#<cx^~A󫙋U@XV4ȀJ$%W pQbPRRsbP @ x0l*~fV~p\Y4-vj-F��0&sE&)iY A(T" \[F?/6Мs?m=k:! bRv=k<s�NItl" 0f˨ƂYN�<%vg>a6=]YJd\y-K|O>'VȕBFG[RwxoZ8 n_)抵ḌJ$rY^2쵲}s/CB!a3 gJϳ7 ?rzïݫ4,#�6IYV'lЉC"8&lӇ ۆZ =--vxحCAXSmށ[S`ZX?^32+Iϯc5ZÃ"D#Ɯ-}<kcTO7Lq59Fn+co*}|Z<]zfkrXw}=k%Fp;zGvL :`cqB sC.DRIقV31ܠF! D9 ©ۑ7'u z(/@K;~L7&;j'f #1g/o(qMB57DM%WiKmu>8WAhw0JZڴ'6-c؂il_d4p, S R[1||ZC@Wढ??@Q!z=ܷO!VSz 7+ S$ 2Js=@2+o r ,[m8 aP&XoW6D%O9L&*ұLa < _еW:kbjL5`\a4IZ||;ͮ4{Qc!3r0C!6{ 5'DFעҩޜoIS/tn7`/wS2:y5Ԙ0cq=1 ['u | (�~yyhx޳.=Y:D3P,[ `YwuϽt60~d+G Ap&!Zaf21I& 5*cu;ɦO9lUdtrK(P.2)q ` %*E0sAA]Bp+a!H.ަ./԰^Rzlp!4e (+?U6)Y؉7w)OW"[BW6e%z΃sQ #;a9eSK]׾h)2Db*hH<\#]>d )`)(;Xv*]Ȳ'1.|7c>� S)I2jo][783t B0[8?*YIRCi<#HF|niq%5"ˌt$"J]"Elem\ * iMd`/Ճ`PzrtOeiJU D9U~t}eDž"^/ 7TԸa{T'FxAӺQ2Ӌϝ!(9`*@'1{qL0kM_,% ,E ^EU( 7>D]zc/d 8'׉= Y>xū3bh<W@G 9iaX_T&GL.1 Y�@ǒ0aKUY\)^CA=c"#xC1կ."λ#~pMn5 ({WףU�/UH+Uc1&Hs0t LHf@?dy,md:Iz1JEsCCEJ>KD2c(EjSچ༔�7O8@M4@L%)=GAWiFڭSl2QKt;^ JzE#g$taJÀ= Acxt"EU'F$ -sEVEؗr'/[)~lv>ވI\tlU@(Z#3a%W^1};|ERT{Jv;W+ak=ʙKJpMieN[LUw!<px l͎Z$�u~CCR#$=HZV&qModo!ߖJひg,dM2cJ@e74 �NnUye-t<]]KoCH%Zy )"HdWw~Dt`R2tK%ў 7XErsr% |�ZJ݆q/r)TGjc`/d r8G؟+Ɣ{:óvΖ5 3Y`z{N+F eM}̢3F^]>O++Ӳ!D9j<I8 (;S헨6K17PB@@K_oݧѮ=XCcuxT {~r0IhC9Aq.3"Bw~O,p3_utr6W~-~ Q/f6�O(IyٮyU. T2S vի}ceq v.uŘݺ u4B ӡ$67'2ko :f$5p14r5AO/R'JMNf.J\}.u jrE^b@E@o}Hctϥ(rf2s'sfA 0'snIG r)ȃ8La迣D_8ʣuֺ pA'i*M צ0K;k69].@g'&e{ܜZFjsRu?B9[W`Gnʺ1YT;$Q>>u,e5ۋk}%fXZ�'I&ԗ߹n;\/ zn{Ei3|/׎dA K-:DA ]+)'@hKFB_!S⁹33l'4&r]DH볦ўa;gL<}/ƩL#\  "u] zG$АOH,{ˋ)/u2u x9g^[Fu竁􍏛ѷ 9Vsk*ʳoyjvJ%/D$fOe!^IYe?)`!?c{/\uDnoq 1i{7)_L (Yܥ)_? ?x!X9HϾ}PS5ϭZ[S,MδU6G oCGcIUء<geOjA#}78<]p6lC5AW"= kdjbd9,~3+??Tl,ְ2ArBy?pC.T0ٳV [T,/u^oB.tRw_G)☱R4jr\ԉDfPZ}Ca(-JP՞̌a8H ;> 1#^$WN:H+Yp:XejX s>.lk�iv2akk7~eFx[6>*;�h [5J1&fKDPotEϡAڟGK}|=g nuNoeÊJRf!GEd[BPQT,F[Wk m2<ǩ +,]TKTcEp#^h+j|*=PBRƹ=Ɗ !ɭ$۲EeD]"זA@k>dc;3_ =_]:'ai-#Ěu咀 P_2IO8iIRYGԔVKx.gU)cP;BXn6]rk<$v"J/<?XjތDkJ8YL*i~$LPw6tT Xpm~ee6]| u,U9KpKX6|IVraSi\=;Bu[AWbtrg!}|F�^O6Q~ MTOۘp}R =<)a;6gV[ƫ,HcYbbE) ccZ -I 77͉W(>]R~Kzg X4ֻGxLHto1S]"< ESe|Hh]]r {D$MX֑Y1Hz'&n#{-,NV(^;cŬ"=S޽Cr-E{YRg$DMruNJ]o-Ч|}!/8؝;S˶x/-os%PQnQ3͚)rގ;uHw€*$XA+%4-)#M*bm"ܢ ߨ4'TC'/ճyZFYf0-U=nVWyYwSˡÈ%|:s!9(78|S]+4GqߺRA(OtH<e,^JPOP؅ ^JkňgWmԴl}qblze+>x 򗤫fMu ΎOV3I-;6j%:nz'瀂{N-vS/? #64$$ASIi1O%CKc,óplibl_%//cHpT-j3PhIxMK+GK%L-ӲK- EЪ\,kkej#'<p~ir:l `.R[:Pٻք^<9,sCB|¾7R/RwkZ4йҿ&q�%.5j;2I�a/8>$TKO2 %*RM\HCy~$%j! ˆ)L=:ޒ42d8˅#VIDȶZX^G�OI+~Ir86]va!VYCgGiu^G/lK6)A(}Q΄cWH3$îŕpb/=Bq/#<2/;ϡDCZ=tуpWb0*Y}Vg}UvOӿЗgvkWv{tmW_vnۭ쾭ξnRY{ۡ[/W/T g۶[?۬dVw7d�䣑F׆:׬<gfEO䈺P�+T | nnk7my壤u5i #b8$LAbw۝{CU`ȂTm5t47J vK_fyվ8D:hIx*MTBcw(c&E@BaE?F ӡ|7%;~s0J kB U /ޗmxӡdk"5?@K89esV`:㝽Aw A%, 4/VՕYA+8R+=xdy;ڢlLDY͹}̵qZfh8;es0L47)`(rA/sp.Z2PU<Әd-%.-naO#dN5A24OA,ގ/ŹϪCpBV>r�郎Lp.K22ϕ)YOIlұ�邁 ,*z*@w[h.,6Pa8ATJez r(PB)Iui340+=dF/ixe[CUY9$gC)޽d4F BW3j +wd &vD! zzyR1HF GE 怺<>5/&ԣ ƨ&& eRy`QajÎ{wY D| C}r �nSߕ�j0 Gosj MIv=eW_eíi|(`(aҿxA!#^T؅^ IAJd`qqRh<SKP͟i{yqY<9Oԇx5ALr<2K`k3)?/{gepՑeҬnwn`C "ݜ1 8#lrd+M dl@}cFU#钼r�{󌍖<6Mx6lEȕ>? 0,j <c*E4y=뤀 eFeMʝ2٣h@ l0 XKOФ�&R*�pU!]a`=MknZUx.zO~b5#sG-Ԟ};0/ u.|qyzE'trPo03b*7:OwQ9!hUN%' ֻ?C @Y_ ʓYF_7�ͣodO8h͋skDK"0À2,q[Ok$]\#ז: (كvқy3=q*nR_=ȑ kP}Zҏ?ᡐ!'�f$7:_V[su!+.#2 8 Zǻ 5 w)@0Wq3T?dB)RNm©XݦXxEnf qFmi3>tG4[u.`(@EHzFC!t(zfp1ִAi$0Z#q{{�^o MjŊ">:. _{J ޼c L�sE 2tͺ-O /MW'9ӸL�Aw_ZcL*-z*УmW04rK>Qc,i*Z0\?]D=Yr*cK-~F5 ަ}AlC_R H"ǏV({r{ܗPLu0yh(qƪjg,lG!'(&3!U3ދ[`;b_!l<DR(8,^�+Uxpخ۩cHS)BcSmQ<;*^9N!uRN' ~<@@;M'U蛣`--ɬh2?$5T,p> czp>N%PQNH_Xh5_w09;##1fZƦJf^M^_[62'U 01,a4ba^kL4=0�%C2CWi7*1}SktfP McE.y-[[7J_ybj[& A=dr0( yaYąek#VL]KO5='gҶ�k5k(Ĥm6`lɹwyDKݍrJ9&a,`vTW43zIAQ9cU?ux(l9%Љ J35I@=娫f+J-4=dxGzBf:snr:w9C$W?Vwq2$~€+~M-3Ve�3rC B'- GbYSdpo(ZG#r4TV# N˯BbKRn" E%c/}gWg?a(%T?|'`}gM^J[ |g!m'{;Z3-^P)xӇԴTTb$/X|*A췭{:.ﯫ� ?~{҆IGG`z$L(E///0bkϕ'pCrc&0ʈ/4C>1:[g3O > 6^Oww,SS'^S+OW~mW n3}XS ð X(�:>tL ҂G/6q-Q DԢ=cCf&/ngMjExw=s9.? bL * D�l҄~R{%NJ*ݮm",S|1�� ;Alfq2mAiN RC"]}4E.5$9 -P{w/ Wi,ZqEھ,`@ Upgtc$oP\1N+.\:Nt2~-̑d܎R>Sr8^gfH�Z-տ{10gP'qAhaEtM>˞~ugq3 sT pcUh{$UWgʟ3>)bcDe!y }"q·gYdW[q;E z\q)52S&ЕCSjA]t3hˤb6�.f7{< dFyV .|Tm-1rys)ރ9N$&EȞQFKBm];n/T:j*7ViIp $ >\G-OOE,Їi*tx`!0`_#1׸F*X l}\sLjփEU_i]-̱^!BaǾM 9Im|j7  &nA5e2'xOf-E#ͳ֋:xTWߌoA܋rn[ dy$mpbpK%Y{1@Y$%FY4N<J?~T]'dD8m{?JHއYY0$'wtkC>eA09 g o_2#/;~*xr"*4hOs4@-0v3 L ,wG \wP1~sriՅ1=8'ӧG[2m}vSf6Ewu[t{2'P* 5ƅS.Sv^GxtF^]|^Pt Pfdڽ,Ux ȃ{pTT-G~@C#>Nv ,qաڣ aN«Y1ʸcKe"$աpmyԂGCPc6hZY�IYYnhrBՠ|P}D4Y$SF'b`@}I^~. /"dM22U+ V0=9;�($fLh4^sV9e%|0}/<#U,'O䩭*O,?4n+ MN" H 9*x̂a? |ujZ\{o'nS1QcG9n°W$jqM .)_^=>UtkO8V$t?1WEF$ |vs: 94ERmi-#5zBq&"K}76\a| :Ȫ+ar<G .c?[ "JQnOxbՊhL>(PU5渪;k؈Tc(<\s]]Եk~9eԨ�Ub̆h^&@Eū/|Iex|! 0!j=ɴc#Tđ/Л$Z �ؠ쩀tҘhUo?p'$.ZSy1z?B͵LQЃKF.Rc޾jB%*h'FƅM dfC)O4B]`J.'ِ$}TXPjV@&6ʶVUHX:*dl?lGL %I~ȎMQ61Ƅ֘q k`Zb03pi)MnK%B)>9B%.F>iѢPݖscK爵n:X8;g[`ͦt1Pϝ0=2WuA҉\a5Jr{EW$J[(3b"߳5*] hK*P">;C0gz ;/D:,7"R%o¬aE8o]?ĴWx >2:Tڅ7� z')UMO/ɓr>$g"D^/sģ ) hpl|i!+y GsK!: 1� "8҈B cY]D.6QzxeJ}K H&~OoVmzn[]Ӹt7%wl(Urkǥgx{X:"{nƿ@&rxhyj]qKpm-&5=lz-VV[֟_PP ȨJK̾*ˍ)0A#!eK=V_}uWnlɘšIuUYp6hLTb込VꃉTB7tWpvlu#@xLT%%⋖E'm8tFݑϑ{w^oo֐9�[$aú[u?NsC(|7%T3) B\�uER(|<ȋ=6#܅Nc Z�pXmˁ,$;U׈ -߷-m?) ־"\+Ikf:R-E; i"fG>BO J&]d>@Aq\uD~5 س`%]ZquG6 s';Ө W\fHfejP^UZX"Aϵg&nlų+@J?g|{K8J?yW.: _$%nB^ qtA+B�7!0�!$pT*G|,@k&LAӝ`pXB9ؚ2hFejpڔZZx`}@oeӑ1"2`#=q||G7R*j1ℱQ|1X˜P3n",?}̰p0.c7fewkWM奃X~ju(5)0 oyWhBBi}u~-i[:SԎ"tG:ij [?JFpD8C8ņOA^TEߗax |[O)yO ]){B^,!<]H>X0uE }ZdR9ӫFLS&#S&}D}ax3$$ăάl;gPDFϵ V[Rw١Ǘr-9͋p |CjBԋ"6fz oa>ö́ٞ@ !X-[d(O0C栦}@AOw# V7UNo@*70{Ãf S9AFYuȡQU[OEfadNSD`kMFL/hti#$1d=<-NjSLPs2?qkCv!OFڷD��WqUL^s+ZE\:=L/RP+䢗Td1@hgћ49QM{�ҷ!=uBߝbzw$"Ө qcvYX:^ࡈ~Bt' rDmr]L)6r;KwSn 8ſAƅ}utn쑆Ǔ{ `~WOBF Tn21 3 %ٰ+5 t,1[(xV6sFw<ᢳBvk#hg|+Ľ;r-l$90I!ڶn{K<^~DATKᶾu},VN.kT([3fLAkEfgLK,̖W_Z jr_xy*B;TpqYC>ZFh^o+GNS‰>HXhHąlz?$~,~q9!xU~jA0_.t#m]ͷ`["\1{�+;MuEd'Yms^Ab s(5fС4@Bb˦'@ y{-n|6fէlAk9X]0!=nء[ tSQO48䙛9D  ]L5/f,2BUVhNSރ *־V l&U8I.G %-d*=4֡1G.C<q,'":?|!#? mɉ֊o Mj)m5Cyx‚(7%c:Yw'x0ob)|l4AmNѤ̄}rD[Alpq%fѺvYY+f|` J<Rʵ'9;ge$Ih&dT)ꌤ>.ÙHsz ZSo#b�wr7nΫ4\܋MZ.\/<ɶ\& Gj`%K" f0 my##f�◞@5{0N.g~Q-TM,ؽgkaZînGD"ZN xLiBN'ˆ8;L\cwCc}9J[g}zwt*\pi+ ZBӁ $I'R瀗֪ xW $*L6s}g&N`�r<{t RWHqzRA @+2||ѢQka-/')>O+Vzduwez-&V�{ac9zy3V3OKcma/sI4SRXNb((gdI >4Ov˙1j`�_9 {g#A"oIx{1)#[>`⼇gImKiϞWU5Ljl_,kX.pn)pLsZ;>", .ݩ'|9 'hE#r?G3!)-SR1 95Ǫ dP ^9 ]B r^XIfI;Ugpgld2ȥBΊN].VtxYʹX⏺y//z9 yke( =kY\rG7Xfw‘>K}�@moz2|~{Taяp_KҴg C@? ko#f/UZ~겙 4r8VMEhq$F@7⁲U|ʈ+2&~Q=vQs_ / qm\~_Į0¯"lyC6& ո8'1(sr4 ٤ ؛¡QB܁/ʦ;'j}JAhAsٙ<ͬ4)ݚ+y`HmXjVH otGk32U�k,Ά,1# -/GaQd2{}I%BWqׇGAUVez�>~5H!r::ݷgu2itd*Ei,"PK]|Z~n]i<N?LvqD1,3YRk);'A'Ѹ̶proGX( z5Mi# i5Kr*H¼y85tsԪ-xHNkFxw /M�' S+^Uy-nB1>,uZw7ok*IRL2?[wT?C [/A~/dcY Dt{{${v8^-+aD{*к�&li71 qHg།5kJP}5{zDfs iٓC[Yw&Q\ D{V1ѭ?% '/[1*Z*_߱8i1tT5InC JyDH)UO[ ^ۭ֯B2Fcr䯓Z% SxSK2VD6t̖]*wAJh2 @g L3rrco;,5dZw!HM^:"$[ (6? BƝlRcM[S{-络I`cB<8a)ú@2҈+^WA*X/;6թRo!Nq[=k%D׽Yڃ ]2N{D`WBՃ3;uFYpCw|1F$[1 9i%Lde{YqMD7K zތ<{tZ~dTkZwru.-/e5Qyr0 x2݃ FY|\~3RZxtSJ_U+[!qxDrZ_q\Qm-#/py[6I1ƢL7,'zye2H6(_?նQtدfl ( ꌍa (|/)0m@ ^v(Gk d=ew΄jՐaOwNr'x=^8?YT,-]:OC "Q(�^HûYxh￾Axk?эGkVv;{Vs7];|>X[qkiIu:QmELͰ 9ӭ`Vl..*5DK*4DRu<|.C`yxJ. +~̺h/b g<+yqFnę5d{(AF'2,ENSS(! 6*ܮ0fջ*={{S% Y+s+A*&LmiY%!p}0p@x㬧ޜ2E5J(FݐWPIFlY¤2,C-⃿U k#p&0s ͜hgJ_Bܕ*._E:]lO 6vZ{غteAAL ۻzA㊇.;L){֎?&1hi֗cr�zM>rI#TR?))+31qq'lbp֥&;Ϊ@nF.b`9uR]$N.we3Ǣ/O3H`\,L=VIktb/ 9O\ ̼ވ/r=, }LxE,f|&KhH!MdרRqHn | `ӊ/ Evox} 2IRtMUB7٦GyjU[FYgSF)4}=ʇsz@3^^ba+#AZ^%=o >ALu+֔ i $Ϟ լ9Eg.[\~Du�MQˮ2-2Fp(ŲU sd/Cop\غ� F4X%,/C_:ƵKXH߸rG @F427d=$bwy=rմN!fu^o ' WsUA xCxG ȉ΃sQ si Yb^OF(e"`!BYR@"[roBI\'3Sy@>^LM'==ʼ75+<(^\!ݶOROHNWd!0rˁvgrLf^tu`2(fQSc?!\Q'e\" _PЋ˄wH"|w+tB| Kڐ44z?Tԥg~<iZUAg C̃vX? d>�|$ f|nicţ3kW?b qmSPNϩtlvsD\G+t[J4 OšY.G_2j2~B̿3MILQY9ItހrQ2c=^?]pGEBꘇΆU؀Ϭ<z)SJ CU=k0Mc񂯲֓ =xN*ф2ʒSj%a=tZFZÆ :-S2,)W" ruu)PDTlj=QG4U]k�f R9UNC+14B4YG,fb�JL"]jJ $#!Rx bӜSuGy.%tPS ;Y_78k$ :qլ6'2CW`I;ȀDm:YiFHY50c=eƦ}U L>|{%@θӷiH#+^%R lquBRsK !a8}+5YI!./o<WNBäNS` 56v2Bv3B7VIJI `L]\hR'tyUץ(vaz])4th5,`0""Z _ _՚*WNZ'g|G¡3p(d|։c 42EҊpe^tO `o* P4;"36\^Y%k{!+j^2hdʲ@h_,᱅Pۏo_ӆ;{pzUiTr� >/\xUORra_~EYʶo3FNc#V �nZq ~6.tA-J.` ~Io=BKlo@@B#>xզ&gާPGy4W2#_{ !МLWK:daES^(1*@GȯGjPV�Hk݆[-L >@SX:1KbA@gb&6t:-F_HF(l3bGWlax |Tx$'[G~Ru\9C@>$˅j@v<ͻM/o OFIp;Gg<܏ fFeΊy;D]}g9:w)>.&6N@aDV0�1߽ .ҩ i"f} v6C@by1*H_ e8(%,u{EsqƙFm3QI`+H0R($}ISaoAJ$`zk4�ὂI.lZoXk�K;n-Jvۗ; IK!KESf@P޼W%δtD4{ nqmol8k~jwעcI}I6Nd@yztb}VY| |d,:-kV# :-kXz_~+p04oW-GkW?OEbALfpqȔH1O//(:<U!Ty. B_8$v>cp|EIA+ډbw<M`gatݾSvqQd/Dg%$~PrH c:ZD;z`*Ad~?ts\E_z!2-\o*͒#94,ryQU){6c"+P�p Ď$j'qˬV@آQV z=o;P# Ȏ&et&CKpE{aNL֮h(^lTݿd �y",$s?O6J K 9Оb̃hvmtWrT9X ח<;b2r I:mF9X` sQXܓ9GqskA$!\، fPv'$Bd}hEb79ʯ#McÊyt'P *e$[X˾pri;T4<Uۯ8 J9ԅ.ˠp I�w Ȕo`e8HS4Єߤ>M.= X)5/-ntѥ@X4ڭ?9u"u2}:&35U[%K0T2WRN/!k;"0WB, 0,49hvh5+hdk ᔣ Ukmp0rD׬rM<QܰVQқF,Ji)ugQ8gn}co;UAPP4GĨNAA<6仓DI풪=)GMKٙh"6AU1WIoa'c˚ER"^?SgO՛%eWxZ~1V3cwD|<,怦%M!~yNxq阐B2px{E~jſ|+V7# e$$pC/gTED\HmYQ\�B&^Js!9(7$m w}m6V6SGhպ4,ؒT@() 9eK�9)&L BQۧˆe.Jڌ~-eV ӊI[*6 ,'Z`:!<֥wf t%p&/743$ [ Go󾓊!ӭ&tP&O$=Lgc@ƉAtIn>ﺽ;g)�E'EWrH֖#TEs̆#pD?2O;N: ޠeuJD`^QG9Q|n:b4"Lr՜zt'_B/HEvcXrsk _}$G Y@w8fv{&VTZ,D69Ǿ4 {zq�f|�9Nj\WPK4RHѮ+Ge J }U}UүۥznB7cn[q}UQ߶vS7X?m}[}];7YoS{tW_?m}ZciwաGvv߶ Z}UkuñTqOl4p.Ndu+]cAkڬ-}b^TGJkt�[N#MDB nzip U<d"o2Pp�TļÒEt=6^/;w`iRȌ4c`/h]vn?PSȩ=1jff~wse=Vu<ُ^?]\ vXlKIwR%7şPpOf0H?V'ZYn' 7c�B邳5JeSFmA,(CZ>S >TvSf)iVΙkq܉:cǪΐ/%Owf- Ko p3h)z<gk ӉHK\eIN"}!pjsAa.~ |k_fZQ,2go5݁Qlu\W8fbDKuxh픏ìZbEk �=E>WНEFKѣt zcjx{q\:N?*"ol�zukw91"o779Q!I$'҅ %i'H?%'f\~[tI@o˕'ͩgL~ Q+z"kye7VHmq@Le9_xT 8c?aҿxA!#^T؅^ IAnޥH'"8ώMgggMo ˆ)pmϰ&fKJK( Wo?e ~ LF6,T?uIx�7geLN)`y~,*e7 -A(,䝥`T)9>e<\*MmbYx]58I5|豧f@4_fK7[57A!N.vNa !uhA^~n$;D0ݎP:^h/x(A@ꕒ9PτE4&[װ<4]X٢*?Ii2Q]@g(Cs]Yxr@*F,daTSUWHb\j(4<EtTaa!qv9 %;xJ>gIJW/A1sv'SncEZZ =xF">#R-+erůl`@LǕkhKF2.%nͫ W#[~nU?]PSG愮ʊAa^*`n S5Cuwᡂ=bTya7۝iE.!SI* f.p\]f_ ]a!]O5c-Z%Bq"~Zy/ʀ؆J !}.lU0ΆDnM-\cLnm6Bߚ.,6g0_ۑ2BG|i@# w]&y/a<z(O_=?v<É9XŌֿ,~JA|ڜQtcs7aT_u Dan";^Z/>g[If[띇E0HUj^bR[ǙJ,b c2BNկ}yzfuX#aJ4zEo:)r<e3cïygL`L;zXF[lQ{om."Zj2Sqz /\4;D]+iOo<~ɩDU lzB/OKGn*-a)SyqPtx$D+ 9#t)Ӛ@-lOOa!50MKFs,:CE{s1 ezJ/U )8CDPgwʹye�>=[tɚV 9Yn'53I}E@v�7VZ0q>3&-<54U4q5~r_xR1mU2X' $H%)Q$jo*T~mjM=ȱ�Mm ؞l؈C�G]A?⊗pI)OJ<* ď>.eɡd)AmA4p.k&RL:DG$CnBUtOtyxu`MBD,sDE_T;_Lš.UWc!2=X.0pD0F&Ud@yI[Jnj5h3$-@ek.)vt7*wR,\ʠ6sR5UPMW'#3˛G3*{ILcfS[v&wXEk轲j̩^ ϥ%ssp ,>ڣf3oV~NΎj2e6n>1F?A\'ǹ%9șP=:8#OoS8sp{r�iX[С<-kk©%Tb\ qoBlKPK'|?%a{<QHrP-ټu aξ*_0w_WsXѸ~us4:_ ZZjK_?aL(bt ;D&C]GolTI4OŽ/c_bi #V\:<s΄_@-.UNBM^?DR2dL87Sos@AK$詮g7(3+qP2$p\,{룬Ćz1Z]s5YTyXUwK<"˄G+V)^W7&$�Bג5'vs=l"nZns4u w,-8-caێG׋tڥ#�˸jLޛ`G h}ֱ<tND RPzSaJ*[ZYJYMޞBa-ٟ1玕:()Myi1KSkWn(X߷ΘIb2S߼Y4,)pw@ s )p0:Rޟ/G,1JR{c}A!ja шYKXՉOl\NpHpFP:Tԍ\Ms-2x)%#3-4UIђr`t"#:#꿠j-6S+'| rP׹d$84 $z)x>iD `_`.W HZӸ0e)Sl2VPm!q gT 6HFa[)0b49r)J�ZwԴLC(8J+Ʀ+%R^.ݧ uۓ>:(g9n;^"h%8Oԫ {ʺPV96hYpt(?&hgIa=n_;زʡѵ(}g7&q(YXFFܣ6Y]2ͽ4HNegh9t--'{Gk |)ky7rɌA zF[gha٩t"4R(ༀ=Ccqc j0%!g4@/1`ݨ{NIb&'.%7KXc jg1aծKqv=W'OΟ~"zddl6D7MzG(( hpI ܽiq,(Ӿ|d.Hͅ [=;"*ha&3 Omo1KBsBƂ BnoˆY7I^c)eض@ SlT _b{E=>ЩApۻ7o|ʻ@3C f`%=HtOegS]%X40L9k E?P6tg#GC8̷" T% :ەgHvX$]X@M3R/쬹| w tb-ţ�&#6 Է:5T!�.33E_j *m>ǚB 'f*eR8*`7FؒrX9A5WjȎeǡc3<B`x5mg)'A%K1"8֟|" .plJ-LCL ](lTtj{yEW1 6jҤ<[Qx�pg0cMh(37F6na՟9�bǟ6=g-%fzaE5Ԩ\?yAP;3ACǼOl;.`v�oBA zP7J<lU6qP=z,-([ 2ܐ~ %@c3$ W”\Z/ȴp^6fu?5w?`7Om�Dso%>Ljq˅}TVlw$_L\(,ߕ`^"afr4I.4MV]t8Pk}+VOUx>^G64cUP:7+zbhHmn^J`.*VC=: ?z`Ā~|8(xtز!: 1� "8҈B cFR9N˃ϑξa=Zm%e7xXRF%�GSE]MQ`(NWR8 {UOʗ{jn`FasR};$I3F?rPLR-T Z;gH䙴Cf)g2v:0- S̛qr?lɗR,|1Yz%vur;PS !f׮urs6fdrU?jx,BqT �گ:F]Nkw;j! Tfw)у%*IdGrbFZNµGw΢3B{hϭ#�2XtqTD]z.hYP0="Y[]~[> ?0YtI!S Vb'+OΘjx0= QMhP ēSzP&͏(h@1,6&]k>boLE}II@$ϯNBآ}k;|\h=)0gϚUiYdVV#_P^).oٿRiI"}(�Di:>|*>9]1!/K2F&27Zd !<0w4mdMp,3<؁f"P�}$�$dGq0(Uth̋B R$ٔfXK7C% (QVC,aRRP#=nX~jDgW'kEO@!!2FmCO&mߌq[L]KshP!m0(g`K _(%0P7c+H[}�kO "uCNSpS|'[P ;&I8x#>�!(g.SpXƊ›j<sWN Jsgݽ/άl;gPDFϵ@6>i/T ygi01h9)v)E8܆dDwsI۝ׄ+V?F IKnW�67 8XU|Gb"ћ1DڈjBxA]S|лy6)bhOG!BM= ���nLh免meeiz Hɾ@kIZ=غ$l໬tIs0>9])/_"� /n| s`$zErO`qՁ'JeWk<SİTP{M LmiPCӽٿ3H]17LsZd]lbȎ)ol^4k<(gk|DC i Y<  �w O_�ۓh^FE)a p1jZuDʷTG!z[Hʞ={w\A{`O2yK UݧFN_*Y5]Ҡۗ|◜VZaӰŴm]^QwRŰ[ϥ^3DYE8Jϥ!Ca 0a2٬̃_PL<nO<1 (Y1j٥.$ oR.šgAhoi厾75t?l9u0;~ gvbwAs+@zi|~Xh՜#sUl}O?B�J4=B,)MAS};e/407 <ebKJ 2m1t h v6~;ܥY2X>Jo* w�ɥNA{Q3,Ms VJWr(tV7D7x H{tHDi;X>\䤢>h!W+/z }\3K20Qlщ65ZDC(/ҐCbU87'G7 ٥FT9r$$TMLgcuh#S N:>ܘ"ie/2`$[)ܾzOj/:>3F̵ USzxggciDcyD;(x5 aMC/8Y9?8iR:tWW Ǝ-v{_<tGW xUB1y~eN<[J1gp6AJ?rgt笾cub+�@٧@ckz$u*=H~冐yKd<d?P_a~˾U$0ow@uyV+m<4>o0׎E:tHpY*5pm֢[x}7PXUgnFdp1& 9Kb]?6NE-?0gU3ҜMfٞ(��sZ[(L١(O%3]EZeM>y:C'9wׁl=דVUah] \"iv! F+=6@4B\B#1gFo.X5ݛp.|0JQ-`kʼny;N�mK-Y @n�hݟ#FqڮNńmR߀gmaϳ9'`@luR.dS?tS2ov)c ~|B/jyєv"_۷ Q%' k=6J8NihWB�papT6F$[N\,`KdΌ/~vĊuJ�%צ kH~ 5i$K4 � iRhrY <ڐ\T ‚b"Ks[d\&xW9 kʒ1 Vk3C;̧T}L­n8X5Pv1;XkX0RY Wܜ |4#B$iA-ϲe\vvݢrӭ͘P9"daS};ݻZo=,G;C._C'eD;1M)4O:ST*3:5$uCLΟL'y7@8ɵ8`mx(]E("sm`=r~1#jLgM1eO<yTzkcB@Lm rA<i`1>=:ax~(щ,$J"%2PJ$x|i%Ce QN?#1�%>~b%, {0n^8ܓa_8i=-=v[p2rfV?$qCt*[2כEQtm3iTs&8-޹4N2ektp-pư Y \w<z/tchKDvVM ] 8ʻ:¥@ai*Dszy1Tdͭi„}W|,7P7z,'PtC*d  #ݯ3ꁾM,Acgg K臌Kqj?Me_oGgp1F? yĮjsƞbLcyY. OO1N?&MH8pVQ*ZZJx2V!BTB�f>,`==1)om+V0;!ٓWz?Fxl�kܙ{UPewKVpqypGx\=١-~Ed9rN߯zNel2/cqM6QY5_gٲ\�:,3dN*ٶ h V~_>]S� iٓC[Yw&Q\!UY,"骩ՙCDfTǷ�6>4=.0=n.Ōp]})x>5:@BܦXJcd sf4#`r޷;xl#z}Dm w|1ҞzL=5. 6N`8 {n5U'ߘ}edSt)b}$y~9We;Y5c ^L2/1O(Rc-I"ep+<|A'M=S g[ϾT,Pz3n>Iǂ@zx+ff izT>CJagk:?U: LO%^[n+5Rib^RhfR?|\�^Wr:Kz!lˊA6ZY #L6zI�n IA9V8Wy]c=BdXoܟ-UӃ֪ykzEך]o`+BX>{N*g6ņ'IÜǩ#Ʋa͸pxFWΫPgěp)]ӁaeIZł&Le҇ B4Η?AQ̜6tJxZդ#Ts)@ 8Hw͑VUrߘPMc+r+A4v/bb,׳nt͠+qHdde ]O`TǠx*S1ejؿzHI9uQۧ5t0јcvuV,-.5+UqTsH_~/pf$GO,ݜ@8suh]n-I_`/C|OhO ,h5^\GY벶]l3iٿ_89<M~" >]j:1?㬧ޜ2E5J(FݐWPIFlY¤2,Ai8� dq)/1ꝙr.R $ñƋpMs%>^jZ6)<gIGnĺY `MU@._ &} L=L^x=u r R1m[|m;ٸ>h2sv& ~ŧA{WU09E#Y@x`=0og=A]7o=VwJ6Mry9:}}Xѝo)$L9L>x4A@h^Mh=Wm:D}oB^ j:$k|�rb ϥj,]vPV!{(֣g7|ǍW{Oje ^n#%aH䦥$'Ch83܁Qv w] mnb; bZv0?. o_G,ksl:U u6K?w rKqI,Lev[RN@u2kp'͜ms 4_9?, Q!gCߌsxBEbhX , 2*PH(-4X;̩QA?~:gW6 }yˡ$.H!E-,~4llj||AytYel90[tSOMWa6"[9\[9 LJnOXд%, (V7>>WVǘpH|nг> <" \ĻMdosC?7u=Z^t,{$nV3r7݄HDDy-<b3z0*'\4ZV%IO.䩝>/Θ${N2ݜ"|Q5&4s&0_XsAX?j~ߡr[!SRsH-bO+~4;xS!91Aq(ojO0.6yGa|+6.! $,"Xh\pvz6#v {UK4?0=ěݯZP|Mj91ɬL~; WtB`l_HeR ?dKP2zЀ fh. ų0%~a Oz{%]PxeoؐqY#g$K]Yz?A_K@/)lN<_@ <dB CS{1i7n@K߆>M g8DTϋc9Kxu\:/) f=Dun*vLO@"'e D k!{Wr1§^NY ۧpUx kjrL,r׭=H+eXZ>G ?X7naZP$�kAdKo[-\ 'C҈P#K pT�r/;O.u<a1OS˲Nfb߽,?VA+sUx囪Ob(XzɻJ�j.6|@ce:�[b�?-2,3`x5QQͬ` Soz4YsmɋV0:bJ'Ն/7{Vi;AA=$'k1uב52/;,]8"[w4wWJx&0t^'sOqF/.9>F:=ܶ}B~4vX.k@[Vܟ /1 eH`hdRuVY6'S3 D6a¹'ǸH**tIO䩯&٫WJԤFC1[?\i-nX?Hʅ ?~5*7A~4EZ"d | |fώtOni;,Su=, n9y\*v!c% lV̗8 %lҘw{!Ӛ ߉ $^~\xJ8syaZ)3dzo$;|�I$ 5}<j㞙'O) yO\xypSX:1%\(K(>>9r8U~cU)Ue:4G-;H:,"UONR$U/ZgRu.#βI1o@ߣmI]U5*S3{1w[3:.ȶshpA˔w9"L-+k|NjP}R+ Zyj!KjxEl193>Һތ 8l(It -/Ns ꝶ s@*$1D>K`Hrh_b/4lAx}l0"X@ `+K#�9QFNzVZf_ <DSpN:-i~{~97Gl"GchfJwl:/B _ԁܹ@^Ta>%onhpH8N$A_IPAR cdl|CgIGBƫ4.Uf;#[24T99kq\1f`U%I}ﻕ)_L LS;XP{o#eGhZv]c)r{"hUH<fi; mYoV` UlC|kч28'AsG ܊{<=[0,PxRl53G^R789fsZ F#`]9Phx9t ~"Qg .aYGuKÂwL%լnvlԗgn]y,Y@� n>)v mX!''Z˜u[5~8m<d I"ɟ.zCi1iݥ>uAA\]aX%)Xb/T"35-hJqz` f]I -Z.)KԜEvk% Q*\yxk Uώ^Et�%~7alA+cG{ (;'UѱAYbBdV7fw-0T}n;RI7QSʥ6&ae DŽ1?X)5/-nH>׋{zovTF:+ YR i/J& 6XC>%XuCLhcVR7'C( 3@B !2]KSpuO` ?wL̛Hc|3"g ELj/sP W}`$C1/ޡSccp\;8m:j8J+F@k7r)˔fC,-A=$ SYs_t-VXGOJ|HxZ(36oH/ X\Q3{{\9+AooRJYCOº[׮fGm)YrK1'lTҼ/0BV>p&KS,v)o'G] tqs!9(78|B½q3j*`S<ry=aЀV;<7zs`PXn4nx(Oއм"W'է(-\f x76VmIh�4WqM3|c8'p>KjxH_@|Oۻ+ٯ<\�.蟈gC穀ܹ SEz')+mx,y"�'`^QG9Q'`;75L>[>f*F0{ðvcp#H4G}\r>IuLVi87衇F0_h ǡ%Wf K`1HIS<kvʁPKq  |i:8 :وCAT?] j?ڵ_p.o^~4?0-4hv׿ ڇP+/z*m[d wh%,ElwXm\"I8S芞]Oë({ !ٽ8Ck4Fe =+ տ?  &XZn9YsL~b᱊'XKN\f#Vl5t^ ۄ*$6{O cF?LfGU 체 &'wlru i 3^ة9nي\<tk*gބMmiRJC}OHg9_2-we3PH%YOΏATl`G'icQ X(qe#۾HAxwqW 9<&^pLŸgX_q{�p<jEAHEJ!�\WxV)/3":eA\bߍo-2풗Cn\|:֣;,@)W e+vWgp@T9 lf]Q IR(&e;HGUjUi2;?+a,�ted�Ck9IyEr?g$ÂU_by{-tکtZ5�c(w*{1HH gw-yM~k7)Ԁ3anE)է?Bҗ1O@,bGF"\;?sgJQ+1 tX h)n& f2O`5IFjs8�U׷U[ OE3'RD#-g2aؑЦib,V\WQvŽS;kݼ֝{! eØoV:ʯG? O@Pȓ 5G|0y|G/`Eݨ0ecyE,V*殻nLj>+f6ǎ[zӾvwl=�ɫ GE sn]Mit(d\j]Y|«aC�K<_M('D F'- nuu7By v3Oq> G6KA )l[TP%xkIwRg~ /#Լ \˚.^^ J&Lr<ڨA&<Sq TI9#FrJN% \gr0͡SUrs~_tNG6)!b1H݈̫zkx6������Nkvjnxһ̫zkx6������N̫zB^Bz̀%O>uE Ҳ%{V{w{>5<;.w r=g]GiH p< Z~ZNdt^1Szg>Exd3)3'c1>g;=i!?ZMn^@)0eܾGM .Pд諄jϓ6 ۯZ7P'v[BoԈ:ֽ-RjO!GЬ0ʖVB(*;$s hWpWSB(5L^75Ԍh*eZhYFP6ظ1_sս(Jƞ#67ee,A˦#ܧ[ oa}c,쬪&R@(@߅4P Ly^a,FwXy#N`8<,@g>Ƴ2?U}Z( Y-R@`*Ⱦ~$*4'-X޺dʉW{^%*|ȏ#o]cYWЛi^>X:_>dKs0 ������:seb&f>4j?_>dKs0 ������:sqM8pmZNAHV3m߄N ʓ <*iw&rYL;zǡ;wow:ezQWB'GZ xE<D Dݷ H&a�$!S[ i,×0vi4H1}VKك(P .P囩J0O J̬DrtdzHpC0Jk}z=TM? o 36@H]aā'UV)xkE_&M'.,r󈢑]py�KC(^3COsp+Hi@.dDLF٠՘g[LB'Z8֜opfxCxmzV$ e4BT~Z eAc;(Ԡvɠ(O?#f8K62xM+~)O`rDm pρ%D8OL.?W|\?T~RT -̿h$R3W-H[ ;Sk 6`*f5WSb@1ŲmAsg Bؗ@QeKv2oRCOU XANYasѽ0r!)FbH \O[kLȅ#ch|p9;/Qwz|,N Z[&(6,oCǚY9_0͞⪯ۿ0b�OJ0d ĊTV <+m�l<Y-Z;W�u"<tj&]ϔhx-u+%XT\lfp7OSG0(Vy 6/0,̠ہ68E(�yLpl+>4:_U_]v}Cs^gDDnSN�ic08����� jP ���ftypjp2 ����jp2 ���Ojp2h���ihdr������������colr��������"cdef��������������������[jp2cOQ�2�������������������������������R� �����\�@@HHPHHPHHPHHPHHP� �����S� ��]�@@HHPHHPHHPHHPHHPS� ��]�@@HHPHHPHHPHHPHHPS� ��]�@@HHPHHPHHPHHPHHPyp?(HdC<%O{''ʶM+'~,9-^Ղ-Ka͵Gz@B"_tTYpPnӥ,F+rh.xp}cZq,1xzPyq+ cmJx�@ W\Ӓ]bv1ShC6bRP~GN*сE-b4Gz0ݲ4rη3C5|,x#$g"y 8@0QY1 7+xeGϼ}FikWmHC!dkfp, H # qdPߩa4/W6n[KԺU ɳBt+?ݠlJ^P<+_Jh�=|и]HXO(r-p L\j9%nOWϼ} |p ;1[榵/敚x *8L4u?md "U;aro?kLD/]våU nLd[g1`Wf<i "]*|=Z &_ܢuwn1=MܗiSH4My.QoQC5s_ozf;ϼ}� @~u>kTl Sb>YcyQ\Owj|x=D7EtM1~2/Qf�Z'Ѷ?yvᷛ@ir+1%*|=Z;a\i7$#j JbE%CkV`QyL&cc ϵϼz}+vJI`�G#jų? 7Z%R%:G]osiEb6%w_0ɈVy~@HW;Ͼ*eb$&,.Qݮn^%KCl*B<T&ŷ<f6%Wy> pL s`NLESB^FkWbmr*6,qIzfH6e3V%tQ[ !h<7Ir*޳+aZ@rdhAwyg;!*y?W(& 8f-P?z >VR(iïMj3+.UtZf[) 9¶2XZ/e]4 7aO K zbѦU|}߆ewg4;)U<_z:C?#iW({*Emd <ǐ+?sL4̿A3Z\ 8E4Ks�$`y9nP8t/Ri6] ƆAfo"Yf:(,sl\y o!cɷA)WkE�V3ӥ~*$Xza, 7¾̏.B BUXDk{SG|�"UoDu)?i ݼA0VNr6.̭Ja:cĞa�۽w%o1B/Tuk?]ic yڑ"UNAN'sA7^t¬A' ʫܹ%s•D~"Oi\/% ẗ4e ^)Cmq gtg!?OS^̧/4@Kۖ[otIƃt B[8Fw\BϩHa_x ~JVOE/4SrE3v;LQN\߫,m5H dU}�=dm ,VO*xR]oNܐk%(;{{ɾX%?M~XdEHܘo'1sXA t)O%+4u x0$K4 'ӤoAG:p +IJAmo{(ٳq!xDwGQ.c8pS'c[y92Jck|C5RMaD׽.Fa"h+k 04o?¿-P-^v</!3>Oj<ve u؊ IJ)[̎Dl|M8Zw�)%Э_ euOsCA}` fNP:!Q=)rWw^S].TۖT3 u6NetՄn޺ȩ Z' iLH +Avsh^2.C]܉Η#-y�_2R?u`۟U@$#za$é98Ktuv>O%C_bӫ~V^ 13wɳ�FMSgA \LPhrh >`ZZW ,y5TVFIFJU=W<RI)2 ֦e!a͗� I8,w �3`/!\״[+l{bZwY?%RD=MuX3v2Vme Ș=W0!>PN/*l4)rmc6Dk[&Py1*^<Q^ZHn@ᮊI2 .?ߚG|` ^{HWx 2ޤAfko;ӞmWXTGj=:~;"u{S\W,(Zq 9Пx*-eK1E#&4:5HwhʡPrw8S-OT,$9~Ձ&͉jNٗ Ơ. ? @ނ+Kf\9ngfVISC/2BԚ>xO G_uݘ6Hy$L+J{$=/񂐼K/J# P;ҳ#}{kX絖�]ξA)*o&!)>hYkú Ce9Ae.GqW2ԫOUn:Yx$<1gw3-؁ {uGCNRwI�;\*7@8jNJ9(+$!e Q7]O @RΖn#plJ1jÖ'v CրղxvWleNAM3\8| pa3FyT쒿 _3"x1j]6B9(J&jc5 ]cR|[zO�UBcwKJżaWHn- 72eoM9ݷ~F 6m/#T)thp2]~9 VfNIB ?%eB͎_@*4JGKU3;9\AF'[Ibci֚rWPt/ xt'z_o8ͅ4I{h ^P[63o6B|t4*�\?-w�8:`;gRd_;Sl:rB#v13C B\x*Axܿ<DrQnQ�呃$< OVsk%oCp=™\u ?8f鯷Qw]{S݇7 Xsr@֏l$`,YBo?D">{}c(E@od10s+#@XH-o$)Y o BfU[YHK sR V2 TTu.D} uV wu<Q*cR)vk^v{9zVgi| Hl ht-in8UcBvXne7�& Гkp`u^-&d#͎:U0ף R^G9 4'oglR\4+]yձfQ  'OVDByJ@6DvszBh~) ~G f$'^.yfiF O OCuuw=Vxa!5؉~@g_dPUՇ4~4/r%yސPY/ɒ0?%2`[า4>0FiOGۖvwm:`mR;<+v%:}Ayx3buA߼my$L$>=]Nb|B.Y UGh@.g+GQ?Bx$;m_z2lFJy&h"u!"v�"z8s;gCpy$xR%oxuni5ם,-gOyTFTU1邕T 7ʹ8}5d.kvcmn{z-:uWc]Љ}쬗ʏQx[;@+%ּV\4Bxg`H&y-]G>~E,4]S@Nfrrmd(@^J)V~YX"S؜ŖVuB_+! S`)MsgV8uKt:ht:TYU<7w#jBIi.5vgKn󷖅`f6 (hm7MFqy(&Cm-$d3='G ܕ}Ԅj^9K S6}NtE|oȶpF9-Ehemd.9`"jfM>9{ (Pog*CCy5 !DTۿQHjnNLbjmT~(cjsʪ> љCL ~S*$;hkׂ'g2-@^<YymҰsmdq D8>/gBBvE3XdžȥߵK 'U>>dlYˆi}8GctO +e 'm@ `Ds-RQ/K!$<|2E+,y_.IIaY"w\>]66RhV6?!ibۻhr/F|QOC1!̲ #NY[`VGUeW|[|WbPKK_kRen^Tik_e#&+7|}rO 򘕗'5(}La'dVHn~KnĆ˓MtB]כI>̵N %74.[ˁQe"@{Q=W"~ )R-zS͉{'# \SZj: !}#\2a@YrOib?D\pp!Qdm_yM-DJawO 4&+IqۜRZ ̪Yzkl2:RՊke9˜)g|lNn!7N=2�:7ܡ9[g[c4%ݲW2tBV?/ =}Lr6|\]+"pe֤MvOq4C 6Sݡع>v-[ ́oj_LIàIL~nxVs6iy&I�DWqF&U@\ɕ e4oJd<? "zLS4"$~@% ػ#ƪxZrNO8d۴vkĞ P[jz8aТ(ΏovͰ%< Ӿ PWn| 4Cj"s(}pZ|*x!R7OMHiKeZX*H0krSռ0l15{aA ze&?ʩL%rE %tttZbMӈ./{I4(/JށV_xOxl]<# HOM:ll8}w)&$It2yXwE몴oi�JDJFp4^qͳ%1 I`]e'HE^^8zϝj'hqlXGΰ~8۷8OFf֔,C#< 5O=u;t-Ѡ`?/H6f0Hf"($E !1]j vL5QA }؃J) d؆\A_8cK ײNvRxR8P?e] *z#a՝$a\`_ ~EVD8s/a0蒨>yo8%6h dNi٨JًT$ ňE1"|CooZ@`N KfTP|7ÁCg(7- d#&tE޹hrh$"HO\ ,O hZOhE1RuXj1Vvԥ_EP x)}@-|c[t³@Ubũ-jinssYx\*-st鯯Zﮛ/!`_(Ի1v΀HW;i?"n;GɴDM-y̽A}۶=Cb 5(uU;{qJxhN1Ewh+?a& ZiҚlK '^DŽhvYɕݴ+DdCP-Z<够u&9lA6>_�MG,д7o9+ϵ{!ݐ)b{I7zɴc^; A-=qtF�wp r4[.O+s2L} n]R n 8ya`Xv^jA؎$*$#m;4 + zk v‚Ls+\.`$6W(.H̫9HY˫H68m~Ξȼ<ʋ9CSK `&YWY; v|+}Y**{ܶ�fQ%)Gy6%&AݒӀl )?Zz<ŘM_ߝc? ?a1C7K+=_iF-Y~ ZP1Zs sYQBߜz IuA91/{ AY '6u,VQVoʹ]a7V!xЏ-h+<gR<+Zã:"PO9%4 w% zU4EP!1\CbB]ĐA `fTBwFw)Xv{8do$fLf8o*^H#O (^'r@<KWúwx㐙E*T?kFLgi)fq $C 3]_эqO}sGM+ (YBOkW/1ak@KyZ5Ne3=؂jk%1HtKft2~[*4*uqZٓ#1`S%?-ObNbdIі>E;#߷B9RZJ[W`࿮X0hM-a{~t=V̦b#jHQ+KV}:lc\R2V/+ d}싒&>$S1G'~l|%!aXNP_ ˶=Zܻqqr>tOo|[OߚN,9y'X^[خΙՇ!(B8oBZ83 g޺^tAD:o =H̥Oq"+YiQ"A_JJt^e7m;tck�)P<$(�ix`upfȮV S9f&8 (w2s$֔A I1Rk86ic x8R)/cerm{6!ldN@{X*VHb$vnG#}BX;ʲrD?gv();fk`KmKxƸ`br(VhKPraBS!|zܞ�BY e=[Z 'n;a[q6w7K|597LY�嚱~= ؟'Y>#,L+ IiTqPR#%4}1[!tAWA#E7Ms{EJDu9dIElmFUҘw4*7P*MDi!G ~ 38l޷?#Pv*+YN3-#Y2ʓUjGU$Ⱦ\LjOqJmF!}JXՒew�InAjsѸsXHZ<'JWyxw?YƱ#~]>KAa?^tk�+|wjN t,-ꎪdžC1y #HlwUc[}/�6_%GJ/f'wsŒq9 4^V&1E%9!F T'zVs Umߨ̕3V>r,k*TJgρt+n %ֹ`rw/Kx74) \B?i)y!X:E"㥤җܐoG$1QC+a%^*} 6c`${"\#2@F=EHD4zy>OVDžOټM2^j'9~1(7Rn_9F@Ύ4kiB¼i_%29+8!"3~-SzF,#34< 2T�U'ېdJ��exqmr k؍ěA}X SL|JԼcOg,CvxczZ}"&PS[\MU)Q %ts /wؓXOkX?CUa!mE8^db=̔""/4yT$l /[L{ȶ o/C,KSCےgwz%J٘]hs*Td>ؓ7a54-:2\$f Ԝc$b}(؋Љ<;ݵLC b?YWnrJc ī0w78%ubiSTV\!ݥQ6z)h㛅7EhAw@O*ax`pFⵓ' Q34dX-/ =!o3wk]VBJD b]n&tFy\Sðh 斫V|z*0c(T#�MPI*ZӢ[PU;_n(ٽ_JRbgĘ%N&-?yÃ~^&BuQJ dkoLt쫘Ɇ..Bp|@v~.K0`*eHx>u姳뚝$SM|A&&0Iu~}UIljs5:z2&5Q/:3کb֔'c2+DGx@#4`[VYF91̧4zz9>Oؒ3CF_X&{ScLKkk6TANP, %ؚMzs|1.9}Jź, T韰ɷS'ۥ:Y t2R2DO|*P`g>˟U} Id䦺&k]W5A4t..ݧ /JXru(ÃNBbIFn8/6,6ɽ3ΈL|W<27P %AUy^5(22"/0v]6m:y*lR9kC bMlmhwygW&i(&n̑5(`ܑ7ۀv0ü fgnfb'/-[\0:_3.i@ ~r܅x^ꢍvw#A0::25ݮP U14'ȴ9ř>i=J;{:AdA >( N>O;i|%,bl�KMz1gv*AoST*eiٝ8]fմ2"ktty'X<ɞ[v~׷Gq5YI%Lǯ!N܆@_%�\>H%LΥ;!d\Sm2*fU>'H\)Ïj燍*oH^<i7~цשe tcSki b8\Ly}rySnɞP '�hM&#ŢX jHG7]={Wh%]m}XCZ`w,i.ŏ1tavyyl,FGM!A\]P$7d(lVkVFf;IvFcSDžMʬcHjQFLꉕnQy$]iIT s]-, cŊU1M{3Kj1bd}bx VkxB:lKǃ~ 7=;#wR-E7^rbfOK ]O0LTOHCP./Ο [>SsXq-֜nYMkEoɲґD�7gÆ9'LlSRo~�~YGwo5.Ik%X`o k0 Q+!fu%f%bb̆.Լ;Y&ҖyV9Fْ7}J||qk`I C;\@sDpI( ADd8c !`=ؒpԌ.4f` OD瓸!Pf/<KyN`Rk T}!.I<#xNlճqS .KT�v@{ԃ[pd1{E$vzXx_Zb9 Wz(dUtL4ls_D<7z  ] h͉!5ޘyKζo]1JP_7 OZlhrdZ[�I>*G/@L1Tm{}U4钓�#2C0"u?FE"_'aD_j߼%*uL wTCV�u*{ * }& M\ɲb՗1XV�L{Fޯ?Uˁ5<+{&mUN;!4<APAwJ=넅y9-vxYwڐ?#&FЃ;^F"̨J/K% )`�&suĤ<H$]ˀnꖋ+̓^!a+F_4/Ka>" 1:�&tA\òݹK0JKG'ݵ,g x4k;-<%őqN(Bӥ˵ :`;qF g"UM] I8i�xlu1A}YYa R6b1ڽ+VJՁrkpiI wcT8_e~_:M1Lqሎ̠/]h D_lici+uCˣԳS R*&=p#X:>jۼQ23 6d3|iކ_ov՞?T̳28xBirQb'�<%1*y[01'K4/@"pA7,J,b?Z||8MXdl$@ ε`OAfJ}0vLnvg2zy P5sw\nT ~iT_f # ^lƱ7A}UT i<2 rg* #%xa5i[Tҏ>薫<M7sEh1k8LK"d0B;�og~#l[SUg)#@r+QcH]󈚼z@>i1('^OY,{Ռ0 .Kl8T# :7Xd/mO\ ujd '.'jQ݆oܨ&S}|fΓttIF!<DК pI:!ž-F RS4%y n$/0~DƓL1k*`ҀEvPsS]݀=D^s%7ENԈ\/oYp7�- u@! o2- \T X zp?tv{3)r졄&A(n+WB007yLB"g iڛNHTJn^Z PGnk NKzaGʊJ} |38Ԏ2t]�WmqU4@zII_<H8ď:/_6ӄo@8/s&u�Kz3RWIjbD!}aWA֌!wHJs"::np݈zf,񠱠J™[ q!8sFó n̒AeݗT>tUXp)flsx~ &M!$j6:{H.F'q ƈ 2b2?iPZFECUj:Q"CrǪz!&kMųU!G63c H!Z>m`mhV e rOq_^Z3HqHOl⡽,�9Dz {wEny%ɡ< !?,'O2b07�7 ˟+a񤸢)oþomFb~,oP&Ϻ/)0rt>}m,]~II5!,8:Xi`C�8 B{;ǩ@J$'8j& rg<Kui{#iʵQ/u}M5/sF,Z1% cp/27?7C2(_`Zo@҉pQlTSU\%ѡk2"ԇnIW,MzS\n!N8MyBOϒ3O.2^"]tuM fRbKbY=oZ!B-$#-( >zºRפ#fQcc>]�gR/wHC- tDLzQ3U&en׽-f9kpJ7kųQ#]o) a c8<<]=;܂:5񐂒‡2E9"YU%WCŹӥOؚk+O H.5H'"L[G^'75<dh*4^zN(t GĹ\x\y[d^^IF+#ͯ2\5?I29R@xb+^G1߷FyOӤ+ bvyIZ޺́1IM1#j떮?X84#y-n+iO٩wY\<%'[MSoA1 fLە6f̋I$2zl(L:uD!]„H0jop9xY_5$:zF}4{=[TV5=YN;Oۏc2u9d4<k("Z9ͷ=.2-n]A+i>ʽʥD+WA*Tzmgx)KA|3v$ߝo~}Iu 8tSX8I?е;V2,6:[](#l|t!oWqoTYw}p9|Z4�s#eأOi�srOq'j_b;"aLj&D4f2%jnԌ8njL\ rQ~u*TxS|7Jnc \t+>K0гC&rd^OVsTk-+"aeP;9%8ǼG_ FʭA >l3 ;K(nO 4Qqk1'nJ TC_R-DY ʢb}E!w{QzFƺ91{<}LqTʦD!%zSr_9AmIs2nV)J4vKiFw &nQ "w"sR&3޾١#rĠ' @ܱ5}9/fzoxCy/;S/SUrF'CwZ6~x;񥄔n άbv[u5QVzz1:?w 2X㥬Һb_oцƓXfDOS #zBSHݖ~!֏0DaV"B'~!l/놾GVRدҼr]ۚj~ .P6 n!R ט!0Ϲw%R/'UO@$š< T�D>!ꏼ-%cكC M=+n#K~@b;2_&c7kYl:gi Py%Th3{MX<i;sta DX \{'-dw—Kb8Rq.ɭ ?yl}2EF46�D'CEoߤG>g8BG&fVM|Z+& a s Z21nnَfT�6AHUQ3d(Ȼ2hiL,ϻ| [Mq!t2EqL?LލqIltЋ Vh3G-^|`@8?NQ9E[Zi.=Yε`OAfJýFz@.<Z6USb%jU2D"Ciܞ%~#sVrYqmϕJi[3r&n�Tb p6'T½*K $pB4кT1 Ho~,g!Tb(.<x͝eD%~vόJF$Eo!j~Cُ!7nnSΘZp%EH<MvȡҜ0TI~AmQgS2>4!x]I}cy`dǰZ\v4]FQO1 W~Jpc�uHA#n<1~嶊¸CQTb@^= - vkΧktsEe#7ֈpw\VѫʂGEWX(}HRsoY|^vjKO+Xt$7c4c:B<{"DJY!_N十?AY|Zd]<? cװcRr gDG;N{zWkP>:"wgoԺ#Ҵho GHT9 ?S :.M&wfڤGnVofɍZ.A5"?kN/YC]XR9 7'k4rᴒS{x$5d~& ’D&EبH{mfU3ZCQBS9~<6TPG6FO.S (pq PWe()^gb3#8j6(فW7_klDGQ5 ڟ~A3yX!moR> 6:N c d؅;�KX~D\ȥc~- ϲ+"Q]~t,Ul۹p4D2@ n`wCT wNp{ocT)у<S=ߨ8`M4lMk՛wkn"-\_dʳY#X޲u-Y.D5w%].Pe~o{=re@oQӏ5\"]Zj; h5g4H5sp?N`<&Q<hq1p)^erğ7x]K)8p>B'πy+H Mm"pd4n ~ՃAJ[A&+ /stVNBy.iu]>pQQC՘,_7@W=!T#QN/( ٫.ÑS+տPR)/="s"l.3\vPD[s#Xwৈʄ黍:3`~ňZYbx UD͒FV# ^c'Sѯ,je:ѧ: ґnxȉEpȻ\WCaFv\LvhSkdsL0:`DKE \@a'-קo@--DcdZy&Hܷj#^T\{h:5~꨸BL_0E+|jw83ԇp�]3AV2H2-L3 ;nxBǛ1,v"1W>fu}*E6Poނ! ̓='5<~krR�iZ3&/e:+H�'O9r M#'wLV]7R''SrJmr챩*[ Ġ|.+)b`f) uf<HO]ϒBzg AP߼Hu4<sPUi^兎 Q6I,n?d]Gi#o`.S8vW!/kL;r.ZPq;5;IZjYR?UI:P HvH?${{h !&ꈘCT]56Yz߰S1j-{4:G6R5LxA W[˷+O8iiϜ1$-f�$vc]Ȇϝ٫�Pl]YD�o٘<If%Ut4DН 0ݳm'-iDsbZQHDf\p7 f)j,2j2_$e;H#ݚ,{塝~O}`q6 ^HfK"NFX쌏P#R i??VMs7Cw35\^Yr4X];oSgLg3I[L-B2$KW6oYPjYa}Uᮁs,6otq'p@*߿ʬEBy=30bF;3X FA&ֵ䏴"ӯb',2Z;b|5 j q <ߺtKUG$p:!wtpgٽy*wOEp5'1cӏz=5EMax M4`IWWPԶ)w<}+.wz+,ӵSAJrXd1-�Yli{נs7p3ps\Gr==$B6@Sぎֹ0:MvF{8;ٱ7jPKͶ\p[f]`N"Fx|w 4=7L#!Nܐ!GgtDTܡ +QOW/i9ByxNZ\)FǞ6uP==>H揘Mjg֞Јt�'L?,:,d#K@:g8up^XԬX,䥱sb)ih/[;^I'/(sm9+z>ާqz[RޏoJ}n뀹YǴ^.ֹ5}Vxcgߙw١p oű82䜡9_KJ RRrK;z> ēe{e>cG6lιb7Au(OUt]LiFr%j0i6'ItAqpݭ6$=[&[DIYN7nz c)A6ֽR}D YD>hmqrHv(ܘT3{<Znua/uݳIE7|tt%ۍ`!ۭGpεEo-ujʡPbTd6~1v8Q0Q83gvPcLӃrJ@%z#'!%Bvt;m0s J{Umi`s\J*%ܗd}KP:.nkk/P~Ɋ; Iګ"?WER狿 8wE񻛅Ϫo'bC6�mK]EYmqb#cbE4F#Nes*$E^+t.Ud6+="k0jmu.Hĥs{aIΰ~wo dˆ>=wb5q*[D0{A#"Uf&5aQ/gIx/,܄z+O" ze03USsbdݼpMGXgr<Y7 3;>l\F] ;>pfiqAR%j~Cfif6ʔQ{dN"*Pp�y6Qp#;fuNhҼpFeP!#%'D2t8) _!8[cmz.b ĔF/�*How*Mj1#L�1SR_!8N tb8YV ѵZzAYO4qIjzJ,dGǁg0}1FPK r <jRҰrN3%!n"lYUl72|1GLBpOsƝZO\ 9?X#T^mהp~1|&,֞+xB3O9FGfd*{:%'.NcAw4+Nl@ lx> 8{hEZo 1DJ{$l 4b&7[ 1tX@Gʊ`_n{U%_h&ިoOikq$s,'XO/AN:c? 'B'$p}*p{@N&/F8܃ti5`"~܊O!nWBM,aS  fzHGy<NozW^ ;+Էg֎o$T.Z&9kmű�mg~.3w8+ V\ A܍XsD)Utl: U?TWo#R4iįw(4൙^"[K5, b65תti<+Л@Z~9kqGmhu"l.,}Լ:Ѡ;MRG>|CO<wM4dxAx!!>L:P~AlKj(J?$cM?%Jх(U{a!s7y~I*cvJeҖf:+$bH[XXdr`@7(#0'I Q:O{^ʆo&N7$tBM)ŵ͂@<[&Pt0-u<bl鶴C&n M5ri4\0b|x@W1<9xe.dTbN9s,Jzrs tk.%N+Yl@aR6D?Bg6Ibvk"w}dh  7{1Ulj# W$ٿfM ΓKOv@E +Z!vTʏ\|Bd_m[Gܗ@#,N :A>l9ˉ>= *PspXUNW2"~7FoO-(њʠؔ6=T^*V[Ÿr*cň7NmfJas=PqKϾ}agt|1j}en]Lt88}~V\e f:ZZD<|SrU@)g *MĀǧNzwK"-J0oCy6gtQDRyߺBҍFV#tJ.>(G)p5s i2Kllީi:jiF0+] %fmc"] d%E˒-ipCl,ݣsH==LxV%"٘9"녟 2<AfWYlN1Ǝz,&&.~9iOY =֥ؓj!2砚.5GIL.2tw'ivui_Ghh-e~}*P(p 9A[;Bh:SL#3H75H'ۑ{ۉֳn(!߿6=A 9BQx[`vC|Q!(܌ /em'Z: :sXdsggzb%5I _~aQ+B"N¾wu`̕Гixd :&LRN|Xˬ xHչP˦t_X9dX= Y?<Ƹ;2ps;ԙBvhnL=Tɰs<DjSWלz:U3 |4FdLEq  cy\r@8L{H\TiP.E}o:W6+nVyI*RD Ȉ9:kƇN:-A_Ig҉v*70K\*$phf8 7]9|\RBgj~Y"f\>)<U3[԰ȀX_ w}_,j7S#y8ێN9vח,R:[䭛WbX dhEG}bPd i[_z϶]"`m"t:?h0Mv;w67Cw 'G.!G;h1F>Z *y18v_z1_< qܗ K;�$L^Y@{dN8ʈ0<,?@Ȧ0Cˈ|DOHWbĘ+}v h@ei:JM"9dWx9+-v>ZP&Ag7ݗû=bCM4W a܏,L#DZoRi6!w7}=؞]G{8, 6dubmaޞr)}[qvNt0Ҙ\'{$n Eŝ7e(~>E#/t_c=4 \i$�}!+<buy$ڔeYCb8"$zLRVpPMrAWxOM$t [07$ˁN|AfDvfnS+Ng|*UJ>r󟐑#?..#:*^^GAø\q=dqjWD9aĩ��o4pL2<�=0-As6 W+Ep/Zї~ڹtd9@ ɺGUمj]")]WkD:8LD@n-Bo @\) 5R��m`d= C[0qc@cf}:ܰ_(]$9W `]c%xma h,kVii[{;c͸|<ŭa-爣㸇nC i-˛|D!=4]2 QG]];BlύaEa_W@lmU"Jd3t+˔S}6#amZ"8^k$~sO}+0= ( ~f+58ܘFnja _ߓm<Ju(Z|~<#I$ 1mҨߥww'H6ۏ>GØ+Y@lJ, -@CzZ߲;N2s $)6K^,WX/7.{H|F-�:F/lL./(rY:(i=DCi=zf;aĚ&!a@[z[4( :zLZv+hKzٶKquz*JΨj<pǖ~ THufƪ(7EJdw4!k>H*z~ (H�hNU O Ϙջ -*S+6:ҋ*+s?J9L uj*մN0yyPv3 ,J~cB#T7$29Qye=~B7#%)TchU‘ IF{@R}!|k}ʴ5S#fYwzrԓ 2%:{]E섶H-0<?) MnxwCP7h7ün_q,&T,&.dccć&W퀧0[ (p|A i ,$Mf8(=>"gC^4i;ne9@ !.8vP&u<x+hY/89`E!hle %S:۔̨x,�LUm&횹Gt~$+C]opZɛ( ˠXa; ,5q MpB5drv ``EO8Ө(tDYsUycBo=hz~Oq!܀}دQ\b;`VO к_x.RioX}ވ߉YuAԣxӂ} b<!Uj<T[`-ub QSѶ,~ Ϭ-2E$TCP49[Nߑe f_W>^1LW9$iJx1-aS2&ZdAiY]>WZ˽1s'j_9Uļ~+q@b`jHɿ :GQf btOYN W_.8GWq&wؐ0e#ޘǧKb:yhyzwЭ18? %DK$GW~dc] <`fj�S̀Y@; GQ6`C! m'$1%XY1g?SK6qhP `6г=gcT'h)jA>7>^Uf>G~6Mz/>ᰃ_;B\a)~vv:OPf"$OhGNwoQ0|k͚;=0I^ 3gueEZb󂛹\Q.AIsBXvߤ2-Ny ;0pO7`74MԶ3mUX]]|c.3BHL&#>\'6gKqy~d#aP=> �>pewZ2|<[pin[ ͯ}uNwj-: 8_k>]n BBj�nJUrR�1М$;S:tF�mjS!]ß]b&dAX B/  v�\tl<;32v/UvZn9o�!F5Lr=v=7KW3[]3|ylcX?3"w?w%toyu<ߙGQfgňàKa-M.aS郡[ ZI"ܶkk5X` f}YS8jN"<T!R8ITӓ2F9ŇjmEfy595O5dc.tt؉qQaۓWOǕ 5Rb V=b u90^DXlϬYF"rxf)_Uj0&_8K^n1>~NXϠHBRGݞNά> HNBBc~hLq IzPdAgHP %>$ mI˔ 8e=-jjt 0j S; ǷJ'q\;(*co`@@A<wcjb<OG*{BK E㿍dmrcOiwò#dSOxdfndj^]Q__ Gj 'Π)e\$!~9uBd?1p).jt"`bgno[׫f[+dLڌ0GwRMk&*xSI qӈu # KYsMB`ɈFN~uLԕ K. i*H_SjEGLqX r<^z+؜D@Fܶ1bDšZ47Ho9ѱ[zErn/24w>fwzS@G/󠘾.:�$E\h$EݎOa DZt?Jݥ J `*yKzT~ޑ1zU:~ޓ7wG 0BH!v 9zb9C&Ƙ-Y:깺PBG pg֚M2nL8߫,F }5%nu]VNҺtg.U>qbF=>ԝT31X~֥)6R$Oɞ0X!L1O{d$0|(WF4 y}/Qp[M z[xR&X'eEisc &s&&&<!:9+j'o>x4N5rl2PVSQ+�Ƃ($Ha|- Ĭ$g9?#ۈEIw J[5^PCT,RG<  ć ϳU wV\7]t/c6uD M !@wmgX>}lxIֵ;2 CPXHk00#p 8+L@ X48K*c#�TXW?[<l+_<D#?~I:'{O7_5({n-oIj>JjcLrIŮJ~9'b3qwpDj @FUGt?xZԲ'(6=+:2È!i 83N> sR i^KIKҺ~gLP%S 8V]FӶhqt}-#{#!k zFjAn+TSO+Hf*&!nr߸1sodge$,< ֹ'`\j`ԱXiVdn`r�= .j,c Fyj"[QN t+,sBK!@8O{=uZG߾;){|V)+D!D HO!C}Wնvт% \C/}3#PUL 7rn1,5BّكI;<uq&q\GƮXfyCɡnwXz}.қ$]~[M}xX*z_W sNF>$g9[grYbB%{ޔ15tFalkկEC -+&&# (<*_ƟCΥ*T*Id~@�WXW~OfXͳO ~a` 6H Ԕ.^DBӾHS=D7K t4Ν@zi̖ 3E& GQe|y;-[zrF' >mB5u@X.._3Dq 7J>~W"v[nR&^UҜYuƱ)wvcPKf6uLr;HsAk)j.xZŰ.vO$4(fpz`-&`.@1FW8.͵⼳ iwM<v'ZK }HJlp$q dt�M.wǁ^*[5�TS.cf> \~͖<N-Y(s#Kw~j&Z]qO!`$ !bFfsCyr2㵗uP{� ~bꙸ+)#:/9L-54XI$ٹ\,pFHbnr!5jKʸлY5ㄱQ`2PZý|oJmvu&[Ss 'PX1% C_ IQ�ݎ?a BpXyhMp"#'c1HyaIz&Ŵ|?oc=qcpRR^_`,聯~b{M65Q-wrR6ʦ VԊGȊ&U>ev ʞ^;$FzMܒHp ҽ$Iv gL�n NV}PI9;);#6:Zib'{(o_eF@07PK^kD#k8_bҌA)moۂyN#gFDoaNTiJѾ{6 4|,Ծ{b7j m ~Uό3_?jny G7h}fDQ�;eHJy^]`!! JF4f@͌ypNZby%02/n΢Nd7T |@HPXe,CdyzqݞF܆;3:fи ):&S3)rGu!w*6cK HIRVt?@ioz\.cŗɹdT[6\20;/x2ob>3Z)$n;`lȄ_McSԠ~|:Qegi2_G`)Li%)q*E쎽٣\>W\\2 Zpi2/աBgb=E$L]-xkQ_W>s ,TSӋE<ղf))êכgu&0D/S u AWdqbn&(2?Uqj`V :I)'n:ks 2k姆/;&u?Tʂ|u dp% :*�%*k"ofӡ0oiz慄̪DC tKai/ qg97_*sU Aؙ(NӒqcrp})C93)p&?` gOhRɫF85paDSLOS,ں40�`|NKVIy&` EܗҞ!P%FཊWM'3e{hTí" ġǽwz&7U"NRybO�yY R-n/Y {8dm( g*eB(G@M`6zIOL!M8>V:6*z1tO{o=A�]}'6<Ԃ~u 9OT`)uf}ٱ*ԣCw!/q/Cv;Y/Ă}?鐀Z7eFV*վ6b f"pRv�1M$n ڜ լm"e# n-ӱҼ:Q|c {lfjsbעLk Фäj/GchBg&ub΂DEdF%L^r&oS?~ '.pszgh͞97Qx"h({J1@JGg/DdTMC9_oU=rIC֑ʾ֟URm ~s{rjiiCuUaZ#WjPG913 a$0-h9wt5\Ah" "5᥶Ȩ2r+ @a7(/y -c6e%~ 1c Y�'r*b,yKn͛urծj댠4%\FW[�r^h(eĚA6lǰ msIR�4T ' w! m^Ơ ӜEwyd0w6y\J虐HPGE,GXϣ=#9ύsCW>fx3}TV ]ҡ.1PugbDҋE|ɟryro4Xقa7;2DGPlA~t Jkm/<j=E}9q5*G8>f!Yy6\%3102,ѣR_d �=HڠedeN Ha6%"hG用Ds]"ho:o~I1*YZuUkhJkv>kj`6(-E>%KODCkaeJ)YŨ{XAgr/JZw#D4RXÙz>Ga>JT!0bM-m�] drE7L;%XOH#G.NX}{a|>VRV*s0]໪<ono̸+WDk{NbtvJքqO!_"#ct [9k+NhjkmEzG2li;ֹTU}G'͈ҹCS_^=/&XLӞߗ'F;Љ7p-C%,^S#=F&]P$~ku&,帯Gn#*~@^l\K=:ZKfk:~EKCX{✃d n~%7B_)%ZW򑥿U;1id{_ECC8 ``6W^z\ >&]{ɱY`oEuӮv?(ppӵu[.8eqRŤ%JA$bԖejrH?ӑLDh%UP`4:S~t-FK^jwxoU}~)*QtLrk7ؔ`OJBPgh&tB2PcUJ~7j&Dָ1~3MJ݈+.E@=yQ}sv{f%OyFsWW&DzIv?I)eNSčyt'ʜXyk4Nżc0VX_&;SX8"Ydz@`&ky˹\އbS}(׊�O c"Fq== "_ /e|D%<[in 6$}.0copxW͡Zm�IǠICw ]fp�/?~']}I{S ɚe׸Oh9o拪gLq+NXO THyVN0Uf_vYw)P<Su3D+R-WjA͍U!IJbv^_ IUNEeBŽzVڹ3LP'W9850>>Kr NGϸ' ?kl~`e3qV]BQ#p-#D]blfduDd =,h||D @33IMƄ혯 z z"W>MHzxZg^DYYwO 8d+`a~`ThX *ϰT6CI3iNL@wL:cE̗v(4I4bp W Ŕ]5i{{hU[ qH>23фQ{O&$EHiv&'ƤT۠tV>);/ujWۆ_8ݺ(Xy HMf,�-R'*`5X^I~"BVq4(kAi5޵J_߭)VEOugNgd^g]O[7D\G(-6ᮞ0BG*Z iTGR -l}nȆxl@@~1.H]hP_vߦYI1e2m&PO嶑gʩ~Z8C�';/%q%gYeuy*E 񔦂ӡ+AV?$"ЦVSWC`$ Îh{@ۺ9tr}c|ojy]xDX8UĕO?ÓDqnz*?F2Iq.{m['ݳ=Gzc> hoJwXqA Icbsэnz�CU^I/~ۀyQ*XӐ l`6@ҿp-Ug6qz|?D)mokbsnΙ6RL,h-aGFЈy39Qb)TYWhsO:D*"{" ?Fr,~a=h츭lw9Oޗf?jZzN {7{?rq~Mkv1hL͜S`͑rtM+̼XX$_Z S`{'_5 otq%m#vA-ylaS: +0lpaI}WPsy$G,S A7ba7e!;< |;ŭ�0x7l[&Eꁂw *e'U,Yx")_άd<>8ⓍVEY#}S.$/Lӥ=~Bt1:,vB]xa'uSP5v@A5t =+<ZO$B7y9fA] oi@m~j|=`5KBWDzdas(v]3bS F|R,I7rE`ٓgzx>~KzIܯ۽rn� Hr HfmH"l=̧FJ@Ns0P:i�r/H07bRkDF; ҭ5#GOQgᰅ?ߏw茝}Aĉ`p^I~{8<։`]z�gWW")4 :1K1D <lvv  oRU:`~;(X|]:�78V4F=ZU4 - 7S9z9\<wZ!F~|g̎MO#:gkqR@`l02+Cnf#+xoAXo>,E‘0nfH/mi/Z+?['509\_~u1a&3b'zV7ҌCvN~y.<ر|aj=df+ [uitX2i"$s\N'tXngVg̍٩߷,M)&&Cڧ9G0U/<Er rMQ +-Ha?\a]0W;5)}<]H|n=SKQF!1#@<JxZԲ$৛.H(VTފ2\"tA?t7EBH,T (:GL11H`k#-x?j,w&h̹TŶ#i ˜͌x!ذi5m*(Awբȭ}@�gM 'R?Oex[Kf�ilGԖefu~Yd�Ś/ ]ŰrcܛDÏjop3'όn-w-)U8"SG~2.?e2íIznܢ4Qʃxށ/9xb ٠pTӐD))$2R_M޷v VxY^횷$V={ S\  }O쬔-+frHtq)[!̄D/Fn-D,Qy"CÛ/5l>d~\n}Ą3>Y7[f[!j/I=4ڛv'{jc2}IR6 [eo+5`$dEC ]+X_h"j! [--T!}aX<.,w"�rc2CEXsm7&0LSJw/~l-)M 1ǝn?9$<"$.|6ɴW hϔ�OsL r;3i~1@By-7~ i'W"YC&F-%͹;H/*}DFG* yd [ 6p9#yVTbIԊ`zSaDɖpD&=:h&1"P�|^ې^nC9ur&\zTOXwg�<BC,,ٱ$ 9B+]r<ݘ=TeG(lQy~NH`* x2A6KJH$%>Ϻi-SE@GnAS �Ƨ bK uT&yAjd}U&_#\rw\\~*TɨLLFQE' G+Qn+FAᱲCY ME&<x3:lw7 P[ kNA6j#J`-u,a\hjDZ6)ƖtKr] 6YވNTO94 xd]-O̵? p_Y3|AYQ*H_n%D Ej͗/6f+ H휂Y$(~Z'(1AY/x mWu eNjB}86ZDkP!ҩlҿh"/;סؙu`K).+jEO`^۟@Nyj:>Q*ĠF k3m }keETE{łGߧIV,MзUeU4Bi4| z/Lطk*5Q?Y-dQ(� %=+r'>ϳC4|<OߋG]�l!EMKk}%䵊TB/; &('MFTIe~j]?_3Ҹq)DAyת<}!:3w8 Oz&L+ y`sܦ,aB7H� Rj{6͂9do(̣ <蝴Cz7>-@#t{w(/lq(MTNa?^K]y9l=jd],`Hj䶂Gy raáӅILyPo_vr72*x(^g4ߓHLi `0чB5y۩:IL,!9#kQH|?0U"Q4\U#ꀁ�^3얊0 [!GKaqz\Kh^ [5F/RݱƳ&8皾ďUMӯђ7.8cXS5E}KZ΄@5|d%\̸NG 3ewˆ1lzfIMP>HMT]} KXfy^ /"?:F.~<@bsdn1 <f!gaamtE$.<xp#ɦ04e:$k >-&z(V_{o=A�]}'6 q XHNsVkcj0/t?Mʨ@ТAEKEQ۵Ab.8qoz9gxQm 3G:@n[=*Ĭ�Sl5<yU:Z3fkKjE 6^yoUq{~(|CT9Y~s>Rߤε" >eYujXac"0�%K(pK z*kH@ o7Vj&APO[eۢDTN|%@lu"(|�Rb͒Y5Ѩ1z֡olypSS[&cYJft]Z7 ~sSZO)Z=/d<]Xa1V+c0sxcZ ~oMP4aMcb5S5{ +R ^߹XTt'Sfsh83E$xyqG}圤[O� UZ3YdV#z,* fך\ndn"q!등͇ ʺKl[3%b,JH% Yu\W%<xb56`?SR n^<@2sf> J`Bh9*w<s ﬏O:;˻DCB$*�yž΃Q$0Jͨ>Q}Zbz\/8b"QS9#XA:fi. NrCKL*+vOf'l9q-VzHH}nr8Ap/9`=~to-l63##Nx;Qy o7v1 H |rP4@CHI@Gٰ^3޷뷒^{ N!Ǯӧ.+.3 ۣ/x'XN~qt  =Hz"mgGHpN !Na,aPn+m٥^qLn�^#XiߤUJ�s2mM5J`Qx0j*lG~%)㮖l٥D6GNP2bmĬh#`V Am:<fnlj1;p6m܃$leƎLc\ SBww6".ǠFܠ+][4][qxbz_F&2S�* _0áuR]_ UZRF`tabf&0p6z,_ȶE"Wṯj3eSKc#,U3J*' o}Hi6f Nv;BGT8Y"U ] �n @pZU{i"R~ >;/4q )6NH*z Z,xdŵ]]lp_՚hV[i5}eJ¢žN)rOTb&3aww@wj#r KGo*@ء 3H(W%ӻgH広-)*gХSmr L2PE/LRIN UGT&1!TB%Ko$LF&%OՌ~tXye{u~ >z)GMSG4'%rR҉ tA- vl%#/"QV,.殴�;X /{~~  AO\�a(%�~ Me JCI2Tjj05xŒ5ػ8' AU üﲁ!H>K[:(!Z2kQcdJLȜ]k*$ ˺h𿘢 .8ϊP22"0kv P.|"qΤebL"%O=ptsIᎬfN>h~K*xkoSr:zhu)(ݍuB?^4Vſ+8~(Vd>nQˁ.sxÕ .3c>\yЦ d"8^J8#Vq:cΎ+*jӦ"jxk)SBZ5ab?z7I!}|)|dݟy NT'|;WTl"y ҆zY|$˞=մ8cw?"g&gժ4MKG m)«]-E&a> RBk@ۧ㒄> ݤL/T ZwK7^UB5vxWbxݚ*+{F%+)ԗ :fV]rBeڢΦuV%YJIEtF1jA7/ aЬ7\'W,?'cԥ pV #{(coqpux*QunK&ٱi"N<qtPJo1 aJresw[77MhB6vHI @9рX|Si�F=[ԺŎ.sK6ϏA"+?T ]x@AnsV(q㸶?f!#N!3v*lՎ,Z~ on6"5c*+Szvn0.|Cp =(H#~㴎9֒YF%,P&4ޏn|I~7Fgs^!S\ ` 2BOr8L =OTR sd%um8f#1k+m,7D6aSdN/Aך)bALx ;TD20ͣ|f̭=ȚJSn3D%"܋y"4zawjom)_LZYjd~,H=pL͋XHUI( Ƽb9~ ?�"r+<CҏY]"&Py1@kD]3ȇ"900hv6ӡNGF�’kB�|�ܰ!zݟc1sIȕJa"~ݖ�ݧKmmQꮏL) &q^w^ZgeinÔI/.Y9Jq_<3o}&-ZxsI])t`z=x\%P_U vƸako<Xځkχ4II9a.4qiۢQTƹ�h֓m"ƔeW]ֿֿk5S?kNaX<LTbT]*b2.:bLSMta݆Z73ڵ ޼%>+no۴onMgg3<3Z|7Ϻ0PNo DV.e맟&wQKrRyo0hp}qI:Ul�9v4)_f);;۰\.�wL+W*%+c_sM)lj^]*;ڲ`I׉C"v +sT=׼[_*BW}D�ky�)(maҍ+Zdtk!nGrsJ )mBw) gExn='#L`]6�O:@�kV^^^]eR%JY9»dGY^�l6 ~L=t>ipZ0|8J Y7 'J 9xKlT91#du[jO4qD7> 4|qA?$ D2ܵ+@9.j)@@.IW!DYT| OHlCP!LW|gةuR_hnI 3::aՀ-V"e _8+c`0I%Ls4 &; U0%`JTVv_C{lM h䴡E s]hK.I<x(yw.r= )><07+#hC}ƑQÆVOa -T.d\G� x: >(¯\p3l&ŪEt(Wu'?{�ku "dٶ89ixyQo YtR1q58[k?%;nkHHa:66|qi>aZ(^:,<y_Xrq +jLVAAIy7m.nNsy 3a[RkWe=.{WNM!3PR@>ϭ =y "RvN抷]/Pv~J}Q!l*_o{&ޞSK*ջiY4k#@M$H)k`$8꿸/mBFl@)øWQǾɩ  WZ:X~["^Ժ @  V7cJGUoqX @dy½H\-Эxx> R*DSj":xݍ>1?c26/l9(\rtSڈ`7e2rZV|%e) ݻ8sP|'�_4HEk>mv(Yɐ j'O|d q,eF3Yteo&#-}'}P6юg:32Nl7MdrJe[pchwN(n~0a&x5Acx0Ԕ][4fit32��~~���������*6}|{{zyxxwvuttsrqpponmmlkjikii_� @yojihgi�߀݂܀ڀق׀րՂӀтЀ΂̀̀ʂɀƷxggf�؁�ހ�܀ۀׂӁπ΀ʁ�ȀƀÁ ơqfdU� ހۀ׀ӀЀ΀ʀƀÀ ſ~ebU� ހۀ׀ӀЀ΀ʀƀÀ ćdc� ހۀ׀ӀЀ΀ʀƀÀzdb�ހۀ׀ӀЀ΀ʀƀÀżje�ހۀ׀ӀЀ΀ʀƀÀŕcb� ހۀ׀ӀЀ΀ʀƀÀkc� ހۀ׀ӀЀ΀ʀƀÀ `W�܀݁߀ހۀ׀ӀЀ΀ʀƀÀ^]�Ҁހۀ׀ӀЀ΀ʀƀÀZ`�ڀۀ׀ӀЀ΀ʀƀÀ"VY�ހ؀ۀۀ׀ӀЀ΀ʀƀÀـ�ѽځۀ׀ӀЀ΀ʀƀÀ� Ծրف׀ӀЀ΀ʀƀÀ�ö׀ӀЀ΀ʀƀ�õ׀ӀЀ΀ʀƀ� ⼶׀�׀ӀЀ΀ʀƀ ߔ�ݸր׀ӀЀ΀ʀƀ ٖ�صՂӀЀ΀ʀƀ �쿵рӀЀ΀ʀ�ɲӀЀ΀ʀ� ذӀЀ΀ʀ Ӝ�ⱷҁ�ӀЀ΀ʀ ¿� 鷵ӀЀ΀ʀ � ӀЀ΀ʀ þ�ӀЀ΀ʀʿ�请сЀ΀ʀ»Ⱦ� ୸Ѐ΀½݁ǽ� үЀ΀ ľ΁Ĺ� ıЀ΀ ΰ^^�¾Ѐ�Ѐ΀ ý ̩ba� ꮷЀ΀ Ѡfc� ͰЀ΀ üǀ ֧ he�ƾ 뮴Ѐ΀ 丗ie�úӭЀ΀ üߪih�ż걲͂΀ ءih� Ƽ׬ʂ΀ ļ њih� Ƽ赲΀΀؜ih�ƻ ڬ΀Ľԃܢih� ĸ 汴΀¹ުih�ȁ Ű΀޶ih� ɽ ج΀ŽӁ߃љih� Ź ⫴΀úހ߃ރ ܫih�؂ ΀ރ݃ ɜih�ǹ Ѭ΀Ǿ݃܃ ٤ih� ̿ݩ̀ Ƽ܃ۂځĜ�ih� Ŷ߁̀ Ĺۂڃق�ih� ʼނ߃ނǯ·ƒك؁ ՜ih� ҁރ̬݃ǂ؃ׂ ĝih� Ķ݃܃ϫˁ׃ւ ԯih� Ⱥ܃ۂڀөƾ΀ւՃ ӟih� ʽ؃ڂف֧ƾՃԅ Λih� ̿҂ك؂żԋ ȝih� ́؃׃Ļ ih� óǀ׃ւԱú ih� ĴւՃԀú ih� ĴՂԇ»ih� Ĵih� óÍ#ih� Ǎ#ih� ̿ˍŏih� ʽЌўь#͍ec� Ⱥ˟ʍ"e_� Ķšč"e_� ̽ōe_� э"яe_� Ƚ !e_� ķР ύe_�ȿ!җe_�øĎ e_�ȽҡҎe_�¶ȎĢŒe_�źe_�Ƚҏљe_�ȿϏ£̒e_�ɿʏҦҏČe_�ɿŐe_�ǾɐѤА e_�ļΑ˕e_�ґΣ͑П e_�»Ɠd_�ĔʤȓҴ�b\�ҔШϔ Э^[�Η"ҖɯZU�Й#ͽss�Т%ǽ�СȤÁġǽ�Р)Ψˠǽ�П+ά̟ǽ�О-ɩŞǽ�Нèǁ$ǽ�М1ǽ�К5ѲКǽ�Йͮǂ+ʙǽ�ЗѼˀ/ϗǽ�Еˁ2ҕǽ�ДĮ́4ǽ�ВEȲǽ�ЏK˿ŏǽ�Ќ ɻ̀Dҋǽ�ЇǻсĠǽ�ǀþЃP�ՀXUS�͂mZW� ׁi^[�߀l|`W�ހ]gb�ucb�ufb�stdb�qdc�qyebU�ԁ ؀Ӏ̀ nfdU�݀ۀـ؀րԀҀЀ΀̀ˀɀǀŀÀuggf�_~wnjihgi�*6}|{{zyxxwvuttsrqpponmmlkjikii_�����������?CAB?>?I>>==<<;;::9988766554433221100//..-,,++((''&&%%$$##"!!   � KDACBCIMNMMLKJJIHHGFEEDDCBAA@??>=<<;::98776554332110//.--,+**)(('&&%$$#"!!  �DL^jnmmlkkjiihggffeddcbba`__^^]\\[ZZYXXWWVUUTSSRQQPPONMMLKKJIIHHGFFEDDCBBA;* � UDEJcponppqpoonmlkkjihhgffedcbba`__^]]\\[ZZYXWWVUTTSRQQPONMLLKKJIHHGFEEDC BBAA@?/ �UFESopqtutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?< �EFXpptvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@? � FFSpqwwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>?= � ?GJpqvxwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>: � GGartxxwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>=' �JLprwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>>==<�AFYptvuttsrqrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHG FEEDCBBAA@?>==<;< �GDdlqrqpqpqpopopoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHG FDDCBAA@@?=<;;:9:, �IAdflk�jklmnmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFFECCA@??>=<:9776672 � F>``dccdccdeefghijklmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIGGFEECA@>=<;:9875432232 �ƿҀǵyb^^_`abefgiijklk�ji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJJIHGFDCB@>=:8876<Yẁǽ�۰r[]`acdfgiiji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKIIHFDCA?><:8T�}Z\^`cefhiihiihhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLKJIHFDA?=;:d�ĈY\_bcfgghihhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOON MKKIGEC@=;v�Y[^acdfgghgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONNMLJIFCA?<z�{X[]`cefggffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLJHEB?=h֔�nX[^bcfeeddcbba`__^]\\[ZYXXWVUUTSSR QPOOMLKHDB>Xɖ�bX]_cddeddcbba`__^]\\[ZYXXWVUUTSSR QPNNLJHD@L�WZ_acddeddcbba`__^]\\[ZYXXWVUUTSSR QONMIGD@w�UZ]`bcdcbba`__^]\\[ZYXXWVUUTSSRPNLJFC@� UX[_accdcbba`__^]\\[ZYXXWVUUTSSRRQOMIGCA� ^VZ^abccbba`__^]\\[ZYXXWV UUTSSRQPNJFCLט¿�qVY^`ba`__^]\\[ZYXXWV UUTSSQPOKGBb�UZ]`aaba`__^]\\[ZYXXWV UUTSRQOMHCx�lVY^``ba`__^]\\[ZYXXWV UUTSROMIE^ʿ�ZUZ^_a`__^]\\[ZYXXWV UUTRQMJFKȾ� QVZ]``aa`__^]\\[ZYXXWVUUSQOKGCсǽ� RVZ^_`a`__^]\\[ZYXXWVUTROLGCƵyuttus[e�HCdehggfecca_a RV[^_a`__^]\\[ZYXXWVUTQMIDy954454 �KFjlon lkjhfdc`\ {SX[^``__^]\\[ZYXXWVTSOKFmj68898788 �NIoqts rppomkigca]uӔTUY]_^]\\[ZY XXWVVUTQMHGU89:<<==<;:;:�MJrtxvuttrqpomigd`\ݒQV[^_^]\\[ZY XXWVVUSPKE d9;<=>??@?>==<;<;�NKsuyxwvutssrpnmifb_Z \SX\^^_^]\\[ZY XXWVUTQMHP:;=??@A�@?>>=<=<�NKsuyxwvvut rqpmkhe`\PV[]^_^]\\[ZY XXWVUSOKFk;>?@BA@?>>=<=<�NKsuyxwvvut srqpnljfa\rfRX[]^]\\[ZY XXWUTRMH\R<>ABCDCBCCBBA@?>>=<=<�NKsuyxwvvut srrqonmjga\`؃OUY\^]\\[ZY XXWUSPKFB=?BDCBBA@?>>=<=<�NKsuyxwvvut srrqppolkfa\b tRW[]]^^]\\[ZYXXWTRNHjE=@BDE�DCBBA@?>>=<=<�NKsuyxwvvutsrrqp nmjea\s PUY\]^^]\\[ZYXXVTQLFăV>@CDFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqponlieaZ hRW[]^^]\\[ZYXXVSOJ^ k>ACEFFGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoomkhd^X QUZ\]^]\\[ZYXWURNHއ=ACEGFGGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqp oonljgb\V OTY[]^]\\[ZYXWUQLFÁ߃;@CEFGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqp oonmljf`Z ZRWZ]^]\\[ZYXWTOJQ݀߃ރk>BFGGHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqp oonmmkhc]Vɂ PVZ\^]\\[ZYXVSNIރ݃۳=@DGHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqp oonmmlie`Yv NTX[]]\\[ZYWVRLG݃܃\?CFHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmjgc\U QRW[]]\\[ZYWUQKI܃ۂځ>ADGIIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmkhe_X߁ QVZ]]\\[ZYWUOIvۂڃقr?CFHIIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmligaZ\݂߃ނPUZ\ [ZYYXVTNHك؁ DAEGIJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmljhc\Vރ݃OTY\ [ZYYXVSMG؃ׂ >CFHIJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmljie^X݃܃ڿNSX\ [ZYYXVSMF׃ւ z?DGIIJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkif`Yd܃ۂڀMRX[\ [ZYYXVRLFĀւՃ LAEHIJJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkjga[TӃڂفLRW[\ [ZYYXURLEՃԅ >BFIIJJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkjgb\Ułك؂VQW[\ [ZYYXUQKNԋ ?BGIIJJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkjgc]V؃׃dPVZ\[ZYYXUQJ\ ?CHIIJJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkjgc]V׃ւpPVZ\[ZYYXTPJj ?DHIIJJIHHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonm lkkhc^WւՃԀ}PUZ\[ZYYXTPJy ~'*-./39>DHGFEEDCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkkhd^WՂԇPUZ\WQLG@81)ph %,28?DCBBA@?>>=<=<�NKsuyxwvvutsrrqpoonmlkkhc^W}PUPH>4/.--+)'$bw%.<A@?>>=<=<�NKsuyxwvvutsrrqpoonmlkjgc]Vb5/0/.--+)'$P#0=?>>=<=<�NKsuyxwvvutsrrqpoonmlkjgc]VF,.0/.--+)'$> $2<<=<�NKsuyxwvvutsrrqpoonmlkjgb\U5,.0/.--+)($- '5�NKsuyxwvvutsrrqpoonmlkjga[Tʌ*,.0 /.--+*(%!͌   �NKsuyxwvvutsrrqpoonmlkif`Y`*-/1100/.--,*(%!)   �NKsuyxwvvutsrrqpoonmljie^X+-/1100/.--,*(%""b   �NKsuyxwvvutsrrqpoonmljh`M<+-/1100/.--,*)%"   �NKsuyxwvvutsrrqpoonmj\L=8;΍,.01100/.--,*)&""   �NKsuyxwvvutsrrqp oonml[GA?;6fY,/01100/.--,*)&#SR   �NKsuyxwvvutsrrqp oom]JECA>95.-/01100/.--,**'$%ʍ!   �NKsuyxwvvutsrrqp n_KFFDB?<8Oҍ+.012100/.--,+*'$"!7   �NKsuyxwvvutsrrqpp`LHGFFDA>:6f,/112100/.--,+*(%#_   �NKsuyxwvvutsrrpaNIHHGFEC@<8[4-0112100/.--,+*(&#+ώC   �NKsuyxwvvutsqcPJJIHHGEDA>:6+.12100/.--,++)&$!   �NKsuyxwvvuttsdQLKJJIHHFEC@;7rq,/12100/.--,++)'%"j^   �NKsuyxwvvuthSMLLKJJIHGFCA=9YϏ>-02100/.--,++)'&"3?   �NKsuyxwvvq[NNMLLKJJIGGDA>:Iŏ,/13322100/.--,++*(&# *   �NKsuyxwvfRONNMLLKJJHGEB>;>G.023322100/.--,++*('$!=я   �NKsuyxoXQPONNMLLKIIGEC?;=,/123322100/.--,++*)(%" �   �NKsuyxvcRQQPONNMLKJIGEB?<H<.1234322100/.--,++*)(&#!0̐&   �NKsuyqXSRQQPONNLKKIGEB><XÑ-02334322100/.--,++*))'$"z9   �NKsuhUSSRQPONMMKJHFCA>:nΑ5/14322100/.--,++*))'%#!'ÑT   �MJmXTSRRQPONMKKIGEB?=Tr/1354322100/.--,++*))(&%"i2   �NFLMRQPPNMMLJHGEBA>Lғ01245544322100/.--,++*))(&%# !щ%    �DAGJNMLLKIIGFDB@>ZΔ!H/2456544322100/.--,++*))('&$!:ɔ{4  �??CEIHGGEDDB@Ad#^/14556544322100/.--,++*))('&%"!QҖ~@  �facehffhuəz0236544322100/.--,++*))(''%#"pƢyfQ>;:9:9:A�Т/24576544322100/.--,++*))(''&$#!ǽ�С'424667766544322100/.--,++*))(''&%$" !ǽ�Р)@246778766544322100/.--,++*))(''&%$#!,ǽ�ПP3468"766544322100/.--,++*))(''&%%#"!=Ÿǽ�О-C35789988766544322100/.--,++*))(''&%%$"" /ǽ�Н/846889:988766544322100/.--,++*))(''&%%$#"! ǽ�Л҃4579:)988766544322100/.--,++*))(''&%%$##! vқǽ�Кh4689;,::988766544322100/.--,++*))(''&%%$##" V̚ǽ�Й7R579:;<<;::988766544322100/.--,++*))(''&%%$##"!;ǽ�З˃<78:<2=<;::988766544322100/.--,++*))(''&%%$##"!  tʗǽ�ЕБD78:;<>=3<;::988766544322100/.--,++*))(''&%%$##"! &Еǽ�ДM79:;=>6==<;::988766544322100/.--,++*))(''&%%$##"! 0ǽ�ВY8:;=>>?9>==<;::988766544322100/.--,++*))(''&%%$##"! <ǽ�ЏW9;<>>@>??>==<;::988766544322100/.--,++*))(''&%%$##"! 9tǽ�ЋSүP:<==?@AABA@A@??>==<;::988766544322100/.--,++*))(''&%%$##"! ,hыǽ�ІǷxJ<>>?@AABCBJAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  [҆ǽ�}n_PB?@@ABCCDEDCQBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  "5H]q�<>AAFEDDEDEFEUDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �AAFDLKJIJIIHIHG^FFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �BDJHNONONMLKJKJIYHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �wAFKKORQQPOPONMMLKLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �GFKLSRhQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �nGGLLOSSRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �n?EEMKQSRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �sFFIKKRRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  �kEFIJJNQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  � �iUFEHKIKOPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   �nUDEDIIHGIIKJIIHHGFFEEDCCBAA@??>==<;;:9887665443321100/..-,,+**)(('&&%$$#""!  �DhEHHGFFEDDCCBAA@@?>>==<;;::98877665443321100/..--,++**)((''&%%$$#""!!   �KDACBAC`BBAA@@??>==<;;::9887766554433221100/..--,++*))((''&&%$$##""!!  �?CAB?>?I>>==<<;;::9988766554433221100//..-,,++((''&&%%$$##"!!   ������������  � ! #'+,+*)('&%$#"!  �!*;HMLKJIHGFEDCBA@?>=<;:982#� *"!'ANMMNOPONMLKJIHHGFEDCBBA@?>=<;:�98( �""0LNOSRQPONMLKJJIHGFEDCBA@?>==<;:986�!"5NNQTTSRQPONMLKJJIHGFEDCBA@?>==<;:98�#"/MNTSRQPONMLKJJIHGFEDCBA@?>==<;:986�?"&LNSUTSRQPONMLKJJIHGFEDCBA@?>==<;:9874 �""=NRUUTSRQPONMLKJJIHGFEDCBA@?>==<;:9877"�%'LNTSRQPONMLKJJIHGFEDCBA@?>==<;:9876 �"5LQSRRSRQPONMLKJJIHGFEDCBA@?>==<;:8766�&"AJOPPQPQPQQPQQPONMLKJJIHGFEDCBA@?>==<:9987�6544'�* DFML�KLMMNOPOPPOPPONMLKJJIHGFEDCBA@?>==<; 99876655433211-� &ACGFFGFFGHIIJJKMNNOONONMLKJJIHGFEDCBA@?>==;:997654331/.�ƿπeICDEEFHIJKLMNNOONMLKJJIHGFEDCBA@?><<:9987643200/5TsˀǼ�ا^CDEGGIKKLMNMLKJJIHGFEDCBA@?>==;:8764320N� kBBDFHIKM�NMLKJJIHGFEDCBA@? >=<;975321_� zBCEHIKLLMLKJJIHGFEDCBA@? >>=;:8541q�~@CEHIKL�MLKJJIHGFEDCBA@ ??>=<;8652uߒ�lACEGIJKLKJJIHGFEDCBA@ >>=;:853aՔ� [@CFHJKKLLKJJIHGFEDCBA @@?><;864Q�NBDGIJKJJIHGFEDCBA ??><:85D�x@CFHJKJKJJIHGFEDCB AA@?><974q�?BEGIJJKJJIHGFEDCB A@@=<:64�@ADGHJJKJJIHGFEDCB@@>;975� J@CFHJJKKJJIHGFEDC BBA@><96@՘¿� `@BFHJJKJJIHGFEDCBAA><:6X�v?CFHJIHGFEDCAA@=:7p�[?CFIJIHGFEDCA@>:7Uʿ�G@DGIIJIHGFEDCB@><8?Ⱦ�=ADGHIHGFEDCBA?<95ρǽ�|u=AEGIHIIHGFEDCCBB@=96ŴwrqqYe�)$DGJIIHGGFEDH>BEGHIIHGFEDCCBA>:7߶v3./0//0 �*%HLON LLKJIHGEC{m?BFGHIHGFEDCBA?<8e e/0112323233�,'KOSRP NNMKJHECcДB@DFHGFEDBB@=::N1224565565 �,(MQUTSSRQQPONMJHFCsے=BDGHGFEDBA?<8_124567�876 �,(NRVUTTSR QPNMKGEB K?BFHGHHGFE DDCB@=:E 13567889989987 �,(NRVUTS RRPONKIFB|=@DGGHHGFE DDCA?;7 e246889:9::987 �,(NRVUTS QQPNMJFC_X>BFGGHGFEDCC@=9PK2579:�;:987 �,(NRVUTS RRQPOMJGCJփ<@DFGHGFEDCB?;7:3589:;:987 �,(NRVUTSRQPOMJGCK߁f>BEGFEDCA=9_ <458:;;<;:987 �,(NRVUTSR QQPNMJFC`<@CFGFECB@;7ƒM368:;<;:987 �,(NRVUTSRQONMIFBzW?BEGFECA>:Re469:;<;:987 �,(NRVUTSRQPONLIEA=ADGFGFEEDCA=8ނ368:;<;:987 �,(NRVUTSRQ PPOMKHD?<@CFFGFEEDB@<7߃258:<;:987 �,(NRVUTSRQPNMJGByH>BEFGFEEDA?;C݀߃ރc47:;<;:987 �,(NRVUTSRQPONLIE@ł=AEFGFEEDA=9ރ݃۱369<<=<;:987 �,(NRVUTSRQPONMKGBf;@CEFGFEDC@<8݃܃U58;=<;:987 �,(NRVUTSRQP OONLID?@>CDFGFEDC?;<܃ۂځ379<=<;:987 �,(NRVUTSRQPOONMKFA߁t=BDFGFEDB>:mۂڃقk59;=>==<;:987 �,(NRVUTSRQPONLHCG܂߃ނ<ADFFGFDDB=9ك؁:6:<=>==<;:987 �,(NRVUTSRQPONMID@ރ݃<@CEFGFDCA=8؃ׂ47;<=>==<;:987 �,(NRVUTSRQPONMJFA݃܃ڼ;@CEFGFDCA<8׃ւ t59<=>>==<;:987 �,(NRVUTSRQPONKGBQ܃ۂڀ:?BEFGFDC@;7ÀւՃ B6:==>>==<;:987 �,(NRVUTSRQPONLHD>҃ڂف:?BEFGFDC@;7Ճԅ 37:==>>==<;:987 �,(NRVUTSRQPONLID>‚ك؂E>ADFGFDC@;@ԋ37;=>==<;:987 �,(NRVUTSRQPONLIE?؃׃U>ADFGFDB?:P48;>==<;:987 �,(NRVUTSRQPONLJE?׃ւc=ADFGFDB?:`48<>==<;:987 �,(NRVUTSRQPOLJF@ւՃԀr=ADFGFDB?:p w $,29<;:987 �,(NRVUTSRQPOLJF@Ղԇ}=ADFGGB<61)#f�` �  '.4:;:987 �,(NRVUTSRQPOLJF@r=A:1%W�p �  &39987 �,(NRVUTSRQPONLJE?TC� �   (687 �,(NRVUTSRQPONLIE?3/� �  +7 �,(NRVUTSRQPONLID>� �   / �,(NRVUTSRQPONLHD>Ȍ͌�ŀ �   �,(NRVUTSRQPONKGBL  �,(NRVUTSRQPONMJFAuZ  �,(NRVUTSRQPONME2!  �,(NRVUTSRQPOOM=+ ͍}{  �,(NRVUTSRQPN;$SIFI �,(NRVUTSRQ PO<% ɍ �,(NRVUTSR QQP<&! 8ҍ,  �,(NRVUTSRP>'! WS�  �,(NRVUTSRQ?'""! Fώ: �,(NRVUTSR?)#"! �,(NRVUTSR@*#"!! ad`W  �,(NRVUTSSE*$$#"! CϏ)$6�,(NRVUTN4%$#" /Ï �,(NRVUTT@'%%$#""! "3.я�,(NRVUK/&%$#!! !�,(NRVUS;&%$ ##"! -' ː�,(NRVL.'&%$""! Au q1�,(NQ@(''&%#!! [͑‘N�,(G-(&%$""! ;d _)�,%!"&%$ ##"! 0ғх�!! %$ #""!! @͔4 ,Ȕw-�"! !LL Gі{:�QJGJMLLO_qǙm hŠvbM:657@�Т ǽ�С ǽ�Р) ǽ�П :  1ǽ�О , !ǽ�Н ǽ�Лv� oқǽ�К V  L˚ǽ�Й= 1ǽ�З v!  nɗǽ�ЕЅ*  Еǽ�Д4��  %ǽ�ВA  3ǽ�Џ y?  /oǽ�Ћ ҩn5  #cыǽ�Іıd-  W҆ǽ� {iWD2"     0DYm~�! � ! !! !   � $#""#"!""!!"!   �"!$%$#""#"!   �""#&%$%%$#"!   �"" '&%$#"!   �""##''&%$#"!   �? " %'&%$#"!   �#"#&%$#"!   �!"""&&%$#"!   �" $%$#"!   �� *"!"! !  ��!"! � ! �!  ���  ������ih32���'zr�*q�+o�1|T��ȁ[_�wwȘȘȘȔĶ�Ċƺ�)ųk�� ǶӀ+s��I֩v��Կؾɶ٣v��Á Ůݮv�� ݀*v��պο˺ۀZգv��ַɳƬv��زǮ!ӷv��Ѽ׀ղƮv��ҸԀɽv��ѹv��Ҩ҂l��Ƃ̭˂g��ͳтЕg��g��ɵ҂ ҩ҂Ҝg��̷˃ ǔg��ʷǃ ҫ҃g��ф ϥf��ȅ ʮDž ^�bΈЭΈºbiȉѱщȰiiȈͰʈȰiiȇȲȰiiȅ̶ƅȰiiȂĸ΂7ȰiE¾E�ՀVR��uT�+h�*m�'ÿ~tm��'FJJKJHFEEA?><;;:88653/.-+*))(&%#"�)L[qrqpomljiheebba_^\ZYXVUSRQPNMKJIGFDCA?"�+Oduutsqpnmljigedca`^][ZYWVTRRPNMKJIGFDCA@?+�,TRvwutsqpnmljigedca`^][ZYWVTRRPNMKJIGFDCA@?>�LZpponYonmljigedca`^][ZYWVTRRPNMKJIGEB@><;9#�wɸffhjkjigedca`^][ZYWVTRRPNMKIGC@A}žwբcegigedca`^][ZYWVTRRPNMIEEȘ]dfedca`^][ZYWVTRRPMIBȘs`cdca`^][ZYWVTRROIaȘ]bca`^][ZYWVTRPJzȔ]ba`^][ZYWVTQL�Ċz]``^][ZYWVSMoϿ�Qakit)c^`^][ZYWVQVӦ|H87,��Xivtqole X_^][ZYWUL>?> <0��Xkxwutsnh~q\^][ZYWRgI\ABCA@?=1��XkxwutsqohdW]][ZYVNECEDCA@?=1��Xkxwutsqpmg _[][ZYTUjEFFDCA@?=1��Xkxwutsqpnkb Y][ZYR݀*CHGFDCA@?=1��Xkxwutsqpnmh`߹V\[ZXPۀ[EGIGFDCA@?=1��Xkxwutsqpnmj_S[[ZWMֳCIIGFDCA@?=1��XkxwutsqpnmlcRZ[ZWLӀ!ӐFJIGFDCA@?=1��Xkxwutsqpnmle׀[Z[ZVUrGJIGFDCA@?=1��XkxwutsqpnmleqԀdVNG>J@%*/49@@?=1��Xkxwutsqpnmle?//.*2Z*61��Xkxwutsqpnmlc-0/.+%Ђ ��XkxwutsqpnmhR-0/.+%  ��XkxwutsqpkXD=̂/1/.,'  ��Xkxwutso\ID>f01/.,(`~  ��XkxwuraMIFA[т 711/.,)-Ђ?  ��XkxwlTMKHC@ 021/.,*$  ��XkvaPOMIDP C331/.,*&7Ѓ-  ��XbVPMLHCz̄ 2431/.,*(#a  ��DGKHNh 95531/.,*(%) jA �bH67531/.,*(&"8Ȉbiȉ\687531/.,*(&$ M͉ȰiiȈS7997531/.,*(&$">ȰiiȇF:;:97531/.,*(&$# +Ȱiiȅh:=><:97531/.,*(&$#!QȰiiȂʜl>@><:97531/.,*(&$#!QȂ ȰiEqaCBCNB@><:97531/.,*(&$#!:NcuzwE�AENMLKJIHGEDB@><:97531/.,*(&$#! .��TGQRPOMKIGEDB@><:97531/.,*(&$#! �+GKPPOMKIGEDB@><:97531/.,*(&$#! �)HIKLKIHEDB@?<;886420.-+)'%$"! �$DFBA??><<:653210/.,+'%$#""��&'*)(''&$##� �'7OPQPOONMLLKJJIIHGFFEDCCBA@ ?>==<<::97 � +>STSSRQPOONMLKJIHGGFEDCCBAA@??>=<<;:988&�0SUTSSRQPOONMLKJIHGGFEDCCBAA@??>=<<;:9887�-9OPOPOONMLK,JIHGGFEDCCBAA@??>=<;976543�wðMJLMNNMLKJIHGGFEDCCBAA@??>;97:yĽwҘJJLMLKJIHGGFEDCCBAA@?>::ȘEIKJIHGGFEDCCBAA?<8ȘaGJKKJIHGGFEDCCBA@<WȘzEJKJIHGGFEDCCB@<sȔEJJIHGGFEDCCA<�ĊlGIIHGGFEDCB>eϿ�1?MK[)RGIHGGFEDCAJҤxC11(��6ETSQONJ CHHGGFEDB=+667676+��7FVUTSSPKkcFHGGFED@[!U8::9887,��7FVUTSSRPLLBG$FEC=;9;;:9887,��7FVUTSSRQOJz MFGGFEBGc9<<;:9887,��7FVUTSSRQPNH DGGFE@݀8<%;:9887,��7FVUTSSRQPOLJߵBFGFD>ۀ[;<=<<;:9887,��7FVUTSSRQPONF@FGFD<ְ9==<<;:9887,��7FVUTSSRQPOOI?EGFC;Ӏ!Ӌ;>=<<;:9887,��7FVUTSSRQPOOJz׀KDGFCFk<>=<<;:9887,��7FVUTSSRQPOOK^ԀTA81(;5#*087,��7FVUTSSRQPOOJr* Q "0,��7FVUTSSRQPOOI�ЀЂz  ��7FVUTSSRQPOK6 ��7FVUTSSRQM7!˂ ��7FVUTSSO9$WTy ��7FVUTQ<&"!Cт Ђ6��7FVUH+$#"! ��7FS:&%$"4 .'σ#��6;,&%#" h˄ }\��$$",Os ! f;�b2)LjbiȉI ẢȰiiȈ= 3Ȱiiȇ, ȰiiȅT HȰiiȂɑW Iǂ ȰiEnZG!)  3I^rwuE� $%$#"S!  �� %'&%$#"!  �+% %&%$#"!  �"!!"!  � !   �il32�� B��ׁ;½u�¿̀׀'½þĿϻθҼmĵʿϾǽɶ̻ȱ¸͵Ѻһѷū˺ѽ+пλҀƽс ʾƁȿ҂Ђ¬ҁ[¬Ͽ؁Ww}m�u��NQXWXTSQMMLGFBA@=<:6510/-*($�_Wappmkigeca^\YXVURPNLJHECA?;+ ldtsqpomkigeb`]\YXUSQOMKHFC@??0?}pjigeb`]\YXUSQOMJO\fkt|AӼzhgeb`]\YXUSQOM`滈ldb`]\YXUSQWwМob`]\YXUS_ޔg`]\YXUY{`]\YXUoʘqcVv`cstqwk]\YWbޯsL@?;(#`ctvspp^\YXv߰eGCB?;(#`ctvsqonޒb[Y]wJFDB?;(#`ctvsqomnۤe[Y`֟OHFDB?;(#`ctvsqomhشh[XcɇHGFDB?;(#`ctvsqomjտhVRaӼo;>??>=;(#`ctvsqomjҺV;4IӺ`#*1##`ctvsqoldРE0->p`ctvspj_V·>0-8Љ# `ctuoeVJlo80-1jӯQ `crl]OJ[\ҹW30-,OД8 ``dWMOhɁ@20-*4yǍE shilvѡO520-+(AϨoP;//H΀ Ҷe<520-+()WҀͻ҂ͧmC8520-+(%-]̂¬\A;8520-+(%"%C¬ɸpO@>;8520-+(%".V{̼vwoe[RGB@>;8520-+(%"%/9DNSsUNPNLJIFC@>;8520-+(%" @?ILNKIGDA?=:741/,*(%" ��:GHFCB@<;7621,+'&%! ��:266854332/..-,*)''$#""!�?6@ONNMLJIHGFECB@@>=<;99864"�MESSPQQPNMLKJIGGFECCA@?><<:88:,7voeUMMLKJIGGFECCA@?=DT_eo|xϴcNLKJIGGFECCA@AWwTJJIGGFECCAIn̐XJIGGFECCQ݆PIGGFECJoyiIGGFECbɕ{m`Uq>AQSP[XGGFDRެmE886#>BRTSQSqpIGFFk߭]?;986#>BRTSRQRo݈OGFLo?<;986#>BRTSRQOUڞSFEQ֚E<<;986#>BRTSRQPMׯWFETȁ<;<;986#>BRTSRQPNԽW@>Qӻg.1565#>BRTSRQPN{ҶC"6ӸW"*>BRTSRQNHК.+h >BRTSQK@9}&$|Ѓ�>BRSMB2'Va^ӭG i�>BOG7($@ҵD?ϐ. �7;>/%,Ns' pƉ=�_IFN]xј71ϦjI6)*H̀ ұQKҀͺ҂̟Z&R̂¬ѽB"7{¬dz[1  Nv̼ya^UG<1% &2?JQo3'(&$#"! 4 !#$$"!  ��' !! �is32��ýUĿľմϸֵӬoөӿ¿Ӿл¿Ӻҹ¿ϡ¿ӣ¿ĿU�U[`]ZSPKID@:60"�rnjea]YTPKGEibea]YTPwa]YTbs|]Ypf>$dwsl]YGC?$dwsn\XkGC?$dwsnpND=05;$ndwslrӼ1,K dveKӘ1,Ӣ [W^I1,<Ә/ m71,&_̊ͪW<71,&!9ӎc^LGB<71,&!)4UJHA=84-*% �*6?@;985531/,)�qwSPNKJGECA?<<d_yKJGECApJGEC<TylGEda7>URPGE<:8>URPyFDd<:8>URPY8/2#,4n>URM^ӹ@>UA%Ӑӟ 40?2+ӕ(\Ụ̇;-ӍG=%! "/*"! �t8mk��@���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������KK���������������������������������������������hh������������������������������������������������������������PP���������������������hh�������������##���rr�� �vv8r1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� #TT#ssttttttttttttttttttttttttttttttMM� ��pp���##�������������hh���������������������PP������������������������������������������������������������hh���������������������������������������������KK�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������h8mk�� ����������������������������������������������������������������������������������������������������WW������������� �CC�����������������������z��v��v��v��v��v��v��w�|  >>� ���||����������VV����������������������������������������������������l8mk����������������������������������� QҶP �ON! ONum;8%$%$%$%$%$%$%$%#%#%#%#%#31YWnlnllj?>LK� OϱN ���������������������������������s8mk������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/PkgInfo������������������������������������������������������0000644�0001750�0000144�00000000011�11324120113�020274� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������APPL???? �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/MacOS/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020000� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/MacOS/doublecmd����������������������������������������������0000777�0001750�0000144�00000000000�13615241420�024400� 2../../../doublecmd����������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd.app/Contents/Info.plist���������������������������������������������������0000644�0001750�0000144�00000003201�13573126201�021004� 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>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>de</string> <string>es</string> <string>bg</string> <string>cs</string> <string>hu</string> <string>nl</string> <string>ru</string> <string>ua</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>NSHighResolutionCapable</key> <true/> <key>NSRequiresAquaSystemAppearance</key> <false/> <key>NSSupportsAutomaticGraphicsSwitching</key> <true/> </dict> </plist> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doublecmd-noconsole.js��������������������������������������������������������������0000644�0001750�0000144�00000001456�11525751770�017037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Use this script to run Double Commander without console debug window // run as logged-in user: // First get the path of this script var script_path = WScript.ScriptFullName; script_path = script_path.substring(0, script_path.lastIndexOf('\\')); var shell = WScript.CreateObject("WScript.Shell"); // Then launch dc(DoubleCommander directory is supposed to be placed besides this script) shell.run("\"" + script_path + "\\doublecmd.exe\"", 0, false); /* // or this one asks for the desired user: var script_path = WScript.ScriptFullName; script_path = script_path.substring(0, script_path.lastIndexOf('\\')); var shell = WScript.CreateObject("WScript.Shell"); var app = WScript.CreateObject("Shell.Application"); app.ShellExecute(script_path + "\\doublecmd.exe", "", "", "runas", 0); */������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/docgen.sh���������������������������������������������������������������������������0000755�0001750�0000144�00000000177�11740433676�014344� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # http://pasdoc.sourceforge.net pasdoc --marker en --output doc/en/dev-help --define UNIX --source units-doc-unix.txt�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/docgen.bat��������������������������������������������������������������������������0000644�0001750�0000144�00000000174�11740433676�014472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REM http://pasdoc.sourceforge.net pasdoc --marker en --output doc\en\dev-help --define MSWINDOWS --source units-doc-win.txt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doc/��������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�013271� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doc/changelog.txt�������������������������������������������������������������������0000644�0001750�0000144�00000024567�13365033135�016003� 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-0.9.8/doc/README.txt����������������������������������������������������������������������0000644�0001750�0000144�00000003611�13365033403�014772� 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-0.9.8/doc/INSTALL.txt���������������������������������������������������������������������0000644�0001750�0000144�00000004447�13365032747�015165� 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.0.4 and Lazarus 1.8.2. 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 - CmdLine/cmdbox.lpk - multithreadprocs/multithreadprocslaz.lpk - dcpcrypt/dcpcrypt.lpk - doublecmd/doublecmd_common.lpk - gifanim/pkg_gifanim.lpk - KASToolBar/kascomp.lpk - synunihighlighter/synuni.lpk - viewer/viewerpackage.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 all or alternatively without plugins > build.bat components > build.bat 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 all or alternatively without plugins $ ./build.sh components $ ./build.sh �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/doc/COPYING.txt���������������������������������������������������������������������0000644�0001750�0000144�00000043254�12137141242�015151� 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-0.9.8/doc/COPYING.modifiedLGPL.txt��������������������������������������������������������0000644�0001750�0000144�00000002353�12014201074�017374� 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-0.9.8/doc/COPYING.LGPL.txt����������������������������������������������������������������0000644�0001750�0000144�00000061447�12137141242�015712� 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-0.9.8/doc/COPYING.FPC.txt�����������������������������������������������������������������0000644�0001750�0000144�00000002275�12606472177�015575� 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-0.9.8/components/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�014711� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020152� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/vtlogger.pas���������������������������������������������0000644�0001750�0000144�00000003356�12014201074�022510� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit vtlogger; {$mode objfpc}{$H+} interface uses multiloglcl, multilog; const //lc stands for LogClass //it's possible to define the constants to suit any need lcAll = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; lcDebug = 0; lcError = 1; lcInfo = 2; lcWarning = 3; lcEvents = 4; lcPaint = 5; lcPaintHeader = 6; lcDummyFunctions = 7; lcMessages = 8; lcPaintSelection = 9; lcSetCursor = 10;//it generates a lot of messages. so it will be debugged alone lcPaintBitmap = 11; lcScroll = 12; lcPaintDetails = 13; lcCheck = 14; lcEditLink = 15; lcEraseBkgnd = 16; lcColumnPosition = 17; lcTimer = 18; lcDrag = 19; lcOle = 20; lcPanning = 21; lcHeaderOffset = 22; lcSelection = 23; lcAlphaBlend = 24; lcHint = 25; lcMouseEvent = 26; var Logger: TLCLLogger; function GetSelectedNodes(Sender: TLogger; Data: Pointer; var DoSend: Boolean): String; implementation uses VirtualTrees, sysutils; type TNodeData = record Title: String; end; PNodeData = ^TNodeData; function GetSelectedNodes(Sender: TLogger; Data: Pointer; var DoSend: Boolean): String; var i: Integer; TempNode: PVirtualNode; begin with TBaseVirtualTree(Data) do begin Result:='SelectedCount: '+IntToStr(SelectedCount)+LineEnding; TempNode:=GetFirstSelected; if TempNode = nil then exit; Result:=Result+PNodeData(GetNodeData(TempNode))^.Title+LineEnding; for i:= 1 to SelectedCount -1 do begin TempNode:=GetNextSelected(TempNode); Result:=Result+PNodeData(GetNodeData(TempNode))^.Title+LineEnding; end; end; end; initialization Logger:=TLCLLogger.Create; finalization Logger.Free; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/virtualtreeview_package_doublecmd.pas��������������������0000644�0001750�0000144�00000000754�12014201074�027610� 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 virtualtreeview_package_doublecmd; interface uses VirtualTrees, VTHeaderPopup, registervirtualtreeview, VTGraphics, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('registervirtualtreeview', @registervirtualtreeview.Register); end; initialization RegisterPackage('virtualtreeview_package_doublecmd', @Register); end. ��������������������doublecmd-0.9.8/components/virtualtreeview/virtualtreeview_package_doublecmd.lpk��������������������0000644�0001750�0000144�00000005171�11751527542�027633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="virtualtreeview_package_doublecmd"/> <AddToProjectUsesSection Value="True"/> <Author Value="Mike Lischke (LCL Port: Luiz Américo)"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <IncludeFiles Value="include/intf/$(LCLWidgetType);units;include/intf"/> <OtherUnitFiles Value="units/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Virtual Treeview is an advanced component originally created for Delphi "/> <License Value=" Mozilla Public License 1.1 (MPL 1.1) or GNU Lesser General Public License "/> <Version Major="4" Minor="8" Release="7" Build="1"/> <Files Count="7"> <Item1> <Filename Value="virtualtrees.lrs"/> <Type Value="LRS"/> </Item1> <Item2> <Filename Value="VirtualTrees.pas"/> <UnitName Value="VirtualTrees"/> </Item2> <Item3> <Filename Value="VTHeaderPopup.pas"/> <UnitName Value="VTHeaderPopup"/> </Item3> <Item4> <Filename Value="registervirtualtreeview.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="registervirtualtreeview"/> </Item4> <Item5> <Filename Value="ideicons.lrs"/> <Type Value="LRS"/> </Item5> <Item6> <Filename Value="VTConfig.inc"/> <Type Value="Include"/> </Item6> <Item7> <Filename Value="VTGraphics.pas"/> <UnitName Value="VTGraphics"/> </Item7> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="lclextensions_package_doublecmd"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/virtualtreeview_package.pas������������������������������0000644�0001750�0000144�00000000735�12014201074�025571� 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 virtualtreeview_package; interface uses VirtualTrees, VTHeaderPopup, registervirtualtreeview, VTGraphics, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('registervirtualtreeview', @registervirtualtreeview.Register); end; initialization RegisterPackage('virtualtreeview_package', @Register); end. �����������������������������������doublecmd-0.9.8/components/virtualtreeview/virtualtreeview_package.lpk������������������������������0000644�0001750�0000144�00000004555�12140233030�025575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="virtualtreeview_package"/> <AddToProjectUsesSection Value="True"/> <Author Value="Mike Lischke (LCL Port: Luiz Amrico)"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <IncludeFiles Value="include/intf/$(LCLWidgetType);units;include/intf"/> <OtherUnitFiles Value="units/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Virtual Treeview is an advanced component originally created for Delphi "/> <License Value=" Mozilla Public License 1.1 (MPL 1.1) or GNU Lesser General Public License "/> <Version Major="4" Minor="8" Release="7" Build="3"/> <Files Count="7"> <Item1> <Filename Value="virtualtrees.lrs"/> <Type Value="LRS"/> </Item1> <Item2> <Filename Value="VirtualTrees.pas"/> <UnitName Value="VirtualTrees"/> </Item2> <Item3> <Filename Value="VTHeaderPopup.pas"/> <UnitName Value="VTHeaderPopup"/> </Item3> <Item4> <Filename Value="registervirtualtreeview.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="registervirtualtreeview"/> </Item4> <Item5> <Filename Value="ideicons.lrs"/> <Type Value="LRS"/> </Item5> <Item6> <Filename Value="VTConfig.inc"/> <Type Value="Include"/> </Item6> <Item7> <Filename Value="VTGraphics.pas"/> <UnitName Value="VTGraphics"/> </Item7> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="lclextensions_package"/> <MinVersion Minor="5" Valid="True"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/virtualtrees.lrs�����������������������������������������0000644�0001750�0000144�00000505021�11727533326�023443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('VT_VERTSPLIT','CUR',[ #0#0#2#0#1#0' '#2#0#14#0#15#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#2#0#0#0#2#0#0#0#0#0#0#0#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#6#0#0#0#9#0#0#0#16#128#0#0 +' @'#0#0#25#128#0#0#9#0#0#0#9#0#0#7#249#254#0#4#0#2#0#4#0#2#0#7#249#254#0#0#9 +#0#0#0#9#0#0#0#25#128#0#0' @'#0#0#16#128#0#0#9#0#0#0#6#0#0#0#0#0#0#0#0#0#0#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#249 +#255#255#255#240#255#255#255#224#127#255#255#192'?'#255#255#224#127#255#255 +#240#255#255#255#240#255#255#248#0#1#255#248#0#1#255#248#0#1#255#248#0#1#255 +#255#240#255#255#255#240#255#255#255#224#127#255#255#192'?'#255#255#224#127 +#255#255#240#255#255#255#249#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#255#255 +#255#255#255 ]); LazarusResources.Add('VT_HEADERSPLIT','CUR',[ #0#0#2#0#1#0' '#0#0#15#0#14#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#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#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7 +#128#0#0#4#128#0#0#4#128#0#0#4#128#0#0#4#128#0#0'D'#136#0#0#164#148#0#1'<' +#242#0#2#0#1#0#2#0#1#0#1'<'#242#0#0#164#148#0#0'D'#136#0#0#4#128#0#0#4#128#0 +#0#4#128#0#0#4#128#0#0#7#128#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#255#255#255#255#255#255#255#255#248#127 +#255#255#248#127#255#255#248#127#255#255#248#127#255#255#248#127#255#255#184 +'w'#255#255#24'c'#255#254#0#1#255#252#0#0#255#252#0#0#255#254#0#1#255#255#24 +'c'#255#255#184'w'#255#255#248#127#255#255#248#127#255#255#248#127#255#255 +#248#127#255#255#248#127#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEALL','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#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#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#128#0#0#2'@'#0#0#4' '#0#0#8#16#0#0#16#8 +#0#0' '#4#0#0#127#254#0#0#160#5#0#1' '#4#128#2'!'#132'@'#4'"D '#8'$$'#16#8'$' +'$'#16#4'"D '#2'!'#132'@'#1' '#4#128#0#160#5#0#0#127#254#0#0' '#4#0#0#16#8#0 +#0#8#16#0#0#4' '#0#0#2'@'#0#0#1#128#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#254#127#255#255 +#252'?'#255#255#248#31#255#255#240#15#255#255#224#7#255#255#192#3#255#255#128 +#1#255#255#31#248#255#254#31#248#127#252#30'x?'#248#28'8'#31#240#24#24#15#240 +#24#24#15#248#28'8'#31#252#30'x?'#254#31#248#127#255#31#248#255#255#128#1#255 +#255#192#3#255#255#224#7#255#255#240#15#255#255#248#31#255#255#252'?'#255#255 +#254#127#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#15#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#240#0#0#0#0#0#0#0#0#0#0#15#240 +#0#15#0#15#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#0#240#0#0#0#0#0#0#0#0#15#0#0#240 +#15#0#0#15#0#0#0#0#0#0#0#0#15#0#0#240#15#0#0#15#0#0#0#0#0#0#0#0#0#240#15#0#15 +#0#0#240#0#0#0#0#0#0#0#0#0#15#240#0#15#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#0#15#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255#255#255#255 +#255#255#255#255#255#251#255#255#255#249#255#255#255#248#255#255#255#248#127 +#255#254'x?'#255#252'8'#31#255#248#24#15#255#248#24#15#255#252'8'#31#255#254 +'x?'#255#255#248#127#255#255#248#255#255#255#249#255#255#255#251#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#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEEW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#15#240#0#0#0#0#0#0#0#0 +#240#240#0#0#0#0#15#15#0#0#0#0#0#0#0#15#0#240#0#0#0#0#15#0#240#0#0#0#0#0#0 +#240#0#240#0#15#240#0#15#0#15#0#0#0#0#0#15#0#0#240#0#240#15#0#15#0#0#240#0#0 +#0#0#240#0#0#240#15#0#0#240#15#0#0#15#0#0#0#0#240#0#0#240#15#0#0#240#15#0#0 +#15#0#0#0#0#15#0#0#240#0#240#15#0#15#0#0#240#0#0#0#0#0#240#0#240#0#15#240#0 +#15#0#15#0#0#0#0#0#0#15#0#240#0#0#0#0#15#0#240#0#0#0#0#0#0#0#240#240#0#0#0#0 +#15#15#0#0#0#0#0#0#0#0#15#240#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#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#255#255#255#255#255#255#255#255#223#251 +#255#255#159#249#255#255#31#248#255#254#31#248#127#252#30'x?'#248#28'8'#31 +#240#24#24#15#240#24#24#15#248#28'8'#31#252#30'x?'#254#31#248#127#255#31#248 +#255#255#159#249#255#255#223#251#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#255 +#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEN','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#15#240#0#0#0#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#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#240#0#0#0#0#0#0#0#0#0 +#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#240 +#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#127#255#255#252'?'#255#255#248#31#255#255#248#31#255#255#252'?' +#255#255#254#127#255#255#255#255#255#255#0#0#255#255#128#1#255#255#192#3#255 +#255#224#7#255#255#240#15#255#255#248#31#255#255#252'?'#255#255#254#127#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVENE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#240#15#0#0#0#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#15#240#0#0 +#0#0#0#0#0#0#0#15#0#0#240#0#240#240#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#240#0#0 +#0#0#0#0#0#0#0#0#15#240#0#240#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0 +#0#0#0#0#0#0#0#0#0#240#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0 +#0#0#0#0#0#240#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0 +#0#255#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#254#127#255#255#252'?'#127#255#248#30#127#255#248#28#127#255#252 +'8'#127#255#254'p'#127#255#255#224#127#255#255#192#127#255#255#128#127#255 +#255#0#127#255#254#0#127#255#252#0#127#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 ]); LazarusResources.Add('VT_MOVENS','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240 +#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#255#255#255#255#255 +#255#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0 +#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#255#255 +#255#255#240#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0 +#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#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#254#127#255#255#252'?'#255 +#255#248#31#255#255#240#15#255#255#224#7#255#255#192#3#255#255#128#1#255#255 +#255#255#255#255#255#255#255#255#254#127#255#255#252'?'#255#255#248#31#255 +#255#248#31#255#255#252'?'#255#255#254#127#255#255#255#255#255#255#255#255 +#255#255#128#1#255#255#192#3#255#255#224#7#255#255#240#15#255#255#248#31#255 +#255#252'?'#255#255#254#127#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVENW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#15#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#15#240#0#15#0#0#240#0#0#0#0#0 +#0#0#0#0#15#15#0#15#0#0#240#0#0#0#0#0#0#0#0#0#15#0#240#0#240#15#0#0#0#0#0#0#0 +#0#0#0#15#0#15#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0 +#0#15#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0 +#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#255#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#127#255#254#252'?'#255#254'x'#31#255#254'8'#31#255#254#28'?'#255 +#254#14#127#255#254#7#255#255#254#3#255#255#254#1#255#255#254#0#255#255#254#0 +#127#255#254#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 ]); LazarusResources.Add('VT_MOVES','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240 +#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#240#0#0 +#0#0#0#0#0#0#255#255#255#255#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0 +#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0 +#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#254#127#255#255#252'?'#255#255#248#31#255#255#240#15#255 +#255#224#7#255#255#192#3#255#255#128#1#255#255#0#0#255#255#255#255#255#255 +#254#127#255#255#252'?'#255#255#248#31#255#255#248#31#255#255#252'?'#255#255 +#254#127#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#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVESE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#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#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#240#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#240#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0 +#0#0#0#0#0#0#0#0#0#0#0#240#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0 +#0#0#0#0#0#0#15#240#0#240#0#240#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#240#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#240#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#15#240#0#0#0#0 +#0#0#0#0#0#0#240#15#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#252 +#0#127#255#254#0#127#255#255#0#127#255#255#128#127#255#255#192#127#255#255 +#224#127#255#254'p'#127#255#252'8'#127#255#248#28#127#255#248#30#127#255#252 +'?'#127#255#254#127#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#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('VT_MOVESW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#15#255#255#255#255#255#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0 +#0#0#0#0#0#0#0#15#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0#0#0 +#0#0#0#15#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0 +#15#0#15#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#240#0#240#15#0#0#0#0#0#0#0#0#0#0 +#15#15#0#15#0#0#240#0#0#0#0#0#0#0#0#0#15#240#0#15#0#0#240#0#0#0#0#0#0#0#0#0 +#15#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#254#0'?'#255#254 +#0#127#255#254#0#255#255#254#1#255#255#254#3#255#255#254#7#255#255#254#14#127 +#255#254#28'?'#255#254'8'#31#255#254'x'#31#255#254#252'?'#255#255#254#127#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#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240 +#240#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#0#240#0 +#15#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#240#15#0#0#0#0#0#0#0#0#0#240#0#0#240 +#15#0#0#240#0#0#0#0#0#0#0#0#240#0#0#240#15#0#0#240#0#0#0#0#0#0#0#0#15#0#0#240 +#0#240#15#0#0#0#0#0#0#0#0#0#0#240#0#240#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#240 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255 +#255#255#255#255#255#255#255#223#255#255#255#159#255#255#255#31#255#255#254 +#31#255#255#252#30#127#255#248#28'?'#255#240#24#31#255#240#24#31#255#248#28 +'?'#255#252#30#127#255#254#31#255#255#255#31#255#255#255#159#255#255#255#223 +#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#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_XPBUTTONPLUS','BMP',[ 'BM4'#1#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#9#0#0#0#9#0#0#0#1#0#24#0#0#0#0#0#0#0#0#0 +#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#211#194#176#181#152'x'#181#152'x'#181 +#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#181#152'x' +#191#204#210#174#190#198#168#184#194#167#184#193#167#184#193#166#183#192#170 +#186#195#181#152'x'#0#181#152'x'#217#225#228#207#216#220#201#211#216#0#0#0 +#198#209#214#192#204#210#187#200#207#181#152'x'#0#181#152'x'#238#242#242#236 +#240#240#231#237#237#0#0#0#227#233#234#217#224#227#204#214#219#181#152'x'#0 +#181#152'x'#241#245#245#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#210#219#223#181#152'x' +#0#181#152'x'#245#247#247#245#247#247#244#247#247#0#0#0#244#246#246#235#240 +#241#218#225#229#181#152'x'#0#181#152'x'#251#252#252#251#253#253#251#253#253 +#0#0#0#251#252#252#250#252#252#243#246#247#181#152'x'#0#181#152'x'#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#181#152'x'#0#211#194#176#181#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152 +'x'#181#152'x'#181#152'x'#211#194#176#0#0#0 ]); LazarusResources.Add('VT_XPBUTTONMINUS','BMP',[ 'BM4'#1#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#9#0#0#0#9#0#0#0#1#0#24#0#0#0#0#0#0#0#0#0 +#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#211#194#176#181#152'x'#181#152'x'#181 +#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#181#152'x' +#191#204#210#174#190#198#168#184#194#167#184#193#167#184#193#166#183#192#170 +#186#195#181#152'x'#0#181#152'x'#217#225#228#207#216#220#201#211#216#199#210 +#215#198#209#214#192#204#210#187#200#207#181#152'x'#0#181#152'x'#238#242#242 +#236#240#240#231#237#237#230#235#236#227#233#234#217#224#227#204#214#219#181 +#152'x'#0#181#152'x'#241#245#245#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#210#219#223 +#181#152'x'#0#181#152'x'#245#247#247#245#247#247#244#247#247#244#247#247#244 +#246#246#235#240#241#218#225#229#181#152'x'#0#181#152'x'#251#252#252#251#253 +#253#251#253#253#251#253#253#251#252#252#250#252#252#243#246#247#181#152'x'#0 +#181#152'x'#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#181#152'x'#0#211#194#176#181#152'x'#181#152'x'#181#152 +'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#0#0 ]); LazarusResources.Add('VT_CHECK_LIGHT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#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#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""332"""""332"""""332"""""332""' +'"""332"""""332"""""332"""""332"""#33332""#33332""#33332""#33332""#33332""#3' +'3332""#33332""#33332""#33332""#33332""#33332""#33332"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""3'#17#17#19'""""3'#17#17#19'""""3333"""' +'"3333""""3'#17#17#19'""""3'#17#17#19'""""3333""""3333"""4'#17#17#17#17#19'"' +'"4'#17#17#17#17#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19 +'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!3' +'33333B!333333B$333333'#18'!333333B"""""""""#A'#17#17#17'2""#A'#17#17#17'2""' +'#C3332""#C3332""#A'#19'3'#17'2""#A'#19'3'#17'2""#C3332""#C3332""4'#17#17#17 +#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'A'#17'D'#19'""4'#20'A'#17 +'D'#19'""44C3D3""44C3D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333' +'333B!333333B$333333'#18'!333333B"""""""""$'#17#17#17#17#19'""$'#17#17#17#17 +#19'""$33333""$33333""$'#17'DDA'#19'""$'#17'DDA'#19'""$3DDC3""$3DDC3""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'D'#20'D'#19'""4'#20 +'D'#20'D'#19'""44D4D3""44D4D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD' +'3"!333333B!333333B$333'#3'33'#18'!333333B"""""""""4'#17#17#17#17#19'""4'#17 +#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC' +'3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44D' +'DD3"!330333B!330333B$330'#0'33'#18'!334333B"""""""""4'#17#17#17#17#19'""4' +#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43' +'DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17#20'D'#17 +#19'""4'#17#20'D'#17#19'""434D33""434D33""4'#20'DDD'#19'""4'#20'DDD'#19'""44' +'DDD3""44DDD3"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33DC33B"""""""""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC' +#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17'DDA'#19'""4'#17'DDA'#19'""43DDC3""43DDC3""4'#20'DDD'#19'""4'#20'DDD' +#19'""44DDD3""44DDD3"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B""""""' +'"""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433' +'333""433333""4'#20'D'#20'D'#19'""4'#20'D'#20'D'#19'""44D4D3""44D4D3""4'#20 +'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$33333' +'3'#18'!3DDDC3B"""""""""$1'#17#17#17'2""$1'#17#17#17'2""$33332""$33332""$1' +#19'3'#17'2""$1'#19'3'#17'2""$33332""$33332""4'#17#17#17#17#19'""4'#17#17#17 +#17#19'""433333""433333""4'#20'A'#17'D'#19'""4'#20'A'#17'D'#19'""44C3D3""44C' +'3D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333333B!333333B$333333' +#18'!333333B"""""""""#C'#17#17#20'2""#C'#17#17#20'2""#C3342""#C3342""#C'#17 +#17#20'2""#C'#17#17#20'2""#C3342""#C3342""4'#17#17#17#17#19'""4'#17#17#17#17 +#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!333333B!333333B$3' +'33333'#18'!333333B""""""""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC"""' +'"4DDC""""4DDC"""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DD' +'DDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC"!333333B!333333B$333333'#18'!333333B"""' +'""""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""#3333' +'2""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""' +'#33332""#33332"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17 +#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_CHECK_DARK','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#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#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""DDB"""""DDB"""""DDB"""""DDB""' +'"""DDB"""""DDB"""""DDB"""""DDB"""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$D' +'DDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""D'#17#17#20'""""D'#17#17#20'""""D334"""' +'"D334""""D'#17#17#20'""""D'#17#17#20'""""D334""""D334"""@'#17#17#17#17#20'"' +'"@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20 +'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!3' +'33333B!333333B$333333'#18'!333333B"""""""""$'#1#17#17#17'B""$'#1#17#17#17'B' +'""$'#3'333B""$'#3'333B""$'#1#20'D'#17'B""$'#1#20'D'#17'B""$'#3'4D3B""$'#3'4' +'D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#16#1#17#0#20 +'""@'#16#1#17#0#20'""@0'#3'3'#0'4""@0'#3'3'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0 +#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18'!333333B""""""""" '#17 +#17#17#17#20'"" '#17#17#17#17#20'"" 33334"" 33334"" '#17#0#0#1#20'"" '#17#0#0 +#1#20'"" 3'#0#0#3'4"" 3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3' +'3334""@33334""@'#16#0#16#0#20'""@'#16#0#16#0#20'""@0'#0'0'#0'4""@0'#0'0'#0 +'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$3' +'33'#3'33'#18'!333333B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3333' +'4""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17 +#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0 +#1#20'""@3'#0#0#3'4""@3'#0#0#3'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0 +'4""@4DDD4"!330333B!330333B$330'#0'33'#18'!334333B"""""""""@'#17#17#17#17#20 +'""@'#17#17#17#17#20'""@33334""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4' +#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@3333' +'4""@'#17#16#0#17#20'""@'#17#16#0#17#20'""@30'#0'34""@30'#0'34""@'#16#0#0#0 +#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3 +'3'#18'!33DC33B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@333' +'34""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17 +#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20 +'""@3'#0#0#3'4""@3'#0#0#3'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""' +'@4DDD4"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B"""""""""@'#17#17#17 +#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20 +'""@3'#0#0#3'4""@3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334"' +'"@33334""@'#16#0#16#0#20'""@'#16#0#16#0#20'""@0'#0'0'#0'4""@0'#0'0'#0'4""@' +#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!3'#0#0#0#3'3B!3'#0#0#0#3 +'3B$333333'#18'!3DDDC3B""""""""" A'#17#17#17'B"" A'#17#17#17'B"" C333B"" C33' +'3B"" A'#20'D'#17'B"" A'#20'D'#17'B"" C4D3B"" C4D3B""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#16#1#17#0#20'""@'#16#1#17#0#20'""@0'#3 +'3'#0'4""@0'#3'3'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4' +'"!333333B!333333B$333333'#18'!333333B"""""""""$'#4#17#17#16'B""$'#4#17#17#16 +'B""$'#4'330B""$'#4'330B""$'#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4 +'330B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17 +#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17 +#20'""@33334""@33334"!333333B!333333B$333333'#18'!333333B""""""""""@'#0#0#4 +'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0 +#4'""""@'#0#0#4'"""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'"!333333B!333333B$333333'#18'!' +'333333B"""""""""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""""D' +'D""""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB' +'""$DDDDB""$DDDDB""$DDDDB"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$D' +'DDDDDB!'#17#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' ,'"""""""""""""""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_FLAT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#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#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""'#0#0'""""""'#0#0'""""""'#0#0 +'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""" '#0#0#0#0#0 +#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0 +#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#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#2'"'#0#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#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0 +#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#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#2'"'#0'33333'#2'"' +#0#0#0#0#0#0#2'""""""""" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0 +'33'#0#2'"" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2'" ' +#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17#17#17#0 +'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'""'#0#17#17#17#17#16#2'"'#0 +#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'33330'#2'""""""""" '#1#17#17#16 +#2'"" '#1#17#17#16#2'"" '#3'330'#2'"" '#3'330'#2'"" '#1#17#17#16#2'"" '#1#17 +#17#16#2'"" '#3'330'#2'"" '#3'330'#2'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0 +'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#1#17#17#0'" '#1#17#1#17#17#0'" '#3'3'#3 +'33'#0'" '#3'3'#3'33'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3 +'DDDC'#0'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2 +'"'#0'33330'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0 +'""'#0'3333'#0'""'#0#17#16#1#17#0'""'#0#17#16#1#17#0'""'#0'30'#3'3'#0'""'#0 +'30'#3'3'#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333' +#0'" '#1#16#0#17#17#0'" '#1#16#0#17#17#0'" '#3'0'#0'33'#0'" '#3'0'#0'33'#0'"' +' '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#17#1 +#17#16#2'"'#0#17#17#1#17#16#2'"'#0#17#17#1#17#19#2'"'#0'33'#3'30'#2'""""""""' +'"'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0'""'#0'3333'#0'""'#0#17 +#0#0#17#0'""'#0#17#0#0#17#0'""'#0'3'#0#0'3'#0'""'#0'3'#0#0'3'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#0#0#1#17#0'" ' +#1#0#0#1#17#0'" '#3#0#0#3'3'#0'" '#3#0#0#3'3'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1 +#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#16#0#17#16#2'"'#0#17#16#0#17#16#2 +'"'#0#17#16#0#17#19#2'"'#0'30'#0'30'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17 +#17#17#0'""'#0'3333'#0'""'#0'3333'#0'""'#0#17#0#0#17#0'""'#0#17#0#0#17#0'""' +#0'3'#0#0'3'#0'""'#0'3'#0#0'3'#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" ' +#3'3333'#0'" '#3'3333'#0'" '#1#0#16#0#17#0'" '#1#0#16#0#17#0'" '#3#0'0'#0'3' +#0'" '#3#0'0'#0'3'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'D' +'DDC'#0'""'#0#17#0#0#1#16#2'"'#0#17#0#0#1#16#2'"'#0#17#0#0#1#19#2'"'#0'3'#0#0 +#3'0'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0'""'#0'3' +'333'#0'""'#0#17#16#1#17#0'""'#0#17#16#1#17#0'""'#0'30'#3'3'#0'""'#0'30'#3'3' +#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1 +#1#17#0#1#0'" '#1#1#17#0#1#0'" '#3#3'3'#0#3#0'" '#3#3'3'#0#3#0'" '#1#0#0#0#1 +#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#16#0#0#0#16#2'"'#0#16 +#0#0#0#16#2'"'#0#16#0#0#0#19#2'"'#0'0'#0#0#0'0'#2'""""""""" '#1#17#17#16#2'"' +'" '#1#17#17#16#2'"" '#3'330'#2'"" '#3'330'#2'"" '#1#17#17#16#2'"" '#1#17#17 +#16#2'"" '#3'330'#2'"" '#3'330'#2'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" ' +#3'3333'#0'" '#3'3333'#0'" '#1#17#17#16#1#0'" '#1#17#17#16#1#0'" '#3'330'#3#0 +'" '#3'330'#3#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0 +'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'333' +'30'#2'""""""""" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2 +'"" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17#17#1#0 +'" '#1#17#17#17#1#0'" '#3'333'#3#0'" '#3'333'#3#0'" '#1#0#0#0#1#0'" '#1#0#0#0 +#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16 +#2'"'#0#17#17#17#17#19#2'"'#0'33330'#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'"" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" ' +#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'""'#0#17#17#17#17#16 +#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'33330'#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#2'"'#0#0 +#0#0#0#0#2'"'#0#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#0#0'" '#0#0#0#0#0#0'" '#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#2'"'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_TICK_DARK','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#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#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""DDB"""""DDB"""""DDB"""""DDB""' +'"""DDB"""""DDB"""""DDB"""""DDB"""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$D' +'DDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""D'#17#17#20'""""D'#17#17#20'""""D334"""' +'"D334""""D'#17#17#20'""""D'#17#17#20'""""D334""""D334"""@'#17#17#17#17#20'"' +'"@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20 +'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!3' +'33333B!333333B$333333'#18'!333333B"""""""""$'#1#17#17#17'B""$'#1#17#17#17'B' +'""$'#3'333B""$'#3'333B""$'#1#20'D'#17'B""$'#1#20'D'#17'B""$'#3'4D3B""$'#3'4' +'D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#16#17#17 +#20'""@'#17#16#17#17#20'""@30334""@30334""@'#16#0#0#0#20'""@'#16#0#0#0#20'""' +'@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18'!333333B""""""""" '#17#17#17 +#17#20'"" '#17#17#17#17#20'"" 33334"" 33334"" '#17#0#0#1#20'"" '#17#0#0#1#20 +'"" 3'#0#0#3'4"" 3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334"' +'"@33334""@'#17#0#1#17#20'""@'#17#0#1#17#20'""@3'#0#3'34""@3'#0#3'34""@'#16#0 +#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333'#3'33'#18 +'!333333B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@' +#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20 +'""@'#17#17#17#17#20'""@33334""@33334""@'#16#0#0#17#20'""@'#16#0#0#17#20'""@' +'0'#0#0'34""@0'#0#0'34""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD' +'4"!330333B!330333B$330'#0'33'#18'!334333B"""""""""@'#17#17#17#17#20'""@'#17 +#17#17#17#20'""@33334""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4' +'""@4'#0#0#4'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#16 +#1#0#1#20'""@'#16#1#0#1#20'""@0'#3#0#3'4""@0'#3#0#3'4""@'#16#0#0#0#20'""@'#16 +#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33' +'DC33B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#20 +#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#17#17#16#0#20'""@'#17#17#16#0#20'""@330' +#0'4""@330'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!30'#0 +#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B"""""""""@'#17#17#17#17#20'""@'#17 +#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20'""@3'#0#0#3'4' +'""@3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17 +#17#17#0#20'""@'#17#17#17#0#20'""@333'#0'4""@333'#0'4""@'#16#0#0#0#20'""@'#16 +#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$333333'#18'!3DD' +'DC3B""""""""" A'#17#17#17'B"" A'#17#17#17'B"" C333B"" C333B"" A'#20'D'#17'B' +'"" A'#20'D'#17'B"" C4D3B"" C4D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@' +'33334""@33334""@'#17#17#17#16#20'""@'#17#17#17#16#20'""@33304""@33304""@'#16 +#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18 +'!333333B"""""""""$'#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4'330B""$' +#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4'330B""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3' +'3334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!33333' +'3B!333333B$333333'#18'!333333B""""""""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4 +'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'"""@'#0#0#0 +#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0 +#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'"!333333B!333333B$333333'#18'!333333B"""""""""""DD""""""DD""' +'""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""$DDDDB""$DDDDB""$DDDDB""$' +'DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!'#17 +#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17#17#17#17#17#17#18'"' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' ,'""""""""""""""""""""""""' ]); LazarusResources.Add('VT_TICK_LIGHT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#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#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""332"""""332"""""332"""""332""' +'"""332"""""332"""""332"""""332"""#33332""#33332""#33332""#33332""#33332""#3' +'3332""#33332""#33332""#33332""#33332""#33332""#33332"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""3'#17#17#19'""""3'#17#17#19'""""3333"""' +'"3333""""3'#17#17#19'""""3'#17#17#19'""""3333""""3333"""4'#17#17#17#17#19'"' +'"4'#17#17#17#17#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19 +'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!3' +'33333B!333333B$333333'#18'!333333B"""""""""#A'#17#17#17'2""#A'#17#17#17'2""' +'#C3332""#C3332""#A'#19'3'#17'2""#A'#19'3'#17'2""#C3332""#C3332""4'#17#17#17 +#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17#20#17#17#19'""4'#17#20#17 +#17#19'""434333""434333""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333' +'333B!333333B$333333'#18'!333333B"""""""""$'#17#17#17#17#19'""$'#17#17#17#17 +#19'""$33333""$33333""$'#17'DDA'#19'""$'#17'DDA'#19'""$3DDC3""$3DDC3""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DA'#17#19'""4'#17'D' +'A'#17#19'""43DC33""43DC33""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!' +'333333B!333333B$333'#3'33'#18'!333333B"""""""""4'#17#17#17#17#19'""4'#17#17 +#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC3""' +'4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'DD'#17#19'""4' +#20'DD'#17#19'""44DD33""44DD33""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DD' +'D3"!330333B!330333B$330'#0'33'#18'!334333B"""""""""4'#17#17#17#17#19'""4'#17 +#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC' +'3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'ADA'#19'""' +'4'#20'ADA'#19'""44CDC3""44CDC3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44D' +'DD3"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33DC33B"""""""""4'#17#17#17#17 +#19'""4'#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43' +'DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17 +#17#20'D'#19'""4'#17#17#20'D'#19'""4334D3""4334D3""4'#20'DDD'#19'""4'#20'DDD' +#19'""44DDD3""44DDD3"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B""""""' +'"""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433' +'333""433333""4'#17#17#17'D'#19'""4'#17#17#17'D'#19'""4333D3""4333D3""4'#20 +'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$33333' +'3'#18'!3DDDC3B"""""""""$1'#17#17#17'2""$1'#17#17#17'2""$33332""$33332""$1' +#19'3'#17'2""$1'#19'3'#17'2""$33332""$33332""4'#17#17#17#17#19'""4'#17#17#17 +#17#19'""433333""433333""4'#17#17#17#20#19'""4'#17#17#17#20#19'""433343""433' +'343""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333333B!333333B$333333' +#18'!333333B"""""""""#C'#17#17#20'2""#C'#17#17#20'2""#C3342""#C3342""#C'#17 +#17#20'2""#C'#17#17#20'2""#C3342""#C3342""4'#17#17#17#17#19'""4'#17#17#17#17 +#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!333333B!333333B$3' +'33333'#18'!333333B""""""""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC"""' +'"4DDC""""4DDC"""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DD' +'DDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC"!333333B!333333B$333333'#18'!333333B"""' +'""""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""#3333' +'2""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""' +'#33332""#33332"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17 +#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_UTILITIES','BMP',[ 'BM6'#13#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#144#0#0#0#16#0#0#0#1#0#8#0#0#0#0#0#0#0 +#0#0#19#11#0#0#19#11#0#0#0#1#0#0#0#1#0#0'www'#255'%r'#207#255'*u'#208#255#255 +#0#255#255#246#24#248#255#225'V'#232#255'O'#145#227#255'X'#150#227#255#134 +#134#134#255#140#140#140#255#147#147#147#255#154#154#154#255#190#190#190#255 +#184#199#203#255#197#197#197#255#204#204#204#255#195#210#213#255#221#221#221 +#255#240#251#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#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#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#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#17#15#14#14#14#15#17#3#3#3#3#3 +#3#3#3#3#17#15#14#14#14#15#17#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#3#3#3#3#3#3#3#3#3#3#3#3#3#3#17#12#11#9#9#9#11#12#17#3#3#3#3#3#3 +#3#17#12#11#9#9#9#11#12#17#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#3#3#3#3#3#3#3#3#3#3#3#3#17#12#18#18#18#18#18#0#10#12#17#3#3#3#3#3 +#17#12#18#18#18#18#18#0#10#12#17#3#3#3#3#3#3#3#3#3#3#19#3#3#3#3#3#3#3#3#3#3#3 +#19#19#19#19#19#19#19#19#19#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#15#18#18#18#18#8#18#18#0#11#15 +#3#3#3#3#3#15#18#18#8#18#18#18#18#0#11#15#3#3#3#3#3#3#3#3#3#8#14#19#3#3#3#3#3 +#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#3#11#3#3#3#3#3#3#3#3#3 +#3#3#11#11#11#11#11#11#11#11#11#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#18#18#18#18#8 +#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#18#18#18#18#9#14#3#3#3#3#3#3#3#3#3#8 +#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#11#11 +#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#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#18#18#18#8#8#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#8#18#18#18#9#14#3#3 +#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3 +#3#3#3#3#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#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#18#18#8#8#8#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#8#8 +#18#18#9#14#3#3#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#19 +#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#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#18#18#18#8#8#8#18#18#18#11#15#3#3#3#3#3#18 +#18#18#8#8#8#18#18#18#11#15#3#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3 +#3#3#3#8#14#19#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3 +#3#3#3#11#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#18#18#18#18#8#8#18#18#18#12 +#17#3#3#3#3#3#18#18#18#8#8#18#18#18#18#12#17#3#3#3#3#3#3#3#8#14#14#14#14#14 +#19#3#3#3#3#3#3#3#3#3#3#3#8#14#19#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#18#18#18#18#8#18 +#18#12#17#3#3#3#3#3#3#3#18#18#8#18#18#18#18#12#17#3#3#3#3#3#3#3#8#8#8#8#8#8#8 +#8#19#3#3#3#3#3#3#3#3#3#3#3#19#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#18#18#18#18#18 +#15#17#3#3#3#3#3#3#3#3#3#18#18#18#18#18#15#17#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#4#5#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#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#13#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1 +#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#13#13#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 +#16#1#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6 +#6#6#6#6#6#6#6#6#2#16#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#1#6#7#7#7#7#7#7 +#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7 +#6#1 ]); LazarusResources.Add('VT_XP','BMP',[ 'BM8K'#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#24#0#0#0#0#0#0#0#0 +#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224#214#231#221#211 +#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233 +#224#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#238#231#223#233#224#214#231#221#211#233#224#214#238#231#223#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224#214#231#221#211#233 +#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224 +#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#238#231#223#233#224#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#225#217#237'_'#140'y#oL'#6'b7'#6 +'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDX'#138't'#238#244#250#255 +#0#255#236#216#223'_'#140'y#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6 +'b7'#6'b7'#24'iDX'#138't'#248#241#243#255#0#255#225#217#237'_'#140'y#oL'#6'b' +'7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDX'#138't'#238#244 +#250#255#0#255#255#255#255#184#196#202#184#196#202#184#196#202#184#196#202 +#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184 +#196#202#184#196#202#184#196#202#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#226#214#201#220#206#191#217#202#186#216#201#184#217#202#186#220 +#206#191#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#224#212#198#217#201#185#213#196#178#211 +#194#175#213#196#178#217#201#185#224#212#198#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#220 +#206#191#217#202#186#216#201#184#217#202#186#220#206#191#226#214#201#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#226#214#201#220#206#191#217#202#186#216#201#184#217#202 +#186#220#206#191#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#220#206#191#217#202 +#186#216#201#184#217#202#186#220#206#191#226#214#201#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214 +#201#220#206#191#217#202#186#216#201#184#217#202#186#220#206#191#226#214#201 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255'V'#17#0'V'#17#0'U'#19#0'U'#16#0'V'#17#0'R'#14#1'W'#16#2'T'#18#0'U'#15#2 +'U'#16#0'W'#18#0'T'#18#0'V'#17#0#255#0#255#255#0#255#255#0#255'W'#19#0'W'#18 +#1'Y'#19#2'^'#18#0'W'#20#0'V'#18#0'W'#18#1'V'#17#0'W'#19#0'X'#17#3'U'#21#0'Z' +#21#2'X'#18#1#255#0#255#255#0#255#255#0#255'V'#19#0'T'#19#4'W'#18#1'W'#18#1 +'Z'#18#0'X'#19#0'W'#17#0'W'#18#0'Z'#18#1'X'#19#0'V'#22#0'W'#18#0'X'#20#1#255 +#0#255#255#0#255#255#0#255#168#183#185#170#183#185#171#184#186#169#184#186 +#168#183#185#170#183#185#169#182#184#168#183#185#169#184#187#170#183#185#171 +#184#186#168#183#185#168#183#185#255#0#255#255#0#255#255#0#255'W'#18#0'U'#18 +#3'R'#19#0'V'#18#0'U'#19#0'U'#15#0'U'#19#0'T'#18#0'S'#17#0'Y'#17#0'T'#18#0'U' +#16#1'V'#19#0#255#0#255#255#0#255#255#0#255'U'#17#4'Y'#20#0'W'#20#0'Y'#16#2 +'U'#17#0'Z'#17#3'V'#15#1'Z'#19#0'U'#19#1'U'#17#0'X'#18#1'X'#20#1'Y'#17#0#255 +#0#255#255#0#255#255#0#255'X'#19#0'U'#19#0'X'#18#1'W'#20#0'U'#16#1'X'#19#0'X' +#18#1'U'#19#0'Y'#17#0'X'#21#0'V'#18#0'U'#19#0'Y'#20#1#255#0#255#255#0#255#255 +#0#255#168#183#185#170#183#185#171#183#183#170#183#185#171#184#186#169#182 +#184#170#183#185#169#185#184#169#182#184#170#183#185#168#183#185#167#182#184 +#170#183#185#255#0#255#255#0#255#255#0#255'W'#18#0'U'#18#3'R'#19#0'V'#18#0'U' +#19#0'U'#15#0'U'#19#0'T'#18#0'S'#17#0'Y'#17#0'T'#18#0'U'#16#1'V'#19#0#255#0 +#255#255#0#255#255#0#255'U'#17#4'Y'#20#0'W'#20#0'Y'#16#2'U'#17#0'Z'#17#3'V' +#15#1'Z'#19#0'U'#19#1'U'#17#0'X'#18#1'X'#20#1'Y'#17#0#255#0#255#255#0#255#255 +#0#255'X'#19#0'U'#19#0'X'#18#1'W'#20#0'U'#16#1'X'#19#0'X'#18#1'U'#19#0'Y'#17 +#0'X'#21#0'V'#18#0'U'#19#0'Y'#20#1#255#0#255#255#0#255#255#0#255#168#183#185 +#170#183#185#171#183#183#170#183#185#171#184#186#169#182#184#170#183#185#169 +#185#184#169#182#184#170#183#185#168#183#185#167#182#184#170#183#185#255#0 +#255#255#0#255#255#0#255'N'#131'lD}c'#152#178#199#184#209#227#184#209#227#184 +#209#227#184#209#227#184#209#227#184#209#227#184#209#227#183#209#226#182#208 +#226#164#177#201'B|aU'#136'r'#255#0#255'N'#131'ludu%r'#207'%r'#207'%r'#207'%' +'r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'rbsU'#136'r' +#255#0#255'N'#131'lG'#130'f'#166#203#216#226#243#246#228#244#248#228#244#248 +#228#244#248#228#244#248#228#244#248#228#244#248#228#245#248#229#245#248#190 +#218#228'H'#132'iU'#136'r'#255#0#255#184#196#202#201#211#217#221#231#235#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#225#235#239#201#211#217#184#196#202#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#223#210#196#185#153#131#154'jN'#129'D#q,'#8#129'D#'#154 +'jN'#185#153#131#223#210#196#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#220#205#190#181#147'{'#151'eH'#127'A'#31'q,'#7#127 +'A'#31#151'eH'#181#147'{'#220#205#190#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#223#210#196#185#153#131#154'jN'#129'D#q,'#8 +#129'D#'#154'jN'#185#153#131#223#210#196#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#213#221#222#197#208 +#210#188#200#203#197#208#210#213#221#222#233#237#238#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196#185#153 +#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196#185 +#153#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196 +#185#153#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#208#216#215#190#201#199#180#192#190#190#201#199#208#216#215#230 +#234#234#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255'V'#17#0#244#249#247#248#247#251#248#248#248#248#248#248#251#249#249#247 +#248#246#248#248#248#247#249#249#248#248#248#245#247#248#248#247#249'V'#17#0 +#255#0#255#255#0#255#255#0#255'U'#20#0#136#195#251#132#193#249#130#194#248 +#135#195#249#135#195#249#132#199#244#138#195#250#132#196#244#136#191#252#130 +#195#246#132#197#248'X'#20#0#255#0#255#255#0#255#255#0#255'Z'#18#0#201#210 +#213#197#211#210#198#210#210#198#210#214#196#208#208#198#212#211#198#209#213 +#199#211#213#198#209#213#197#211#210#200#213#211'V'#20#2#255#0#255#255#0#255 +#255#0#255#167#182#184#226#239#241#227#239#241#225#238#240#225#238#240#225 +#237#239#226#239#241#225#238#240#225#238#240#226#238#240#226#238#240#227#240 +#242#169#182#184#255#0#255#255#0#255#255#0#255'V'#17#0#251#249#248#250#248 +#247#245#247#247#244#250#245#248#249#247#250#248#248#248#247#249#247#249#250 +#247#246#248#250#248#247#249#247#246'V'#17#2#255#0#255#255#0#255#255#0#255'X' +#18#1#133#196#246#130#194#249#132#195#245#137#196#246#138#196#248#135#198#248 ,#132#197#248#136#196#250#133#192#248#136#196#250#132#195#246'Z'#20#0#255#0 +#255#255#0#255#255#0#255'W'#18#1#197#213#212#198#210#216#197#210#208#199#210 +#214#199#211#213#196#208#212#200#210#210#192#210#209#197#209#211#200#211#215 +#199#211#213'X'#18#1#255#0#255#255#0#255#255#0#255#170#183#185#227#239#239 +#227#237#237#226#238#238#226#238#240#227#239#241#225#237#239#226#240#239#227 +#239#241#227#239#241#225#238#240#226#239#241#171#184#186#255#0#255#255#0#255 +#255#0#255'V'#17#0#251#249#248#250#248#247#245#247#247#244#250#245#248#249 +#247#250#248#248#248#247#249#247#249#250#247#246#248#250#248#247#249#247#246 +'V'#17#2#255#0#255#255#0#255#255#0#255'X'#18#1#133#196#246#130#194#249#132 +#195#245#137#196#246#138#196#248#135#198#248#132#197#248#136#196#250#133#192 +#248#136#196#250#132#195#246'Z'#20#0#255#0#255#255#0#255#255#0#255'W'#18#1 +#197#213#212#198#210#216#197#210#208#199#210#214#199#211#213#196#208#212#200 +#210#210#192#210#209#197#209#211#200#211#215#199#211#213'X'#18#1#255#0#255 +#255#0#255#255#0#255#170#183#185#227#239#239#227#237#237#226#238#238#226#238 +#240#227#239#241#225#237#239#226#240#239#227#239#241#227#239#241#225#238#240 +#226#239#241#171#184#186#255#0#255#255#0#255#255#0#255#24'iD'#179#200#215#201 +#225#236#200#224#234#200#224#235#201#225#236#201#225#236#201#225#236#201#225 +#236#201#225#236#200#224#235#198#221#234#193#216#230#170#185#205#24'iD'#255#0 +#255#24'iDc'#153#221'O'#145#227'O'#145#227'N'#144#227'O'#145#227'O'#145#227 +'O'#145#227'O'#145#227'O'#145#227'O'#145#227'O'#145#227'O'#145#227'a'#152#219 +#24'iD'#255#0#255#24'iD'#176#196#212#211#233#238#216#236#242#217#237#242#217 +#237#242#216#236#242#216#236#242#216#236#242#217#237#242#217#237#242#219#238 +#243#221#238#244#183#208#222#24'iD'#255#0#255#184#196#202#225#235#239#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#225#235#239#184#196#202#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249#247 +#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#210#190#173#158'pT'#129'g`~'#147#176'q'#167 +#223'c'#171#243'q'#167#223'~'#147#176#129'g`'#158'pT'#210#190#173#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#213#195#179#162'v['#150'kR'#180#161 +#147#196#192#187#200#203#203#196#192#187#180#161#147#150'kR'#162'v['#213#195 +#179#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#217#224#226 +#208#217#219#228#233#234#244#246#247#254#254#254#244#246#247#228#233#234#208 +#217#219#217#224#226#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249#247#245#228#215 +#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249 +#247#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143 +#228#215#207#249#247#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#213#220#219#203 +#212#210#225#230#229#243#245#245#253#254#254#243#245#245#225#230#229#203#212 +#210#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +'V'#17#0#246#248#249#248#248#248#246#249#247#248#248#248#249#247#247#249#248 +#250#246#248#249#250#248#248#246#248#248#248#249#247#249#249#249'V'#17#0#255 +#0#255#255#0#255#255#0#255'Y'#20#1#129#195#246#248#248#248#244#249#247#245 +#247#247#249#248#252#249#246#248#250#249#245#244#249#248#248#247#249#250#248 +#248#133#196#246'W'#18#3#255#0#255#255#0#255#255#0#255'W'#18#1#197#209#213 +#195#208#210#196#205#209#194#204#211#194#205#209#196#205#209#193#207#206#194 +#206#208#195#208#210#195#207#209#199#210#214'W'#18#1#255#0#255#255#0#255#255 +#0#255#170#183#185#224#237#239#225#237#239#225#237#239#224#236#238#225#237 +#239#224#236#238#223#236#238#225#237#239#224#236#238#224#236#236#226#238#238 +#170#183#185#255#0#255#255#0#255#255#0#255'T'#18#0#245#247#247#248#248#248 +#248#248#248#245#248#252#251#247#252#248#247#249#250#248#247#246#248#248#248 +#249#245#246#248#248#243#248#246'V'#17#0#255#0#255#255#0#255#255#0#255'X'#19 +#0#134#197#248#250#249#245#245#247#247#244#249#248#244#249#247#251#247#252 +#246#248#248#246#250#245#246#248#248#249#247#247#132#196#250'W'#19#0#255#0 +#255#255#0#255#255#0#255'X'#21#0#199#210#214#195#205#212#197#209#211#202#208 +#207#196#209#211#203#208#211#196#205#209#194#207#209#202#205#213#194#206#210 +#200#213#215'Z'#18#0#255#0#255#255#0#255#255#0#255#168#183#186#224#237#239 +#225#237#237#225#237#237#225#237#239#227#239#241#227#239#241#225#238#240#224 +#236#238#224#236#238#227#239#241#226#239#241#169#182#184#255#0#255#255#0#255 ,#255#0#255'T'#18#0#245#247#247#248#248#248#248#248#248#245#248#252#251#247 +#252#248#247#249#250#248#247#246#248#248#248#249#245#246#248#248#243#248#246 +'V'#17#0#255#0#255#255#0#255#255#0#255'X'#19#0#134#197#248#250#249#245#245 +#247#247#244#249#248#244#249#247#251#247#252#246#248#248#246#250#245#246#248 +#248#249#247#247#132#196#250'W'#19#0#255#0#255#255#0#255#255#0#255'X'#21#0 +#199#210#214#195#205#212#197#209#211#202#208#207#196#209#211#203#208#211#196 +#205#209#194#207#209#202#205#213#194#206#210#200#213#215'Z'#18#0#255#0#255 +#255#0#255#255#0#255#168#183#186#224#237#239#225#237#237#225#237#237#225#237 +#239#227#239#241#227#239#241#225#238#240#224#236#238#224#236#238#227#239#241 +#226#239#241#169#182#184#255#0#255#255#0#255#255#0#255#6'b7'#225#243#246#224 +#243#246#224#243#246#224#243#246#224#243#246#224#243#246#224#243#246#224#243 +#246#224#243#246#224#243#246#222#241#246#214#235#242#204#228#238#6'b7'#255#0 +#255#6'b7X'#150#227'X'#150#227#224#242#245#224#242#245#224#242#245#224#242 +#245#224#242#245#224#242#245#224#242#245#224#242#245#222#240#245'X'#150#227 +'V'#149#227#6'b7'#255#0#255#6'b7'#190#213#227#197#220#231#201#225#234#202#226 +#234#202#226#234#202#226#234#202#226#234#202#226#234#202#226#234#202#226#234 +#203#227#235#206#228#236#207#229#237#6'b7'#255#0#255#184#196#202#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#184#196 +#202#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#226#214#201#161'tY'#178#141'v'#249#248#245#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#249#248#245#178#141'v'#161'tY'#226 +#214#201#255#0#255#255#0#255#255#0#255#224#212#198#158'pT'#136#135#143'~'#180 +#234#179#210#240#223#235#247#250#250#251#223#235#247#179#210#240'~'#180#234 +#136#135#143#158'pT'#224#212#198#255#0#255#255#0#255#255#0#255#226#214#201 +#161'tY'#173#144'}'#207#210#209#202#206#207#202#206#207#202#206#207#202#206 +#207#202#206#207#207#210#209#173#144'}'#161'tY'#226#214#201#255#0#255#255#0 +#255#255#0#255#255#0#255#217#224#226#224#229#231#254#254#254#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#254#254#254#224#229#231#217#224 +#226#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#161'tY'#178#141'v' +#248#245#242#247#243#240#237#230#223#233#225#215#237#230#223#247#243#240#248 +#245#242#178#141'v'#161'tY'#226#214#201#255#0#255#255#0#255#255#0#255#226#214 +#201#161'tY'#178#141'v'#248#245#242#247#243#240#237#230#223#233#225#215#237 +#230#223#247#243#240#248#245#242#178#141'v'#161'tY'#226#214#201#255#0#255#255 +#0#255#255#0#255#226#214#201#161'tY'#178#141'v'#248#245#242#247#243#240#237 +#230#223#233#225#215#237#230#223#247#243#240#248#245#242#178#141'v'#161'tY' +#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#213#220#219#220#226#225 +#254#254#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254 +#254#254#220#226#225#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255'V'#17#0#246#248#249#248#249#247#250#247#249#249#248#250#250#246#245 +#246#248#249#250#248#247#246#248#248#250#247#249#249#249#249#249#248#250'V' +#17#0#255#0#255#255#0#255#255#0#255'X'#19#2#133#193#247#249#249#249#252#247 +#248#250#248#247#247#248#246#252#247#249#243#248#247#248#249#247#248#248#248 +#249#250#246#130#194#249'['#19#1#255#0#255#255#0#255#255#0#255'V'#17#0#195 +#210#213#195#207#207#194#204#204#193#206#204#195#206#203#197#205#204#193#204 +#208#194#205#209#192#204#208#196#208#208#198#209#213'Z'#19#0#255#0#255#255#0 +#255#255#0#255#168#183#185#224#237#239#226#238#240#224#236#238#224#236#238 +#224#236#238#225#237#239#223#236#238#224#236#238#225#237#239#225#237#237#225 +#237#239#171#184#186#255#0#255#255#0#255#255#0#255'U'#15#2#245#251#246#250 +#246#251#249#249#249#247#247#247#2#134#0#248#247#249#244#249#247#247#249#250 +#246#245#247#252#248#247#250#246#251'V'#18#0#255#0#255#255#0#255#255#0#255'X' +#20#1#135#191#250#248#247#249#250#246#251#246#248#248#0#135#0#247#247#247#249 +#246#248#247#250#248#248#247#249#247#248#246#129#195#248'X'#19#0#255#0#255 +#255#0#255#255#0#255'W'#18#3#196#210#209#200#208#208#203#210#207#200#208#215 +#0'e'#3#205#208#216#198#207#211#198#204#209#193#206#204#194#207#215#197#211 +#210'Y'#20#0#255#0#255#255#0#255#255#0#255#169#184#187#227#239#241#225#237 +#237#226#238#238#228#240#242#161#173#175#226#238#240#227#239#241#225#238#240 +#225#237#239#224#237#239#224#237#239#171#184#186#255#0#255#255#0#255#255#0 +#255'U'#15#2#245#251#246#250#246#251#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#252#248#247#250#246#251'V'#18#0#255#0#255#255#0#255#255#0 +#255'X'#20#1#135#191#250#248#247#249#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#247#248#246#129#195#248'X'#19#0#255#0#255#255#0#255#255#0 +#255'W'#18#3#196#210#209#200#208#208#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 ,#0#139#0#0#139#0#194#207#215#197#211#210'Y'#20#0#255#0#255#255#0#255#255#0 +#255#169#184#187#227#239#241#225#237#237#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#163#176#178#163#176#178#224#237#239#224#237#239#171 +#184#186#255#0#255#255#0#255#255#0#255#6'b7'#226#244#247#226#244#247#225#243 +#246#225#243#246#225#243#246#225#243#246#154#154#154#225#243#246#225#243#246 +#225#243#246#223#242#246#216#237#242#207#228#238#6'b7'#255#0#255#6'b7\'#153 +#228']'#154#229#225#242#245#225#242#245#225#242#245#225#242#245#154#154#154 +#225#242#245#225#242#245#225#242#245#223#241#245'\'#153#228'\'#153#228#6'b7' +#255#0#255#6'b7'#189#212#226#196#219#230#201#225#234#202#226#234#202#226#234 +#202#226#234#154#154#154#202#226#234#202#226#234#202#226#234#203#226#234#204 +#228#236#206#228#236#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233 +#242#246#233#242#246#233#242#246#233#242#246#154#154#154#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#185#153#131#147'_A'#241#236#229#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#241#236#229#147'_A'#185#153#131#255 +#0#255#255#0#255#255#0#255#183#150#127#128'f^{'#176#228#220#228#236#254#254 +#253#255#255#255#255#255#255#255#255#255#254#254#253#220#228#236'{'#176#228 +#128'f^'#183#150#127#255#0#255#255#0#255#255#0#255#185#153#131#147'fL'#202 +#203#199#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206 +#207#202#206#207#202#203#199#147'fL'#185#153#131#255#0#255#255#0#255#255#0 +#255#233#237#238#208#217#219#254#254#254#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#254#254#254#208#217#219#255 +#0#255#255#0#255#255#0#255#255#0#255#185#153#131#147'_A'#241#236#229#247#243 +#240#227#216#204#214#198#181#211#194#175#214#198#181#227#216#204#247#243#240 +#241#236#229#147'_A'#185#153#131#255#0#255#255#0#255#255#0#255#185#153#131 +#147'_A'#241#236#229#247#243#240#227#216#204#214#198#181#211#194#175#214#198 +#181#227#216#204#247#243#240#241#236#229#147'_A'#185#153#131#255#0#255#255#0 +#255#255#0#255#185#153#131#147'_A'#241#236#229#247#243#240#227#216#204#214 +#198#181#211#194#175#214#198#181#227#216#204#247#243#240#241#236#229#147'_A' +#185#153#131#255#0#255#255#0#255#255#0#255#230#234#234#203#212#210#254#254 +#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#254#254#254#203#212#210#230#234#234#255#0#255#255#0#255#255#0 +#255#255#0#255'V'#17#0#246#248#248#248#249#247#246#248#248#250#248#247#249 +#250#246#246#248#249#250#248#248#245#248#246#248#249#247#248#249#247#249#247 +#247'V'#17#0#255#0#255#255#0#255#255#0#255'S'#16#1#130#196#245#244#246#246 +#252#249#245#248#248#248#244#249#247#250#248#248#248#247#249#248#248#248#250 +#248#247#246#248#248#131#197#246'X'#19#0#255#0#255#255#0#255#255#0#255'W'#18 +#0#198#209#213#195#208#210#201#206#207#199#204#205#195#204#207#197#205#204 +#193#205#205#196#204#204#197#204#207#197#206#209#197#209#213'X'#20#1#255#0 +#255#255#0#255#255#0#255#167#182#184#224#237#239#224#236#238#224#236#238#224 +#237#239#223#235#237#226#238#240#223#236#238#225#237#239#224#236#238#224#237 +#239#228#240#242#170#183#185#255#0#255#255#0#255#255#0#255'V'#15#1#245#250 +#248#248#248#248#249#247#246#1#137#1#0#141#2#0#135#0#246#248#249#251#248#243 +#249#249#249#250#247#249#246#247#251'W'#17#0#255#0#255#255#0#255#255#0#255'Y' +#17#0#130#194#248#252#247#248#251#250#246#0#135#0#1#135#0#3#134#0#248#249#247 +#245#247#247#245#247#248#247#249#249#134#193#249'Z'#18#0#255#0#255#255#0#255 +#255#0#255'Z'#19#0#198#211#213#198#208#215#202#209#212#2'e'#1#1'j'#3#2'f'#0 +#204#209#212#196#209#211#195#204#208#195#207#209#196#210#208'X'#18#1#255#0 +#255#255#0#255#255#0#255#169#184#186#224#237#239#226#238#238#227#239#239#163 +#175#177#165#177#179#164#176#178#227#239#241#225#238#240#226#238#240#224#236 +#238#227#239#241#170#183#185#255#0#255#255#0#255#255#0#255'V'#15#1#245#250 +#248#248#248#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#250 +#247#249#246#247#251'W'#17#0#255#0#255#255#0#255#255#0#255'Y'#17#0#130#194 +#248#252#247#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#247 +#249#249#134#193#249'Z'#18#0#255#0#255#255#0#255#255#0#255'Z'#19#0#198#211 +#213#198#208#215#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#195 +#207#209#196#210#208'X'#18#1#255#0#255#255#0#255#255#0#255#169#184#186#224 +#237#239#226#238#238#163#176#178#163#176#178#163#176#178#163#176#178#163#176 +#178#163#176#178#163#176#178#224#236#238#227#239#241#170#183#185#255#0#255 +#255#0#255#255#0#255#6'b7'#227#245#248#227#245#248#226#244#247#226#244#247 +#226#244#247#154#154#154#154#154#154#154#154#154#226#244#247#226#244#247#225 +#243#246#217#238#243#208#229#238#6'b7'#255#0#255#6'b7c'#158#229'c'#158#229 ,#226#243#246#226#243#246#226#243#246#154#154#154#154#154#154#154#154#154#226 +#243#246#226#243#246#225#242#245'c'#158#229'b'#157#229#6'b7'#255#0#255#6'b7' +#189#211#227#197#219#231#202#225#234#203#226#235#203#226#235#154#154#154#154 +#154#154#154#154#154#203#226#235#203#226#235#204#226#235#206#227#236#206#228 +#237#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#154#154#154#154#154#154#154#154#154#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#152'hK'#181#147 +'}'#250#247#245#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255 +#255#0#255#151'eHz'#143#170#170#196#223#250#248#246#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#250#248#246#170#196#223'z'#143#170#151 +'eH'#255#0#255#255#0#255#255#0#255#152'hK'#172#150#134#199#202#202#202#206 +#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#199#202#202#172#150#134#152'hK'#255#0#255#255#0#255#255#0#255#213#221#222 +#228#233#234#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#228#233#234#213#221#222#255#0 +#255#255#0#255#255#0#255#152'hK'#181#147'}'#250#247#245#237#230#223#170#187 +#145'V'#162'K'#24#148#28'V'#162'K'#170#187#145#237#230#223#250#247#245#181 +#147'}'#152'hK'#255#0#255#255#0#255#255#0#255#152'hK'#181#147'}'#250#247#245 +#237#230#223#170#187#145'V'#162'K'#24#148#28'V'#162'K'#170#187#145#237#230 +#223#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255#255#0#255#152'hK'#181 +#147'}'#250#247#245#237#230#223#170#187#145'V'#162'K'#24#148#28'V'#162'K'#170 +#187#145#237#230#223#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255#255#0 +#255#208#216#215#225#230#229#255#255#255#255#255#255#238#241#241#207#215#214 +#183#195#193#207#215#214#238#241#241#255#255#255#255#255#255#225#230#229#208 +#216#215#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#245#244#246#244#243 +#245#246#244#244#241#245#246#251#246#247#248#248#248#248#247#249#248#248#248 +#247#246#248#250#248#248#246#249#247'V'#17#0#255#0#255#255#0#255#255#0#255'Z' +#18#0#129#193#248#247#246#248#244#246#246#246#245#249#249#249#249#243#248#247 +#253#248#250#246#248#249#252#247#248#247#249#249#133#194#250'V'#19#0#255#0 +#255#255#0#255#255#0#255'X'#18#1#195#209#208#193#205#205#194#203#206#193#205 +#205#194#204#204#193#206#204#196#203#206#193#206#204#195#204#208#195#206#210 +#198#210#212'X'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#225#238#240 +#225#237#239#224#237#239#222#235#237#224#236#238#224#236#238#224#236#238#224 +#236#238#224#236#238#223#236#238#226#238#240#171#184#186#255#0#255#255#0#255 +#255#0#255'T'#17#2#246#248#249#254#246#246#3#136#2#0#139#0#0#137#0#0#140#0#4 +#136#0#247#248#246#249#248#250#251#249#249#245#249#244'W'#18#0#255#0#255#255 +#0#255#255#0#255'W'#18#1#132#194#248#246#250#245#0#136#1#3#138#0#0#137#0#0 +#141#0#0#135#0#249#247#247#251#251#245#249#246#248#134#197#248'['#20#0#255#0 +#255#255#0#255#255#0#255'W'#17#0#195#208#216#200#206#211#0'g'#0#0'i'#2#0'j'#0 +#3'k'#0#1'g'#2#203#208#217#200#206#211#197#207#207#198#207#216'X'#19#0#255#0 +#255#255#0#255#255#0#255#168#183#185#226#239#241#225#237#237#161#173#173#163 +#176#178#163#176#178#163#176#178#163#177#176#227#240#242#226#238#240#226#238 +#240#226#238#240#170#183#185#255#0#255#255#0#255#255#0#255'T'#17#2#246#248 +#249#254#246#246#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#251 +#249#249#245#249#244'W'#18#0#255#0#255#255#0#255#255#0#255'W'#18#1#132#194 +#248#246#250#245#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#249 +#246#248#134#197#248'['#20#0#255#0#255#255#0#255#255#0#255'W'#17#0#195#208 +#216#200#206#211#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#197 +#207#207#198#207#216'X'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#226 +#239#241#225#237#237#163#176#178#163#176#178#163#176#178#163#176#178#163#176 +#178#163#176#178#163#176#178#226#238#240#226#238#240#170#183#185#255#0#255 +#255#0#255#255#0#255#6'b7'#228#245#248#228#245#248#227#244#247#227#244#247 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#227#244#247#226 +#243#246#218#238#243#210#229#238#6'b7'#255#0#255#6'b7j'#162#230'j'#162#230 +#227#243#246#227#243#246#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#227#243#246#226#242#245'j'#162#230'j'#162#230#6'b7'#255#0#255#6'b7' +#190#211#227#198#219#231#203#225#234#204#226#235#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#204#226#235#207#226#235#208#227#236#207#228 +#237#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242#246#233#242 +#246#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#233#242#246 +#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#127'B '#210#189 +#173#252#251#250#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#252#251#250#210#189#173#127'B '#255#0#255#255#0#255 +#255#0#255#127'A'#31'k'#159#213#207#213#218#253#252#251#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#253#252#251#207#213#218'k'#159#213 +#127'A'#31#255#0#255#255#0#255#255#0#255#127'B '#185#176#167#200#204#204#202 +#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206 +#207#200#204#204#185#176#167#127'B '#255#0#255#255#0#255#255#0#255#197#208 +#210#244#246#247#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#244#246#247#197#208#210#255 +#0#255#255#0#255#255#0#255#127'B '#210#189#173#252#251#250#233#225#215'W'#164 +'M'#13#146#19#13#146#19#13#146#19'W'#164'M'#233#225#215#252#251#250#210#189 +#173#127'B '#255#0#255#255#0#255#255#0#255#127'B '#210#189#173#252#251#250 +#233#225#215'W'#164'M'#13#146#19#13#146#19#13#146#19'W'#164'M'#233#225#215 +#252#251#250#210#189#173#127'B '#255#0#255#255#0#255#255#0#255#127'B '#210 +#189#173#252#251#250#233#225#215'W'#164'M'#13#146#19#13#146#19#13#146#19'W' +#164'M'#233#225#215#252#251#250#210#189#173#127'B '#255#0#255#255#0#255#255#0 +#255#190#201#199#243#245#245#255#255#255#255#255#255#207#215#214#178#191#189 +#178#191#189#178#191#189#207#215#214#255#255#255#255#255#255#243#245#245#190 +#201#199#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#242#242#242#239#241 +#241#241#240#244#238#244#243#244#244#244#245#246#244#245#244#246#247#246#248 +#248#247#249#245#248#246#248#247#249'V'#17#0#255#0#255#255#0#255#255#0#255'Z' +#18#1#132#189#250#236#240#241#239#241#241#244#242#242#244#244#244#245#244#246 +#239#246#243#251#248#250#252#247#246#242#249#244#135#197#251'W'#19#0#255#0 +#255#255#0#255#255#0#255'W'#19#0#191#206#209#191#204#206#193#204#202#194#205 +#203#196#203#206#191#205#203#197#204#207#193#205#207#193#205#207#196#206#206 +#202#208#213'W'#18#0#255#0#255#255#0#255#255#0#255#169#182#184#225#239#238 +#225#237#239#224#236#238#225#237#239#226#237#241#225#237#239#224#236#238#225 +#237#239#226#238#238#224#236#238#227#239#241#167#183#182#255#0#255#255#0#255 +#255#0#255'W'#18#0#240#243#247#240#243#248#1#135#0#2#135#1#254#249#248#0#137 +#0#0#137#0#0#137#0#247#248#246#246#247#251#247#249#249'V'#16#0#255#0#255#255 +#0#255#255#0#255'W'#18#0#129#188#250#246#245#249#0#137#0#2#136#0#248#249#247 +#1#133#3#1#137#1#0#137#0#244#247#251#246#249#247#137#199#247'U'#19#0#255#0 +#255#255#0#255#255#0#255'W'#18#1#192#205#213#203#208#209#2'e'#1#0'g'#0#208 +#210#218#4'g'#0#0'i'#2#2'e'#1#204#211#214#196#209#207#200#209#212'W'#20#0#255 +#0#255#255#0#255#255#0#255#171#183#187#226#238#240#229#239#239#161#173#175 +#163#175#177#229#241#243#163#175#177#163#175#177#162#175#177#227#239#241#226 +#238#240#225#238#240#170#183#185#255#0#255#255#0#255#255#0#255'W'#18#0#240 +#243#247#240#243#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#246#247#251#247#249#249'V'#16#0#255#0#255#255#0#255#255#0#255'W'#18#0#129 +#188#250#246#245#249#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#246#249#247#137#199#247'U'#19#0#255#0#255#255#0#255#255#0#255'W'#18#1#192 +#205#213#203#208#209#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#196#209#207#200#209#212'W'#20#0#255#0#255#255#0#255#255#0#255#171#183#187 +#226#238#240#229#239#239#163#176#178#163#176#178#163#176#178#163#176#178#163 +#176#178#163#176#178#163#176#178#226#238#240#225#238#240#170#183#185#255#0 +#255#255#0#255#255#0#255#6'b7'#233#249#250#233#249#250#232#250#251#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#231#249#251#224#243#247#214#235#242#6'b7'#255#0#255#6'b7'#146#187#236#139 +#184#235#232#249#250#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#231#248#250#139#184#235#145#186#235#6'b7'#255#0 +#255#6'b7'#193#215#228#200#222#234#207#228#237#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#210#229#238#211#230 +#238#211#231#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242 +#246#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255'q,'#8 +#224#211#197#250#247#245#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#250#247#245#224#211#197'q,'#8#255#0#255#255 +#0#255#255#0#255'q,'#7'^'#164#234#226#217#208#250#248#246#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#250#248#246#226#217#208'^'#164#234 +'q,'#7#255#0#255#255#0#255#255#0#255'q,'#8#187#185#178#199#202#202#202#206 ,#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#199#202#202#187#185#178'q,'#8#255#0#255#255#0#255#255#0#255#188#200#203#254 +#254#254#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#254#254#254#188#200#203#255#0#255 +#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245#237#230#223#25#149#29#13 +#146#19#13#146#19#13#146#19#25#149#29#237#230#223#250#247#245#224#211#197'q,' +#8#255#0#255#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245#237#230#223#25 +#149#29#13#146#19#13#146#19#13#146#19#25#149#29#237#230#223#250#247#245#224 +#211#197'q,'#8#255#0#255#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245 +#237#230#223#25#149#29#13#146#19#13#146#19#13#146#19#25#149#29#237#230#223 +#250#247#245#224#211#197'q,'#8#255#0#255#255#0#255#255#0#255#180#192#190#253 +#254#254#255#255#255#255#255#255#183#195#193#178#191#189#178#191#189#178#191 +#189#183#195#193#255#255#255#255#255#255#253#254#254#180#192#190#255#0#255 +#255#0#255#255#0#255#255#0#255'V'#17#0#233#235#236#230#235#234#231#236#235 +#235#238#236#237#239#240#237#239#240#242#242#242#246#244#243#240#246#245#247 +#247#247#250#248#248'V'#17#0#255#0#255#255#0#255#255#0#255'U'#19#1'w'#190#240 +#234#233#235#235#233#233#231#236#235#233#239#238#239#238#240#237#241#242#238 +#245#242#243#246#244#250#246#251#134#193#249'W'#20#0#255#0#255#255#0#255#255 +#0#255'X'#18#1#192#204#206#192#201#204#194#202#202#189#202#200#190#202#202 +#193#203#203#195#202#205#196#204#203#196#203#206#192#204#208#197#208#212'Y' +#20#1#255#0#255#255#0#255#255#0#255#170#183#185#224#238#237#225#237#239#224 +#236#238#225#237#239#223#235#237#227#239#239#224#236#238#224#236#238#224#235 +#239#225#237#239#225#237#237#170#183#185#255#0#255#255#0#255#255#0#255'P'#19 +#0#229#235#242#238#237#239#3#135#0#241#240#244#246#240#245#250#243#250#1#137 +#1#0#137#0#0#136#0#244#249#247#251#249#249'V'#16#0#255#0#255#255#0#255#255#0 +#255'W'#19#0#129#188#244#234#237#241#0#133#0#243#239#244#240#243#248#245#245 +#245#4#134#3#0#140#1#2#136#0#247#247#247#136#196#248'X'#19#0#255#0#255#255#0 +#255#255#0#255'Y'#20#0#192#205#207#193#205#205#0'f'#1#195#205#212#200#205#208 +#197#203#214#0'g'#0#1'h'#0#2'f'#0#201#208#211#197#208#212'Z'#19#0#255#0#255 +#255#0#255#255#0#255#168#183#185#225#238#240#226#238#240#161#173#175#227#239 +#241#226#239#241#227#238#242#163#174#178#163#175#177#160#173#175#225#238#240 +#227#239#241#170#183#185#255#0#255#255#0#255#255#0#255'P'#19#0#229#235#242 +#238#237#239#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#244#249 +#247#251#249#249'V'#16#0#255#0#255#255#0#255#255#0#255'W'#19#0#129#188#244 +#234#237#241#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#247#247 +#247#136#196#248'X'#19#0#255#0#255#255#0#255#255#0#255'Y'#20#0#192#205#207 +#193#205#205#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#201#208 +#211#197#208#212'Z'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#225#238 +#240#226#238#240#163#176#178#163#176#178#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#225#238#240#227#239#241#170#183#185#255#0#255#255#0 +#255#255#0#255#6'b7'#235#249#250#235#249#250#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#225#243#247#215#235#242#6'b7'#255#0#255#6'b7'#150#190#237#139#184#235#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#139#184#235#150#190#237#6'b7'#255#0#255#6'b7' +#193#215#228#200#222#234#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#211#230#238#211#231 +#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#128'C!'#205#183 +#165#243#238#232#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255 +#255#0#255#128'B l'#160#214#199#201#203#243#238#233#254#254#253#255#255#255 +#255#255#255#255#255#255#254#254#253#243#238#233#199#201#203'l'#160#214#128 +'B '#255#0#255#255#0#255#255#0#255#128'C!'#182#173#163#196#198#195#202#206 +#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#196#198#195#182#173#163#128'C!'#255#0#255#255#0#255#255#0#255#197#208#210 +#244#246#247#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#244#246#247#197#208#210#255#0 +#255#255#0#255#255#0#255#128'C!'#205#183#165#243#238#232#247#243#240']'#172 +'X'#13#146#19#13#146#19#13#146#19']'#172'X'#247#243#240#243#238#232#205#183 +#165#128'C!'#255#0#255#255#0#255#255#0#255#128'C!'#205#183#165#243#238#232 ,#247#243#240']'#172'X'#13#146#19#13#146#19#13#146#19']'#172'X'#247#243#240 +#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255#255#0#255#128'C!'#205 +#183#165#243#238#232#247#243#240']'#172'X'#13#146#19#13#146#19#13#146#19']' +#172'X'#247#243#240#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255#255#0 +#255#190#201#199#243#245#245#255#255#255#255#255#255#207#215#214#178#191#189 +#178#191#189#178#191#189#207#215#214#255#255#255#255#255#255#243#245#245#190 +#201#199#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#227#230#234#226#230 +#231#225#229#230#229#234#233#234#235#233#231#236#235#235#237#237#235#240#239 +#241#242#240#243#242#244#247#249#249'V'#17#0#255#0#255#255#0#255#255#0#255'W' +#18#0'|'#181#243#225#227#228#227#226#228#222#230#230#230#232#232#229#231#231 +#233#235#236#233#237#238#242#237#238#241#243#243#131#194#245'W'#18#1#255#0 +#255#255#0#255#255#0#255'W'#18#0#189#203#202#188#200#200#185#199#198#188#202 +#201#188#200#202#192#201#204#191#204#202#191#204#202#190#202#204#192#204#206 +#196#210#209'W'#19#0#255#0#255#255#0#255#255#0#255#170#183#185#225#238#240 +#224#236#238#223#235#237#223#235#237#225#237#239#225#237#237#224#236#238#223 +#236#238#223#235#239#224#236#238#225#237#237#171#184#186#255#0#255#255#0#255 +#255#0#255'Z'#18#1#224#227#231#224#228#229#226#229#233#228#233#232#233#233 +#233#238#236#236#245#239#244#5#137#0#0#137#2#250#247#249#246#246#246'V'#17#2 +#255#0#255#255#0#255#255#0#255'Y'#20#1'y'#181#241#229#230#228#231#229#229#231 +#230#232#229#234#232#234#235#239#245#239#244#1#134#0#0#138#0#246#248#248#133 +#192#248'['#20#0#255#0#255#255#0#255#255#0#255'V'#17#2#188#200#206#190#202 +#204#195#198#206#191#203#205#192#201#204#196#203#206#201#203#213#0'f'#1#0'f' +#1#195#206#210#196#209#211'W'#19#0#255#0#255#255#0#255#255#0#255#168#183#185 +#225#239#238#225#237#237#226#238#238#227#239#239#223#237#236#226#238#240#227 +#239#241#163#175#177#162#174#176#228#240#242#228#237#240#171#183#185#255#0 +#255#255#0#255#255#0#255'Z'#18#1#224#227#231#224#228#229#0#139#0#0#139#0#0 +#139#0#0#139#0#0#139#0#0#139#0#0#139#0#250#247#249#246#246#246'V'#17#2#255#0 +#255#255#0#255#255#0#255'Y'#20#1'y'#181#241#229#230#228#0#139#0#0#139#0#0#139 +#0#0#139#0#0#139#0#0#139#0#0#139#0#246#248#248#133#192#248'['#20#0#255#0#255 +#255#0#255#255#0#255'V'#17#2#188#200#206#190#202#204#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#0#139#0#0#139#0#195#206#210#196#209#211'W'#19#0#255#0#255 +#255#0#255#255#0#255#168#183#185#225#239#238#225#237#237#163#176#178#163#176 +#178#163#176#178#163#176#178#163#176#178#163#176#178#163#176#178#228#240#242 +#228#237#240#171#183#185#255#0#255#255#0#255#255#0#255#6'b7'#237#251#252#236 +#251#252#236#251#252#236#251#252#236#251#252#236#251#252#236#251#252#236#251 +#252#236#251#252#236#251#252#236#250#251#228#244#249#219#237#244#6'b7'#255#0 +#255#6'b7'#156#196#238#139#184#235#237#251#252#237#251#252#237#251#252#237 +#251#252#237#251#252#237#251#252#237#251#252#237#251#252#236#250#251#139#184 +#235#156#196#238#6'b7'#255#0#255#6'b7'#195#216#229#202#224#234#208#229#238 +#211#230#238#211#230#238#211#230#238#211#230#238#211#230#238#211#230#238#211 +#230#238#211#230#238#212#231#238#213#231#238#6'b7'#255#0#255#184#196#202#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#184#196#202#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#156'lP'#178#142'v'#233#224#214#251#250#248#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#251#250#248#233#224#214#178 +#142'v'#156'lP'#255#0#255#255#0#255#255#0#255#155'kO{'#143#171#161#185#208 +#229#218#207#243#238#233#250#248#246#253#252#251#250#248#246#243#238#233#229 +#218#207#161#185#208'{'#143#171#155'kO'#255#0#255#255#0#255#255#0#255#156'lP' +#170#146#129#191#191#186#200#204#203#202#206#207#202#206#207#202#206#207#202 +#206#207#202#206#207#200#204#203#191#191#186#170#146#129#156'lP'#255#0#255 +#255#0#255#255#0#255#213#221#222#228#233#234#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 +#228#233#234#213#221#222#255#0#255#255#0#255#255#0#255#156'lP'#178#142'v'#233 +#224#214#250#247#245#196#222#191'`'#177'_'#26#151#31'`'#177'_'#196#222#191 +#250#247#245#233#224#214#178#142'v'#156'lP'#255#0#255#255#0#255#255#0#255#156 +'lP'#178#142'v'#233#224#214#250#247#245#196#222#191'`'#177'_'#26#151#31'`' +#177'_'#196#222#191#250#247#245#233#224#214#178#142'v'#156'lP'#255#0#255#255 +#0#255#255#0#255#156'lP'#178#142'v'#233#224#214#250#247#245#196#222#191'`' +#177'_'#26#151#31'`'#177'_'#196#222#191#250#247#245#233#224#214#178#142'v' +#156'lP'#255#0#255#255#0#255#255#0#255#208#216#215#225#230#229#255#255#255 +#255#255#255#238#241#241#207#215#214#183#195#193#207#215#214#238#241#241#255 +#255#255#255#255#255#225#230#229#208#216#215#255#0#255#255#0#255#255#0#255 ,#255#0#255'V'#17#0#217#226#230#221#225#226#221#227#226#225#227#227#226#232 +#227#230#232#232#228#231#235#236#233#235#234#236#236#234#239#242#238#241#245 +'V'#17#0#255#0#255#255#0#255#255#0#255'['#19#1't'#177#241#217#225#218#216#222 +#221#220#223#221#217#225#224#226#228#228#224#229#227#233#233#227#235#234#236 +#234#240#239'}'#189#247'X'#18#1#255#0#255#255#0#255#255#0#255'V'#16#3#183#201 +#200#189#200#198#186#198#198#186#200#199#186#200#196#188#201#199#189#201#201 +#191#201#201#191#200#203#191#204#202#194#206#208'W'#18#0#255#0#255#255#0#255 +#255#0#255#170#182#186#224#237#239#226#237#241#225#237#239#224#236#238#224 +#235#239#224#236#238#225#237#239#224#236#238#223#237#236#225#238#240#225#238 +#240#168#184#183#255#0#255#255#0#255#255#0#255'Y'#17#0#212#221#224#216#220 +#221#215#220#221#219#224#223#218#226#225#224#229#228#227#230#234#233#234#238 +#1#133#2#236#240#241#240#242#242'W'#17#0#255#0#255#255#0#255#255#0#255'V'#21 +#0't'#178#242#217#222#221#216#221#222#217#222#223#220#225#223#224#231#228#227 +#231#232#236#235#239#0#133#3#237#238#242'~'#189#249'Z'#19#0#255#0#255#255#0 +#255#255#0#255'T'#18#0#184#203#200#189#198#201#189#198#202#186#199#201#190 +#198#197#189#201#201#189#201#203#200#205#208#2'f'#0#190#205#207#194#206#210 +'W'#18#0#255#0#255#255#0#255#255#0#255#168#181#183#225#238#240#225#237#239 +#223#235#237#225#237#239#225#237#239#224#236#238#226#238#240#228#240#242#159 +#172#174#226#238#238#225#237#239#171#184#186#255#0#255#255#0#255#255#0#255'Y' +#17#0#212#221#224#216#220#221#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#236#240#241#240#242#242'W'#17#0#255#0#255#255#0#255#255#0#255'V'#21 +#0't'#178#242#217#222#221#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0 +#139#0#237#238#242'~'#189#249'Z'#19#0#255#0#255#255#0#255#255#0#255'T'#18#0 +#184#203#200#189#198#201#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0 +#139#0#190#205#207#194#206#210'W'#18#0#255#0#255#255#0#255#255#0#255#168#181 +#183#225#238#240#225#237#239#163#176#178#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#163#176#178#226#238#238#225#237#239#171#184#186#255 +#0#255#255#0#255#255#0#255#6'b7'#240#253#254#239#253#254#239#253#254#239#253 +#254#239#253#254#239#253#254#239#253#254#239#253#254#239#253#254#239#253#254 +#238#253#254#232#247#251#224#241#246#6'b7'#255#0#255#6'b7'#161#198#238#139 +#184#235#240#253#254#240#253#254#240#253#254#240#253#254#240#253#254#240#253 +#254#240#253#254#240#253#254#239#253#254#139#184#235#161#198#238#6'b7'#255#0 +#255#6'b7'#195#217#229#202#224#234#210#230#238#212#233#238#213#233#238#213 +#233#238#213#233#238#213#233#238#213#233#238#213#233#238#213#233#238#213#233 +#238#214#233#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#196 +#169#152#147'_B'#222#208#194#233#224#214#243#238#232#250#247#245#252#251#250 +#250#247#245#243#238#232#233#224#214#222#208#194#147'_B'#196#169#152#255#0 +#255#255#0#255#255#0#255#196#169#151#130'ibx'#171#222#197#195#192#222#209#195 +#229#218#207#232#222#212#229#218#207#222#209#195#197#195#192'x'#171#222#130 +'ib'#196#169#151#255#0#255#255#0#255#255#0#255#196#169#152#147'fM'#191#187 +#179#191#191#186#196#198#195#199#202#202#200#204#204#199#202#202#196#198#195 +#191#191#186#191#187#179#147'fM'#196#169#152#255#0#255#255#0#255#255#0#255 +#255#0#255#208#217#219#254#254#254#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#254#254#254#208#217#219#255#0 +#255#255#0#255#255#0#255#255#0#255#196#169#152#147'_B'#222#208#194#233#224 +#214#243#238#232#250#247#245#252#251#250#250#247#245#243#238#232#233#224#214 +#222#208#194#147'_B'#196#169#152#255#0#255#255#0#255#255#0#255#196#169#152 +#147'_B'#222#208#194#233#224#214#243#238#232#250#247#245#252#251#250#250#247 +#245#243#238#232#233#224#214#222#208#194#147'_B'#196#169#152#255#0#255#255#0 +#255#255#0#255#196#169#152#147'_B'#222#208#194#233#224#214#243#238#232#250 +#247#245#252#251#250#250#247#245#243#238#232#233#224#214#222#208#194#147'_B' +#196#169#152#255#0#255#255#0#255#255#0#255#255#0#255#203#212#210#254#254#254 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#254#254#203#212#210#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255'V'#17#0#219#223#224#214#225#223#222#224#224#221#224#228#222#225#229 +#223#227#228#225#230#228#229#231#232#227#231#232#236#236#236#236#241#242'V' +#17#0#255#0#255#255#0#255#255#0#255'Y'#20#1'p'#173#235#214#217#215#213#218 +#217#217#219#220#219#221#221#218#223#222#223#226#224#221#224#228#224#229#227 +#234#232#231'}'#185#244'['#20#0#255#0#255#255#0#255#255#0#255'Y'#20#0#187#199 +#199#185#198#200#185#197#197#185#197#201#184#199#202#189#198#202#188#200#200 ,#188#200#202#183#200#203#192#204#206#189#204#207'Y'#19#2#255#0#255#255#0#255 +#255#0#255#173#185#187#226#238#240#226#237#241#225#237#239#224#236#238#225 +#237#239#225#237#237#224#236#238#225#237#239#224#236#236#225#237#239#226#238 +#240#170#184#183#255#0#255#255#0#255#255#0#255'Y'#19#2#211#216#219#204#218 +#217#214#216#216#213#218#221#215#221#220#215#221#226#219#224#222#225#227#228 +#226#229#234#228#233#231#231#236#237'V'#14#2#255#0#255#255#0#255#255#0#255'W' +#19#0'p'#175#235#207#218#216#213#218#217#220#220#220#221#221#221#224#221#223 +#221#226#225#226#228#229#230#230#230#235#236#234#128#185#246'['#19#2#255#0 +#255#255#0#255#255#0#255'Y'#20#1#188#200#200#185#199#198#185#198#200#186#199 +#201#187#197#197#184#196#200#188#200#204#193#201#201#190#199#208#194#203#206 +#195#204#207'T'#20#2#255#0#255#255#0#255#255#0#255#173#185#189#225#237#239 +#227#239#241#226#238#240#225#237#239#224#236#238#224#236#238#225#237#239#226 +#238#238#226#240#239#225#237#237#226#238#238#170#184#183#255#0#255#255#0#255 +#255#0#255'Y'#19#2#211#216#219#204#218#217#214#216#216#213#218#221#215#221 +#220#215#221#226#219#224#222#225#227#228#226#229#234#228#233#231#231#236#237 +'V'#14#2#255#0#255#255#0#255#255#0#255'W'#19#0'p'#175#235#207#218#216#213#218 +#217#220#220#220#221#221#221#224#221#223#221#226#225#226#228#229#230#230#230 +#235#236#234#128#185#246'['#19#2#255#0#255#255#0#255#255#0#255'Y'#20#1#188 +#200#200#185#199#198#185#198#200#186#199#201#187#197#197#184#196#200#188#200 +#204#193#201#201#190#199#208#194#203#206#195#204#207'T'#20#2#255#0#255#255#0 +#255#255#0#255#173#185#189#225#237#239#227#239#241#226#238#240#225#237#239 +#224#236#238#224#236#238#225#237#239#226#238#238#226#240#239#225#237#237#226 +#238#238#170#184#183#255#0#255#255#0#255#255#0#255'#oL'#180#221#228#245#255 +#255#245#255#255#245#255#255#245#255#255#245#255#255#245#255#255#245#255#255 +#245#255#255#245#255#255#245#255#255#244#255#255#180#221#228'#oL'#255#0#255 +'#oL'#149#197#252#139#184#235#150#190#237#150#190#237#150#190#237#150#190#237 +#150#190#237#150#190#237#150#190#237#150#190#237#150#190#237#139#184#235#149 +#197#252'#oL'#255#0#255'#oL'#149#175#196#185#208#227#191#212#228#194#216#230 +#195#217#231#195#217#231#195#217#231#195#217#231#195#217#231#195#217#231#194 +#216#230#196#218#231#158#189#206'#oL'#255#0#255#184#196#202#221#231#235#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#221#231#235#184#196#202 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#167'}e'#172#133'm'#219#204#189#222#209#195#226#214#201 +#228#217#205#226#214#201#222#209#195#219#204#189#172#133'm'#167'}e'#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#166'}d'#138#136#145'x'#171#222#159 +#182#204#191#190#189#209#194#178#191#190#189#159#182#204'x'#171#222#138#136 +#145#166'}d'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#168 +#138'v'#189#185#176#185#183#177#187#186#180#188#187#182#187#186#180#185#183 +#177#189#185#176#168#138'v'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#217#224#226#224#229#231#254#254#254#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#254#254#254#224#229#231#217#224#226#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#172#133'm'#219#204#189 +#222#209#195#226#214#201#228#217#205#226#214#201#222#209#195#219#204#189#172 +#133'm'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#172 +#133'm'#219#204#189#222#209#195#226#214#201#228#217#205#226#214#201#222#209 +#195#219#204#189#172#133'm'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#167'}e'#172#133'm'#219#204#189#222#209#195#226#214#201#228#217#205 +#226#214#201#222#209#195#219#204#189#172#133'm'#167'}e'#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#213#220#219#220#226#225#254#254#254#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#254#254#254#220#226#225 +#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#214 +#226#226#218#222#227#220#223#227#221#226#229#221#227#226#223#229#228#224#230 +#229#222#231#228#229#232#237#230#233#237#232#238#237'V'#17#0#255#0#255#255#0 +#255#255#0#255'X'#19#0'l'#177#240'o'#172#236'm'#174#235'q'#176#236'r'#177#237 +'t'#177#239's'#182#239't'#181#236'u'#178#240'v'#181#241'y'#184#245'T'#18#0 +#255#0#255#255#0#255#255#0#255'V'#18#0#187#201#199#185#199#205#184#197#199 +#184#199#201#187#199#201#186#199#201#188#200#202#188#199#203#188#202#201#193 +#202#206#193#205#205'W'#19#0#255#0#255#255#0#255#255#0#255#170#182#184#227 +#239#239#225#237#239#227#239#239#226#238#238#225#237#239#226#238#238#226#238 +#240#226#238#238#225#237#239#225#237#239#227#239#239#170#182#186#255#0#255 +#255#0#255#255#0#255'T'#18#0#206#215#219#209#214#217#209#214#215#210#215#218 +#212#215#219#209#218#221#216#223#220#217#222#221#220#226#225#214#228#227#224 ,#230#235'T'#18#0#255#0#255#255#0#255#255#0#255'X'#19#0'n'#176#241'n'#171#235 +'p'#173#235'm'#179#232's'#179#237'r'#180#239'r'#180#239's'#181#240'v'#179#243 +'t'#183#240'u'#184#247'Y'#20#1#255#0#255#255#0#255#255#0#255'W'#19#0#188#201 +#203#187#199#205#183#198#200#184#198#197#186#199#201#188#201#203#189#199#199 +#189#200#204#189#198#208#183#201#202#192#203#211'X'#20#1#255#0#255#255#0#255 +#255#0#255#169#182#184#227#239#239#226#238#238#225#237#237#226#238#238#226 +#238#238#226#238#238#224#236#236#229#238#241#225#237#239#225#237#237#227#239 +#239#169#182#184#255#0#255#255#0#255#255#0#255'T'#18#0#206#215#219#209#214 +#217#209#214#215#210#215#218#212#215#219#209#218#221#216#223#220#217#222#221 +#220#226#225#214#228#227#224#230#235'T'#18#0#255#0#255#255#0#255#255#0#255'X' +#19#0'n'#176#241'n'#171#235'p'#173#235'm'#179#232's'#179#237'r'#180#239'r' +#180#239's'#181#240'v'#179#243't'#183#240'u'#184#247'Y'#20#1#255#0#255#255#0 +#255#255#0#255'W'#19#0#188#201#203#187#199#205#183#198#200#184#198#197#186 +#199#201#188#201#203#189#199#199#189#200#204#189#198#208#183#201#202#192#203 +#211'X'#20#1#255#0#255#255#0#255#255#0#255#169#182#184#227#239#239#226#238 +#238#225#237#237#226#238#238#226#238#238#226#238#238#224#236#236#229#238#241 +#225#237#239#225#237#237#227#239#239#169#182#184#255#0#255#255#0#255#255#0 +#255'['#137'uM'#138'm'#180#222#229#246#255#255#246#255#255#246#255#255#246 +#255#255#246#255#255#246#255#255#246#255#255#246#255#255#246#255#255#201#235 +#238'M'#138'm['#138'v'#255#0#255'['#137'u|'#140#137#149#197#252#149#197#252 +#149#197#252#149#197#252#149#197#252#149#197#252#149#197#252#149#197#252#149 +#197#252#149#197#252#149#197#252'|'#140#137'['#138'v'#255#0#255'['#137'u@z`' +#145#167#192#178#204#222#179#205#223#180#205#223#180#205#223#180#205#223#180 +#205#223#180#205#223#180#205#223#180#205#223#164#178#201'C|b['#138'v'#255#0 +#255#184#196#202#201#211#217#221#231#235#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#225 +#235#239#201#211#217#184#196#202#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g'#148 +'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC'#168 +#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#168#127'g'#131'jd|'#144#173'l'#160#214']'#164#233'l'#160#214'|'#144#173#131 +'jd'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#168#127'g'#148'hN'#170#146#129#179#169#158#182#178#170#179#169#158 +#170#146#129#148'hN'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#217#224#226#208#217#219#228#233#234#244#246#247#254 +#254#254#244#246#247#228#233#234#208#217#219#217#224#226#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g'#148'aC'#178#142 +'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC'#168#127'g'#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g' +#148'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC' +#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#168#127'g'#148'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178 +#142'v'#148'aC'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#213#220#219#203#212#210#225#230#229#243#245#245#253#254 +#254#243#245#245#225#230#229#203#212#210#213#220#219#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0 +'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0#255#0#255 +#255#0#255#255#0#255'^'#17#1'W'#19#0'X'#20#1'Z'#19#0'X'#19#0'['#19#1'Y'#18#0 +'['#20#0'V'#21#0'X'#19#0'X'#21#0'V'#17#0'X'#21#0#255#0#255#255#0#255#255#0 +#255'W'#18#1'X'#20#1'V'#19#0'Y'#21#2'Z'#18#1'W'#19#0'X'#19#0'X'#19#0'Y'#17#0 +'V'#17#0'W'#16#2'W'#19#0'U'#19#0#255#0#255#255#0#255#255#0#255#168#183#185 +#170#184#183#170#183#185#170#183#185#168#183#185#169#184#186#169#185#184#170 +#183#185#171#184#186#168#183#186#169#184#186#169#182#184#171#183#187#255#0 +#255#255#0#255#255#0#255'T'#18#0'X'#19#2'S'#17#0'U'#19#1'W'#19#0'X'#19#0'Q' +#19#1'T'#15#0'W'#19#0'V'#18#0'S'#17#0'W'#18#0'W'#18#1#255#0#255#255#0#255#255 +#0#255'_'#19#1'X'#19#0'Z'#21#2'Z'#20#0'X'#19#0'X'#17#3'U'#19#0'Z'#18#1'X'#19 +#0'['#20#0'Q'#20#0'Y'#20#1'W'#18#0#255#0#255#255#0#255#255#0#255'X'#19#2'W' +#19#0'X'#20#1'Z'#18#0']'#18#4'X'#18#1'T'#21#0'Z'#18#0'S'#19#1'X'#19#0'U'#23#0 +'X'#18#1'W'#18#0#255#0#255#255#0#255#255#0#255#171#184#186#171#184#186#170 +#183#185#171#184#186#168#181#183#170#183#185#169#182#184#172#185#187#169#181 +#185#171#184#186#171#184#186#170#183#185#170#185#188#255#0#255#255#0#255#255 +#0#255'T'#18#0'X'#19#2'S'#17#0'U'#19#1'W'#19#0'X'#19#0'Q'#19#1'T'#15#0'W'#19 +#0'V'#18#0'S'#17#0'W'#18#0'W'#18#1#255#0#255#255#0#255#255#0#255'_'#19#1'X' ,#19#0'Z'#21#2'Z'#20#0'X'#19#0'X'#17#3'U'#19#0'Z'#18#1'X'#19#0'['#20#0'Q'#20#0 +'Y'#20#1'W'#18#0#255#0#255#255#0#255#255#0#255'X'#19#2'W'#19#0'X'#20#1'Z'#18 +#0']'#18#4'X'#18#1'T'#21#0'Z'#18#0'S'#19#1'X'#19#0'U'#23#0'X'#18#1'W'#18#0 +#255#0#255#255#0#255#255#0#255#171#184#186#171#184#186#170#183#185#171#184 +#186#168#181#183#170#183#185#169#182#184#172#185#187#169#181#185#171#184#186 +#171#184#186#170#183#185#170#185#188#255#0#255#255#0#255#255#0#255#209#196 +#219'['#137'u#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'i' +'DO'#131'm'#213#201#223#255#0#255#222#196#200'['#137'u#oL'#6'b7'#6'b7'#6'b7' +#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDO'#131'm'#226#201#205#255#0#255#209 +#196#219'['#137'u#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7' +#24'iDO'#131'm'#213#201#223#255#0#255#255#255#255#184#196#202#184#196#202#184 +#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196 +#202#184#196#202#184#196#202#184#196#202#184#196#202#255#255#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#233#237#238#213#221#222#197#208#210#188#200 +#203#197#208#210#213#221#222#233#237#238#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#208#216#215 +#190#201#199#180#192#190#190#201#199#208#216#215#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#0#0 ]); LazarusResources.Add('VT_MOVENS_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#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#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#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#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#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#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#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#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#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#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#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#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ]); LazarusResources.Add('VT_MOVEEW_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0 ,#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0 +#0#255#255#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255 +#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ]); LazarusResources.Add('VT_MOVEALL_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#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#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#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#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#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#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0 +#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0 +#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 ,#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255 +#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255 +#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#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#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#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#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#255#255#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#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0 +#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255 ]); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021314� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/win32/���������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022256� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/win32/virtualpanningwindow.pas���������������������0000644�0001750�0000144�00000005212�12140233030�027242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {Adapted from VirtualTrees by Luiz Amrico to work in LCL/Lazarus} {$mode objfpc}{$H+} interface uses Windows, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} function PanningWindowProc(Window: HWnd; Msg: UInt;WPara: WParam; LPara: LParam): LResult; stdcall; var PanningObject: TVirtualPanningWindow; begin if Msg = WM_PAINT then begin PanningObject:=TVirtualPanningWindow(GetWindowLongPtrW(Window,GWL_USERDATA)); if Assigned(PanningObject) then PanningObject.HandlePaintMessage; Result := 0; end else Result := DefWindowProc(Window,Msg,WPara,LPara); end; var PanningWindowClass: TWndClass = ( style: 0; lpfnWndProc: @PanningWindowProc; cbClsExtra: 0; cbWndExtra: 0; hInstance: 0; hIcon: 0; hCursor: 0; hbrBackground: 0; lpszMenuName: nil; lpszClassName: 'VTPanningWindow' ); { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; var PS: PaintStruct; begin BeginPaint(FHandle, PS); BitBlt(PS.hdc,0,0,FImage.Width,FImage.Height,FImage.Canvas.Handle,0,0,SRCCOPY); EndPaint(FHandle, PS); end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); var TempClass: TWndClass; begin // Register the helper window class. if not GetClassInfo(HInstance, PanningWindowClass.lpszClassName, TempClass) then begin PanningWindowClass.hInstance := HInstance; Windows.RegisterClass(PanningWindowClass); end; // Create the helper window and show it at the given position without activating it. with Position do FHandle := CreateWindowEx(WS_EX_TOOLWINDOW, PanningWindowClass.lpszClassName, nil, WS_POPUP, X - 16, Y - 16, 32, 32, OwnerHandle, 0, HInstance, nil); SetWindowLongPtr(FHandle,GWL_USERDATA,LONG_PTR(Self)); FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin // Destroy the helper window. DestroyWindow(FHandle); FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} //todo: move SetWindowRgn to DelphiCompat SetWindowRgn(FHandle, ClipRegion, False); ShowWindow(FHandle, SW_SHOWNOACTIVATE); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/win32/virtualdragmanager.pas�����������������������0000644�0001750�0000144�00000116567�12014201074�026653� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {$mode delphi} interface uses Windows, ActiveX, Classes, SysUtils; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = ActiveX.TYMED_HGLOBAL; TYMED_ISTREAM = ActiveX.TYMED_ISTREAM; DVASPECT_CONTENT = ActiveX.DVASPECT_CONTENT; CLSCTX_INPROC_SERVER = ActiveX.CLSCTX_INPROC_SERVER; DROPEFFECT_COPY = ActiveX.DROPEFFECT_COPY; DROPEFFECT_LINK = ActiveX.DROPEFFECT_LINK; DROPEFFECT_MOVE = ActiveX.DROPEFFECT_MOVE; DROPEFFECT_NONE = ActiveX.DROPEFFECT_NONE; DROPEFFECT_SCROLL = ActiveX.DROPEFFECT_SCROLL; DATADIR_GET = ActiveX.DATADIR_GET; type //Bridge to ActiveX Types IDataObject = ActiveX.IDataObject; IDropTarget = ActiveX.IDropTarget; IDropSource = ActiveX.IDropSource; IEnumFormatEtc = ActiveX.IEnumFORMATETC; //WINOLEAPI = ActiveX.WINOLEAPI; TFormatEtc = ActiveX.TFORMATETC; TStgMedium = ActiveX.TStgMedium; PDVTargetDevice = ActiveX.PDVTARGETDEVICE; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc; {$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TComponent); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop'; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;external 'ole32.dll' name 'RevokeDragDrop'; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'DoDragDrop'; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleInitialize'; procedure OleUninitialize;stdcall;external 'ole32.dll' name 'OleUninitialize'; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;external 'ole32.dll' name 'ReleaseStgMedium'; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetClipboard'; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetClipboard'; function OleFlushClipboard:WINOLEAPI;stdcall;external 'ole32.dll' name 'OleFlushClipboard'; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleIsCurrentClipboard'; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateStreamOnHGlobal'; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; external 'ole32.dll' name 'CoCreateInstance'; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls, oleutils; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef COMPILER_5_UP} raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); {$else} raise EStreamError.Create(SCantWriteResourceStreamError); {$endif COMPILER_5_UP} end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; end; procedure UnlockMediumData(Medium: TStgMedium); begin if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin FCurrentIndex := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TComponent); begin inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; end; end. �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/qt/������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021740� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/qt/virtualpanningwindow.pas������������������������0000644�0001750�0000144�00000002012�12014201074�026722� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/qt/virtualdragmanager.pas��������������������������0000644�0001750�0000144�00000170107�12014201074�026323� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger {$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/qt/fakemmsystem.pas��������������������������������0000644�0001750�0000144�00000000650�12014201074�025144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation uses LCLIntf; function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/qt/fakeactivex.pas���������������������������������0000644�0001750�0000144�00000000054�12014201074�024727� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk2/����������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022163� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk2/virtualpanningwindow.pas����������������������0000644�0001750�0000144�00000002012�12014201074�027145� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk2/virtualdragmanager.pas������������������������0000644�0001750�0000144�00000170106�12014201074�026545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk2/fakemmsystem.pas������������������������������0000644�0001750�0000144�00000000650�12014201074�025367� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types, LCLIntf; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation function timeBeginPeriod(x1: DWord): DWord; begin // end; function timeEndPeriod(x1: DWord): DWord; begin // end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk2/fakeactivex.pas�������������������������������0000644�0001750�0000144�00000000054�12014201074�025152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk/�����������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022101� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk/virtualpanningwindow.pas�����������������������0000644�0001750�0000144�00000002012�12014201074�027063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk/virtualdragmanager.pas�������������������������0000644�0001750�0000144�00000170106�12014201074�026463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk/fakemmsystem.pas�������������������������������0000644�0001750�0000144�00000000752�12014201074�025310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; var ATime: TSystemTime; begin //todo: properly implement GetLocalTime(ATime); Result := ATime.MilliSecond; end; end. ����������������������doublecmd-0.9.8/components/virtualtreeview/units/gtk/fakeactivex.pas��������������������������������0000644�0001750�0000144�00000000054�12014201074�025070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/dummyactivex.inc�����������������������������������0000644�0001750�0000144�00000040560�12014201074�024524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {fake unit just to compile - not used under non windows} {$mode delphi} interface uses {$ifdef Windows} Windows, {$endif} Classes, SysUtils, Types; const TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool = LongBool; Bool = WinBool; ULONG = cardinal; PULONG = ^ULONG; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next (Celt:ULong;Out xcelt;pceltfetched : PUlong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;pceltFetched:pULong=nil):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAdvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD):HResult;StdCall; function GiveFeedback(dwEffect: DWORD): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; implementation function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; procedure OleUninitialize; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleFlushClipboard: WINOLEAPI; begin // Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/carbon/��������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022560� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/carbon/virtualpanningwindow.pas��������������������0000644�0001750�0000144�00000002012�12014201074�027542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/carbon/virtualdragmanager.pas����������������������0000644�0001750�0000144�00000170106�12014201074�027142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/carbon/fakemmsystem.pas����������������������������0000644�0001750�0000144�00000000650�12014201074�025764� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation uses LCLIntf; function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/units/carbon/fakeactivex.pas�����������������������������0000644�0001750�0000144�00000000054�12014201074�025547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/registervirtualtreeview.pas������������������������������0000644�0001750�0000144�00000001172�12014201074�025657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit registervirtualtreeview; {$Mode ObjFpc} {$H+} interface uses Classes, SysUtils, LResources, LazarusPackageIntf, VirtualTrees, VTHeaderPopup; procedure Register; implementation procedure RegisterUnitVirtualTrees; begin RegisterComponents('Virtual Controls', [TVirtualDrawTree, TVirtualStringTree]); end; procedure RegisterUnitVTHeaderPopup; begin RegisterComponents('Virtual Controls', [TVTHeaderPopupMenu]); end; procedure Register; begin RegisterUnit('VirtualTrees', @RegisterUnitVirtualTrees); RegisterUnit('VTHeaderPopup', @RegisterUnitVTHeaderPopup); end; initialization {$i ideicons.lrs} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/readme.txt�����������������������������������������������0000644�0001750�0000144�00000000331�12014201074�022136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Virtual Tree View from Lazarus CCR https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/virtualtreeview-new/branches/4.8 Rev. 2200 Some modifications done for Double Commander (see doublecmd.diff). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/lclfunctions.inc�����������������������������������������0000644�0001750�0000144�00000006713�12014201074�023350� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//Used in DrawTextW { function GetTextAlign(DC: HDC): UINT; begin Logger.AddCheckPoint(lcDummyFunctions,'GetTextAlign'); Result:=TA_TOP or TA_LEFT; end; } //Used in DrawTextW, ShortenString, TVirtualTreeColumn.ComputeHeaderLayout, TVirtualTreeColumns.DrawButtonText, // TVTEdit.AutoAdjustSize, TCustomVirtualStringTree.PaintNormalText, TCustomVirtualStringTree.WMSetFont // TCustomVirtualStringTree.DoTextMeasuring { function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; var Size: TSize): Boolean; var TempStr: String; begin Logger.AddCheckPoint(lcDummyFunctions,'GetTextExtentPoint32W'); TempStr:=WideCharToString(Str); Result:=GetTextExtentPoint(DC, PChar(TempStr), Length(TempStr), Size); end; } //Used in DrawTextW { function ExtTextOutW(DC: HDC; X, Y: Integer; Options: LongInt; Rect: PRect; Str: PWideChar; Count: LongInt; Dx: PInteger): Boolean; var TempStr: String; begin Logger.AddCheckPoint(lcDummyFunctions,'ExtTextOutW'); TempStr:=WideCharToString(Str); Result:= ExtTextOut(DC, X, Y, Options, Rect, PChar(TempStr), Length(TempStr), Dx); end; } //Used in TVirtualTreeHintWindow.CalcHintRect, TVirtualTreeColumn.ComputeHeaderLayout // TBaseVirtualTree.CollectSelectedNodesRTL, TBaseVirtualTree.DetermineHitPositionRTL // TBaseVirtualTree.UpdateEditBounds, TBaseVirtualTree.GetDisplayRect, PaintTree, // TStringEditLink.PrepareEdit, TCustomVirtualStringTree.ComputeNodeHeight etc function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; var I:Integer; XOffset, YOffset: SmallInt; FromRect,ToRect: TRect; begin GetWindowRect(hWndFrom,FromRect); GetWindowRect(hWndTo,ToRect); XOffset:=(FromRect.Left - ToRect.Left); YOffset:=(FromRect.Top - ToRect.Top); for i:=0 to cPoints - 1 do begin { Mode Delphi does not support treating a pointer as a array if ObjFpc is used than this syntax is preferred PPoint(@lpPoints)[i].x:= XOffset + PPoint(@lpPoints)[i].x; PPoint(@lpPoints)[i].y:= YOffset + PPoint(@lpPoints)[i].y; } PPoint(@lpPoints+i)^.x:= XOffset + PPoint(@lpPoints+i)^.x; PPoint(@lpPoints+i)^.y:= YOffset + PPoint(@lpPoints+i)^.y; end; Result:=MakeLong(XOffset,YOffset); end; {$ifndef UseExternalDragManager} function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop'; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;external 'ole32.dll' name 'RevokeDragDrop'; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'DoDragDrop'; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleInitialize'; procedure OleUninitialize;stdcall;external 'ole32.dll' name 'OleUninitialize'; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;external 'ole32.dll' name 'ReleaseStgMedium'; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetClipboard'; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetClipboard'; function OleFlushClipboard:WINOLEAPI;stdcall;external 'ole32.dll' name 'OleFlushClipboard'; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleIsCurrentClipboard'; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateStreamOnHGlobal'; {$endif} �����������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/lclconstants.inc�����������������������������������������0000644�0001750�0000144�00000007501�12014201074�023350� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Message constants that are not defined in LCL WM_APP = $8000; // ExtTextOut Options ETO_RTLREADING = 128; //DrawText options DT_RTLREADING = 131072; // Clipboard constants CF_BITMAP = 2; CF_DIB = 8; CF_PALETTE = 9; CF_ENHMETAFILE = 14; CF_METAFILEPICT = 3; CF_OEMTEXT = 7; CF_TEXT = 1; CF_UNICODETEXT = 13; CF_DIF = 5; CF_DSPBITMAP = 130; CF_DSPENHMETAFILE = 142; CF_DSPMETAFILEPICT = 131; CF_DSPTEXT = 129; CF_GDIOBJFIRST = 768; CF_GDIOBJLAST = 1023; CF_HDROP = 15; CF_LOCALE = 16; CF_OWNERDISPLAY = 128; CF_PENDATA = 10; CF_PRIVATEFIRST = 512; CF_PRIVATELAST = 767; CF_RIFF = 11; CF_SYLK = 4; CF_WAVE = 12; CF_TIFF = 6; CF_MAX = 17; // Win32 colors CLR_NONE = $ffffffff; CLR_DEFAULT = $ff000000; //DrawFrameControl constants DFCS_HOT = $1000; //Thread support //This values is for win32, how about others?? INFINITE = $FFFFFFFF; //OLE Support E_OUTOFMEMORY = HRESULT($8007000E); E_INVALIDARG = HRESULT($80070057); E_NOINTERFACE = HRESULT($80004002); E_POINTER = HRESULT($80004003); E_HANDLE = HRESULT($80070006); E_ABORT = HRESULT($80004004); E_FAIL = HRESULT($80004005); E_ACCESSDENIED = HRESULT($80070005); DV_E_TYMED = HRESULT($80040069); DV_E_CLIPFORMAT = HRESULT($8004006A); DV_E_LINDEX = HRESULT($80040068); DV_E_DVASPECT = HRESULT($8004006B); OLE_E_ADVISENOTSUPPORTED = HRESULT($80040003); OLE_S_USEREG = HRESULT($00040000); DATA_S_SAMEFORMATETC = HRESULT($00040130); DRAGDROP_S_DROP = HRESULT($00040100); DRAGDROP_S_CANCEL = HRESULT($00040101); DRAGDROP_S_USEDEFAULTCURSORS = HRESULT($00040102); NOERROR = 0; SPI_GETDRAGFULLWINDOWS = 38; // windows management SWP_HIDEWINDOW = 128; SWP_SHOWWINDOW = 64; //Imagelists ILD_NORMAL = 0; // Set WindowPos SWP_FRAMECHANGED = 32; SWP_NOOWNERZORDER = 512; SWP_NOSENDCHANGING = 1024; { RedrawWindow } RDW_ERASE = 4; RDW_FRAME = 1024; RDW_INTERNALPAINT = 2; RDW_INVALIDATE = 1; RDW_NOERASE = 32; RDW_NOFRAME = 2048; RDW_NOINTERNALPAINT = 16; RDW_VALIDATE = 8; RDW_ERASENOW = 512; RDW_UPDATENOW = 256; RDW_ALLCHILDREN = 128; RDW_NOCHILDREN = 64; //SetRedraw WM_SETREDRAW = 11; //Dummy CM_PARENTFONTCHANGED = 1999; //Wheel WHEEL_DELTA = 120; WHEEL_PAGESCROLL = High(DWord); SPI_GETWHEELSCROLLLINES = 104; //MultiByte MB_USEGLYPHCHARS = 4; LOCALE_IDEFAULTANSICODEPAGE = 4100; //Image list ILD_TRANSPARENT = $00000001; ILD_MASK = $00000010; ILD_IMAGE = $00000020; ILD_ROP = $00000040; ILD_BLEND25 = $00000002; ILD_BLEND50 = $00000004; ILD_OVERLAYMASK = $00000F00; { GetDCEx } DCX_WINDOW = $1; DCX_CACHE = $2; DCX_PARENTCLIP = $20; DCX_CLIPSIBLINGS = $10; DCX_CLIPCHILDREN = $8; DCX_NORESETATTRS = $4; DCX_LOCKWINDOWUPDATE = $400; DCX_EXCLUDERGN = $40; DCX_INTERSECTRGN = $80; DCX_VALIDATE = $200000; SCantWriteResourceStreamError = 'CantWriteResourceStreamError'; //command EN_UPDATE = 1024; ES_AUTOHSCROLL = $80; ES_AUTOVSCROLL = $40; ES_CENTER = $1; ES_LEFT = 0; ES_LOWERCASE = $10; ES_MULTILINE = $4; ES_NOHIDESEL = $100; EM_SETRECTNP = 180; DT_END_ELLIPSIS = 32768; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/�������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021575� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/��������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022535� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/win32/��������������������������������������0000755�0001750�0000144�00000000000�13615241420�023477� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/win32/vtvdragmanager.inc��������������������0000644�0001750�0000144�00000057657�12140233030�027214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; pceltFetched:pULong=nil): HResult; var CopyCount: LongWord; begin Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; if pceltFetched <> nil then pceltFetched^ := CopyCount; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin FCurrentIndex := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); begin inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; FOwner.GetNativeClipboardFormats(FFormatEtcArray); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in FOwner.FStates) then FOwner.CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PByte; begin Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAdvise(Out enumAdvise : IEnumStatData):HResult; begin if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(FOwner, FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in FOwner.FStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := FOwner; GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := FOwner.RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc; const Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. Pointer(FOwner.FDragManager) := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := FOwner.DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TBaseVirtualTree; begin Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(FOwner.Handle, DataObject, Pt, Effect); FDragSource := FOwner.GetTreeFromDataObject(DataObject); Result := FOwner.DragEnter(KeyState, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; FOwner.DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := FOwner.DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := FOwner.DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; end; //---------------------------------------------------------------------------------------------------------------------- {$IF FPC_FULLVERSION < 020601} function TVTDragManager.GiveFeedback(Effect: Longint): HResult; {$ELSE} function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; {$ENDIF} begin Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- {$IF FPC_FULLVERSION < 020601} function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: Longint): HResult; {$ELSE} function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; {$ENDIF} var RButton, LButton: Boolean; begin LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; end; ���������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/win32/vtgraphicsi.inc�����������������������0000644�0001750�0000144�00000076455�12140233030�026524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$ASMMODE INTEL} procedure AlphaBlendLineConstant(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using a constant alpha value. // The layout of a pixel must be BGRA where A is ignored (but is calculated as the other components). // ConstantAlpha must be in the range 0..255 where 0 means totally transparent (destination pixel only) // and 255 totally opaque (source pixel only). // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //.NOFRAME // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. MOVD XMM3, R9D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. MOVD XMM5, [Bias] PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLinePerPixel(Source, Destination: Pointer; Count, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the alpha value of the source pixels. // The layout of a pixel must be BGRA. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains Bias //.NOFRAME // Load XMM5 with the bias value. MOVD XMM5, R9D // Bias PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM3 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM3, XMM0 PUNPCKHWD XMM3, XMM3 PUNPCKHDQ XMM3, XMM3 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // Bias is on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM6 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F0 /// MOVQ MM6, MM0 DB $0F, $69, $F6 /// PUNPCKHWD MM6, MM6 DB $0F, $6A, $F6 /// PUNPCKHDQ MM6, MM6 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMaster(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the source pixel and a constant alpha value. // The layout of a pixel must be BGRA. // ConstantAlpha must be in the range 0..255. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //.SAVENV XMM6 //todo see how implement in fpc AlphaBlendLineMaster // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. MOVD XMM3, R9D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. MOV R10D, [Bias] MOVD XMM5, R10D PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RCX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM6 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM6, XMM0 PUNPCKHWD XMM6, XMM6 PUNPCKHDQ XMM6, XMM6 PMULLW XMM6, XMM3 // source alpha * master alpha PSRLW XMM6, 8 // divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM6 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM7 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F8 /// MOVQ MM7, MM0 DB $0F, $69, $FF /// PUNPCKHWD MM7, MM7 DB $0F, $6A, $FF /// PUNPCKHDQ MM7, MM7 DB $0F, $D5, $FE /// PMULLW MM7, MM6, source alpha * master alpha DB $0F, $71, $D7, $08 /// PSRLW MM7, 8, divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C7 /// PMULLW MM0, MM7, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMasterAndColor(Destination: Pointer; Count: Integer; ConstantAlpha, Color: Integer); // Blends a line of Count pixels in Destination against the given color using a constant alpha value. // The layout of a pixel must be BGRA and Color must be rrggbb00 (as stored by a COLORREF). // ConstantAlpha must be in the range 0..255. asm {$ifdef CPU64} // RCX contains Destination // EDX contains Count // R8D contains ConstantAlpha // R9D contains Color //.NOFRAME // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) MOVD XMM3, R8D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Calculate factor 2. MOV R10D, $100 MOVD XMM2, R10D PUNPCKLWD XMM2, XMM2 PUNPCKLDQ XMM2, XMM2 PSUBW XMM2, XMM3 // XMM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in XMM3, but the r and b components of Color must be swapped. BSWAP R9D // Color ROR R9D, 8 MOVD XMM1, R9D // Load the color and convert to word sized values. PXOR XMM4, XMM4 PUNPCKLBW XMM1, XMM4 PMULLW XMM1, XMM3 // XMM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. MOVD XMM0, DWORD PTR [RCX] PUNPCKLBW XMM0, XMM4 PMULLW XMM0, XMM2 // calculate F1 + F2 * target PADDW XMM0, XMM1 PSRLW XMM0, 8 // divide by 256 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RCX], XMM0 // store the result ADD RCX, 4 DEC EDX JNZ @1 {$else} // EAX contains Destination // EDX contains Count // ECX contains ConstantAlpha // Color is passed on the stack // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load MM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) DB $0F, $6E, $D9 /// MOVD MM3, ECX DB $0F, $61, $DB /// PUNPCKLWD MM3, MM3 DB $0F, $62, $DB /// PUNPCKLDQ MM3, MM3 // Calculate factor 2. MOV ECX, $100 DB $0F, $6E, $D1 /// MOVD MM2, ECX DB $0F, $61, $D2 /// PUNPCKLWD MM2, MM2 DB $0F, $62, $D2 /// PUNPCKLDQ MM2, MM2 DB $0F, $F9, $D3 /// PSUBW MM2, MM3 // MM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in MM3, but the r and b components of Color must be swapped. MOV ECX, [Color] BSWAP ECX ROR ECX, 8 DB $0F, $6E, $C9 /// MOVD MM1, ECX // Load the color and convert to word sized values. DB $0F, $EF, $E4 /// PXOR MM4, MM4 DB $0F, $60, $CC /// PUNPCKLBW MM1, MM4 DB $0F, $D5, $CB /// PMULLW MM1, MM3 // MM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. DB $0F, $6E, $00 /// MOVD MM0, [EAX] DB $0F, $60, $C4 /// PUNPCKLBW MM0, MM4 DB $0F, $D5, $C2 /// PMULLW MM0, MM2 // calculate F1 + F2 * target DB $0F, $FD, $C1 /// PADDW MM0, MM1 DB $0F, $71, $D0, $08 /// PSRLW MM0, 8 // divide by 256 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0 // convert words to bytes with saturation DB $0F, $7E, $00 /// MOVD [EAX], MM0 // store the result ADD EAX, 4 DEC EDX JNZ @1 {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure EMMS; // Reset MMX state to use the FPU for other tasks again. {$ifdef CPU64} inline; begin end; {$else} asm DB $0F, $77 /// EMMS end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromDeviceContext(DC: HDC; out Width, Height: Integer): Pointer; // Helper function used to retrieve the bitmap selected into the given device context. If there is a bitmap then // the function will return a pointer to its bits otherwise nil is returned. // Additionally the dimensions of the bitmap are returned. var Bitmap: HBITMAP; DIB: TDIBSection; begin Result := nil; Width := 0; Height := 0; Bitmap := GetCurrentObject(DC, OBJ_BITMAP); if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; Width := DIB.dsBmih.biWidth; Height := DIB.dsBmih.biHeight; end; end; Assert(Result <> nil, 'Alpha blending DC error: no bitmap available.'); end; //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; var DIB: TDIBSection; begin Result := nil; if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; // Helper function to calculate the start address for the given row. begin //todo: Height is always > 0 in LCL { if Height > 0 then // bottom-up DIB Row := Height - Row - 1; } // Return DWORD aligned address of the requested scanline. Result := Bits + Row * ((Width * 32 + 31) and not 31) div 8; end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); // Optimized alpha blend procedure using MMX instructions to perform as quick as possible. // For this procedure to work properly it is important that both source and target bitmap use the 32 bit color format. // R describes the source rectangle to work on. // Target is the place (upper left corner) in the target bitmap where to blend to. Note that source width + X offset // must be less or equal to the target width. Similar for the height. // If Mode is bmConstantAlpha then the blend operation uses the given ConstantAlpha value for all pixels. // If Mode is bmPerPixelAlpha then each pixel is blended using its individual alpha value (the alpha value of the source). // If Mode is bmMasterAlpha then each pixel is blended using its individual alpha value multiplied by ConstantAlpha. // If Mode is bmConstantAlphaAndColor then each destination pixel is blended using ConstantAlpha but also a constant // color which will be obtained from Bias. In this case no offset value is added, otherwise Bias is used as offset. // Blending of a color into target only (bmConstantAlphaAndColor) ignores Source (the DC) and Target (the position). // CAUTION: This procedure does not check whether MMX instructions are actually available! Call it only if MMX is really // usable. var Y: Integer; SourceRun, TargetRun: PByte; SourceBits, DestBits: Pointer; SourceWidth, SourceHeight, DestWidth, DestHeight: Integer; begin if not IsRectEmpty(R) then begin {$ifdef CPU64} //avoid MasterAlpha due to incomplete AlphaBlendLineMaster. See comment in procedure if Mode = bmMasterAlpha then Mode := bmConstantAlpha; {$endif} // Note: it is tempting to optimize the special cases for constant alpha 0 and 255 by just ignoring soure // (alpha = 0) or simply do a blit (alpha = 255). But this does not take the bias into account. case Mode of bmConstantAlpha: begin // Get a pointer to the bitmap bits for the source and target device contexts. // Note: this supposes that both contexts do actually have bitmaps assigned! SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLineConstant(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmPerPixelAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLinePerPixel(SourceRun, TargetRun, R.Right - R.Left, Bias); end; end; EMMS; end; bmMasterAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * Target.X); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); AlphaBlendLineMaster(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmConstantAlphaAndColor: begin // Source is ignored since there is a constant color value. DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + R.Top); Inc(TargetRun, 4 * R.Left); AlphaBlendLineMasterAndColor(TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; end; end; end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/win32/olemethods.inc������������������������0000644�0001750�0000144�00000034666�12014201074�026345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function TBaseVirtualTree.GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; // Returns the owner/sender of the given data object by means of a special clipboard format // or nil if the sender is in another process or no virtual tree at all. var Medium: TStgMedium; Data: PVTReference; begin Result := nil; if Assigned(DataObject) then begin StandardOLEFormat.cfFormat := CF_VTREFERENCE; if DataObject.GetData(StandardOLEFormat, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns a memory expression of all currently selected nodes in the Medium structure. // Note: The memory requirement of this method might be very high. This depends however on the requested storage format. // For HGlobal (a global memory block) we need to render first all nodes to local memory and copy this then to // the global memory in Medium. This is necessary because we have first to determine how much // memory is needed before we can allocate it. Hence for a short moment we need twice the space as used by the // nodes alone (plus the amount the nodes need in the tree anyway)! // With IStream this does not happen. We directly stream out the nodes and pass the constructed stream along. //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin FillChar(Medium, SizeOf(Medium), 0); // We can render the native clipboard format in two different storage media. if (FormatEtcIn.cfFormat = CF_VIRTUALTREE) and (FormatEtcIn.tymed and (TYMED_HGLOBAL or TYMED_ISTREAM) <> 0) then begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end else // Ask application descendants to render self defined formats. Result := DoRenderOLEData(FormatEtcIn, Medium, ForClipboard); end; //---------------------------------------------------------------------------------------------------------------------- type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin //raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); raise EStreamError.Create(SCantWriteResourceStreamError); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil according to Mode. Optimized can be set to True if the entire operation // happens within the same process (i.e. sender and receiver of the OLE operation are located in the same process). // Optimize = True makes only sense if the operation to carry out is a move hence it is also the indication of the // operation to be done here. Source is the source of the OLE data and only of use (and usually assigned) when // an OLE operation takes place in the same application. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Medium: TStgMedium; Stream: TStream; Data: Pointer; Node: PVirtualNode; Nodes: TNodeArray; I: Integer; Res: HRESULT; ChangeReason: TChangeReason; begin Nodes := nil; // Check the data format available by the data object. with StandardOLEFormat do begin // Read best format. cfFormat := CF_VIRTUALTREE; end; Result := DataObject.QueryGetData(StandardOLEFormat) = S_OK; if Result and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; Result := False; try if TargetNode = nil then TargetNode := FRoot; if TargetNode = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Optimized means source is known and in the same process so we can access its pointers, which avoids duplicating // the data while doing a serialization. Can only be used with cut'n paste and drag'n drop with move effect. if Optimized then begin if tsOLEDragging in Source.FStates then Nodes := Source.FDragSelection else Nodes := Source.GetSortedCutCopySet(True); if Mode in [amInsertBefore,amAddChildLast] then begin for I := 0 to High(Nodes) do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end else begin for I := High(Nodes) downto 0 do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end; Result := True; end else begin if Source = Self then ChangeReason := crNodeCopied else ChangeReason := crNodeAdded; Res := DataObject.GetData(StandardOLEFormat, Medium); if Res = S_OK then begin case Medium.tymed of TYMED_ISTREAM, // IStream interface TYMED_HGLOBAL: // global memory block begin Stream := nil; if Medium.tymed = TYMED_ISTREAM then Stream := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Stream := TOLEMemoryStream.Create; TOLEMemoryStream(Stream).SetPointer(Data, I); end; end; if Assigned(Stream) then try while Stream.Position < Stream.Size do begin Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, Mode); InternalAddFromStream(Stream, VTTreeStreamVersion, Node); // This seems a bit strange because of the callback for granting to add the node // which actually comes after the node has been added. The reason is that the node must // contain valid data otherwise I don't see how the application can make a funded decision. if not DoNodeCopying(Node, TargetNode) then DeleteNode(Node) else DoNodeCopied(Node); StructureChange(Node, ChangeReason); // In order to maintain the same node order when restoring nodes in the case of amInsertAfter // we have to move the reference node continously. Othwise we would end up with reversed node order. if Mode = amInsertAfter then TargetNode := Node; end; Result := True; finally Stream.Free; if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; end; end; ReleaseStgMedium(@Medium); end; end; finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; // This method constructs a shareable memory object filled with string data in the required format. Supported are: // CF_TEXT - plain ANSI text (Unicode text is converted using the user's current locale) // CF_UNICODETEXT - plain Unicode text // CF_CSV - comma separated plain ANSI text // CF_VRTF + CF_RTFNOOBS - rich text (plain ANSI) // CF_HTML - HTML text encoded using UTF-8 // // Result is the handle to a globally allocated memory block which can directly be used for clipboard and drag'n drop // transfers. The caller is responsible for freeing the memory. If for some reason the content could not be rendered // the Result is 0. //--------------- local function -------------------------------------------- procedure MakeFragment(var HTML: string); // Helper routine to build a properly-formatted HTML fragment. const Version = 'Version:1.0'#13#10; StartHTML = 'StartHTML:'; EndHTML = 'EndHTML:'; StartFragment = 'StartFragment:'; EndFragment = 'EndFragment:'; DocType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; HTMLIntro = '<html><head><META http-equiv=Content-Type content="text/html; charset=utf-8">' + '</head><body><!--StartFragment-->'; HTMLExtro = '<!--EndFragment--></body></html>'; NumberLengthAndCR = 10; // Let the compiler determine the description length. DescriptionLength = Length(Version) + Length(StartHTML) + Length(EndHTML) + Length(StartFragment) + Length(EndFragment) + 4 * NumberLengthAndCR; var Description: string; StartHTMLIndex, EndHTMLIndex, StartFragmentIndex, EndFragmentIndex: Integer; begin // The HTML clipboard format is defined by using byte positions in the entire block where HTML text and // fragments start and end. These positions are written in a description. Unfortunately the positions depend on the // length of the description but the description may change with varying positions. // To solve this dilemma the offsets are converted into fixed length strings which makes it possible to know // the description length in advance. StartHTMLIndex := DescriptionLength; // position 0 after the description StartFragmentIndex := StartHTMLIndex + Length(DocType) + Length(HTMLIntro); EndFragmentIndex := StartFragmentIndex + Length(HTML); EndHTMLIndex := EndFragmentIndex + Length(HTMLExtro); Description := Version + SysUtils.Format('%s%.8d', [StartHTML, StartHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndHTML, EndHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [StartFragment, StartFragmentIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndFragment, EndFragmentIndex]) + #13#10; HTML := Description + DocType + HTMLIntro + HTML + HTMLExtro; end; //--------------- end local function ---------------------------------------- var Data: Pointer; DataSize: Cardinal; S: string; WS: UnicodeString; P: Pointer; begin Result := 0; case Format of CF_TEXT: begin S := ContentToAnsi(Source, #9) + #0; Data := PChar(S); DataSize := Length(S); end; CF_UNICODETEXT: begin WS := ContentToUTF16(Source, #9) + #0; Data := PWideChar(WS); DataSize := 2 * Length(WS); end; else if Format = CF_CSV then S := ContentToAnsi(Source, ListSeparator) + #0 else if (Format = CF_VRTF) or (Format = CF_VRTFNOOBJS) then S := ContentToRTF(Source) + #0 else if Format = CF_HTML then begin S := ContentToHTML(Source); // Build a valid HTML clipboard fragment. MakeFragment(S); S := S + #0; end; Data := PChar(S); DataSize := Length(S); end; if DataSize > 0 then begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; end; ��������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/qt/�����������������������������������������0000755�0001750�0000144�00000000000�13615241420�023161� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/qt/vtvdragmanager.inc�����������������������0000644�0001750�0000144�00000000036�12014201074�026654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/qt/vtgraphicsi.inc��������������������������0000644�0001750�0000144�00000105213�12203745772�026214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses qt4, qtobjects; {$ASMMODE INTEL} procedure AlphaBlendLineConstant(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using a constant alpha value. // The layout of a pixel must be BGRA where A is ignored (but is calculated as the other components). // ConstantAlpha must be in the range 0..255 where 0 means totally transparent (destination pixel only) // and 255 totally opaque (source pixel only). // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains ConstantAlpha // R8D contains Bias //.NOFRAME // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. {$ifdef windows} MOVD XMM3, R9D // ConstantAlpha {$else} MOVD XMM3, ECX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. {$ifdef windows} MOVD XMM5, [Bias] {$else} MOVD XMM5, R8D //Bias {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLinePerPixel(Source, Destination: Pointer; Count, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the alpha value of the source pixels. // The layout of a pixel must be BGRA. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains Bias //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains Bias //.NOFRAME // Load XMM5 with the bias value. {$ifdef windows} MOVD XMM5, R9D // Bias {$else} MOVD XMM5, ECX // Bias {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM3 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM3, XMM0 PUNPCKHWD XMM3, XMM3 PUNPCKHDQ XMM3, XMM3 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // Bias is on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM6 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F0 /// MOVQ MM6, MM0 DB $0F, $69, $F6 /// PUNPCKHWD MM6, MM6 DB $0F, $6A, $F6 /// PUNPCKHDQ MM6, MM6 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMaster(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the source pixel and a constant alpha value. // The layout of a pixel must be BGRA. // ConstantAlpha must be in the range 0..255. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains ConstantAlpha // R8D contains Bias //.SAVENV XMM6 //todo see how implement in fpc // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. {$ifdef windows} MOVD XMM3, R9D // ConstantAlpha {$else} MOVD XMM3, ECX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. {$ifdef windows} MOV R10D, [Bias] MOVD XMM5, R10D {$else} MOVD XMM5, R8D {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RCX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM6 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM6, XMM0 PUNPCKHWD XMM6, XMM6 PUNPCKHDQ XMM6, XMM6 PMULLW XMM6, XMM3 // source alpha * master alpha PSRLW XMM6, 8 // divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM6 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM7 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F8 /// MOVQ MM7, MM0 DB $0F, $69, $FF /// PUNPCKHWD MM7, MM7 DB $0F, $6A, $FF /// PUNPCKHDQ MM7, MM7 DB $0F, $D5, $FE /// PMULLW MM7, MM6, source alpha * master alpha DB $0F, $71, $D7, $08 /// PSRLW MM7, 8, divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C7 /// PMULLW MM0, MM7, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMasterAndColor(Destination: Pointer; Count: Integer; ConstantAlpha, Color: Integer); // Blends a line of Count pixels in Destination against the given color using a constant alpha value. // The layout of a pixel must be BGRA and Color must be rrggbb00 (as stored by a COLORREF). // ConstantAlpha must be in the range 0..255. asm {$ifdef CPU64} //windows // RCX contains Destination // EDX contains Count // R8D contains ConstantAlpha // R9D contains Color //non windows // RDI contains Destination // ESI contains Count // EDX contains ConstantAlpha // ECX contains Color //.NOFRAME // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) {$ifdef windows} MOVD XMM3, R8D // ConstantAlpha {$else} MOVD XMM3, EDX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Calculate factor 2. MOV R10D, $100 MOVD XMM2, R10D PUNPCKLWD XMM2, XMM2 PUNPCKLDQ XMM2, XMM2 PSUBW XMM2, XMM3 // XMM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in XMM3, but the r and b components of Color must be swapped. {$ifdef windows} BSWAP R9D // Color ROR R9D, 8 MOVD XMM1, R9D // Load the color and convert to word sized values. {$else} BSWAP ECX // Color ROR ECX, 8 MOVD XMM1, ECX // Load the color and convert to word sized values. {$endif} PXOR XMM4, XMM4 PUNPCKLBW XMM1, XMM4 PMULLW XMM1, XMM3 // XMM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. {$ifdef windows} MOVD XMM0, DWORD PTR [RCX] {$else} MOVD XMM0, DWORD PTR [RDI] {$endif} PUNPCKLBW XMM0, XMM4 PMULLW XMM0, XMM2 // calculate F1 + F2 * target PADDW XMM0, XMM1 PSRLW XMM0, 8 // divide by 256 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RCX], XMM0 // store the result ADD RCX, 4 DEC EDX {$else} MOVD DWORD PTR [RDI], XMM0 // store the result ADD RDI, 4 DEC ESI {$endif} JNZ @1 {$else} // EAX contains Destination // EDX contains Count // ECX contains ConstantAlpha // Color is passed on the stack // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load MM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) DB $0F, $6E, $D9 /// MOVD MM3, ECX DB $0F, $61, $DB /// PUNPCKLWD MM3, MM3 DB $0F, $62, $DB /// PUNPCKLDQ MM3, MM3 // Calculate factor 2. MOV ECX, $100 DB $0F, $6E, $D1 /// MOVD MM2, ECX DB $0F, $61, $D2 /// PUNPCKLWD MM2, MM2 DB $0F, $62, $D2 /// PUNPCKLDQ MM2, MM2 DB $0F, $F9, $D3 /// PSUBW MM2, MM3 // MM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in MM3, but the r and b components of Color must be swapped. MOV ECX, [Color] BSWAP ECX ROR ECX, 8 DB $0F, $6E, $C9 /// MOVD MM1, ECX // Load the color and convert to word sized values. DB $0F, $EF, $E4 /// PXOR MM4, MM4 DB $0F, $60, $CC /// PUNPCKLBW MM1, MM4 DB $0F, $D5, $CB /// PMULLW MM1, MM3 // MM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. DB $0F, $6E, $00 /// MOVD MM0, [EAX] DB $0F, $60, $C4 /// PUNPCKLBW MM0, MM4 DB $0F, $D5, $C2 /// PMULLW MM0, MM2 // calculate F1 + F2 * target DB $0F, $FD, $C1 /// PADDW MM0, MM1 DB $0F, $71, $D0, $08 /// PSRLW MM0, 8 // divide by 256 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0 // convert words to bytes with saturation DB $0F, $7E, $00 /// MOVD [EAX], MM0 // store the result ADD EAX, 4 DEC EDX JNZ @1 {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure EMMS; // Reset MMX state to use the FPU for other tasks again. {$ifdef CPU64} inline; begin end; {$else} asm DB $0F, $77 /// EMMS end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromDeviceContext(DC: HDC; out Width, Height: Integer): Pointer; // Helper function used to retrieve the bitmap selected into the given device context. If there is a bitmap then // the function will return a pointer to its bits otherwise nil is returned. // Additionally the dimensions of the bitmap are returned. var Bitmap: HBITMAP; DIB: TDIBSection; begin Result := nil; Width := 0; Height := 0; Bitmap := GetCurrentObject(DC, OBJ_BITMAP); if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; Width := DIB.dsBmih.biWidth; Height := DIB.dsBmih.biHeight; end; end; Assert(Result <> nil, 'Alpha blending DC error: no bitmap available.'); end; //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; var DIB: TDIBSection; begin Result := nil; if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; // Helper function to calculate the start address for the given row. begin //todo: Height is always > 0 in LCL { if Height > 0 then // bottom-up DIB Row := Height - Row - 1; } // Return DWORD aligned address of the requested scanline. Result := Bits + Row * ((Width * 32 + 31) and not 31) div 8; end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); // Optimized alpha blend procedure using MMX instructions to perform as quick as possible. // For this procedure to work properly it is important that both source and target bitmap use the 32 bit color format. // R describes the source rectangle to work on. // Target is the place (upper left corner) in the target bitmap where to blend to. Note that source width + X offset // must be less or equal to the target width. Similar for the height. // If Mode is bmConstantAlpha then the blend operation uses the given ConstantAlpha value for all pixels. // If Mode is bmPerPixelAlpha then each pixel is blended using its individual alpha value (the alpha value of the source). // If Mode is bmMasterAlpha then each pixel is blended using its individual alpha value multiplied by ConstantAlpha. // If Mode is bmConstantAlphaAndColor then each destination pixel is blended using ConstantAlpha but also a constant // color which will be obtained from Bias. In this case no offset value is added, otherwise Bias is used as offset. // Blending of a color into target only (bmConstantAlphaAndColor) ignores Source (the DC) and Target (the position). // CAUTION: This procedure does not check whether MMX instructions are actually available! Call it only if MMX is really // usable. var Y: Integer; SourceRun, TargetRun: PByte; SourceBits, DestBits: Pointer; SourceWidth, SourceHeight, DestWidth, DestHeight: Integer; //BlendColor: TQColor; begin if not IsRectEmpty(R) then begin {$ifdef CPU64} //avoid MasterAlpha due to incomplete AlphaBlendLineMaster. See comment in procedure if Mode = bmMasterAlpha then Mode := bmConstantAlpha; {$endif} // Note: it is tempting to optimize the special cases for constant alpha 0 and 255 by just ignoring soure // (alpha = 0) or simply do a blit (alpha = 255). But this does not take the bias into account. case Mode of bmConstantAlpha: begin // Get a pointer to the bitmap bits for the source and target device contexts. // Note: this supposes that both contexts do actually have bitmaps assigned! SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLineConstant(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmPerPixelAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLinePerPixel(SourceRun, TargetRun, R.Right - R.Left, Bias); end; end; EMMS; end; bmMasterAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * Target.X); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); AlphaBlendLineMaster(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmConstantAlphaAndColor: begin //todo: see why is not working { QColor_fromRgb(@BlendColor, Bias and $000000FF, (Bias shr 8) and $000000FF, (Bias shr 16) and $000000FF, ConstantAlpha); QPainter_fillRect(TQTDeviceContext(Destination).Widget, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top, @BlendColor); } // Source is ignored since there is a constant color value. DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + R.Top); Inc(TargetRun, 4 * R.Left); AlphaBlendLineMasterAndColor(TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; end; end; end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/qt/olemethods.inc���������������������������0000644�0001750�0000144�00000000035�12014201074�026006� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk2/���������������������������������������0000755�0001750�0000144�00000000000�13615241420�023404� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk2/vtvdragmanager.inc���������������������0000644�0001750�0000144�00000000036�12014201074�027077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk2/vtgraphicsi.inc������������������������0000644�0001750�0000144�00000003072�12140233030�026412� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses gtk2def, gdk2, GTK2Proc, Cairo, LCLVersion; {$MACRO ON} {$if lcl_fullversion > 1000000} {$define TGtk2DeviceContext:=TGtkDeviceContext} {$endif} function gdk_cairo_create(drawable: PGdkDrawable): Pcairo_t cdecl external gdklib; procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function GetContext(GtkDC: TGtk2DeviceContext): Pcairo_t; begin Result := nil; if (GtkDC <> nil) and (GtkDC.Drawable <> nil) then Result := gdk_cairo_create(GtkDC.Drawable); end; var SrcDC: TGtk2DeviceContext absolute Source; DestDC: TGtk2DeviceContext absolute Destination; SrcContext, DestContext: Pcairo_t; begin case Mode of bmConstantAlpha:; bmPerPixelAlpha:; bmMasterAlpha:; bmConstantAlphaAndColor: begin DestContext := GetContext(DestDC); if DestContext <> nil then begin cairo_set_source_rgba(DestContext, (Bias and $000000FF) / 255, ((Bias shr 8) and $000000FF) / 255, ((Bias shr 16) and $000000FF) / 255, ConstantAlpha / 255 ); cairo_rectangle(DestContext, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top); cairo_fill(DestContext); cairo_destroy(DestContext); end; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk2/olemethods.inc�������������������������0000644�0001750�0000144�00000000035�12014201074�026231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk/����������������������������������������0000755�0001750�0000144�00000000000�13615241420�023322� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk/vtvdragmanager.inc����������������������0000644�0001750�0000144�00000000036�12014201074�027015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk/vtgraphicsi.inc�������������������������0000644�0001750�0000144�00000003766�12014201074�026345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses gtkdef, gtkint, CairoXlib, gdk, Cairo, glib; //procedure gdk_drawable_get_size(drawable: PGdkDrawable; width, height: Pgint); cdecl; external gdkdll; procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function CreateSurface(GtkDC: TGtkDeviceContext): Pcairo_surface_t; var Width, Height: gint; Visual: PGdkVisual; begin Result := nil; if (GtkDC <> nil) and (GtkDC.Drawable <> nil) then begin gdk_window_get_size(GtkDC.Drawable, @Width, @Height); Visual := gdk_visual_get_system; Result := cairo_xlib_surface_create( GDK_WINDOW_XDISPLAY(PGdkWindowPrivate(GtkDC.Drawable)), GDK_WINDOW_XWINDOW(PGdkWindowPrivate(GtkDC.Drawable)), GDK_VISUAL_XVISUAL(PGdkVisualPrivate(Visual)), Width, Height); end; end; var SrcDC: TGtkDeviceContext absolute Source; DestDC: TGtkDeviceContext absolute Destination; SrcSurface, DestSurface: Pcairo_surface_t; SrcContext, DestContext: Pcairo_t; begin case Mode of bmConstantAlpha:; bmPerPixelAlpha:; bmMasterAlpha:; bmConstantAlphaAndColor: begin DestSurface := CreateSurface(DestDC); if DestSurface <> nil then begin DestContext := cairo_create(DestSurface); cairo_set_source_rgba(DestContext, (Bias and $000000FF) / 255, ((Bias shr 8) and $000000FF) / 255, ((Bias shr 16) and $000000FF) / 255, ConstantAlpha / 255 ); cairo_rectangle(DestContext, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top); cairo_fill(DestContext); cairo_destroy(DestContext); cairo_surface_destroy(DestSurface); end; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end; ����������doublecmd-0.9.8/components/virtualtreeview/include/intf/gtk/olemethods.inc��������������������������0000644�0001750�0000144�00000000035�12014201074�026147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/dummyolemethods.inc�������������������������0000644�0001750�0000144�00000034730�12014201074�026447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function TBaseVirtualTree.GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; // Returns the owner/sender of the given data object by means of a special clipboard format // or nil if the sender is in another process or no virtual tree at all. var Medium: TStgMedium; Data: PVTReference; begin Result := nil; { if Assigned(DataObject) then begin StandardOLEFormat.cfFormat := CF_VTREFERENCE; if DataObject.GetData(StandardOLEFormat, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns a memory expression of all currently selected nodes in the Medium structure. // Note: The memory requirement of this method might be very high. This depends however on the requested storage format. // For HGlobal (a global memory block) we need to render first all nodes to local memory and copy this then to // the global memory in Medium. This is necessary because we have first to determine how much // memory is needed before we can allocate it. Hence for a short moment we need twice the space as used by the // nodes alone (plus the amount the nodes need in the tree anyway)! // With IStream this does not happen. We directly stream out the nodes and pass the constructed stream along. //--------------- local function -------------------------------------------- { procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; } begin { FillChar(Medium, SizeOf(Medium), 0); // We can render the native clipboard format in two different storage media. if (FormatEtcIn.cfFormat = CF_VIRTUALTREE) and (FormatEtcIn.tymed and (TYMED_HGLOBAL or TYMED_ISTREAM) <> 0) then begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end else // Ask application descendants to render self defined formats. Result := DoRenderOLEData(FormatEtcIn, Medium, ForClipboard); } end; //---------------------------------------------------------------------------------------------------------------------- type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin //raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); raise EStreamError.Create(SCantWriteResourceStreamError); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil according to Mode. Optimized can be set to True if the entire operation // happens within the same process (i.e. sender and receiver of the OLE operation are located in the same process). // Optimize = True makes only sense if the operation to carry out is a move hence it is also the indication of the // operation to be done here. Source is the source of the OLE data and only of use (and usually assigned) when // an OLE operation takes place in the same application. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Medium: TStgMedium; Stream: TStream; Data: Pointer; Node: PVirtualNode; Nodes: TNodeArray; I: Integer; Res: HRESULT; ChangeReason: TChangeReason; begin { Nodes := nil; // Check the data format available by the data object. with StandardOLEFormat do begin // Read best format. cfFormat := CF_VIRTUALTREE; end; Result := DataObject.QueryGetData(StandardOLEFormat) = S_OK; if Result and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; Result := False; try if TargetNode = nil then TargetNode := FRoot; if TargetNode = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Optimized means source is known and in the same process so we can access its pointers, which avoids duplicating // the data while doing a serialization. Can only be used with cut'n paste and drag'n drop with move effect. if Optimized then begin if tsOLEDragging in Source.FStates then Nodes := Source.FDragSelection else Nodes := Source.GetSortedCutCopySet(True); if Mode in [amInsertBefore,amAddChildLast] then begin for I := 0 to High(Nodes) do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end else begin for I := High(Nodes) downto 0 do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end; Result := True; end else begin if Source = Self then ChangeReason := crNodeCopied else ChangeReason := crNodeAdded; Res := DataObject.GetData(StandardOLEFormat, Medium); if Res = S_OK then begin case Medium.tymed of TYMED_ISTREAM, // IStream interface TYMED_HGLOBAL: // global memory block begin Stream := nil; if Medium.tymed = TYMED_ISTREAM then Stream := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Stream := TOLEMemoryStream.Create; TOLEMemoryStream(Stream).SetPointer(Data, I); end; end; if Assigned(Stream) then try while Stream.Position < Stream.Size do begin Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, Mode); InternalAddFromStream(Stream, VTTreeStreamVersion, Node); // This seems a bit strange because of the callback for granting to add the node // which actually comes after the node has been added. The reason is that the node must // contain valid data otherwise I don't see how the application can make a funded decision. if not DoNodeCopying(Node, TargetNode) then DeleteNode(Node) else DoNodeCopied(Node); StructureChange(Node, ChangeReason); // In order to maintain the same node order when restoring nodes in the case of amInsertAfter // we have to move the reference node continously. Othwise we would end up with reversed node order. if Mode = amInsertAfter then TargetNode := Node; end; Result := True; finally Stream.Free; if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; end; end; ReleaseStgMedium(@Medium); end; end; finally EndUpdate; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; // This method constructs a shareable memory object filled with string data in the required format. Supported are: // CF_TEXT - plain ANSI text (Unicode text is converted using the user's current locale) // CF_UNICODETEXT - plain Unicode text // CF_CSV - comma separated plain ANSI text // CF_VRTF + CF_RTFNOOBS - rich text (plain ANSI) // CF_HTML - HTML text encoded using UTF-8 // // Result is the handle to a globally allocated memory block which can directly be used for clipboard and drag'n drop // transfers. The caller is responsible for freeing the memory. If for some reason the content could not be rendered // the Result is 0. //--------------- local function -------------------------------------------- { procedure MakeFragment(var HTML: string); // Helper routine to build a properly-formatted HTML fragment. const Version = 'Version:1.0'#13#10; StartHTML = 'StartHTML:'; EndHTML = 'EndHTML:'; StartFragment = 'StartFragment:'; EndFragment = 'EndFragment:'; DocType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; HTMLIntro = '<html><head><META http-equiv=Content-Type content="text/html; charset=utf-8">' + '</head><body><!--StartFragment-->'; HTMLExtro = '<!--EndFragment--></body></html>'; NumberLengthAndCR = 10; // Let the compiler determine the description length. DescriptionLength = Length(Version) + Length(StartHTML) + Length(EndHTML) + Length(StartFragment) + Length(EndFragment) + 4 * NumberLengthAndCR; var Description: string; StartHTMLIndex, EndHTMLIndex, StartFragmentIndex, EndFragmentIndex: Integer; begin // The HTML clipboard format is defined by using byte positions in the entire block where HTML text and // fragments start and end. These positions are written in a description. Unfortunately the positions depend on the // length of the description but the description may change with varying positions. // To solve this dilemma the offsets are converted into fixed length strings which makes it possible to know // the description length in advance. StartHTMLIndex := DescriptionLength; // position 0 after the description StartFragmentIndex := StartHTMLIndex + Length(DocType) + Length(HTMLIntro); EndFragmentIndex := StartFragmentIndex + Length(HTML); EndHTMLIndex := EndFragmentIndex + Length(HTMLExtro); Description := Version + SysUtils.Format('%s%.8d', [StartHTML, StartHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndHTML, EndHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [StartFragment, StartFragmentIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndFragment, EndFragmentIndex]) + #13#10; HTML := Description + DocType + HTMLIntro + HTML + HTMLExtro; end; } //--------------- end local function ---------------------------------------- var Data: Pointer; DataSize: Cardinal; S: string; WS: WideString; P: Pointer; begin Result := 0; { case Format of CF_TEXT: begin S := ContentToText(Source, #9) + #0; Data := PChar(S); DataSize := Length(S); end; CF_UNICODETEXT: begin WS := ContentToUnicode(Source, #9) + #0; Data := PWideChar(WS); DataSize := 2 * Length(WS); end; else if Format = CF_CSV then S := ContentToText(Source, ListSeparator) + #0 else if (Format = CF_VRTF) or (Format = CF_VRTFNOOBJS) then S := ContentToRTF(Source) + #0 else if Format = CF_HTML then begin S := ContentToHTML(Source); // Build a valid HTML clipboard fragment. MakeFragment(S); S := S + #0; end; Data := PChar(S); DataSize := Length(S); end; if DataSize > 0 then begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; } end; ����������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/dummydragmanager.inc������������������������0000644�0001750�0000144�00000060304�12014201074�026550� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; { FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; { var AClone: TEnumFormatEtc; } begin { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc;pceltFetched:pULong=nil): HResult; { var CopyCount: LongWord; } begin { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); begin inherited Create; { FOwner := AOwner; FForClipboard := ForClipboard; FOwner.GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in FOwner.FStates) then FOwner.CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; { var I: integer; } begin { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. { var Size: Cardinal; Data, NewData: PChar; } begin { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). { var InternalMedium: PStgMedium; } begin { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAdvise(Out enumAdvise : IEnumStatData):HResult; begin { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; { var NewList: TEnumFormatEtc; } begin { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(FOwner, FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. { var I: Integer; Data: PVTReference; } begin { // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in FOwner.FStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := FOwner; GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := FOwner.RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; { var I: Integer; } begin { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc; {$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. { var Index: Integer; LocalStgMedium: PStgMedium; } begin { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; { // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. Pointer(FOwner.FDragManager) := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. { if Assigned(FDataObject) then Result := FDataObject else begin Result := FOwner.DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TBaseVirtualTree; begin //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin //Result := FIsDropTarget; Result := True; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(FOwner.Handle, DataObject, Pt, Effect); FDragSource := FOwner.GetTreeFromDataObject(DataObject); Result := FOwner.DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; FOwner.DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := FOwner.DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := FOwner.DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/carbon/�������������������������������������0000755�0001750�0000144�00000000000�13615241420�024001� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/carbon/vtvdragmanager.inc�������������������0000644�0001750�0000144�00000000036�12014201074�027474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/carbon/vtgraphicsi.inc����������������������0000644�0001750�0000144�00000001156�12014201074�027013� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//todo: properly implement procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); begin case Mode of bmConstantAlpha, bmPerPixelAlpha, bmMasterAlpha, bmConstantAlphaAndColor: begin BitBlt(Destination, Target.X, Target.Y, R.Right - R.Left, R.Bottom - R.Top, Source, R.Left, R.Right, SRCCOPY); end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end;������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/intf/carbon/olemethods.inc�����������������������0000644�0001750�0000144�00000000035�12014201074�026626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/arch/��������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022512� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/arch/x86_64/�������������������������������������0000755�0001750�0000144�00000000000�13615241420�023450� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/arch/pascal/�������������������������������������0000755�0001750�0000144�00000000000�13615241420�023755� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/include/arch/i386/���������������������������������������0000755�0001750�0000144�00000000000�13615241420�023203� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/ideicons.lrs���������������������������������������������0000644�0001750�0000144�00000006617�11727533326�022516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('tvirtualdrawtree','XPM',[ '/* XPM */'#10'static char * tvirtualdrawtree_xpm[] = {'#10'"24 24 8 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c None",'#10'"@'#9'c #808000",'#10'"#'#9'c #20A' +'080",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0A000",'#10'"&'#9'c #C0C0C0",'#10 +'"*'#9'c #FFFFFF",'#10'"++++++..++++++++++++++++",'#10'"+++++.&&............' +'.+++",'#10'"++++.***&&&&&&&&&&$$@.++",'#10'"++++.************@$$$.++",'#10 +'"+++.************@$$$$.++",'#10'"++++...@********.$$$$.++",'#10'"+++++++...' +'......$$$$@+++",'#10'"+++++++.$$$$$$$$***$.+++",'#10'"+++++++.*******%***&.' +'+++",'#10'"+++++++.*.****%%%**$.+++",'#10'"+++++++.*...*%%%%%*.++++",'#10'"' +'+++++++.*.**%%%%%%%.++++",'#10'"++++++.**.***####**.++++",'#10'"+++++.$**.*' +'*######*.++++",'#10'"+++++.&**..*######*.++++",'#10'"+++++.******######*.++' +'++",'#10'"+++++.*******####**&.+++",'#10'"+...+.***.....******.+++",'#10'"+' +'.&&@....&&&&&.****$.+++",'#10'"+.&&&&&&&&&&&&&.**&.++++",'#10'"++.$&&&&&&&&' +'&&&.&&&.++++",'#10'"++.$$$$$$$$$$$$$.&.+++++",'#10'"+++...............+++++' +'+",'#10'"++++++++++++++++++++++++"};'#10 ]); LazarusResources.Add('tvirtualstringtree','XPM',[ '/* XPM */'#10'static char * tvirtualstringtree_xpm[] = {'#10'"24 24 8 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c None",'#10'"@'#9'c #808000",'#10'"#'#9'c #20A' +'080",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0A000",'#10'"&'#9'c #C0C0C0",'#10 +'"*'#9'c #FFFFFF",'#10'"++++++..++++++++++++++++",'#10'"+++++.&&............' +'.+++",'#10'"++++.***&&&&&&&&&&$$@.++",'#10'"++++.************@$$$.++",'#10 +'"+++.************@$$$$.++",'#10'"++++...@********.$$$$.++",'#10'"+++++++...' +'......$$$$@+++",'#10'"+++++++.$$$$$$$$***$.+++",'#10'"+++++++.***********&.' +'+++",'#10'"+++++++.*.**......*$.+++",'#10'"+++++++.*....%%%%.*.++++",'#10'"' +'+++++++.*.**......*.++++",'#10'"++++++.**.*********.++++",'#10'"+++++.$**.*' +'*......*.++++",'#10'"+++++.&**....####.*.++++",'#10'"+++++.******......*.++' +'++",'#10'"+++++.*************&.+++",'#10'"+...+.***.....******.+++",'#10'"+' +'.&&@....&&&&&.****$.+++",'#10'"+.&&&&&&&&&&&&&.**&.++++",'#10'"++.$&&&&&&&&' +'&&&.&&&.++++",'#10'"++.$$$$$$$$$$$$$.&.+++++",'#10'"+++...............+++++' +'+",'#10'"++++++++++++++++++++++++"};'#10 ]); LazarusResources.Add('tvtheaderpopupmenu','XPM',[ '/* XPM */'#10'static char * tvtheaderpopupmenu_xpm[] = {'#10'"24 24 7 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c #000080",'#10'"@'#9'c None",'#10'"#'#9'c #808' +'000",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0C0C0",'#10'"&'#9'c #FFFFFF",'#10 +'"@@@@@@..@@@@@@@@@@@@@@@@",'#10'"@@@@@.%%.............@@@",'#10'"@@@@.&&&%%' +'%%%%%%%%$$#.@@",'#10'"@@@@.&&&&&&&&&&&&#$$$.@@",'#10'"@@@.&&&&&&&&&&&&#$$$$' +'.@@",'#10'"@@@@...#&&&&&&&&.$$$$.@@",'#10'"@@@@@@@.........$$$$#@@@",'#10'"' +'@@@@@@@.$$$$$$$$&&&$.@@@",'#10'"@@@@@@@.$&&&&&&.&&&%.@@@",'#10'"@@@@@@@.$&+' +'++&&.&&&$.@@@",'#10'"@@@@@@@.$&&&&&&.&&&.@@@@",'#10'"@@@@@@@.$&+++++.&&&.@@' +'@@",'#10'"@@@@@@.&$+&&&+&+&&&.@@@@",'#10'"@@@@@.$&$&++++&&+&&.@@@@",'#10'"@' +'@@@@.%&$&&&&+&&&+&.@@@@",'#10'"@@@@@.&&$....+&&&&+.@@@@",'#10'"@@@@@.&&&&&&' +'&+&&&++++@@@",'#10'"@...@.&&&....+&&&&+&.@@@",'#10'"@.%%#....%%%%+&++&&+.@@' +'@",'#10'"@.%%%%%%%%%%%++$+&&+@@@@",'#10'"@@.$%%%%%%%%%+%.%+&&+@@@",'#10'"@@' +'.$$$$$$$$$$$$$.+&&+@@@",'#10'"@@@...............++@@@@",'#10'"@@@@@@@@@@@@@' +'@@@@@@@@@@@"};'#10 ]); �����������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/doublecmd.diff�������������������������������������������0000644�0001750�0000144�00000032653�12203745772�022766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: VTConfig.inc =================================================================== --- VTConfig.inc (revision 2731) +++ VTConfig.inc (working copy) @@ -22,7 +22,7 @@ //Lazarus port options -{$define EnableOLE} +{.$define EnableOLE} {.$define EnableNativeTVM} {.$define EnablePrint} {.$define EnableNCFunctions} @@ -42,7 +42,7 @@ //under linux the performance is poor with threading enabled {$ifdef Windows} - {$define EnableThreadSupport} + {.$define EnableThreadSupport} {$endif} {$ifdef CPU64} {$define PACKARRAYPASCAL} Index: VirtualTrees.pas =================================================================== --- VirtualTrees.pas (revision 2731) +++ VirtualTrees.pas (working copy) @@ -745,6 +745,7 @@ toAutoHideButtons, // Node buttons are hidden when there are child nodes, but all are invisible. toAutoDeleteMovedNodes, // Delete nodes which where moved in a drag operation (if not directed otherwise). toDisableAutoscrollOnFocus, // Disable scrolling a node or column into view if it gets focused. + toDisableAutoscrollHorizontal, // Only autoscroll on focus vertically never horizontally toAutoChangeScale, // Change default node height automatically if the system's font scale is set to big fonts. toAutoFreeOnCollapse, // Frees any child node after a node has been collapsed (HasChildren flag stays there). toDisableAutoscrollOnEdit, // Do not center a node horizontally when it is edited. @@ -2018,7 +2019,7 @@ var Allowed: Boolean) of object; TVTDragOverEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean) of object; - TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; + TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; {DataObject: IDataObject;} Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode) of object; TVTRenderOLEDataEvent = procedure(Sender: TBaseVirtualTree; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean; var Result: HRESULT) of object; @@ -2543,6 +2544,7 @@ procedure BeginOperation; function CalculateSelectionRect(X, Y: Integer): Boolean; virtual; function CanAutoScroll: Boolean; virtual; + function CanScroll(const ClientMousePos: TPoint): Boolean; virtual; function CanShowDragImage: Boolean; virtual; procedure Change(Node: PVirtualNode); virtual; procedure ChangeScale(M, D: Integer); override; @@ -3015,6 +3017,7 @@ function GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSibling(Node: PVirtualNode): PVirtualNode; + function GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; @@ -3033,6 +3036,7 @@ function GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSibling(Node: PVirtualNode): PVirtualNode; + function GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; @@ -13858,7 +13862,7 @@ FFocusedColumn := Value; if Assigned(FFocusedNode) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then begin - if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, True) then + if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)) then InvalidateNode(FFocusedNode); end; @@ -15036,7 +15040,8 @@ LeaveStates := [tsHint]; if [tsWheelPanning, tsWheelScrolling] * FStates = [] then begin - KillTimer(Handle, ScrollTimer); + if HandleAllocated then + KillTimer(Handle, ScrollTimer); LeaveStates := LeaveStates + [tsScrollPending, tsScrolling]; end; DoStateChange([], LeaveStates); @@ -15660,7 +15665,7 @@ if (Shift = [ssCtrlOS]) and not ActAsGrid then begin ScrollIntoView(Node, toCenterScrollIntoView in FOptions.SelectionOptions, - not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions)); + not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); if (CharCode = VK_HOME) and not UseRightToLeftAlignment then SetOffsetX(0) else @@ -17879,7 +17884,7 @@ if hoVisible in FHeader.FOptions then Dec(Y, FHeader.Height); - if (Y > 0) and (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then + if (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then Include(Result, sdUp); //todo: probably the code below is bug due to poor timeGetTime implementation @@ -18424,7 +18429,7 @@ begin if Assigned(FOnDragDrop) then - FOnDragDrop(Self, Source, DataObject, Formats, Shift, Pt, Effect, Mode); + FOnDragDrop(Self, Source, {DataObject, }Formats, Shift, Pt, Effect, Mode); end; //---------------------------------------------------------------------------------------------------------------------- @@ -18576,7 +18581,7 @@ InvalidateNode(FFocusedNode); if (FUpdateCount = 0) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then ScrollIntoView(FFocusedNode, (toCenterScrollIntoView in FOptions.SelectionOptions) and - (MouseButtonDown * FStates = []), True); + (MouseButtonDown * FStates = []), not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); end; // Reset range anchor if necessary. @@ -19392,7 +19397,7 @@ ClientP := ScreenToClient(P); Panning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; - if IsMouseSelecting or InRect or Panning then + if IsMouseSelecting or InRect or Panning or CanScroll(ClientP) then begin DeltaX := 0; DeltaY := 0; @@ -21111,7 +21116,7 @@ if NewNode or NewColumn then begin ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, - not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions)); + not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; @@ -21809,7 +21814,7 @@ begin if Y < 0 then - Y := 0; + Exit(nil); AbsolutePos := Y; if Relative then @@ -24335,6 +24340,12 @@ DoCanEdit(Node, Column, Result); end; +function TBaseVirtualTree.CanScroll(const ClientMousePos: TPoint): Boolean; +// Determines whether auto scrolling can occur based on current mouse cursor position. +begin + Result := False; +end; + //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Clear; @@ -26446,6 +26457,22 @@ //---------------------------------------------------------------------------------------------------------------------- +function TBaseVirtualTree.GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; + +// Returns the next sibling of Node performing no initialization. + +begin + Result := Node; + if Assigned(Result) then + begin + Assert(Result <> FRoot, 'Node must not be the hidden root node.'); + + Result := Result.NextSibling; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns next node in tree, with regard to Node, which is visible. @@ -27064,6 +27091,22 @@ //---------------------------------------------------------------------------------------------------------------------- +function TBaseVirtualTree.GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; + +// Get next sibling of Node, performes no initialization. + +begin + Result := Node; + if Assigned(Result) then + begin + Assert(Result <> FRoot, 'Node must not be the hidden root node.'); + + Result := Result.PrevSibling; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + function TBaseVirtualTree.GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. @@ -29252,6 +29295,7 @@ HScrollBarVisible: Boolean; ScrolledVertically, ScrolledHorizontally: Boolean; + OffY, OffYM: Integer; begin //todo: minimize calls to ClientHeight and ClientWidth @@ -29296,7 +29340,14 @@ if Center then SetOffsetY(FOffsetY - R.Bottom + ClientHeight div 2) else - SetOffsetY(FOffsetY - R.Bottom + ClientHeight); + begin + // Leave additional space at the bottom to have scrollrect start with full row. + OffY := FOffsetY - R.Bottom + ClientHeight; + OffYM := OffY mod DefaultNodeHeight; + if OffYM <> 0 then + OffY := OffY - (DefaultNodeHeight + OffYM); + SetOffsetY(OffY); + end; // When scrolling up and the horizontal scroll appears because of the operation // then we have to move up the node the horizontal scrollbar's height too // in order to avoid that the scroll bar hides the node which we wanted to have in view. @@ -29350,10 +29401,13 @@ end else begin - if ColumnRight > ClientWidth then - NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) - else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then - NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); + if FHeader.Columns.Count > 1 then + begin + if ColumnRight > ClientWidth then + NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) + else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then + NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); + end; if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then Index: include/intf/qt/vtgraphicsi.inc =================================================================== --- include/intf/qt/vtgraphicsi.inc (revision 2731) +++ include/intf/qt/vtgraphicsi.inc (working copy) @@ -284,7 +284,7 @@ // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 - DB $0F, $6E, AlphaBlendLineConstant$E0 /// MOVD MM4, EAX + DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 Index: units/carbon/fakemmsystem.pas =================================================================== --- units/carbon/fakemmsystem.pas (revision 2731) +++ units/carbon/fakemmsystem.pas (working copy) @@ -15,6 +15,9 @@ implementation +uses + LCLIntf; + function timeBeginPeriod(x1: DWord): DWord; begin @@ -26,12 +29,8 @@ end; function timeGetTime: DWORD; -var - ATime: TSystemTime; begin - //todo: properly implement - GetLocalTime(ATime); - Result := ATime.MilliSecond; + Result := GetTickCount; end; end. Index: units/qt/fakemmsystem.pas =================================================================== --- units/qt/fakemmsystem.pas (revision 2731) +++ units/qt/fakemmsystem.pas (working copy) @@ -15,6 +15,9 @@ implementation +uses + LCLIntf; + function timeBeginPeriod(x1: DWord): DWord; begin @@ -26,12 +29,8 @@ end; function timeGetTime: DWORD; -var - ATime: TSystemTime; begin - //todo: properly implement - GetLocalTime(ATime); - Result := ATime.MilliSecond; + Result := GetTickCount; end; end. Index: units/win32/virtualpanningwindow.pas =================================================================== --- units/win32/virtualpanningwindow.pas (revision 2731) +++ units/win32/virtualpanningwindow.pas (working copy) @@ -41,9 +41,10 @@ PanningObject:=TVirtualPanningWindow(GetWindowLongPtrW(Window,GWL_USERDATA)); if Assigned(PanningObject) then PanningObject.HandlePaintMessage; + Result := 0; end else - DefWindowProc(Window,Msg,WPara,LPara); + Result := DefWindowProc(Window,Msg,WPara,LPara); end; var @@ -87,8 +88,7 @@ with Position do FHandle := CreateWindowEx(WS_EX_TOOLWINDOW, PanningWindowClass.lpszClassName, nil, WS_POPUP, X - 16, Y - 16, 32, 32, OwnerHandle, 0, HInstance, nil); - //todo use SetWindowLongPtr later - SetWindowLong(FHandle,GWL_USERDATA,PtrInt(Self)); + SetWindowLongPtr(FHandle,GWL_USERDATA,LONG_PTR(Self)); FImage := TBitmap.Create; end; �������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VirtualTrees.pas�����������������������������������������0000644�0001750�0000144�00004457643�13161144471�023343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VirtualTrees; {$mode delphi}{$H+} {$packset 1} // Version 4.8.7 // // 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/ // // Alternatively, you may redistribute this library, use 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. // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. // // 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 VirtualTrees.pas, released September 30, 2000. // // The initial developer of the original code is digital publishing AG (Munich, Germany, www.digitalpublishing.de), // written by Mike Lischke (public@soft-gems.net, www.soft-gems.net). // // Portions created by digital publishing AG are Copyright // (C) 1999-2001 digital publishing AG. All Rights Reserved. //---------------------------------------------------------------------------------------------------------------------- // // April 2010 // - Bug fix: Removed active column changing from TBaseVirtualTree.WMKeyDown to re-gain standard conforming // behaviour for VK_NEXT and VK_PRIOR // - Bug fix: Paint option toUseExplorerTheme works properly without defining columns // - Bug fix: TBaseVirtualTree.PrepareBitmaps now correctly closes the theme handle // January 2010 // - Bug fix: TBaseVirtualTree.AdjustTotalHeight now longer calculates wrong total heights if nodes have been // made invisible // - Bug fix: TCustomVirtualStringTree.OnMeasureTextWidth now works as intended // - Bug fix: Added missing $IFDEFs concerning theming support // - Bug fix: Removed default from properties TVirtualTreeColumn.Color and TVirtualTreeColumn.BiDiMode // July 2009 // - Bug fix: TWorkerThread will no longer reference the tree after it has been destroyed (Mantis issue #384) // - Bug fix: TBaseVirtualTree.InternalConnectNode checked the expanded state of the wrong node if Mode was // amAddChildFirst or amAddChildLast // June 2009 // - Bug fix: fixed some issues concerning the vista theme handling // - Improvement: removed hidden node handling in this branch // - Improvement: reverted header click handling to old version to keep compatibility in this branch // - Improvement: removed TVTPaintOption toHideTreeLinesIfThemed // May 2009 // - Improvement: new TVTMiscOption toEditOnClick, toEditOnDblClick to control if editing can be started with a single // click or a double click // - Bug fix: the internal pointers of TBufferedAnsiString are now PAnsiChar to work correctly with Delphi 2009 // April 2009 // - Bug fix: TBaseVirtualTree.GetVisibleParent no longer returns the given node in case it is fully visible // - Improvement: fixed a potential issue in TVirtualTreeColumns.TotalWidth in case it is called before // FPositionToIndex is initialized // - Bug fix: TBaseVirtualTree.CollectSelectedNodesLTR and TBaseVirtualTree.CollectSelectedNodesRTL handle straight // vertical selection rectangles no longer as empty // - Bug fix: TCheckImageKind.ckSystemDefault now works as intended // - Improvement: made the following methods of TBaseVirtualTree virtual: PrepareCell, AddChild, BeginUpdate, // EndUpdate and SortTree // - Improvement: made TBaseVirtualTree.PrepareCell protected // - Improvement: moved some members of TVTEdit and TStringEditLink from private to protected // - Improvement: re-designed header click handling // - Improvement: new TVTPaintOption toShowHiddenNodes to globally ignore the hidden state of nodes // - Improvement: individual nodes can now be hidden without affecting their children // - Improvement: re-designed Explorer theme drawing // - Bug fix: corrected allocation problems in TBufferedAnsiString and TWideBufferedString // March 2009 // - Bug fix: fixed an issue in TVirtualTreeColumns.HandleClick that could lead to a case where no header click event // is triggered // - Bug fix: fixed an issue in TBaseVirtualTree.HandleHotTrack that could lead to an endless loop under certain // conditions // - Improvement: removed unused variables in TVirtualTreeColumn.ComputeHeaderLayout // - Bug fix: corrected TBaseVirtualTree.GetVisibleParent // - Improvement: extended hot node tracking to track the hot column too // - Improvement: new THitPosition hiOnItemButtonExact used to draw hot buttons when using Windows Vista's Explorer // theme // - Improvement: new TVTPaintOption toHideTreeLinesIfThemed to consider toShowTreeLines only if running unthemed // - Improvement: new TVTPaintOption toUseExplorerTheme to draw the tree like Windows Vista's Explorer treeview // February 2009 // - Bug fix: reverted the implementation of DrawTextW back to the one prior to 4.8.1 as the line end detection // lead to a compiler warning under Delphi 2009 // - Bug fix: corrected implementation of GetStringDrawRect to match its declaration (UnicodeString vs WideString) // - Bug fix: the node focus will no longer change if a TVTMiscOption.toGridExtensions is set and one clicks right of // (or left of, if right-to-left reading) the last column // - Bug fix: fixed an issue with TVTHeader.Assign that could lead to an access violation if the header is created at // runtime // - Bug fix: one can no longer change a node's height with the right mouse button even if toNodeHeightResize and // toRightClickSelect are set // - Improvement: TVTAutoOption.toDisableAutoScrollOnFocus now works for nodes too // - Improvement: new property TBaseVirtualTree.SelectionLocked to disable changing the selection // - Improvement: made the dual-scroll effect in TBaseVirtualTree.ToggleNode much smoother // - Bug fix: removed off-by-1 errors in TBaseVirtualTree.ToggleNode // - Bug fix: added a check for FUpdateCount to TBaseVirtualTree.SetUpdateState as otherwise every call to // TBaseVirtualTree.DoBeforeCellPaint to get the cell content margin within an Begin/EndUpdate-block would // re-enable painting // - Bug fix: TVTHeader.HandleMessage could provide a wrong column index to OnBeforeColumnWidthTracking in some cases // - Improvement: new properties TBaseVirtualTree.OnBeforeAutoFitColumn, TBaseVirtualTree.OnAfterAutoFitColumn // - Improvement: new procedures TBaseVirtualTree.CancelOperation, TBaseVirtualTree.BeginOperation, // TBaseVirtualTree.EndOperation and new property TBaseVirtualTree.OperationCanceled to enable the // application to stop (possibly) long-running operations // - Improvement: integrated changes from Andreas Hausladen // - Improvement: integrated changes from Dmitry Zegebart where applicable // - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetDisplayRect // - Bug fix: changed the size of the buffer used in TBaseVirtualTree.PaintTree to paint the area below the last node // as the bitmap was not completely erased using previous size under certain conditions // - Bug fix: fixed TBaseVirtualTree.GetPreviousLevel // January 2009 // - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetBottomNode // - Improvement: improved speed of TBaseVirtualTree.GetMaxColumnWidth when using UseSmartColumnWidth // - Version is now 4.8.0 // December 2008 // - Bug fix: modified TBaseVirtualTree.UpdateHorizontalScrollbar and TBaseVirtualTree.UpdateVerticalScrollbar to // recalculate the tree's dimensions even if an update is in progress // - Improvement: renamed TVTHeaderState hsTracking and hsTrackPending to hsColumnWidthTracking and // hsColumnWidthTrackPending // - Improvement: modified TBaseVirtualTree.GetFirstVisible and TBaseVirtualTree.GetFirstVisibleNoInit to optionally // take a node to specify where to start // - Improvement: modified TVTAfterGetMaxColumnWidthEvent to make the result of TBaseVirtualTree.GetMaxColumnWidth // changable // - Bug fix: corrected TBaseVirtualTree.GetMaxColumnWidth to consider toFixedIndent and no longer take nodes into // account that are just above or below the visible area // - Improvement: new property TVirtualTreeColumns.DefaultWidth // - Improvement: new property TVTHeader.FixedAreaConstraints (new class TVTFixedAreaConstraints) to limit the // fixed area (header, fixed columns) to a percentage of the client area // November 2008 // - Improvement: new cursor added: crVertSplit used for height tracking // - Improvement: changed type of TVTHeader.Height from Cardinal to Integer to make boundary checks easier // - Improvement: new properties TVTHeader.MinHeight and TVTHeader.MaxHeight // - Improvement: new VirtualTreeStates tsNodeHeightTracking and tsNodeHeightTrackPending // - Improvement: new HeaderStates hsHeightTracking and hsHeightTrackPending // - Improvement: new TVTMiscOption toNodeHeightResize to allow changing node heights via mouse // - Improvement: new TVTHeaderOption hoHeightResize to allow changing header height via mouse // - Improvement: new properties TBaseVirtualTree.OnHeaderHeightTracking, TBaseVirtualTree.OnHeaderDblClickResize, // TBaseVirtualTree.OnColumnWidthTracking, TBaseVirtualTree.OnColumnWidthDblClickResize, // TBaseVirtualTree.OnNodeHeightTracking, TBaseVirtualTree.OnNodeHeightDblClickResize // - Improvement: new function TVTHeader.ResizeColumns to resize multiple columns at once // - Improvement: TVTHeader.DetermineSplitterIndex is no longer influenced by non-resizable columns // - Bug fix: TBaseVirtualTree.ToggleNode now uses DoStateChange to modify FStates // - Bug fix: TBaseVirtualTree.DoBeforeCellPaint now saves the update rect if CellPaintMode is cpmGetContentMargin // and restores it afterwards // - Improvement: modified TBaseVirtualTree.CmMouseWheel to handle mice with wheel delta < 120 correctly // - Improvement: modified TVTHeader.LoadFromStream and WriteToStream to save ParentFont // - Improvement: TVTHeader.Font is now only stored by Delphi if ParentFont is False (Mantis issue #217) // - Bug fix: corrected TVTHeader.Create to set TVTHeader.FOptions correctly to the default value (Mantis issue #333) // - Improvement: new TVTAnimationOption toAdvancedAnimatedToggle to scroll the node to be toggled animatedly instead // of just scroll its child nodes animatedly // - Improvement: added VirtualTreeState tsToggling to eliminate artefacts caused by TBaseVirtualTree.DoSetOffsetXY // while toggling // - Bug fix: corrected button handling when toFixedIndent is set // - Improvement: redesigned TBaseVirtualTree.ToggleNode to harmonize the visual toggle behaviour independent of // toChildrenAbove // - Improvement: made TBaseVirtualTree.CanEdit public // - Improvement: added parameter ConsiderChildrenAbove to TGetNextNodeProc // - Improvement: modified all variants of TBaseVirtualTree.GetFirst and TBaseVirtualTree.GetLast to optionally // consider toChildrenAbove // October 2008 // - Bugfix: removed 'FVisibleCount := 0' from TBaseVirtualTree.Clear as this would lead to incorrect VisibleCount in // read-only mode // - Bugfix: fixed a condition in TBaseVirtualTree.ToggleCallback that could lead to artefacts // - Improvement: changed the implementation of TBaseVirtualTree.GetNext/GetPrevious so that no penalties occur if // toChildrenAbove is not set // - Improvement: TBaseVirtualTree.ToggleNode will no longer leave nodes with state vsToggeling if an exception // occurs // - Improvement: improved behaviour of TBaseVirtualTree.ToggleNode in case toChildrenAbove is set // - Bug fix: corrected TBaseVirtualTree.ScrollIntoView to behave as expected when no fixed columns exist // - Bug fix: extended TBaseVirtualTree.InitializeLineImageAndSelectLevel to eliminate artifacts while scrolling with // toChildrenAbove set // - Bug fix: corrected CompareNodePositions to consider toChildrenAbove // - Bug fix: corrected ToggleNode to scroll correctly if toChildrenAbove and toAnimatedToggle are set // - Improvement: new TVTPaintOption toFixedIndent to draw the tree with a fixed ident (instead of node level // dependent indents) // - Improvement: new TVTPaintOption toChildrenAbove to draw children nodes above their parent // August 2008 // - Improvement: redesigned and overloaded TBaseVirtualTree.ScrollIntoView in order to use vertical scrolling // separately // - Improvement: optimized TBaseVirtualTree.ScrollIntoView for horizontal scrolling // - Improvement: in TBaseVirtualTree.WMKeyDown column navigation for VK_PRIOR and VK_NEXT is now handled in same way // as row navigation // - Improvement: new TVTHeaderOption hoDisableAnimatedResize to disable animated resize for all columns // - Improvement: new TVTColumnOption coDisableAnimatedResize to disable animated resize for a specific column // - Improvement: in TBaseVirtualTree.UpdateHorizontalScrollBar and TBaseVirtualTree.UpdateVerticalScrollBar scrollbar // updates now avoided for tsUpdating in FStates // July 2008 // - Improvement: in TBaseVirtualTree.WMHScroll the horizontal page scrolling now considers fixed columns // - Improvement: in TBaseVirtualTree.ScrollIntoView the case of FFocusedColumn being invalid is considered // - Improvement: in TBaseVirtualTree.HandleMouseDown DoFocusNode is not called if node focus did not change // - Improvement: in TBaseVirtualTree.SetFocusedColumn the focused node will only be invalidate if it was actually // scrolled into view // - Improvement: new TVTColumnOption coAllowFocus to affect column focus behaviour // - Improvement: new function TVTHeader.AllowFocus to check wether a column can be focused // - Improvement: in TBaseVirtualTree.SetFocusedColumn the old colunm and the new column are both invalidated // - Improvement: merged latest changes from Jim into current code base. // June 2008 // - Improvement: new property TVirtualTreeColumns.Count // - Bug fix: in TVirtualTreeColumns.AnimatedResize the column is validated (to avoid "List index out of bounds") // - Improvement: the content retangle of the cell can be modified via the OnBeforeCellPaint event, the cell paint // mode indicates wether OnBeforeCellPaint is called for painting the cell or just for getting the // cell content margin // - Improvement: new functions added: TBaseVirtualTree.DoGetCellContentMargins, // TCustomVirtualDrawTree.DoGetCellContentMargin // - Improvement: new property: TCustomVirtualDrawTree.OnGetCellContentMargin // - Improvement: in TBaseVirtualTree.GetMaxColumnWidth the cell content margin is considered // - Improvement: in TBaseVirtualTree.CMHintShow the cell content margin is considered for singleline tooltips // - Improvement: new function added: TVTHeader.DoGetPopupMenu (to query the application via TreeView.FOnGetPopupMenu // for a column specific header popup menu) // - Improvement: new property added: TBaseVirtualTree.OnCanSplitterResizeColumn, // new function added: TVirtualTreeColumns.GetScrollWidth // - Improvement: horizontal page scrolling now uses the average column width (of all visible, non-fixed columns) as // scroll amount // - Improvement: procedure TBaseVirtualTree.CMMouseWheel redesigned // - Bug fix: TVTHeader.DetermineSplitterIndex works correctly even when using fixed columns // - Bug fix: on right-to-left BiDiMode TVirtualTreeColumns.PaintHeader respects (left) scroll bar correctly // - Bug fix: for multiline tooltips also the column width is checked to determine the tooltip is needed or // unnecessary // - Improvement: the result value of GetUseSmartColumnWidth is initialized correctly // - Improvement: added hoFullRepaintOnResize to TVTHeaderOption to enable full header repainting (instead of // repainting all subsequent columns only) on resizing a column // - Bug fix: horizontal page scrolling via mouse wheel now works correctly, i.e. in TBaseVirtualTree.CMMouseWheel // ScrollCount includes GetVisibleFixedWidth and FIndent // - Improvement: new TVTColumnOption coSmartResize to avoid contradicting the virtual paradigm // - Improvement: horizontal scrolling via mouse wheel can be forced by holding the shift key // - Improvement: new parameter for function TBaseVirtualTree.GetMaxColumnWidth added: UseSmartColumnWidth (to // avoid contradicting the virtual paradigm, i.e. leave nodes out of consideration which are not in // view) // - Improvement: new parameters for TVTHeader.AutoFitColumns added: SmartAutoFitType, RangeStartCol and // RangeEndCol // - Improvement: new parameters for events FOUnknownnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth // and FOnBeforeGetMaxColumnWidth added // - Version is now 4.6.0 // May 2008 // - Improvement: new properties: FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and // FOnBeforeGetMaxColumnWidth // - Bug fix: FDropTargetNode is considered in TBaseVirtualTree.DoFreeNode // August 2007 // - for accessibility, added an OnGetImageText event that can be used to give accessible text to images used in nodes. // - Implemented an ImageText property used by the VTAccessibility unit to retrieve text for a given node and its column. // - Switched loading of accessibility libraries to dynamic from static to avoid problems in Win95 // June 2007 // - Bug fix: Fixed a problem with potentially large amount of nodes (larger than 2 billion) in // TBaseVirtualTree.SetChildCount. // - Bug fix: remove hint if any in case the tree loses the focus. // - Improvement: TVirtualTreeColumns.HandleClick is now virtual, introduced TVTHeader.DoSetSortColumn. // - Bug fix: compiler error due to old variable reference when enabling flat scrollbars. // May 2007 // - Improvement: new functions: GetPreviousSelected, GetPreviousChecked, GetCheckedCount, // GetPreviousCutCopy, GetCutCopyCount, GetFirstLeaf, GetNextLeaf, // GetPreviousLeaf, GetFirstLevel, GetNextLevel, GetPreviousLevel // - Improvement: new properties: CheckedCount, CutCopyCount // - Improvement: DoFocusChanging for finding a valid column (TBaseVirtualTree.WMKeyDown) // March 2007 // - Improvement: adjusted accessibility implementation to compile with pre-BDS IDEs. // - If a column is not visible, MultiColumnAccessibility now will not include it. // January 2007 // - Improvement: added code donation from Marco Zehe (with help from Sebastian Modersohn) which implements the // MS accessibility interface for Virtual Treeview. // December 2006 // - Improvement: bidi mode implementation finished (toAutoBidiColumnOrdering introduced) // - Change: right-to-left flag removed from shorten string methods/events (not necessary) // - Version is now 4.5.0 // November 2006 // - Bug fix: Total height is wrong on reading from stream // September 2006 // - Bug fix: Mantis issue #326 // July 2006 // - Change: value for crHeaderSplit cursor conflicts with other resource IDs, so I changed it. // - Published OnStartDrag in VirtualDrawTree. // April 2006 // - Bug fix: check for MMX availabiltiy is missing in some places before calling MMX code // - Bug fix: flag for VCL dragging was removed too late causing all kind of problems with mouse up code in VCL drag mode. // - Bug fix: If the past mode in ProcessOLEData is amInsertAfter then nodes where inserted in the wrong order. // March 2006 // - Bug fix: total count and total height is wrong after loading from stream // - Bug fix: variable node height computation // - Bug fix: FLastChangedNode was not reset in DoFreeNode // February 2006 // - Improvement: GetFirstChecked now also has a default value for its state parameter. // - Improvement: avoid potential reentrancy problems in paint code by checking for the paint state there. // January 2006 // - Bug fix: disabled images are now drawn like enabled ones (with respect to position, indices etc.). // - Improvement: New property BottomSpace, allows to specify an additional area below the last node in the tree. // - Bug fix: VT.EndUpdate did not invalidate the cache so the cache was never used again after that. // - Improvement: tree states for double clicks (left, middle, right). // December 2005 // - Bug fix: check for column index for auto setting main column if the current one is deleted. // // For full document history see help file. // // Credits for their valuable assistance and code donations go to: // Freddy Ertl, Marian Aldenh?vel, Thomas Bogenrieder, Jim Kuenemann, Werner Lehmann, Jens Treichler, // Paul Gallagher (IBO tree), Ondrej Kelle, Ronaldo Melo Ferraz, Heri Bender, Roland Bed?rftig (BCB) // Anthony Mills, Alexander Egorushkin (BCB), Mathias Torell (BCB), Frank van den Bergh, Vadim Sedulin, Peter Evans, // Milan Vandrovec (BCB), Steve Moss, Joe White, David Clark, Anders Thomsen, Igor Afanasyev, Eugene Programmer, // Corbin Dunn, Richard Pringle, Uli Gerhardt, Azza, Igor Savkic, Daniel Bauten, Timo Tegtmeier, Dmitry Zegebart, // Andreas Hausladen // Beta testers: // Freddy Ertl, Hans-J?rgen Schnorrenberg, Werner Lehmann, Jim Kueneman, Vadim Sedulin, Moritz Franckenstein, // Wim van der Vegt, Franc v/d Westelaken // Indirect contribution (via publicly accessible work of those persons): // Alex Denissov, Hiroyuki Hori (MMXAsm expert) // Documentation: // Markus Spoettl and toolsfactory GbR (http://www.doc-o-matic.com/, sponsoring Soft Gems development // with a free copy of the Doc-O-Matic help authoring system), Sven H. (Step by step tutorial) // CLX: // Dmitri Dmitrienko (initial developer) // Source repository: // Subversion (server), TortoiseSVN (client tools), Fisheye (Web interface) // Accessability implementation: // Marco Zehe (with help from Sebastian Modersohn) // LCL Port: // Luiz Am?rico Pereira C?mara //---------------------------------------------------------------------------------------------------------------------- interface {$I VTConfig.inc} uses {$ifdef Windows} Windows, ActiveX, CommCtrl, {$else} FakeActiveX, {$endif} OleUtils, LCLIntf, {$ifdef USE_DELPHICOMPAT} DelphiCompat, LclExt, {$endif} virtualpanningwindow, VTGraphics, //alpha blend functions {$ifdef DEBUG_VTV} vtlogger, {$endif} LCLType, LResources, LMessages, Types, SysUtils, Classes, Graphics, Controls, Forms, ImgList, StdCtrls, Menus, Printers, SyncObjs, // Thread support Clipbrd // Clipboard support {$ifdef ThemeSupport} , Themes , TmSchema {$endif ThemeSupport} {$ifdef EnableAccessible} , oleacc // for MSAA IAccessible support {$endif}; const {$I lclconstants.inc} {$if defined(LCLGtk) or defined(LCLGtk2)} {$define Gtk} {$endif} {$if defined(Gtk)} {$define ManualClipNeeded} {$endif} {$if defined(LCLGtk2) or defined(LCLCarbon) or defined(LCLQt)} {$define ContextMenuBeforeMouseUp} {$endif} VTMajorVersion = 4; VTMinorVersion = 8; VTReleaseVersion = 7; VTTreeStreamVersion = 2; VTHeaderStreamVersion = 6; // The header needs an own stream version to indicate changes only relevant to the header. CacheThreshold = 2000; // Number of nodes a tree must at least have to start caching and at the same // time the maximum number of nodes between two cache entries. FadeAnimationStepCount = 255; // Number of animation steps for hint fading (0..255). ShadowSize = 5; // Size in pixels of the hint shadow. This value has no influence on Win2K and XP systems // as those OSes have native shadow support. // Special identifiers for columns. NoColumn = -1; InvalidColumn = -2; // Indices for check state images used for checking. ckEmpty = 0; // an empty image used as place holder // radio buttons ckRadioUncheckedNormal = 1; ckRadioUncheckedHot = 2; ckRadioUncheckedPressed = 3; ckRadioUncheckedDisabled = 4; ckRadioCheckedNormal = 5; ckRadioCheckedHot = 6; ckRadioCheckedPressed = 7; ckRadioCheckedDisabled = 8; // check boxes ckCheckUncheckedNormal = 9; ckCheckUncheckedHot = 10; ckCheckUncheckedPressed = 11; ckCheckUncheckedDisabled = 12; ckCheckCheckedNormal = 13; ckCheckCheckedHot = 14; ckCheckCheckedPressed = 15; ckCheckCheckedDisabled = 16; ckCheckMixedNormal = 17; ckCheckMixedHot = 18; ckCheckMixedPressed = 19; ckCheckMixedDisabled = 20; // simple button ckButtonNormal = 21; ckButtonHot = 22; ckButtonPressed = 23; ckButtonDisabled = 24; // Instead using a TTimer class for each of the various events I use Windows timers with messages // as this is more economical. ExpandTimer = 1; EditTimer = 2; ScrollTimer = 4; ChangeTimer = 5; StructureChangeTimer = 6; SearchTimer = 7; // Need to use this message to release the edit link interface asynchronously. WM_CHANGESTATE = WM_APP + 32; // Virtual Treeview does not need to be subclassed by an eventual Theme Manager instance as it handles // Windows XP theme painting itself. Hence the special message is used to prevent subclassing. CM_DENYSUBCLASSING = CM_BASE + 2000; // Decoupling message for auto-adjusting the internal edit window. CM_AUTOADJUST = CM_BASE + 2005; // VT's own clipboard formats, // Note: The reference format is used internally to allow to link to a tree reference // to implement optimized moves and other back references. CFSTR_VIRTUALTREE = 'Virtual Tree Data'; CFSTR_VTREFERENCE = 'Virtual Tree Reference'; CFSTR_HTML = 'HTML Format'; CFSTR_RTF = 'Rich Text Format'; CFSTR_RTFNOOBJS = 'Rich Text Format Without Objects'; CFSTR_CSV = 'CSV'; // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; // Help identifiers for exceptions. Application developers are responsible to link them with actual help topics. hcTFEditLinkIsNil = 2000; hcTFWrongMoveError = 2001; hcTFWrongStreamFormat = 2002; hcTFWrongStreamVersion = 2003; hcTFStreamTooSmall = 2004; hcTFCorruptStream1 = 2005; hcTFCorruptStream2 = 2006; hcTFClipboardFailed = 2007; hcTFCannotSetUserData = 2008; // Header standard split cursor. crHeaderSplit = TCursor(63); // Height changing cursor. crVertSplit = TCursor(62); //Panning Cursors crVT_MOVEALL = TCursor(64); crVT_MOVEEW = TCursor(65); crVT_MOVENS = TCursor(66); crVT_MOVENW = TCursor(67); crVT_MOVESW = TCursor(68); crVT_MOVENE = TCursor(69); crVT_MOVESE = TCursor(70); crVT_MOVEW = TCursor(71); crVT_MOVEE = TCursor(72); crVT_MOVEN = TCursor(73); crVT_MOVES = TCursor(74); UtilityImageSize = 16; // Needed by descendants for hittests. {$if defined(LCLCarbon) or defined(LCLCocoa)} ssCtrlOS = ssMeta; // Mac OS X fix {$else} ssCtrlOS = ssCtrl; {$endif} var // Clipboard format IDs used in OLE drag'n drop and clipboard transfers. CF_VIRTUALTREE, CF_VTREFERENCE, CF_VRTF, CF_VRTFNOOBJS, // Unfortunately CF_RTF* is already defined as being // registration strings so I have to use different identifiers. CF_HTML, CF_CSV: Word; MMXAvailable: Boolean; // necessary to know because the blend code uses MMX instructions IsWinNT: Boolean; // Necessary to fix bugs in Win95/WinME (non-client area region intersection, edit resize) // and to allow for check of system dependent hint animation. IsWinVistaOrAbove: Boolean; type // The exception used by the trees. EVirtualTreeError = class(Exception); // Limits the speed interval which can be used for auto scrolling (milliseconds). TAutoScrollInterval = 1..1000; // Need to declare the correct WMNCPaint record as the VCL (D5-) doesn't. TRealWMNCPaint = packed record Msg: Cardinal; Rgn: HRGN; lParam: Integer; Result: Integer; end; // Be careful when adding new states as this might change the size of the type which in turn // changes the alignment in the node record as well as the stream chunks. // Do not reorder the states and always add new states at the end of this enumeration in order to avoid // breaking existing code. TVirtualNodeState = ( vsInitialized, // Set after the node has been initialized. vsChecking, // Node's check state is changing, avoid propagation. vsCutOrCopy, // Node is selected as cut or copy and paste source. vsDisabled, // Set if node is disabled. vsDeleting, // Set when the node is about to be freed. vsExpanded, // Set if the node is expanded. vsHasChildren, // Indicates the presence of child nodes without actually setting them. vsVisible, // Indicate whether the node is visible or not (independent of the expand states of its parents). vsSelected, // Set if the node is in the current selection. vsInitialUserData, // Set if (via AddChild or InsertNode) initial user data has been set which requires OnFreeNode. vsAllChildrenHidden, // Set if vsHasChildren is set and no child node has the vsVisible flag set. vsClearing, // A node's children are being deleted. Don't register structure change event. vsMultiline, // Node text is wrapped at the cell boundaries instead of being shorted. vsHeightMeasured, // Node height has been determined and does not need a recalculation. vsToggling // Set when a node is expanded/collapsed to prevent recursive calls. ); TVirtualNodeStates = set of TVirtualNodeState; // States used in InitNode to indicate states a node shall initially have. TVirtualNodeInitState = ( ivsDisabled, ivsExpanded, ivsHasChildren, ivsMultiline, ivsSelected ); TVirtualNodeInitStates = set of TVirtualNodeInitState; TVTScrollBarStyle = ( sbmRegular, sbmFlat, sbm3D ); // Options per column. TVTColumnOption = ( coAllowClick, // Column can be clicked (must be enabled too). coDraggable, // Column can be dragged. coEnabled, // Column is enabled. coParentBidiMode, // Column uses the parent's bidi mode. coParentColor, // Column uses the parent's background color. coResizable, // Column can be resized. coShowDropMark, // Column shows the drop mark if it is currently the drop target. coVisible, // Column is shown. coAutoSpring, // Column takes part in the auto spring feature of the header (must be resizable too). coFixed, // Column is fixed and can not be selected or scrolled etc. coSmartResize, // Column is resized to its largest entry which is in view (instead of its largest // visible entry). coAllowFocus, // Column can be focused. coDisableAnimatedResize, // Column resizing is not animated. coWrapCaption, // Caption could be wrapped across several header lines to fit columns width. coUseCaptionAlignment // Column's caption has its own aligment. ); TVTColumnOptions = set of TVTColumnOption; // These flags are used to indicate where a click in the header happened. TVTHeaderHitPosition = ( hhiNoWhere, // No column is involved (possible only if the tree is smaller than the client area). hhiOnColumn, // On a column. hhiOnIcon, // On the bitmap associated with a column. hhiOnCheckbox // On the checkbox if enabled. ); TVTHeaderHitPositions = set of TVTHeaderHitPosition; // These flags are returned by the hit test method. THitPosition = ( hiAbove, // above the client area (if relative) or the absolute tree area hiBelow, // below the client area (if relative) or the absolute tree area hiNowhere, // no node is involved (possible only if the tree is not as tall as the client area) hiOnItem, // on the bitmaps/buttons or label associated with an item hiOnItemButton, // on the button associated with an item hiOnItemButtonExact, // exactly on the button associated with an item hiOnItemCheckbox, // on the checkbox if enabled hiOnItemIndent, // in the indentation area in front of a node hiOnItemLabel, // on the normal text area associated with an item hiOnItemLeft, // in the area to the left of a node's text area (e.g. when right aligned or centered) hiOnItemRight, // in the area to the right of a node's text area (e.g. if left aligned or centered) hiOnNormalIcon, // on the "normal" image hiOnStateIcon, // on the state image hiToLeft, // to the left of the client area (if relative) or the absolute tree area hiToRight, // to the right of the client area (if relative) or the absolute tree area hiUpperSplitter, // in the upper splitter area of a node hiLowerSplitter // in the lower splitter area of a node ); THitPositions = set of THitPosition; TCheckType = ( ctNone, ctTriStateCheckBox, ctCheckBox, ctRadioButton, ctButton ); // The check states include both, transient and fluent (temporary) states. The only temporary state defined so // far is the pressed state. TCheckState = ( csUncheckedNormal, // unchecked and not pressed csUncheckedPressed, // unchecked and pressed csCheckedNormal, // checked and not pressed csCheckedPressed, // checked and pressed csMixedNormal, // 3-state check box and not pressed csMixedPressed // 3-state check box and pressed ); TCheckImageKind = ( ckLightCheck, // gray cross ckDarkCheck, // black cross ckLightTick, // gray tick mark ckDarkTick, // black tick mark ckFlat, // flat images (no 3D border) ckXP, // Windows XP style ckCustom, // application defined check images ckSystemFlat, // Flat system defined check images. ckSystemDefault // Uses the system check images, theme aware. ); // mode to describe a move action TVTNodeAttachMode = ( amNoWhere, // just for simplified tests, means to ignore the Add/Insert command amInsertBefore, // insert node just before destination (as sibling of destination) amInsertAfter, // insert node just after destionation (as sibling of destination) amAddChildFirst, // add node as first child of destination amAddChildLast // add node as last child of destination ); // modes to determine drop position further TDropMode = ( dmNowhere, dmAbove, dmOnNode, dmBelow ); // operations basically allowed during drag'n drop TDragOperation = ( doCopy, doMove, doLink ); TDragOperations = set of TDragOperation; TVTImageKind = ( ikNormal, ikSelected, ikState, ikOverlay ); TVTHintMode = ( hmDefault, // show the hint of the control hmHint, // show node specific hint string returned by the application hmHintAndDefault, // same as hmHint but show the control's hint if no node is concerned hmTooltip // show the text of the node if it isn't already fully shown ); // Indicates how to format a tooltip. TVTTooltipLineBreakStyle = ( hlbDefault, // Use multi-line style of the node. hlbForceSingleLine, // Use single line hint. hlbForceMultiLine // Use multi line hint. ); TMouseButtons = set of TMouseButton; // Used to describe the action to do when using the OnBeforeItemErase event. TItemEraseAction = ( eaColor, // Use the provided color to erase the background instead the one of the tree. eaDefault, // The tree should erase the item's background (bitmap or solid). eaNone // Do nothing. Let the application paint the background. ); // There is a heap of switchable behavior in the tree. Since published properties may never exceed 4 bytes, // which limits sets to at most 32 members, and because for better overview tree options are splitted // in various sub-options and are held in a commom options class. // // Options to customize tree appearance: TVTPaintOption = ( toHideFocusRect, // Avoid drawing the dotted rectangle around the currently focused node. toHideSelection, // Selected nodes are drawn as unselected nodes if the tree is unfocused. toHotTrack, // Track which node is under the mouse cursor. toPopupMode, // Paint tree as would it always have the focus (useful for tree combo boxes etc.) toShowBackground, // Use the background image if there's one. toShowButtons, // Display collapse/expand buttons left to a node. toShowDropmark, // Show the dropmark during drag'n drop operations. toShowHorzGridLines, // Display horizontal lines to simulate a grid. toShowRoot, // Show lines also at top level (does not show the hidden/internal root node). toShowTreeLines, // Display tree lines to show hierarchy of nodes. toShowVertGridLines, // Display vertical lines (depending on columns) to simulate a grid. toThemeAware, // Draw UI elements (header, tree buttons etc.) according to the current theme if // enabled (Windows XP+ only, application must be themed). toUseBlendedImages, // Enable alpha blending for ghosted nodes or those which are being cut/copied. toGhostedIfUnfocused, // Ghosted images are still shown as ghosted if unfocused (otherwise the become non-ghosted // images). toFullVertGridLines, // Display vertical lines over the full client area, not only the space occupied by nodes. // This option only has an effect if toShowVertGridLines is enabled too. toAlwaysHideSelection, // Do not draw node selection, regardless of focused state. toUseBlendedSelection, // Enable alpha blending for node selections. toStaticBackground, // Show simple static background instead of a tiled one. toChildrenAbove, // Display child nodes above their parent. toFixedIndent, // Draw the tree with a fixed indent. toUseExplorerTheme // Use the explorer theme if run under Windows Vista (or above). ); TVTPaintOptions = set of TVTPaintOption; // Options to toggle animation support: TVTAnimationOption = ( toAnimatedToggle, // Expanding and collapsing a node is animated (quick window scroll). toAdvancedAnimatedToggle // Do some advanced animation effects when toggling a node. ); TVTAnimationOptions = set of TVTAnimationOption; // Options which toggle automatic handling of certain situations: TVTAutoOption = ( toAutoDropExpand, // Expand node if it is the drop target for more than a certain time. toAutoExpand, // Nodes are expanded (collapsed) when getting (losing) the focus. toAutoScroll, // Scroll if mouse is near the border while dragging or selecting. toAutoScrollOnExpand, // Scroll as many child nodes in view as possible after expanding a node. toAutoSort, // Sort tree when Header.SortColumn or Header.SortDirection change or sort node if // child nodes are added. toAutoSpanColumns, // Large entries continue into next column(s) if there's no text in them (no clipping). toAutoTristateTracking, // Checkstates are automatically propagated for tri state check boxes. toAutoHideButtons, // Node buttons are hidden when there are child nodes, but all are invisible. toAutoDeleteMovedNodes, // Delete nodes which where moved in a drag operation (if not directed otherwise). toDisableAutoscrollOnFocus, // Disable scrolling a node or column into view if it gets focused. toDisableAutoscrollHorizontal, // Only autoscroll on focus vertically never horizontally toAutoChangeScale, // Change default node height automatically if the system's font scale is set to big fonts. toAutoFreeOnCollapse, // Frees any child node after a node has been collapsed (HasChildren flag stays there). toDisableAutoscrollOnEdit, // Do not center a node horizontally when it is edited. toAutoBidiColumnOrdering // When set then columns (if any exist) will be reordered from lowest index to highest index // and vice versa when the tree's bidi mode is changed. ); TVTAutoOptions = set of TVTAutoOption; // Options which determine the tree's behavior when selecting nodes: TVTSelectionOption = ( toDisableDrawSelection, // Prevent user from selecting with the selection rectangle in multiselect mode. toExtendedFocus, // Entries other than in the main column can be selected, edited etc. toFullRowSelect, // Hit test as well as selection highlight are not constrained to the text of a node. toLevelSelectConstraint, // Constrain selection to the same level as the selection anchor. toMiddleClickSelect, // Allow selection, dragging etc. with the middle mouse button. This and toWheelPanning // are mutual exclusive. toMultiSelect, // Allow more than one node to be selected. toRightClickSelect, // Allow selection, dragging etc. with the right mouse button. toSiblingSelectConstraint, // Constrain selection to nodes with same parent. toCenterScrollIntoView, // Center nodes vertically in the client area when scrolling into view. toSimpleDrawSelection // Simplifies draw selection, so a node's caption does not need to intersect with the // selection rectangle. ); TVTSelectionOptions = set of TVTSelectionOption; // Options which do not fit into any of the other groups: TVTMiscOption = ( toAcceptOLEDrop, // Register tree as OLE accepting drop target toCheckSupport, // Show checkboxes/radio buttons. toEditable, // Node captions can be edited. toFullRepaintOnResize, // Fully invalidate the tree when its window is resized (CS_HREDRAW/CS_VREDRAW). toGridExtensions, // Use some special enhancements to simulate and support grid behavior. toInitOnSave, // Initialize nodes when saving a tree to a stream. toReportMode, // Tree behaves like TListView in report mode. toToggleOnDblClick, // Toggle node expansion state when it is double clicked. toWheelPanning, // Support for mouse panning (wheel mice only). This option and toMiddleClickSelect are // mutal exclusive, where panning has precedence. toReadOnly, // The tree does not allow to be modified in any way. No action is executed and // node editing is not possible. toVariableNodeHeight, // When set then GetNodeHeight will trigger OnMeasureItem to allow variable node heights. toFullRowDrag, // Start node dragging by clicking anywhere in it instead only on the caption or image. // Must be used together with toDisableDrawSelection. toNodeHeightResize, // Allows changing a node's height via mouse. toNodeHeightDblClickResize, // Allows to reset a node's height to FDefaultNodeHeight via a double click. toEditOnClick, // Editing mode can be entered with a single click toEditOnDblClick // Editing mode can be entered with a double click ); TVTMiscOptions = set of TVTMiscOption; // Options to control data export TVTExportMode = ( emAll, // export all records (regardless checked state) emChecked, // export checked records only emUnchecked // export unchecked records only ); const DefaultPaintOptions = [toShowButtons, toShowDropmark, toShowTreeLines, toShowRoot, toThemeAware, toUseBlendedImages]; DefaultAnimationOptions = []; DefaultAutoOptions = [toAutoDropExpand, toAutoTristateTracking, toAutoScrollOnExpand, toAutoDeleteMovedNodes]; DefaultSelectionOptions = []; DefaultMiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick]; DefaultColumnOptions = [coAllowClick, coDraggable, coEnabled, coParentColor, coParentBidiMode, coResizable, coShowDropmark, coVisible, coAllowFocus]; type TBaseVirtualTree = class; TVirtualTreeClass = class of TBaseVirtualTree; PVirtualNode = ^TVirtualNode; TColumnIndex = type Integer; TColumnPosition = type Cardinal; // This record must already be defined here and not later because otherwise BCB users will not be able // to compile (conversion done by BCB is wrong). TCacheEntry = record Node: PVirtualNode; AbsoluteTop: Cardinal; end; TCache = array of TCacheEntry; TNodeArray = array of PVirtualNode; TCustomVirtualTreeOptions = class(TPersistent) private FOwner: TBaseVirtualTree; FPaintOptions: TVTPaintOptions; FAnimationOptions: TVTAnimationOptions; FAutoOptions: TVTAutoOptions; FSelectionOptions: TVTSelectionOptions; FMiscOptions: TVTMiscOptions; FExportMode: TVTExportMode; procedure SetAnimationOptions(const Value: TVTAnimationOptions); procedure SetAutoOptions(const Value: TVTAutoOptions); procedure SetMiscOptions(const Value: TVTMiscOptions); procedure SetPaintOptions(const Value: TVTPaintOptions); procedure SetSelectionOptions(const Value: TVTSelectionOptions); protected property AnimationOptions: TVTAnimationOptions read FAnimationOptions write SetAnimationOptions default DefaultAnimationOptions; property AutoOptions: TVTAutoOptions read FAutoOptions write SetAutoOptions default DefaultAutoOptions; property ExportMode: TVTExportMode read FExportMode write FExportMode default emAll; property MiscOptions: TVTMiscOptions read FMiscOptions write SetMiscOptions default DefaultMiscOptions; property PaintOptions: TVTPaintOptions read FPaintOptions write SetPaintOptions default DefaultPaintOptions; property SelectionOptions: TVTSelectionOptions read FSelectionOptions write SetSelectionOptions default DefaultSelectionOptions; public constructor Create(AOwner: TBaseVirtualTree); virtual; procedure AssignTo(Dest: TPersistent); override; property Owner: TBaseVirtualTree read FOwner; end; TTreeOptionsClass = class of TCustomVirtualTreeOptions; TVirtualTreeOptions = class(TCustomVirtualTreeOptions) published property AnimationOptions; property AutoOptions; property ExportMode; property MiscOptions; property PaintOptions; property SelectionOptions; end; // Used in the CF_VTREFERENCE clipboard format. PVTReference = ^TVTReference; TVTReference = record Process: Cardinal; Tree: TBaseVirtualTree; end; TVirtualNode = record Index, // index of node with regard to its parent ChildCount: Cardinal; // number of child nodes NodeHeight: Word; // height in pixels States: TVirtualNodeStates; // states describing various properties of the node (expanded, initialized etc.) Align: Byte; // line/button alignment CheckState: TCheckState; // indicates the current check state (e.g. checked, pressed etc.) CheckType: TCheckType; // indicates which check type shall be used for this node Dummy: Byte; // dummy value to fill DWORD boundary TotalCount, // sum of this node, all of its child nodes and their child nodes etc. TotalHeight: Cardinal; // height in pixels this node covers on screen including the height of all of its // children // Note: Some copy routines require that all pointers (as well as the data area) in a node are // located at the end of the node! Hence if you want to add new member fields (except pointers to internal // data) then put them before field Parent. Parent, // reference to the node's parent (for the root this contains the treeview) PrevSibling, // link to the node's previous sibling or nil if it is the first node NextSibling, // link to the node's next sibling or nil if it is the last node FirstChild, // link to the node's first child... LastChild: PVirtualNode; // link to the node's last child... Data: record end; // this is a placeholder, each node gets extra data determined by NodeDataSize end; // Structure used when info about a certain position in the tree is needed. THitInfo = record HitNode: PVirtualNode; HitPositions: THitPositions; HitColumn: TColumnIndex; end; // auto scroll directions TScrollDirections = set of ( sdLeft, sdUp, sdRight, sdDown ); // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TBaseVirtualTree; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc;pceltFetched:pULong=nil): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; // ----- OLE drag'n drop handling IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TBaseVirtualTree; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TBaseVirtualTree read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TBaseVirtualTree read FOwner; public constructor Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAdvise(out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; function GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc; const Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TBaseVirtualTree; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TBaseVirtualTree; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TBaseVirtualTree); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; {$IF (FPC_FULLVERSION < 020601) and DEFINED(LCLWin32)} function GiveFeedback(Effect: Longint): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: Longint): HResult; stdcall; {$ELSE} function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; {$ENDIF} end; PVTHintData = ^TVTHintData; TVTHintData = record Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; HintRect: TRect; // used for draw trees only, string trees get the size from the hint string DefaultHint: String; // used only if there is no node specific hint string available // or a header hint is about to appear HintText: String; // set when size of the hint window is calculated HintInfo: PHintInfo; end; // The trees need an own hint window class because of Unicode output and adjusted font. { TVirtualTreeHintWindow } TVirtualTreeHintWindow = class(THintWindow) private FHintData: TVTHintData; procedure WMShowWindow(var Message: TLMShowWindow); message LM_SHOWWINDOW; public function CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect; override; procedure Paint; override; end; // Drag image support for the tree. TVTTransparency = 0..255; TVTBias = -128..127; // Simple move limitation for the drag image. TVTDragMoveRestriction = ( dmrNone, dmrHorizontalOnly, dmrVerticalOnly ); TVTDragImageStates = set of ( disHidden, // Internal drag image is currently hidden (always hidden if drag image helper interfaces are used). disInDrag, // Drag image class is currently being used. disPrepared, // Drag image class is prepared. disSystemSupport // Running on Windows 2000 or higher. System supports drag images natively. ); // Class to manage header and tree drag image during a drag'n drop operation. TVTDragImage = class private FOwner: TBaseVirtualTree; FBackImage, // backup of overwritten screen area FAlphaImage, // target for alpha blending FDragImage: TBitmap; // the actual drag image to blend to screen FImagePosition, // position of image (upper left corner) in screen coordinates FLastPosition: TPoint; // last mouse position in screen coordinates FTransparency: TVTTransparency; // alpha value of the drag image (0 - fully transparent, 255 - fully opaque) FPreBlendBias, // value to darken or lighten the drag image before it is blended FPostBlendBias: TVTBias; // value to darken or lighten the alpha blend result FFade: Boolean; // determines whether to fade the drag image from center to borders or not FRestriction: TVTDragMoveRestriction; // determines in which directions the drag image can be moved FColorKey: TColor; // color to make fully transparent regardless of any other setting FStates: TVTDragImageStates; // Determines the states of the drag image class. function GetVisible: Boolean; // True if the drag image is currently hidden (used only when dragging) protected procedure InternalShowDragImage(ScreenDC: HDC); procedure MakeAlphaChannel(Source, Target: TBitmap); public constructor Create(AOwner: TBaseVirtualTree); destructor Destroy; override; function DragTo(const P: TPoint; ForceRepaint: Boolean): Boolean; procedure EndDrag; function GetDragImageRect: TRect; procedure HideDragImage; procedure PrepareDrag(DragImage: TBitmap; const ImagePosition, HotSpot: TPoint; const DataObject: IDataObject); procedure RecaptureBackground(Tree: TBaseVirtualTree; R: TRect; VisibleRegion: HRGN; CaptureNCArea, ReshowDragImage: Boolean); procedure ShowDragImage; function WillMove(const P: TPoint): Boolean; property ColorKey: TColor read FColorKey write FColorKey default clWindow; property Fade: Boolean read FFade write FFade default False; property MoveRestriction: TVTDragMoveRestriction read FRestriction write FRestriction default dmrNone; property PostBlendBias: TVTBias read FPostBlendBias write FPostBlendBias default 0; property PreBlendBias: TVTBias read FPreBlendBias write FPreBlendBias default 0; property Transparency: TVTTransparency read FTransparency write FTransparency default 128; property Visible: Boolean read GetVisible; end; // tree columns implementation TVirtualTreeColumns = class; TVTHeader = class; TVirtualTreeColumnStyle = ( vsText, vsOwnerDraw ); TVTHeaderColumnLayout = ( blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom ); TVirtualTreeColumn = class(TCollectionItem) private FText, FHint: String; FLeft, FWidth: Integer; FPosition: TColumnPosition; FMinWidth: Integer; FMaxWidth: Integer; FStyle: TVirtualTreeColumnStyle; FImageIndex: TImageIndex; FBiDiMode: TBiDiMode; FLayout: TVTHeaderColumnLayout; FMargin, FSpacing: Integer; FOptions: TVTColumnOptions; FTag: Integer; FAlignment: TAlignment; FCaptionAlignment: TAlignment; // Alignment of the caption. FLastWidth: Integer; FColor: TColor; FBonusPixel: Boolean; FSpringRest: Single; // Accumulator for width adjustment when auto spring option is enabled. FCaptionText: String; FCheckBox: Boolean; FCheckType: TCheckType; FCheckState: TCheckState; FImageRect: TRect; FHasImage: Boolean; function GetCaptionAlignment: TAlignment; function GetLeft: Integer; function IsBiDiModeStored: Boolean; function IsCaptionAlignmentStored: Boolean; function IsColorStored: Boolean; procedure SetAlignment(const Value: TAlignment); procedure SetBiDiMode(Value: TBiDiMode); procedure SetCaptionAlignment(const Value: TAlignment); procedure SetCheckBox(Value: Boolean); procedure SetCheckState(Value: TCheckState); procedure SetCheckType(Value: TCheckType); procedure SetColor(const Value: TColor); procedure SetImageIndex(Value: TImageIndex); procedure SetLayout(Value: TVTHeaderColumnLayout); procedure SetMargin(Value: Integer); procedure SetMaxWidth(Value: Integer); procedure SetMinWidth(Value: Integer); procedure SetOptions(Value: TVTColumnOptions); procedure SetPosition(Value: TColumnPosition); procedure SetSpacing(Value: Integer); procedure SetStyle(Value: TVirtualTreeColumnStyle); procedure SetText(const Value: String); procedure SetWidth(Value: Integer); protected procedure ComputeHeaderLayout(DC: HDC; const Client: TRect; UseHeaderGlyph, UseSortGlyph: Boolean; var HeaderGlyphPos, SortGlyphPos: TPoint; var TextBounds: TRect; DrawFormat: Cardinal; CalculateTextRect: Boolean = False); procedure GetAbsoluteBounds(var Left, Right: Integer); function GetDisplayName: string; override; function GetOwner: TVirtualTreeColumns; reintroduce; public constructor Create(Collection: TCollection); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; function Equals(OtherColumnObj: TObject): Boolean; virtual; function GetRect: TRect; virtual; procedure LoadFromStream(const Stream: TStream; Version: Integer); procedure ParentBiDiModeChanged; procedure ParentColorChanged; procedure RestoreLastWidth; procedure SaveToStream(const Stream: TStream); function UseRightToLeftReading: Boolean; property Left: Integer read GetLeft; property Owner: TVirtualTreeColumns read GetOwner; published property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property BiDiMode: TBiDiMode read FBiDiMode write SetBiDiMode stored IsBiDiModeStored default bdLeftToRight; property CaptionAlignment: TAlignment read GetCaptionAlignment write SetCaptionAlignment stored IsCaptionAlignmentStored default taLeftJustify; property CaptionText: String read FCaptionText stored False; property CheckType: TCheckType read FCheckType write SetCheckType default ctCheckBox; property CheckState: TCheckState read FCheckState write SetCheckState default csUncheckedNormal; property CheckBox: Boolean read FCheckBox write SetCheckBox default False; property Color: TColor read FColor write SetColor stored IsColorStored; property Hint: String read FHint write FHint; property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1; property Layout: TVTHeaderColumnLayout read FLayout write SetLayout default blGlyphLeft; property Margin: Integer read FMargin write SetMargin default 4; property MaxWidth: Integer read FMaxWidth write SetMaxWidth default 10000; property MinWidth: Integer read FMinWidth write SetMinWidth default 10; property Options: TVTColumnOptions read FOptions write SetOptions default DefaultColumnOptions; property Position: TColumnPosition read FPosition write SetPosition; property Spacing: Integer read FSpacing write SetSpacing default 4; property Style: TVirtualTreeColumnStyle read FStyle write SetStyle default vsText; property Tag: Integer read FTag write FTag default 0; property Text: String read FText write SetText; property Width: Integer read FWidth write SetWidth default 50; end; TVirtualTreeColumnClass = class of TVirtualTreeColumn; TColumnsArray = array of TVirtualTreeColumn; TCardinalArray = array of Cardinal; TIndexArray = array of TColumnIndex; TVirtualTreeColumns = class(TCollection) private FHeader: TVTHeader; FHeaderBitmap: TBitmap; // backbuffer for drawing FHoverIndex, // currently "hot" column FDownIndex, // Column on which a mouse button is held down. FTrackIndex: TColumnIndex; // Index of column which is currently being resized FClickIndex: TColumnIndex; // last clicked column FPositionToIndex: TIndexArray; FDefaultWidth: Integer; // the width columns are created with FNeedPositionsFix: Boolean; // True if FixPositions must still be called after DFM loading or Bidi mode change. FClearing: Boolean; // True if columns are being deleted entirely. // drag support FDragIndex: TColumnIndex; // index of column currently being dragged FDropTarget: TColumnIndex; // current target column (index) while dragging FDropBefore: Boolean; // True if drop position is in the left half of a column, False for the right // side to drop the dragged column to function GetCount: Integer; function GetItem(Index: TColumnIndex): TVirtualTreeColumn; function GetNewIndex(P: TPoint; var OldIndex: TColumnIndex): Boolean; procedure SetDefaultWidth(Value: Integer); procedure SetItem(Index: TColumnIndex; Value: TVirtualTreeColumn); protected procedure AdjustAutoSize(CurrentIndex: TColumnIndex; Force: Boolean = False); function AdjustDownColumn(P: TPoint): TColumnIndex; function AdjustHoverColumn(const P: TPoint): Boolean; procedure AdjustPosition(Column: TVirtualTreeColumn; Position: Cardinal); function CanSplitterResize(P: TPoint; Column: TColumnIndex): Boolean; procedure DoCanSplitterResize(P: TPoint; Column: TColumnIndex; var Allowed: Boolean); procedure DrawButtonText(DC: HDC; Caption: String; Bounds: TRect; Enabled, Hot: Boolean; DrawFormat: Cardinal; WrapCaption: Boolean); procedure DrawXPButton(DC: HDC; const ButtonR: TRect; DrawSplitter, Down, Hover: Boolean); procedure FixPositions; function GetColumnAndBounds(const P: TPoint; var ColumnLeft, ColumnRight: Integer; Relative: Boolean = True): Integer; function GetOwner: TPersistent; override; procedure HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); virtual; procedure IndexChanged(OldIndex, NewIndex: Integer); procedure InitializePositionArray; procedure ReorderColumns(RTL: Boolean); procedure Update(Item: TCollectionItem); override; procedure UpdatePositions(Force: Boolean = False); property HeaderBitmap: TBitmap read FHeaderBitmap; property PositionToIndex: TIndexArray read FPositionToIndex; public constructor Create(AOwner: TVTHeader); destructor Destroy; override; function Add: TVirtualTreeColumn; virtual; procedure AnimatedResize(Column: TColumnIndex; NewWidth: Integer); procedure Assign(Source: TPersistent); override; procedure Clear; virtual; function ColumnFromPosition(const P: TPoint; Relative: Boolean = True): TColumnIndex; overload; virtual; function ColumnFromPosition(PositionIndex: TColumnPosition): TColumnIndex; overload; virtual; function Equals(OtherColumnsObj: TObject): Boolean; procedure GetColumnBounds(Column: TColumnIndex; out Left, Right: Integer); function GetFirstVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetLastVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetNextColumn(Column: TColumnIndex): TColumnIndex; function GetNextVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetPreviousColumn(Column: TColumnIndex): TColumnIndex; function GetPreviousVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetScrollWidth: Integer; function GetVisibleColumns: TColumnsArray; function GetVisibleFixedWidth: Integer; function IsValidColumn(Column: TColumnIndex): Boolean; procedure LoadFromStream(const Stream: TStream; Version: Integer); procedure PaintHeader(DC: HDC; const R: TRect; HOffset: Integer); virtual; procedure SaveToStream(const Stream: TStream); function TotalWidth: Integer; property Count: Integer read GetCount; property ClickIndex: TColumnIndex read FClickIndex; property DefaultWidth: Integer read FDefaultWidth write SetDefaultWidth default 50; property Items[Index: TColumnIndex]: TVirtualTreeColumn read GetItem write SetItem; default; property Header: TVTHeader read FHeader; property TrackIndex: TColumnIndex read FTrackIndex; end; TVirtualTreeColumnsClass = class of TVirtualTreeColumns; TVTConstraintPercent = 0..100; TVTFixedAreaConstraints = class(TPersistent) private FHeader: TVTHeader; FMaxHeightPercent, FMaxWidthPercent, FMinHeightPercent, FMinWidthPercent: TVTConstraintPercent; FOnChange: TNotifyEvent; procedure SetConstraints(Index: Integer; Value: TVTConstraintPercent); protected procedure Change; property Header: TVTHeader read FHeader; public constructor Create(AOwner: TVTHeader); procedure Assign(Source: TPersistent); override; property OnChange: TNotifyEvent read FOnChange write FOnChange; published property MaxHeightPercent: TVTConstraintPercent index 0 read FMaxHeightPercent write SetConstraints default 0; property MaxWidthPercent: TVTConstraintPercent index 1 read FMaxWidthPercent write SetConstraints default 0; property MinHeightPercent: TVTConstraintPercent index 2 read FMinHeightPercent write SetConstraints default 0; property MinWidthPercent: TVTConstraintPercent index 3 read FMinWidthPercent write SetConstraints default 0; end; TVTHeaderStyle = ( hsThickButtons, // TButton look and feel hsFlatButtons, // flatter look than hsThickButton, like an always raised flat TToolButton hsPlates, // flat TToolButton look and feel (raise on hover etc.) hsXPStyle // Windows XP style ); TVTHeaderOption = ( hoAutoResize, // Adjust a column so that the header never exceeds the client width of the owner control. hoColumnResize, // Resizing columns with the mouse is allowed. hoDblClickResize, // Allows a column to resize itself to its largest entry. hoDrag, // Dragging columns is allowed. hoHotTrack, // Header captions are highlighted when mouse is over a particular column. hoOwnerDraw, // Header items with the owner draw style can be drawn by the application via event. hoRestrictDrag, // Header can only be dragged horizontally. hoShowHint, // Show application defined header hint. hoShowImages, // Show header images. hoShowSortGlyphs, // Allow visible sort glyphs. hoVisible, // Header is visible. hoAutoSpring, // Distribute size changes of the header to all columns, which are sizable and have the // coAutoSpring option enabled. hoAutoResize must be enabled too. hoFullRepaintOnResize, // Fully invalidate the header (instead of subsequent columns only) when a column is resized. hoDisableAnimatedResize, // Disable animated resize for all columns. hoHeightResize, // Allow resizing header height via mouse. hoHeightDblClickResize // Allow the header to resize itself to its default height. ); TVTHeaderOptions = set of TVTHeaderOption; THeaderState = ( hsAutoSizing, // auto size chain is in progess, do not trigger again on WM_SIZE hsDragging, // header dragging is in progress (only if enabled) hsDragPending, // left button is down, user might want to start dragging a column hsLoading, // The header currently loads from stream, so updates are not necessary. hsColumnWidthTracking, // column resizing is in progress hsColumnWidthTrackPending, // left button is down, user might want to start resize a column hsHeightTracking, // height resizing is in progress hsHeightTrackPending, // left button is down, user might want to start changing height hsResizing, // multi column resizing in progress hsScaling, // the header is scaled after a change of FixedAreaConstraints or client size hsNeedScaling // the header needs to be scaled ); THeaderStates = set of THeaderState; TSortDirection = ( sdAscending, sdDescending ); // describes the used column resize behaviour for AutoFitColumns TSmartAutoFitType = ( smaAllColumns, // consider nodes in view only for all columns smaNoColumn, // consider nodes in view only for no column smaUseColumnOption // use coSmartResize of the corresponding column ); // desribes what made a structure change event happen TChangeReason = ( crIgnore, // used as placeholder crAccumulated, // used for delayed changes crChildAdded, // one or more child nodes have been added crChildDeleted, // one or more child nodes have been deleted crNodeAdded, // a node has been added crNodeCopied, // a node has been duplicated crNodeMoved // a node has been moved to a new place ); TVTHeader = class(TPersistent) private FOwner: TBaseVirtualTree; FColumns: TVirtualTreeColumns; FHeight: Integer; FFont: TFont; FParentFont: Boolean; FOptions: TVTHeaderOptions; FStates: THeaderStates; // Used to keep track of internal states the header can enter. FTrackPoint: TPoint; // Client coordinate where the tracking started. FStyle: TVTHeaderStyle; // button style FBackground: TColor; FAutoSizeIndex: TColumnIndex; FPopupMenu: TPopupMenu; FMainColumn: TColumnIndex; // the column which holds the tree FMaxHeight: Integer; FMinHeight: Integer; FDefaultHeight: Integer; FFixedAreaConstraints: TVTFixedAreaConstraints; // Percentages for the fixed area (header, fixed columns). FImages: TCustomImageList; FImageChangeLink: TChangeLink; // connections to the image list to get notified about changes FSortColumn: TColumnIndex; FSortDirection: TSortDirection; FTrackStart: TPoint; // client coordinates of the tracking start point FDragStart: TPoint; // initial mouse drag position FDragImage: TVTDragImage; // drag image management during header drag FLastWidth: Integer; // Used to adjust spring columns. This is the width of all visible columns, // not the header rectangle. procedure FontChanged(Sender: TObject); function GetMainColumn: TColumnIndex; function GetUseColumns: Boolean; function IsFontStored: Boolean; procedure SetAutoSizeIndex(Value: TColumnIndex); procedure SetBackground(Value: TColor); procedure SetColumns(Value: TVirtualTreeColumns); procedure SetDefaultHeight(Value: Integer); procedure SetFont(const Value: TFont); procedure SetHeight(Value: Integer); procedure SetImages(const Value: TCustomImageList); procedure SetMainColumn(Value: TColumnIndex); procedure SetMaxHeight(Value: Integer); procedure SetMinHeight(Value: Integer); procedure SetOptions(Value: TVTHeaderOptions); procedure SetParentFont(Value: Boolean); procedure SetSortColumn(Value: TColumnIndex); procedure SetSortDirection(const Value: TSortDirection); procedure SetStyle(Value: TVTHeaderStyle); protected procedure ChangeScale(M, D: Integer); virtual; function DetermineSplitterIndex(const P: TPoint): Boolean; virtual; procedure DoAfterAutoFitColumn(Column: TColumnIndex); virtual; procedure DoAfterColumnWidthTracking(Column: TColumnIndex); virtual; procedure DoAfterHeightTracking; virtual; function DoBeforeAutoFitColumn(Column: TColumnIndex; SmartAutoFitType: TSmartAutoFitType): Boolean; virtual; procedure DoBeforeColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoBeforeHeightTracking(Shift: TShiftState); virtual; function DoColumnWidthDblClickResize(Column: TColumnIndex; P: TPoint; Shift: TShiftState): Boolean; virtual; function DoColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; virtual; function DoGetPopupMenu(Column: TColumnIndex; Position: TPoint): TPopupMenu; virtual; function DoHeightTracking(var P: TPoint; Shift: TShiftState): Boolean; virtual; function DoHeightDblClickResize(var P: TPoint; Shift: TShiftState): Boolean; virtual; procedure DoSetSortColumn(Value: TColumnIndex); virtual; procedure DragTo(const P: TPoint); procedure FixedAreaConstraintsChanged(Sender: TObject); function GetColumnsClass: TVirtualTreeColumnsClass; virtual; function GetOwner: TPersistent; override; function GetShiftState: TShiftState; function HandleHeaderMouseMove(var Message: TLMMouseMove): Boolean; function HandleMessage(var Message: TLMessage): Boolean; virtual; procedure ImageListChange(Sender: TObject); procedure PrepareDrag(P, Start: TPoint); procedure RecalculateHeader; virtual; procedure RescaleHeader; procedure UpdateMainColumn; procedure UpdateSpringColumns; public constructor Create(AOwner: TBaseVirtualTree); virtual; destructor Destroy; override; function AllowFocus(ColumnIndex: TColumnIndex): Boolean; procedure Assign(Source: TPersistent); override; procedure AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn); function InHeader(const P: TPoint): Boolean; virtual; function InHeaderSplitterArea(P: TPoint): Boolean; virtual; procedure Invalidate(Column: TVirtualTreeColumn; ExpandToBorder: Boolean = False); procedure LoadFromStream(const Stream: TStream); virtual; function ResizeColumns(ChangeBy: Integer; RangeStartCol: TColumnIndex; RangeEndCol: TColumnIndex; Options: TVTColumnOptions = [coVisible]): Integer; procedure RestoreColumns; procedure SaveToStream(const Stream: TStream); virtual; property DragImage: TVTDragImage read FDragImage; property States: THeaderStates read FStates; property Treeview: TBaseVirtualTree read FOwner; property UseColumns: Boolean read GetUseColumns; published property AutoSizeIndex: TColumnIndex read FAutoSizeIndex write SetAutoSizeIndex; property Background: TColor read FBackground write SetBackground default clBtnFace; property Columns: TVirtualTreeColumns read FColumns write SetColumns; property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight; property Font: TFont read FFont write SetFont stored IsFontStored; property FixedAreaConstraints: TVTFixedAreaConstraints read FFixedAreaConstraints write FFixedAreaConstraints; property Height: Integer read FHeight write SetHeight default 17; property Images: TCustomImageList read FImages write SetImages; property MainColumn: TColumnIndex read GetMainColumn write SetMainColumn default 0; property MaxHeight: Integer read FMaxHeight write SetMaxHeight default 10000; property MinHeight: Integer read FMinHeight write SetMinHeight default 10; property Options: TVTHeaderOptions read FOptions write SetOptions default [hoColumnResize, hoDrag, hoShowSortGlyphs]; property ParentFont: Boolean read FParentFont write SetParentFont default False; property PopupMenu: TPopupMenu read FPopupMenu write FPopUpMenu; property SortColumn: TColumnIndex read FSortColumn write SetSortColumn default NoColumn; property SortDirection: TSortDirection read FSortDirection write SetSortDirection default sdAscending; property Style: TVTHeaderStyle read FStyle write SetStyle default hsThickButtons; end; TVTHeaderClass = class of TVTHeader; // Communication interface between a tree editor and the tree itself (declared as using stdcall in case it // is implemented in a (C/C++) DLL). The GUID is not nessecary in Delphi but important for BCB users // to allow QueryInterface and _uuidof calls. IVTEditLink = interface ['{2BE3EAFA-5ACB-45B4-9D9A-B58BCC496E17}'] function BeginEdit: Boolean; stdcall; // Called when editing actually starts. function CancelEdit: Boolean; stdcall; // Called when editing has been cancelled by the tree. function EndEdit: Boolean; stdcall; // Called when editing has been finished by the tree. function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall; // Called after creation to allow a setup. function GetBounds: TRect; stdcall; // Called to get the current size of the edit window // (only important if the edit resizes itself). procedure ProcessMessage(var Message: TLMessage); stdcall; // Used to forward messages to the edit window(s)- procedure SetBounds(R: TRect); stdcall; // Called to place the editor. end; // Indicates in the OnUpdating event what state the tree is currently in. TVTUpdateState = ( usBegin, // The tree just entered the update state (BeginUpdate call for the first time). usBeginSynch, // The tree just entered the synch update state (BeginSynch call for the first time). usSynch, // Begin/EndSynch has been called but the tree did not change the update state. usUpdate, // Begin/EndUpdate has been called but the tree did not change the update state. usEnd, // The tree just left the update state (EndUpdate called for the last level). usEndSynch // The tree just left the synch update state (EndSynch called for the last level). ); // Used during owner draw of the header to indicate which drop mark for the column must be drawn. TVTDropMarkMode = ( dmmNone, dmmLeft, dmmRight ); // This structure carries all important information about header painting and is used in the advanced header painting. THeaderPaintInfo = record TargetCanvas: TCanvas; Column: TVirtualTreeColumn; PaintRectangle: TRect; TextRectangle: TRect; IsHoverIndex, IsDownIndex, IsEnabled, ShowHeaderGlyph, ShowSortGlyph, ShowRightBorder: Boolean; DropMark: TVTDropMarkMode; GlyphPos, SortGlyphPos: TPoint; end; // These elements are used both to query the application, which of them it wants to draw itself and to tell it during // painting, which elements must be drawn during the advanced custom draw events. THeaderPaintElements = set of ( hpeBackground, hpeDropMark, hpeHeaderGlyph, hpeSortGlyph, hpeText ); // Various events must be handled at different places than they were initiated or need // a persistent storage until they are reset. TVirtualTreeStates = set of ( tsCancelHintAnimation, // Set when a new hint is about to show but an old hint is still being animated. tsChangePending, // A selection change is pending. tsCheckPropagation, // Set during automatic check state propagation. tsCollapsing, // A full collapse operation is in progress. tsToggleFocusedSelection, // Node selection was modifed using Ctrl-click. Change selection state on next mouse up. tsClearPending, // Need to clear the current selection on next mouse move. tsClipboardFlushing, // Set during flushing the clipboard to avoid freeing the content. tsCopyPending, // Indicates a pending copy operation which needs to be finished. tsCutPending, // Indicates a pending cut operation which needs to be finished. tsDrawSelPending, // Multiselection only. User held down the left mouse button on a free // area and might want to start draw selection. tsDrawSelecting, // Multiselection only. Draw selection has actually started. tsEditing, // Indicates that an edit operation is currently in progress. tsEditPending, // An mouse up start edit if dragging has not started. tsExpanding, // A full expand operation is in progress. tsNodeHeightTracking, // A node height changing operation is in progress. tsNodeHeightTrackPending, // left button is down, user might want to start changing a node's height. tsHint, // Set when our hint is visible or soon will be. tsInAnimation, // Set if the tree is currently in an animation loop. tsIncrementalSearching, // Set when the user starts incremental search. tsIncrementalSearchPending, // Set in WM_KEYDOWN to tell to use the char in WM_CHAR for incremental search. tsIterating, // Set when IterateSubtree is currently in progress. tsKeyCheckPending, // A check operation is under way, initiated by a key press (space key). Ignore mouse. tsLeftButtonDown, // Set when the left mouse button is down. tsLeftDblClick, // Set when the left mouse button was doubly clicked. tsMouseCheckPending, // A check operation is under way, initiated by a mouse click. Ignore space key. tsMiddleButtonDown, // Set when the middle mouse button is down. tsMiddleDblClick, // Set when the middle mouse button was doubly clicked. tsNeedScale, // On next ChangeScale scale the default node height. tsNeedRootCountUpdate, // Set if while loading a root node count is set. tsOLEDragging, // OLE dragging in progress. tsOLEDragPending, // User has requested to start delayed dragging. tsPainting, // The tree is currently painting itself. tsRightButtonDown, // Set when the right mouse button is down. tsRightDblClick, // Set when the right mouse button was doubly clicked. tsPopupMenuShown, // The user clicked the right mouse button, which might cause a popup menu to appear. tsScrolling, // Set when autoscrolling is active. tsScrollPending, // Set when waiting for the scroll delay time to elapse. tsSizing, // Set when the tree window is being resized. This is used to prevent recursive calls // due to setting the scrollbars when sizing. tsStopValidation, // Cache validation can be stopped (usually because a change has occured meanwhile). tsStructureChangePending, // The structure of the tree has been changed while the update was locked. tsSynchMode, // Set when the tree is in synch mode, where no timer events are triggered. tsThumbTracking, // Stop updating the horizontal scroll bar while dragging the vertical thumb and vice versa. tsToggling, // A toggle operation (for some node) is in progress. tsUpdateHiddenChildrenNeeded, // Pending update for the hidden children flag after massive visibility changes. tsUpdating, // The tree does currently not update its window because a BeginUpdate has not yet ended. tsUseCache, // The tree's node caches are validated and non-empty. tsUserDragObject, // Signals that the application created an own drag object in OnStartDrag. tsUseThemes, // The tree runs under WinXP+, is theme aware and themes are enabled. tsValidating, // The tree's node caches are currently validated. tsValidationNeeded, // Something in the structure of the tree has changed. The cache needs validation. tsVCLDragging, // VCL drag'n drop in progress. tsVCLDragPending, // One-shot flag to avoid clearing the current selection on implicit mouse up for VCL drag. tsWheelPanning, // Wheel mouse panning is active or soon will be. tsWheelScrolling, // Wheel mouse scrolling is active or soon will be. tsWindowCreating // Set during window handle creation to avoid frequent unnecessary updates. ); TChangeStates = set of ( csStopValidation, // Cache validation can be stopped (usually because a change has occured meanwhile). csUseCache, // The tree's node caches are validated and non-empty. csValidating, // The tree's node caches are currently validated. csValidationNeeded // Something in the structure of the tree has changed. The cache needs validation. ); // determines whether and how the drag image is to show TVTDragImageKind = ( diComplete, // show a complete drag image with all columns, only visible columns are shown diMainColumnOnly, // show only the main column (the tree column) diNoImage // don't show a drag image at all ); // Switch for OLE and VCL drag'n drop. Because it is not possible to have both simultanously. TVTDragType = ( dtOLE, dtVCL ); // options which determine what to draw in PaintTree TVTInternalPaintOption = ( poBackground, // draw background image if there is any and it is enabled poColumnColor, // erase node's background with the column's color poDrawFocusRect, // draw focus rectangle around the focused node poDrawSelection, // draw selected nodes with the normal selection color poDrawDropMark, // draw drop mark if a node is currently the drop target poGridLines, // draw grid lines if enabled poMainOnly, // draw only the main column poSelectedOnly // draw only selected nodes ); TVTInternalPaintOptions = set of TVTInternalPaintOption; // Determines the look of a tree's lines. TVTLineStyle = ( lsCustomStyle, // application provides a line pattern lsDotted, // usual dotted lines (default) lsSolid // simple solid lines ); // TVTLineType is used during painting a tree TVTLineType = ( ltNone, // no line at all ltBottomRight, // a line from bottom to the center and from there to the right ltTopDown, // a line from top to bottom ltTopDownRight, // a line from top to bottom and from center to the right ltRight, // a line from center to the right ltTopRight, // a line from bottom to center and from there to the right // special styles for alternative drawings of tree lines ltLeft, // a line from top to bottom at the left ltLeftBottom // a combination of ltLeft and a line at the bottom from left to right ); // Determines how to draw tree lines. TVTLineMode = ( lmNormal, // usual tree lines (as in TTreeview) lmBands // looks similar to a Nassi-Schneidermann diagram ); // A collection of line type IDs which is used while painting a node. TLineImage = array of TVTLineType; TVTScrollIncrement = 1..10000; // Export type TVTExportType = ( etRTF, // contentToRTF etHTML, // contentToHTML etText, // contentToText etExcel, // supported by external tools etWord, // supported by external tools etCustom // supported by external tools ); TVTNodeExportEvent = function (Sender: TBaseVirtualTree; aExportType: TVTExportType; Node: PVirtualNode): Boolean of object; TVTColumnExportEvent = procedure (Sender: TBaseVirtualTree; aExportType: TVTExportType; Column: TVirtualTreeColumn) of object; TVTTreeExportEvent = procedure(Sender: TBaseVirtualTree; aExportType: TVTExportType) of object; // A class to manage scroll bar aspects. TScrollBarOptions = class(TPersistent) private FAlwaysVisible: Boolean; FOwner: TBaseVirtualTree; FScrollBars: TScrollStyle; // used to hide or show vertical and/or horizontal scrollbar FScrollBarStyle: TVTScrollBarStyle; // kind of scrollbars to use FIncrementX, FIncrementY: TVTScrollIncrement; // number of pixels to scroll in one step (when auto scrolling) procedure SetAlwaysVisible(Value: Boolean); procedure SetScrollBars(Value: TScrollStyle); procedure SetScrollBarStyle(Value: TVTScrollBarStyle); protected function GetOwner: TPersistent; override; public constructor Create(AOwner: TBaseVirtualTree); procedure Assign(Source: TPersistent); override; published property AlwaysVisible: Boolean read FAlwaysVisible write SetAlwaysVisible default False; property HorizontalIncrement: TVTScrollIncrement read FIncrementX write FIncrementX default 20; property ScrollBars: TScrollStyle read FScrollbars write SetScrollBars default ssBoth; property ScrollBarStyle: TVTScrollBarStyle read FScrollBarStyle write SetScrollBarStyle default sbmRegular; property VerticalIncrement: TVTScrollIncrement read FIncrementY write FIncrementY default 20; end; // class to collect all switchable colors into one place TVTColors = class(TPersistent) private FOwner: TBaseVirtualTree; FColors: array[0..14] of TColor; function GetColor(const Index: Integer): TColor; procedure SetColor(const Index: Integer; const Value: TColor); public constructor Create(AOwner: TBaseVirtualTree); procedure Assign(Source: TPersistent); override; published property BorderColor: TColor index 7 read GetColor write SetColor default clBtnFace; property DisabledColor: TColor index 0 read GetColor write SetColor default clBtnShadow; property DropMarkColor: TColor index 1 read GetColor write SetColor default clHighlight; property DropTargetColor: TColor index 2 read GetColor write SetColor default clHighLight; property DropTargetBorderColor: TColor index 11 read GetColor write SetColor default clHighLight; property FocusedSelectionColor: TColor index 3 read GetColor write SetColor default clHighLight; property FocusedSelectionBorderColor: TColor index 9 read GetColor write SetColor default clHighLight; property GridLineColor: TColor index 4 read GetColor write SetColor default clBtnFace; property HeaderHotColor: TColor index 14 read GetColor write SetColor default clBtnShadow; property HotColor: TColor index 8 read GetColor write SetColor default clWindowText; property SelectionRectangleBlendColor: TColor index 12 read GetColor write SetColor default clHighlight; property SelectionRectangleBorderColor: TColor index 13 read GetColor write SetColor default clHighlight; property TreeLineColor: TColor index 5 read GetColor write SetColor default clBtnShadow; property UnfocusedSelectionColor: TColor index 6 read GetColor write SetColor default clBtnFace; property UnfocusedSelectionBorderColor: TColor index 10 read GetColor write SetColor default clBtnFace; end; // For painting a node and its columns/cells a lot of information must be passed frequently around. TVTImageInfo = record Index: Integer; // Index in the associated image list. XPos, // Horizontal position in the current target canvas. YPos: Integer; // Vertical position in the current target canvas. Ghosted: Boolean; // Flag to indicate that the image must be drawn slightly lighter. Images: TCustomImageList; // The image list to be used for painting. end; TVTImageInfoIndex = ( iiNormal, iiState, iiCheck, iiOverlay ); // Options which are used when modifying the scroll offsets. TScrollUpdateOptions = set of ( suoRepaintHeader, // if suoUpdateNCArea is also set then invalidate the header suoRepaintScrollbars, // if suoUpdateNCArea is also set then repaint both scrollbars after updating them suoScrollClientArea, // scroll and invalidate the proper part of the client area suoUpdateNCArea // update non-client area (scrollbars, header) ); // Determines the look of a tree's buttons. TVTButtonStyle = ( bsRectangle, // traditional Windows look (plus/minus buttons) bsTriangle // traditional Macintosh look ); // TButtonFillMode is only used when the button style is bsRectangle and determines how to fill the interior. TVTButtonFillMode = ( fmTreeColor, // solid color, uses the tree's background color fmWindowColor, // solid color, uses clWindow fmShaded, // color gradient, Windows XP style (legacy code, use toThemeAware on Windows XP instead) fmTransparent // transparent color, use the item's background color ); TVTPaintInfo = record Canvas: TCanvas; // the canvas to paint on PaintOptions: TVTInternalPaintOptions; // a copy of the paint options passed to PaintTree Node: PVirtualNode; // the node to paint Column: TColumnIndex; // the node's column index to paint Position: TColumnPosition; // the column position of the node CellRect, // the node cell ContentRect: TRect; // the area of the cell used for the node's content NodeWidth: Integer; // the actual node width Alignment: TAlignment; // how to align within the node rectangle CaptionAlignment: TAlignment; // how to align text within the caption rectangle BidiMode: TBidiMode; // directionality to be used for painting BrushOrigin: TPoint; // the alignment for the brush used to draw dotted lines ImageInfo: array[TVTImageInfoIndex] of TVTImageInfo; // info about each possible node image end; // Method called by the Animate routine for each animation step. TVTAnimationCallback = function(Step, StepSize: Integer; Data: Pointer): Boolean of object; TVTIncrementalSearch = ( isAll, // search every node in tree, initialize if necessary isNone, // disable incremental search isInitializedOnly, // search only initialized nodes, skip others isVisibleOnly // search only visible nodes, initialize if necessary ); // Determines which direction to use when advancing nodes during an incremental search. TVTSearchDirection = ( sdForward, sdBackward ); // Determines where to start incremental searching for each key press. TVTSearchStart = ( ssAlwaysStartOver, // always use the first/last node (depending on direction) to search from ssLastHit, // use the last found node ssFocusedNode // use the currently focused node ); // Determines how to use the align member of a node. TVTNodeAlignment = ( naFromBottom, // the align member specifies amount of units (usually pixels) from top border of the node naFromTop, // align is to be measured from bottom naProportional // align is to be measure in percent of the entire node height and relative to top ); // Determines how to draw the selection rectangle used for draw selection. TVTDrawSelectionMode = ( smDottedRectangle, // same as DrawFocusRect smBlendedRectangle // alpha blending, uses special colors (see TVTColors) ); // Determines for which purpose the cell paint event is called. TVTCellPaintMode = ( cpmPaint, // painting the cell cpmGetContentMargin // getting cell content margin ); // Determines which sides of the cell content margin should be considered. TVTCellContentMarginType = ( ccmtAllSides, // consider all sides ccmtTopLeftOnly, // consider top margin and left margin only ccmtBottomRightOnly // consider bottom margin and right margin only ); TClipboardFormats = class(TStringList) private FOwner: TBaseVirtualTree; public constructor Create(AOwner: TBaseVirtualTree); virtual; function Add(const S: string): Integer; override; procedure Insert(Index: Integer; const S: string); override; property Owner: TBaseVirtualTree read FOwner; end; // ----- Event prototypes: // node enumeration TVTGetNodeProc = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean) of object; // node events TVTChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean) of object; TVTCheckChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean) of object; TVTChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTStructureChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Reason: TChangeReason) of object; TVTEditCancelEvent = procedure(Sender: TBaseVirtualTree; Column: TColumnIndex) of object; TVTEditChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean) of object; TVTEditChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex) of object; TVTFreeNodeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTFocusChangingEvent = procedure(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean) of object; TVTFocusChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex) of object; TVTGetImageEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer) of object; TVTGetImageExEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer; var ImageList: TCustomImageList) of object; TVTGetImageTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String) of object; TVTHotNodeChangeEvent = procedure(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode) of object; TVTInitChildrenEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal) of object; TVTInitNodeEvent = procedure(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates) of object; TVTPopupEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; const P: TPoint; var AskParent: Boolean; var PopupMenu: TPopupMenu) of object; TVTHelpContextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var HelpContext: Integer) of object; TVTCreateEditorEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink) of object; TVTSaveNodeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream) of object; // header/column events TVTHeaderClickEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; TVTHeaderMouseEvent = procedure(Sender: TVTHeader; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; TVTHeaderMouseMoveEvent = procedure(Sender: TVTHeader; Shift: TShiftState; X, Y: Integer) of object; TVTBeforeHeaderHeightTrackingEvent = procedure(Sender: TVTHeader; Shift: TShiftState) of object; TVTAfterHeaderHeightTrackingEvent = procedure(Sender: TVTHeader) of object; TVTHeaderHeightTrackingEvent = procedure(Sender: TVTHeader; var P: TPoint; Shift: TShiftState; var Allowed: Boolean) of object; TVTHeaderHeightDblClickResizeEvent = procedure(Sender: TVTHeader; var P: TPoint; Shift: TShiftState; var Allowed: Boolean) of object; TVTHeaderNotifyEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTHeaderDraggingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var Allowed: Boolean) of object; TVTHeaderDraggedEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; OldPosition: Integer) of object; TVTHeaderDraggedOutEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; const DropPosition: TPoint) of object; TVTHeaderPaintEvent = procedure(Sender: TVTHeader; HeaderCanvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode) of object; TVTHeaderPaintQueryElementsEvent = procedure(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements) of object; TVTAdvancedHeaderPaintEvent = procedure(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements) of object; TVTBeforeAutoFitColumnsEvent = procedure(Sender: TVTHeader; var SmartAutoFitType: TSmartAutoFitType) of object; TVTBeforeAutoFitColumnEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var SmartAutoFitType: TSmartAutoFitType; var Allowed: Boolean) of object; TVTAfterAutoFitColumnEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTAfterAutoFitColumnsEvent = procedure(Sender: TVTHeader) of object; TVTColumnClickEvent = procedure (Sender: TBaseVirtualTree; Column: TColumnIndex; Shift: TShiftState) of object; TVTColumnDblClickEvent = procedure (Sender: TBaseVirtualTree; Column: TColumnIndex; Shift: TShiftState) of object; TVTColumnWidthDblClickResizeEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState; P: TPoint; var Allowed: Boolean) of object; TVTBeforeColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState) of object; TVTAfterColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint; var Allowed: Boolean) of object; TVTGetHeaderCursorEvent = procedure(Sender: TVTHeader; var Cursor: HCURSOR) of object; TVTBeforeGetMaxColumnWidthEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var UseSmartColumnWidth: Boolean) of object; TVTAfterGetMaxColumnWidthEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var MaxWidth: Integer) of object; TVTCanSplitterResizeColumnEvent = procedure(Sender: TVTHeader; P: TPoint; Column: TColumnIndex; var Allowed: Boolean) of object; // move, copy and node tracking events TVTNodeMovedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTNodeMovingEvent = procedure(Sender: TBaseVirtualTree; Node, Target: PVirtualNode; var Allowed: Boolean) of object; TVTNodeCopiedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTNodeCopyingEvent = procedure(Sender: TBaseVirtualTree; Node, Target: PVirtualNode; var Allowed: Boolean) of object; TVTNodeHeightTrackingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint; var Allowed: Boolean) of object; TVTNodeHeightDblClickResizeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint; var Allowed: Boolean) of object; // drag'n drop/OLE events TVTCreateDragManagerEvent = procedure(Sender: TBaseVirtualTree; out DragManager: IVTDragManager) of object; TVTCreateDataObjectEvent = procedure(Sender: TBaseVirtualTree; out IDataObject: IDataObject) of object; TVTDragAllowedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean) of object; TVTDragOverEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean) of object; TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; {DataObject: IDataObject;} Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode) of object; TVTRenderOLEDataEvent = procedure(Sender: TBaseVirtualTree; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean; var Result: HRESULT) of object; TVTGetUserClipboardFormatsEvent = procedure(Sender: TBaseVirtualTree; var Formats: TFormatEtcArray) of object; // paint events TVTBeforeItemEraseEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction) of object; TVTAfterItemEraseEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect) of object; TVTBeforeItemPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var CustomDraw: Boolean) of object; TVTAfterItemPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect) of object; TVTBeforeCellPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect) of object; TVTAfterCellPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect) of object; TVTPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas) of object; TVTBackgroundPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; const R: TRect; var Handled: Boolean) of object; TVTGetLineStyleEvent = procedure(Sender: TBaseVirtualTree; var Bits: Pointer) of object; TVTMeasureItemEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer) of object; // search, sort TVTCompareEvent = procedure(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer) of object; TVTIncrementalSearchEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; const SearchText: String; var Result: Integer) of object; // miscellaneous TVTGetNodeDataSizeEvent = procedure(Sender: TBaseVirtualTree; var NodeDataSize: Integer) of object; TVTKeyActionEvent = procedure(Sender: TBaseVirtualTree; var CharCode: Word; var Shift: TShiftState; var DoDefault: Boolean) of object; TVTScrollEvent = procedure(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer) of object; TVTUpdatingEvent = procedure(Sender: TBaseVirtualTree; State: TVTUpdateState) of object; TVTGetCursorEvent = procedure(Sender: TBaseVirtualTree; var Cursor: TCursor) of object; TVTStateChangeEvent = procedure(Sender: TBaseVirtualTree; Enter, Leave: TVirtualTreeStates) of object; TVTGetCellIsEmptyEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var IsEmpty: Boolean) of object; TVTScrollbarShowEvent = procedure(Sender: TBaseVirtualTree; Bar: Integer; Show: Boolean) of object; // Helper types for node iterations. TGetFirstNodeProc = function: PVirtualNode of object; TGetNextNodeProc = function(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode of object; // ----- TBaseVirtualTree TBaseVirtualTree = class(TCustomControl) private //FBorderStyle: TBorderStyle; FHeader: TVTHeader; FRoot: PVirtualNode; FDefaultNodeHeight, FIndent: Cardinal; FOptions: TCustomVirtualTreeOptions; FUpdateCount: Cardinal; // update stopper, updates of the tree control are only done if = 0 FSynchUpdateCount: Cardinal; // synchronizer, causes all events which are usually done via timers // to happen immediately, regardless of the normal update state FNodeDataSize: Integer; // number of bytes to allocate with each node (in addition to its base // structure and the internal data), if -1 then do callback FStates: TVirtualTreeStates; // various active/pending states the tree needs to consider FLastSelected, FFocusedNode: PVirtualNode; FEditColumn, // column to be edited (focused node) FFocusedColumn: TColumnIndex; // NoColumn if no columns are active otherwise the last hit column of // the currently focused node FHeightTrackPoint: TPoint; // Starting point of a node's height changing operation. FHeightTrackNode: PVirtualNode; // Node which height is being changed. FHeightTrackColumn: TColumnIndex; // Initial column where the height changing operation takes place. FScrollDirections: TScrollDirections; // directions to scroll client area into depending on mouse position FLastStructureChangeReason: TChangeReason; // Used for delayed structure change event. FLastStructureChangeNode, // dito FLastChangedNode, // used for delayed change event FCurrentHotNode: PVirtualNode; // Node over which the mouse is hovering. FCurrentHotColumn: TColumnIndex; // Column over which the mouse is hovering. FHotNodeButtonHit: Boolean; // Indicates wether the mouse is hovering over the hot node's button. FLastSelRect, FNewSelRect: TRect; // used while doing draw selection FHotCursor: TCursor; // can be set to additionally indicate the current hot node FHintMode: TVTHintMode; // determines the kind of the hint window FHintData: TVTHintData; // used while preparing the hint window FChangeDelay: Cardinal; // used to delay OnChange event FEditDelay: Cardinal; // determines time to elapse before a node goes into edit mode FPositionCache: TCache; // array which stores node references ordered by vertical positions // (see also DoValidateCache for more information) FVisibleCount: Cardinal; // number of currently visible nodes FStartIndex: Cardinal; // index to start validating cache from FSelection: TNodeArray; // list of currently selected nodes FSelectionCount: Integer; // number of currently selected nodes (size of FSelection might differ) FSelectionLocked: Boolean; // prevents the tree from changing the selection FRangeAnchor: PVirtualNode; // anchor node for selection with the keyboard, determines start of a // selection range FCheckNode: PVirtualNode; // node which "captures" a check event FPendingCheckState: TCheckState; // the new state the check node will get if all went fine FCheckPropagationCount: Cardinal; // nesting level of check propagation (WL, 05.02.2004) FLastSelectionLevel: Integer; // keeps the last node level for constrained multiselection FDrawSelShiftState: TShiftState; // keeps the initial shift state when the user starts selection with // the mouse FEditLink: IVTEditLink; // used to comunicate with an application defined editor FTempNodeCache: TNodeArray; // used at various places to hold temporarily a bunch of node refs. FTempNodeCount: Cardinal; // number of nodes in FTempNodeCache FBackground: TPicture; // A background image loadable at design and runtime. FMargin: Integer; // horizontal border distance FTextMargin: Integer; // space between the node's text and its horizontal bounds FBackgroundOffsetX, FBackgroundOffsetY: Integer; // used to fine tune the position of the background image FAnimationDuration: Cardinal; // specifies how long an animation shall take (expanding, hint) FWantTabs: Boolean; // If True then the tree also consumes the tab key. FNodeAlignment: TVTNodeAlignment; // determines how to interpret the align member of a node FHeaderRect: TRect; // Space which the header currently uses in the control (window coords). FLastHintRect: TRect; // Area which the mouse must leave to reshow a hint. FUpdateRect: TRect; // paint support and images FPlusBM, FMinusBM, // small bitmaps used for tree buttons FHotPlusBM, FHotMinusBM: TBitmap; // small bitmaps used for hot tree buttons FImages, // normal images in the tree FStateImages: TCustomImageList; // state images in the tree FCustomCheckImages: TBitmap; // application defined check images FCheckImageKind: TCheckImageKind; // light or dark, cross marks or tick marks FCheckImages: TBitmap; // Reference to global image list to be used for the check images. FImageChangeLink, FStateChangeLink, FCustomCheckChangeLink: TChangeLink; // connections to the image lists FOldFontChange: TNotifyEvent; // helper method pointer for tracking font changes in the off screen buffer FFontChanged: Boolean; // flag for keeping informed about font changes in the off screen buffer FColors: TVTColors; // class comprising all customizable colors in the tree FButtonStyle: TVTButtonStyle; // style of the tree buttons FButtonFillMode: TVTButtonFillMode; // for rectangular tree buttons only: how to fill them FLineStyle: TVTLineStyle; // style of the tree lines FLineMode: TVTLineMode; // tree lines or bands etc. FDottedBrush: HBRUSH; // used to paint dotted lines without special pens FSelectionCurveRadius: Cardinal; // radius for rounded selection rectangles FSelectionBlendFactor: Byte; // Determines the factor by which the selection rectangle is to be // faded if enabled. FDrawSelectionMode: TVTDrawSelectionMode; // determines the paint mode for draw selection // alignment and directionality support FAlignment: TAlignment; // default alignment of the tree if no columns are shown // drag'n drop and clipboard support FDragImageKind: TVTDragImageKind; // determines whether or not and what to show in the drag image FDragOperations: TDragOperations; // determines which operations are allowed during drag'n drop FDragThreshold: Integer; // used to determine when to actually start a drag'n drop operation FDragManager: IVTDragManager; // drag'n drop, cut'n paste FDropTargetNode: PVirtualNode; // node currently selected as drop target FLastDropMode: TDropMode; // set while dragging and used to track changes FDragSelection: TNodeArray; // temporary copy of FSelection used during drag'n drop FDragType: TVTDragType; // used to switch between OLE and VCL drag'n drop FDragImage: TVTDragImage; // drag image management FDragWidth, FDragHeight: Integer; // size of the drag image, the larger the more CPU power is needed FClipboardFormats: TClipboardFormats; // a list of clipboard format descriptions enabled for this tree FLastVCLDragTarget: PVirtualNode; // A node cache for VCL drag'n drop (keywords: DragLeave on DragDrop). FVCLDragEffect: LongWord; // A cache for VCL drag'n drop to keep the current drop effect. // scroll support FScrollBarOptions: TScrollBarOptions; // common properties of horizontal and vertical scrollbar FAutoScrollInterval: TAutoScrollInterval; // determines speed of auto scrolling FAutoScrollDelay: Cardinal; // amount of milliseconds to wait until autoscrolling becomes active FAutoExpandDelay: Cardinal; // amount of milliseconds to wait until a node is expanded if it is the // drop target FOffsetX: Integer; FOffsetY: Integer; // Determines left and top scroll offset. FEffectiveOffsetX: Integer; // Actual position of the horizontal scroll bar (varies depending on bidi mode). FRangeX, FRangeY: Cardinal; // current virtual width and height of the tree FBottomSpace: Cardinal; // Extra space below the last node. FDefaultPasteMode: TVTNodeAttachMode; // Used to determine where to add pasted nodes to. FSingletonNodeArray: TNodeArray; // Contains only one element for quick addition of single nodes // to the selection. FDragScrollStart: Cardinal; // Contains the start time when a tree does auto scrolling as drop target. // search FIncrementalSearch: TVTIncrementalSearch; // Used to determine whether and how incremental search is to be used. FSearchTimeout: Cardinal; // Number of milliseconds after which to stop incremental searching. FSearchBuffer: String; // Collects a sequence of keypresses used to do incremental searching. FLastSearchNode: PVirtualNode; // Reference to node which was last found as search fit. FSearchDirection: TVTSearchDirection; // Direction to incrementally search the tree. FSearchStart: TVTSearchStart; // Where to start iteration on each key press. // miscellanous FTotalInternalDataSize: Cardinal; // Cache of the sum of the necessary internal data size for all tree // classes derived from this base class. FPanningWindow: TVirtualPanningWindow; // Helper window for wheel panning FLastClickPos: TPoint; // Used for retained drag start and wheel mouse scrolling. FOperationCount: Cardinal; // Counts how many nested long-running operations are in progress. FOperationCanceled: Boolean; // Used to indicate that a long-running operation should be canceled. {$ifdef EnableAccessible} // MSAA support FAccessible: IAccessible; // The IAccessible interface to the window itself. FAccessibleItem: IAccessible; // The IAccessible to the item that currently has focus. FAccessibleName: string; // The name the window is given for screen readers. {$endif} // export FOnBeforeNodeExport: TVTNodeExportEvent; // called before exporting a node FOnNodeExport: TVTNodeExportEvent; FOnAfterNodeExport: TVTNodeExportEvent; // called after exporting a node FOnBeforeColumnExport: TVTColumnExportEvent; // called before exporting a column FOnColumnExport: TVTColumnExportEvent; FOnAfterColumnExport: TVTColumnExportEvent; // called after exporting a column FOnBeforeTreeExport: TVTTreeExportEvent; // called before starting the export FOnAfterTreeExport: TVTTreeExportEvent; // called after finishing the export FOnBeforeHeaderExport: TVTTreeExportEvent; // called before exporting the header FOnAfterHeaderExport: TVTTreeExportEvent; // called after exporting the header // common events FOnChange: TVTChangeEvent; // selection change FOnStructureChange: TVTStructureChangeEvent; // structural change like adding nodes etc. FOnInitChildren: TVTInitChildrenEvent; // called when a node's children are needed (expanding etc.) FOnInitNode: TVTInitNodeEvent; // called when a node needs to be initialized (child count etc.) FOnFreeNode: TVTFreeNodeEvent; // called when a node is about to be destroyed, user data can and should // be freed in this event FOnGetImage: TVTGetImageEvent; // Used to retrieve the image index of a given node. FOnGetImageEx: TVTGetImageExEvent; // Used to retrieve the image index of a given node along with a custom // image list. FOnGetImageText: TVTGetImageTextEvent; // Used to retrieve the image alternative text of a given node. // Used by the accessibility interface to provide useful text for status images. FOnHotChange: TVTHotNodeChangeEvent; // called when the current "hot" node (that is, the node under the mouse) // changes and hot tracking is enabled FOnExpanding, // called just before a node is expanded FOnCollapsing: TVTChangingEvent; // called just before a node is collapsed FOnChecking: TVTCheckChangingEvent; // called just before a node's check state is changed FOnExpanded, // called after a node has been expanded FOnCollapsed, // called after a node has been collapsed FOnChecked: TVTChangeEvent; // called after a node's check state has been changed FOnResetNode: TVTChangeEvent; // called when a node is set to be uninitialized FOnNodeMoving: TVTNodeMovingEvent; // called just before a node is moved from one parent node to another // (this can be cancelled) FOnNodeMoved: TVTNodeMovedEvent; // called after a node and its children have been moved to another // parent node (probably another tree, but within the same application) FOnNodeCopying: TVTNodeCopyingEvent; // called when an node is copied to another parent node (probably in // another tree, but within the same application, can be cancelled) FOnNodeHeightTracking: TVTNodeHeightTrackingEvent; // called when a node's height is being changed via mouse FOnNodeHeightDblClickResize: TVTNodeHeightDblClickResizeEvent; // called when a node's vertical splitter is double clicked FOnNodeCopied: TVTNodeCopiedEvent; // call after a node has been copied FOnEditing: TVTEditChangingEvent; // called just before a node goes into edit mode FOnEditCancelled: TVTEditCancelEvent; // called when editing has been cancelled FOnEdited: TVTEditChangeEvent; // called when editing has successfully been finished FOnFocusChanging: TVTFocusChangingEvent; // called when the focus is about to go to a new node and/or column // (can be cancelled) FOnFocusChanged: TVTFocusChangeEvent; // called when the focus goes to a new node and/or column FOnGetPopupMenu: TVTPopupEvent; // called when the popup for a node or the header needs to be shown FOnGetHelpContext: TVTHelpContextEvent; // called when a node specific help theme should be called FOnCreateEditor: TVTCreateEditorEvent; // called when a node goes into edit mode, this allows applications // to supply their own editor FOnLoadNode, // called after a node has been loaded from a stream (file, clipboard, // OLE drag'n drop) to allow an application to load their own data // saved in OnSaveNode FOnSaveNode: TVTSaveNodeEvent; // called when a node needs to be serialized into a stream // (see OnLoadNode) to give the application the opportunity to save // their node specific, persistent data (note: never save memory // references) // header/column mouse events FOnAfterAutoFitColumn: TVTAfterAutoFitColumnEvent; FOnAfterAutoFitColumns: TVTAfterAutoFitColumnsEvent; FOnBeforeAutoFitColumns: TVTBeforeAutoFitColumnsEvent; FOnBeforeAutoFitColumn: TVTBeforeAutoFitColumnEvent; FOnHeaderClick, // mouse events for the header, just like those for a control FOnHeaderImageClick, FOnHeaderCheckBoxClick: TVTHeaderClickEvent; FOnHeaderDblClick: TVTHeaderClickEvent; FOnAfterHeaderHeightTracking: TVTAfterHeaderHeightTrackingEvent; FOnBeforeHeaderHeightTracking: TVTBeforeHeaderHeightTrackingEvent; FOnHeaderHeightTracking: TVTHeaderHeightTrackingEvent; FOnHeaderHeightDblClickResize: TVTHeaderHeightDblClickResizeEvent; FOnHeaderMouseDown, FOnHeaderMouseUp: TVTHeaderMouseEvent; FOnHeaderMouseMove: TVTHeaderMouseMoveEvent; FOnAfterGetMaxColumnWidth: TVTAfterGetMaxColumnWidthEvent; FOnBeforeGetMaxColumnWidth: TVTBeforeGetMaxColumnWidthEvent; FOnColumnClick: TVTColumnClickEvent; FOnColumnDblClick: TVTColumnDblClickEvent; FOnColumnResize: TVTHeaderNotifyEvent; FOnColumnWidthDblClickResize: TVTColumnWidthDblClickResizeEvent; FOnAfterColumnWidthTracking: TVTAfterColumnWidthTrackingEvent; FOnBeforeColumnWidthTracking: TVTBeforeColumnWidthTrackingEvent; FOnColumnWidthTracking: TVTColumnWidthTrackingEvent; FOnGetHeaderCursor: TVTGetHeaderCursorEvent; // triggered to allow the app. to use customized cursors for the header FOnCanSplitterResizeColumn: TVTCanSplitterResizeColumnEvent; // paint events FOnAfterPaint, // triggered when the tree has entirely been painted FOnBeforePaint: TVTPaintEvent; // triggered when the tree is about to be painted FOnAfterItemPaint: TVTAfterItemPaintEvent; // triggered after an item has been painted FOnBeforeItemPaint: TVTBeforeItemPaintEvent; // triggered when an item is about to be painted FOnBeforeItemErase: TVTBeforeItemEraseEvent; // triggered when an item's background is about to be erased FOnAfterItemErase: TVTAfterItemEraseEvent; // triggered after an item's background has been erased FOnAfterCellPaint: TVTAfterCellPaintEvent; // triggered after a column of an item has been painted FOnBeforeCellPaint: TVTBeforeCellPaintEvent; // triggered when a column of an item is about to be painted FOnHeaderDraw: TVTHeaderPaintEvent; // Used when owner draw is enabled for the header and a column is set // to owner draw mode. FOnHeaderDrawQueryElements: TVTHeaderPaintQueryElementsEvent; // Used for advanced header painting to query the // application for the elements, which are drawn by it and which should // be drawn by the tree. FOnAdvancedHeaderDraw: TVTAdvancedHeaderPaintEvent; // Used when owner draw is enabled for the header and a column // is set to owner draw mode. But only if OnHeaderDrawQueryElements // returns at least one element to be drawn by the application. // In this case OnHeaderDraw is not used. FOnGetLineStyle: TVTGetLineStyleEvent; // triggered when a custom line style is used and the pattern brush // needs to be build FOnPaintBackground: TVTBackgroundPaintEvent; // triggered if a part of the tree's background must be erased which is // not covered by any node FOnMeasureItem: TVTMeasureItemEvent; // Triggered when a node is about to be drawn and its height was not yet // determined by the application. // drag'n drop events FOnCreateDragManager: TVTCreateDragManagerEvent; // called to allow for app./descendant defined drag managers FOnCreateDataObject: TVTCreateDataObjectEvent; // called to allow for app./descendant defined data objects FOnDragAllowed: TVTDragAllowedEvent; // used to get permission for manual drag in mouse down FOnDragOver: TVTDragOverEvent; // called for every mouse move FOnDragDrop: TVTDragDropEvent; // called on release of mouse button (if drop was allowed) FOnHeaderDragged: TVTHeaderDraggedEvent; // header (column) drag'n drop FOnHeaderDraggedOut: TVTHeaderDraggedOutEvent; // header (column) drag'n drop, which did not result in a valid drop. FOnHeaderDragging: TVTHeaderDraggingEvent; // header (column) drag'n drop FOnRenderOLEData: TVTRenderOLEDataEvent; // application/descendant defined clipboard formats FOnGetUserClipboardFormats: TVTGetUserClipboardFormatsEvent; // gives application/descendants the opportunity to // add own clipboard formats on the fly // miscellanous events FOnGetNodeDataSize: TVTGetNodeDataSizeEvent; // Called if NodeDataSize is -1. FOnKeyAction: TVTKeyActionEvent; // Used to selectively prevent key actions (full expand on Ctrl+'+' etc.). FOnScroll: TVTScrollEvent; // Called when one or both paint offsets changed. FOnUpdating: TVTUpdatingEvent; // Called from BeginUpdate, EndUpdate, BeginSynch and EndSynch. FOnGetCursor: TVTGetCursorEvent; // Called to allow the app. to set individual cursors. FOnStateChange: TVTStateChangeEvent; // Called whenever a state in the tree changes. FOnGetCellIsEmpty: TVTGetCellIsEmptyEvent; // Called when the tree needs to know if a cell is empty. FOnShowScrollbar: TVTScrollbarShowEvent; // Called when a scrollbar is changed in its visibility. // search, sort FOnCompareNodes: TVTCompareEvent; // used during sort FOnIncrementalSearch: TVTIncrementalSearchEvent; // triggered on every key press (not key down) procedure AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer); procedure AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect; var ImageInfo: TVTImageInfo); procedure AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); procedure AdjustTotalHeight(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); function CalculateCacheEntryCount: Integer; procedure CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign, VButtonAlign: Integer); function ChangeCheckState(Node: PVirtualNode; Value: TCheckState): Boolean; function CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; function CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; procedure ClearNodeBackground(const PaintInfo: TVTPaintInfo; UseBackground, Floating: Boolean; R: TRect); function CompareNodePositions(Node1, Node2: PVirtualNode; ConsiderChildrenAbove: Boolean = False): Integer; function DetermineLineImageAndSelectLevel(Node: PVirtualNode; out LineImage: TLineImage): Integer; procedure DrawLineImage(const PaintInfo: TVTPaintInfo; X, Y, H, VAlign: Integer; Style: TVTLineType; Reverse: Boolean); function FindInPositionCache(Node: PVirtualNode; var CurrentPos: Cardinal): PVirtualNode; overload; function FindInPositionCache(Position: Cardinal; var CurrentPos: Cardinal): PVirtualNode; overload; procedure FixupTotalCount(Node: PVirtualNode); procedure FixupTotalHeight(Node: PVirtualNode); function GetBottomNode: PVirtualNode; function GetCheckedCount: Integer; function GetCheckState(Node: PVirtualNode): TCheckState; function GetCheckType(Node: PVirtualNode): TCheckType; function GetChildCount(Node: PVirtualNode): Cardinal; function GetChildrenInitialized(Node: PVirtualNode): Boolean; function GetCutCopyCount: Integer; function GetDisabled(Node: PVirtualNode): Boolean; function GetDragManager: IVTDragManager; function GetExpanded(Node: PVirtualNode): Boolean; function GetFullyVisible(Node: PVirtualNode): Boolean; function GetHasChildren(Node: PVirtualNode): Boolean; function GetMultiline(Node: PVirtualNode): Boolean; function GetNodeHeight(Node: PVirtualNode): Cardinal; function GetNodeParent(Node: PVirtualNode): PVirtualNode; function GetOffsetXY: TPoint; function GetRootNodeCount: Cardinal; function GetSelected(Node: PVirtualNode): Boolean; function GetTopNode: PVirtualNode; function GetTotalCount: Cardinal; function GetVerticalAlignment(Node: PVirtualNode): Byte; function GetVisible(Node: PVirtualNode): Boolean; function GetVisiblePath(Node: PVirtualNode): Boolean; procedure HandleClickSelection(LastFocused, NewNode: PVirtualNode; Shift: TShiftState; DragPending: Boolean); function HandleDrawSelection(X, Y: Integer): Boolean; function HasVisibleNextSibling(Node: PVirtualNode): Boolean; function HasVisiblePreviousSibling(Node: PVirtualNode): Boolean; procedure ImageListChange(Sender: TObject); procedure InitializeFirstColumnValues(var PaintInfo: TVTPaintInfo); procedure InitRootNode(OldSize: Cardinal = 0); procedure InterruptValidation; function IsFirstVisibleChild(Parent, Node: PVirtualNode): Boolean; function IsLastVisibleChild(Parent, Node: PVirtualNode): Boolean; procedure LimitPaintingToArea(Canvas: TCanvas; ClipRect: TRect; VisibleRegion: HRGN = 0); //lcl procedure LoadPanningCursors; function MakeNewNode: PVirtualNode; {$ifdef PACKARRAYPASCAL} function PackArray(const TheArray: TNodeArray; Count: Integer): Integer; {$else} function PackArray(TheArray: TNodeArray; Count: Integer): Integer; {$endif} procedure PrepareBitmaps(NeedButtons, NeedLines: Boolean); procedure SetAlignment(const Value: TAlignment); procedure SetAnimationDuration(const Value: Cardinal); procedure SetBackground(const Value: TPicture); procedure SetBackgroundOffset(const Index, Value: Integer); procedure SetBottomNode(Node: PVirtualNode); procedure SetBottomSpace(const Value: Cardinal); procedure SetButtonFillMode(const Value: TVTButtonFillMode); procedure SetButtonStyle(const Value: TVTButtonStyle); procedure SetCheckImageKind(Value: TCheckImageKind); procedure SetCheckState(Node: PVirtualNode; Value: TCheckState); procedure SetCheckType(Node: PVirtualNode; Value: TCheckType); procedure SetChildCount(Node: PVirtualNode; NewChildCount: Cardinal); procedure SetClipboardFormats(const Value: TClipboardFormats); procedure SetColors(const Value: TVTColors); procedure SetCustomCheckImages(const Value: TBitmap); procedure SetDefaultNodeHeight(Value: Cardinal); procedure SetDisabled(Node: PVirtualNode; Value: Boolean); procedure SetExpanded(Node: PVirtualNode; Value: Boolean); procedure SetFocusedColumn(Value: TColumnIndex); procedure SetFocusedNode(Value: PVirtualNode); procedure SetFullyVisible(Node: PVirtualNode; Value: Boolean); procedure SetHasChildren(Node: PVirtualNode; Value: Boolean); procedure SetHeader(const Value: TVTHeader); procedure SetImages(const Value: TCustomImageList); procedure SetIndent(Value: Cardinal); procedure SetLineMode(const Value: TVTLineMode); procedure SetLineStyle(const Value: TVTLineStyle); procedure SetMargin(Value: Integer); procedure SetMultiline(Node: PVirtualNode; const Value: Boolean); procedure SetNodeAlignment(const Value: TVTNodeAlignment); procedure SetNodeDataSize(Value: Integer); procedure SetNodeHeight(Node: PVirtualNode; Value: Cardinal); procedure SetNodeParent(Node: PVirtualNode; const Value: PVirtualNode); procedure SetOffsetX(const Value: Integer); procedure SetOffsetXY(const Value: TPoint); procedure SetOffsetY(const Value: Integer); procedure SetOptions(const Value: TCustomVirtualTreeOptions); procedure SetRootNodeCount(Value: Cardinal); procedure SetScrollBarOptions(Value: TScrollBarOptions); procedure SetSearchOption(const Value: TVTIncrementalSearch); procedure SetSelected(Node: PVirtualNode; Value: Boolean); procedure SetSelectionCurveRadius(const Value: Cardinal); procedure SetStateImages(const Value: TCustomImageList); procedure SetTextMargin(Value: Integer); procedure SetTopNode(Node: PVirtualNode); procedure SetUpdateState(Updating: Boolean); procedure SetVerticalAlignment(Node: PVirtualNode; Value: Byte); procedure SetVisible(Node: PVirtualNode; Value: Boolean); procedure SetVisiblePath(Node: PVirtualNode; Value: Boolean); procedure StaticBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; const R: TRect); procedure TileBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; R: TRect); function ToggleCallback(Step, StepSize: Integer; Data: Pointer): Boolean; protected procedure CMColorChange(var Message: TLMessage); message CM_COLORCHANGED; procedure CMBiDiModeChanged(var Message: TLMessage); message CM_BIDIMODECHANGED; procedure CMDenySubclassing(var Message: TLMessage); message CM_DENYSUBCLASSING; //procedure CMDrag(var Message: TCMDrag); message CM_DRAG; procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; procedure CMMouseLeave(var Message: TLMessage); message CM_MOUSELEAVE; procedure CMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL; {$ifdef EnableNativeTVM} procedure TVMGetItem(var Message: TLMessage); message TVM_GETITEM; procedure TVMGetItemRect(var Message: TLMessage); message TVM_GETITEMRECT; procedure TVMGetNextItem(var Message: TLMessage); message TVM_GETNEXTITEM; {$endif} procedure WMCancelMode(var Message: TLMNoParams); message LM_CANCELMODE; procedure WMChangeState(var Message: TLMessage); message WM_CHANGESTATE; procedure WMChar(var Message: TLMChar); message LM_CHAR; procedure WMContextMenu(var Message: TLMContextMenu); message LM_CONTEXTMENU; procedure WMCopy(var Message: TLMNoParams); message LM_COPY; procedure WMCut(var Message: TLMNoParams); message LM_CUT; procedure WMEnable(var Message: TLMNoParams); message LM_ENABLE; procedure WMEraseBkgnd(var Message: TLMEraseBkgnd); message LM_ERASEBKGND; procedure WMGetDlgCode(var Message: TLMNoParams); message LM_GETDLGCODE; {$ifdef EnableAccessible} procedure WMGetObject(var Message: TLMessage);{ message WM_GETOBJECT;} {$endif} procedure WMHScroll(var Message: TLMHScroll); message LM_HSCROLL; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; procedure WMKeyUp(var Message: TLMKeyUp); message LM_KEYUP; procedure WMKillFocus(var Msg: TLMKillFocus); message LM_KILLFOCUS; procedure WMLButtonDblClk(var Message: TLMLButtonDblClk); message LM_LBUTTONDBLCLK; procedure WMLButtonDown(var Message: TLMLButtonDown); message LM_LBUTTONDOWN; procedure WMLButtonUp(var Message: TLMLButtonUp); message LM_LBUTTONUP; procedure WMMButtonDblClk(var Message: TLMMButtonDblClk); message LM_MBUTTONDBLCLK; procedure WMMButtonDown(var Message: TLMMButtonDown); message LM_MBUTTONDOWN; procedure WMMButtonUp(var Message: TLMMButtonUp); message LM_MBUTTONUP; {$ifdef EnableNCFunctions} procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE; procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; procedure WMNCPaint(var Message: TRealWMNCPaint); message WM_NCPAINT; {$endif} procedure WMPaint(var Message: TLMPaint); message LM_PAINT; procedure WMPaste(var Message: TLMNoParams); message LM_PASTE; {$ifdef EnablePrintFunctions} procedure WMPrint(var Message: TWMPrint); message WM_PRINT; procedure WMPrintClient(var Message: TWMPrintClient); message WM_PRINTCLIENT; {$endif} procedure WMRButtonDblClk(var Message: TLMRButtonDblClk); message LM_RBUTTONDBLCLK; procedure WMRButtonDown(var Message: TLMRButtonDown); message LM_RBUTTONDOWN; procedure WMRButtonUp(var Message: TLMRButtonUp); message LM_RBUTTONUP; procedure WMSetFocus(var Msg: TLMSetFocus); message LM_SETFOCUS; procedure WMSize(var Message: TLMSize); message LM_SIZE; procedure WMTimer(var Message: TLMTimer); message LM_TIMER; {$ifdef ThemeSupport} {$ifdef Windows} procedure WMThemeChanged(var Message: TLMessage); message WM_THEMECHANGED; {$endif} {$endif ThemeSupport} procedure WMVScroll(var Message: TLMVScroll); message LM_VSCROLL; procedure AddToSelection(Node: PVirtualNode); overload; virtual; procedure AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); overload; virtual; procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); virtual; procedure AdjustPanningCursor(X, Y: Integer); virtual; procedure AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); virtual; function AllocateInternalDataArea(Size: Cardinal): Cardinal; virtual; procedure Animate(Steps, Duration: Cardinal; Callback: TVTAnimationCallback; Data: Pointer); virtual; procedure BeginOperation; function CalculateSelectionRect(X, Y: Integer): Boolean; virtual; function CanAutoScroll: Boolean; virtual; function CanScroll(const ClientMousePos: TPoint): Boolean; virtual; function CanShowDragImage: Boolean; virtual; procedure Change(Node: PVirtualNode); virtual; procedure ChangeScale(M, D: Integer); override; //lcl procedure CheckImageListNeeded; function CheckParentCheckState(Node: PVirtualNode; NewCheckState: TCheckState): Boolean; virtual; procedure ClearTempCache; virtual; function ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; function ComputeRTLOffset(ExcludeScrollbar: Boolean = False): Integer; virtual; function CountLevelDifference(Node1, Node2: PVirtualNode): Integer; virtual; function CountVisibleChildren(Node: PVirtualNode): Cardinal; virtual; procedure CreateParams(var Params: TCreateParams); override; procedure CreateWnd; override; procedure DestroyHandle; override; procedure DetermineHiddenChildrenFlag(Node: PVirtualNode); virtual; procedure DetermineHiddenChildrenFlagAllNodes; virtual; procedure DetermineHitPositionLTR(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); virtual; procedure DetermineHitPositionRTL(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); virtual; function DetermineNextCheckState(CheckType: TCheckType; CheckState: TCheckState): TCheckState; virtual; function DetermineScrollDirections(X, Y: Integer): TScrollDirections; virtual; procedure DoAdvancedHeaderDraw(var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); virtual; procedure DoAfterCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect); virtual; procedure DoAfterItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); virtual; procedure DoAfterItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); virtual; procedure DoAfterPaint(Canvas: TCanvas); virtual; procedure DoAutoScroll(X, Y: Integer); virtual; procedure DoAutoSize; override; function DoBeforeDrag(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; procedure DoBeforeCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); virtual; procedure DoBeforeItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction); virtual; function DoBeforeItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect): Boolean; virtual; procedure DoBeforePaint(Canvas: TCanvas); virtual; function DoCancelEdit: Boolean; virtual; procedure DoCanEdit(Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); virtual; procedure DoChange(Node: PVirtualNode); virtual; procedure DoCheckClick(Node: PVirtualNode; NewCheckState: TCheckState); virtual; procedure DoChecked(Node: PVirtualNode); virtual; function DoChecking(Node: PVirtualNode; var NewCheckState: TCheckState): Boolean; virtual; procedure DoCollapsed(Node: PVirtualNode); virtual; function DoCollapsing(Node: PVirtualNode): Boolean; virtual; procedure DoColumnClick(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoColumnDblClick(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoColumnResize(Column: TColumnIndex); virtual; function DoCompare(Node1, Node2: PVirtualNode; Column: TColumnIndex): Integer; virtual; function DoCreateDataObject: IDataObject; virtual; function DoCreateDragManager: IVTDragManager; virtual; function DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; virtual; procedure DoDragging(P: TPoint); virtual; procedure DoDragExpand; virtual; function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean): LRESULT; override; function DoDragOver(Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord): Boolean; virtual; procedure DoDragDrop(Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); virtual; procedure DoEdit; virtual; procedure DoEndDrag(Target: TObject; X, Y: Integer); override; function DoEndEdit: Boolean; virtual; procedure DoExpanded(Node: PVirtualNode); virtual; function DoExpanding(Node: PVirtualNode): Boolean; virtual; procedure DoFocusChange(Node: PVirtualNode; Column: TColumnIndex); virtual; function DoFocusChanging(OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex): Boolean; virtual; procedure DoFocusNode(Node: PVirtualNode; Ask: Boolean); virtual; procedure DoFreeNode(Node: PVirtualNode); virtual; function DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; virtual; procedure DoGetCursor(var Cursor: TCursor); virtual; procedure DoGetHeaderCursor(var Cursor: HCURSOR); virtual; function DoGetImageIndex(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer): TCustomImageList; virtual; procedure DoGetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String); virtual; procedure DoGetLineStyle(var Bits: Pointer); virtual; function DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; virtual; function DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; virtual; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; virtual; function DoGetPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint): TPopupMenu; virtual; procedure DoGetUserClipboardFormats(var Formats: TFormatEtcArray); virtual; procedure DoHeaderClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderDblClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderImageClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderCheckBoxClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderDragged(Column: TColumnIndex; OldPosition: TColumnPosition); virtual; procedure DoHeaderDraggedOut(Column: TColumnIndex; const DropPosition: TPoint); virtual; function DoHeaderDragging(Column: TColumnIndex): Boolean; virtual; procedure DoHeaderDraw(Canvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode); virtual; procedure DoHeaderDrawQueryElements(var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); virtual; procedure DoHeaderMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderMouseMove(Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHotChange(Old, New: PVirtualNode); virtual; function DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; virtual; procedure DoInitChildren(Node: PVirtualNode; var ChildCount: Cardinal); virtual; procedure DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates); virtual; function DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; virtual; procedure DoLoadUserData(Node: PVirtualNode; Stream: TStream); virtual; procedure DoMeasureItem(TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); virtual; procedure DoNodeCopied(Node: PVirtualNode); virtual; function DoNodeCopying(Node, NewParent: PVirtualNode): Boolean; virtual; function DoNodeHeightDblClickResize(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint): Boolean; virtual; function DoNodeHeightTracking(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; virtual; procedure DoNodeMoved(Node: PVirtualNode); virtual; function DoNodeMoving(Node, NewParent: PVirtualNode): Boolean; virtual; function DoPaintBackground(Canvas: TCanvas; const R: TRect): Boolean; virtual; procedure DoPaintDropMark(Canvas: TCanvas; Node: PVirtualNode; const R: TRect); virtual; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); virtual; procedure DoPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint); virtual; function DoRenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HRESULT; virtual; procedure DoReset(Node: PVirtualNode); virtual; procedure DoSaveUserData(Node: PVirtualNode; Stream: TStream); virtual; procedure DoScroll(DeltaX, DeltaY: Integer); virtual; function DoSetOffsetXY(Value: TPoint; Options: TScrollUpdateOptions; ClipRect: PRect = nil): Boolean; virtual; procedure DoShowScrollbar(Bar: Integer; Show: Boolean); virtual; procedure DoStartDrag(var DragObject: TDragObject); override; procedure DoStateChange(Enter: TVirtualTreeStates; Leave: TVirtualTreeStates = []); virtual; procedure DoStructureChange(Node: PVirtualNode; Reason: TChangeReason); virtual; procedure DoTimerScroll; virtual; procedure DoUpdating(State: TVTUpdateState); virtual; function DoValidateCache: Boolean; virtual; procedure DragAndDrop(AllowedEffects: LongWord; DataObject: IDataObject; DragEffect: LongWord); virtual; procedure DragCanceled; override; function DragDrop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; reintroduce; virtual; function DragEnter(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; virtual; procedure DragFinished; virtual; procedure DragLeave; virtual; function DragOver(Source: TObject; KeyState: LongWord; DragState: TDragState; Pt: TPoint; var Effect: LongWord): HResult; reintroduce; virtual; procedure DrawDottedHLine(const PaintInfo: TVTPaintInfo; Left, Right, Top: Integer); virtual; procedure DrawDottedVLine(const PaintInfo: TVTPaintInfo; Top, Bottom, Left: Integer); virtual; procedure EndOperation; function FindNodeInSelection(P: PVirtualNode; out Index: Integer; LowBound, HighBound: Integer): Boolean; virtual; procedure FinishChunkHeader(Stream: TStream; StartPos, EndPos: Integer); virtual; procedure FontChanged(AFont: TObject); virtual; function GetBorderDimensions: TSize; virtual; function GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer; virtual; function GetClientRect: TRect; override; function GetColumnClass: TVirtualTreeColumnClass; virtual; function GetHeaderClass: TVTHeaderClass; virtual; function GetHintWindowClass: THintWindowClass; virtual; procedure GetImageIndex(var Info: TVTPaintInfo; Kind: TVTImageKind; InfoIndex: TVTImageInfoIndex; DefaultImages: TCustomImageList); virtual; function GetMaxRightExtend: Cardinal; virtual; procedure GetNativeClipboardFormats(var Formats: TFormatEtcArray); virtual; function GetOperationCanceled: Boolean; function GetOptionsClass: TTreeOptionsClass; virtual; function GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; virtual; procedure HandleHotTrack(X, Y: Integer); virtual; procedure HandleIncrementalSearch(CharCode: Word); virtual; procedure HandleMouseDblClick(var Message: TLMMouse; const HitInfo: THitInfo); virtual; procedure HandleMouseDown(var Message: TLMMouse; var HitInfo: THitInfo); virtual; procedure HandleMouseUp(Keys: PtrUInt; const HitInfo: THitInfo); virtual; function HasImage(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): Boolean; virtual; function HasPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Pos: TPoint): Boolean; virtual; procedure InitChildren(Node: PVirtualNode); virtual; procedure InitNode(Node: PVirtualNode); virtual; procedure InternalAddFromStream(Stream: TStream; Version: Integer; Node: PVirtualNode); virtual; function InternalAddToSelection(Node: PVirtualNode; ForceInsert: Boolean): Boolean; overload; function InternalAddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean): Boolean; overload; procedure InternalCacheNode(Node: PVirtualNode); virtual; procedure InternalClearSelection; virtual; procedure InternalConnectNode(Node, Destination: PVirtualNode; Target: TBaseVirtualTree; Mode: TVTNodeAttachMode); virtual; function InternalData(Node: PVirtualNode): Pointer; procedure InternalDisconnectNode(Node: PVirtualNode; KeepFocus: Boolean; Reindex: Boolean = True); virtual; function InternalGetNodeAt(X, Y: Integer): PVirtualNode; overload; function InternalGetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; overload; procedure InternalRemoveFromSelection(Node: PVirtualNode); virtual; procedure InvalidateCache; procedure Loaded; override; procedure MainColumnChanged; virtual; procedure MarkCutCopyNodes; virtual; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; {$ifdef EnableNCFunctions} procedure OriginalWMNCPaint(DC: HDC); virtual; {$endif} procedure Paint; override; procedure PaintCheckImage(const PaintInfo: TVTPaintInfo); virtual; procedure PaintImage(var PaintInfo: TVTPaintInfo; ImageInfoIndex: TVTImageInfoIndex; DoOverlay: Boolean); virtual; procedure PaintNodeButton(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const R: TRect; ButtonX, ButtonY: Integer; BidiMode: TBiDiMode); virtual; procedure PaintTreeLines(const PaintInfo: TVTPaintInfo; VAlignment, IndentSize: Integer; LineImage: TLineImage); virtual; procedure PaintSelectionRectangle(Target: TCanvas; WindowOrgX: Integer; const SelectionRect: TRect; TargetRect: TRect); virtual; procedure PrepareCell(var PaintInfo: TVTPaintInfo; WindowOrgX, MaxWidth: Integer); virtual; function ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; virtual; procedure ReadNode(Stream: TStream; Version: Integer; Node: PVirtualNode); virtual; procedure RedirectFontChangeEvent(Canvas: TCanvas); virtual; procedure RemoveFromSelection(Node: PVirtualNode); virtual; function RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; virtual; procedure ResetRangeAnchor; virtual; procedure RestoreFontChangeEvent(Canvas: TCanvas); virtual; procedure SelectNodes(StartNode, EndNode: PVirtualNode; AddOnly: Boolean); virtual; procedure SetFocusedNodeAndColumn(Node: PVirtualNode; Column: TColumnIndex); virtual; procedure SkipNode(Stream: TStream); virtual; procedure StartWheelPanning(const Position: TPoint); virtual; procedure StopWheelPanning; virtual; procedure StructureChange(Node: PVirtualNode; Reason: TChangeReason); virtual; function SuggestDropEffect(Source: TObject; Shift: TShiftState; const Pt: TPoint; AllowedEffects: LongWord): LongWord; virtual; procedure ToggleSelection(StartNode, EndNode: PVirtualNode); virtual; procedure UnselectNodes(StartNode, EndNode: PVirtualNode); virtual; //lcl procedure UpdateCheckImageList; procedure UpdateColumnCheckState(Col: TVirtualTreeColumn); procedure UpdateDesigner; virtual; procedure UpdateEditBounds; virtual; procedure UpdateHeaderRect; virtual; procedure UpdateWindowAndDragImage(const Tree: TBaseVirtualTree; TreeRect: TRect; UpdateNCArea, ReshowDragImage: Boolean); virtual; procedure ValidateCache; virtual; procedure ValidateNodeDataSize(var Size: Integer); virtual; procedure WndProc(var Message: TLMessage); override; procedure WriteChunks(Stream: TStream; Node: PVirtualNode); virtual; procedure WriteNode(Stream: TStream; Node: PVirtualNode); virtual; property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property AnimationDuration: Cardinal read FAnimationDuration write SetAnimationDuration default 200; property AutoExpandDelay: Cardinal read FAutoExpandDelay write FAutoExpandDelay default 1000; property AutoScrollDelay: Cardinal read FAutoScrollDelay write FAutoScrollDelay default 1000; property AutoScrollInterval: TAutoScrollInterval read FAutoScrollInterval write FAutoScrollInterval default 1; property Background: TPicture read FBackground write SetBackground; property BackgroundOffsetX: Integer index 0 read FBackgroundOffsetX write SetBackgroundOffset default 0; property BackgroundOffsetY: Integer index 1 read FBackgroundOffsetY write SetBackgroundOffset default 0; //property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle; property BottomSpace: Cardinal read FBottomSpace write SetBottomSpace default 0; property ButtonFillMode: TVTButtonFillMode read FButtonFillMode write SetButtonFillMode default fmTreeColor; property ButtonStyle: TVTButtonStyle read FButtonStyle write SetButtonStyle default bsRectangle; property ChangeDelay: Cardinal read FChangeDelay write FChangeDelay default 0; property CheckImageKind: TCheckImageKind read FCheckImageKind write SetCheckImageKind default ckSystemDefault; property ClipboardFormats: TClipboardFormats read FClipboardFormats write SetClipboardFormats; property Colors: TVTColors read FColors write SetColors; property CustomCheckImages: TBitmap read FCustomCheckImages write SetCustomCheckImages; property DefaultNodeHeight: Cardinal read FDefaultNodeHeight write SetDefaultNodeHeight default 18; property DefaultPasteMode: TVTNodeAttachMode read FDefaultPasteMode write FDefaultPasteMode default amAddChildLast; property DragHeight: Integer read FDragHeight write FDragHeight default 350; property DragImageKind: TVTDragImageKind read FDragImageKind write FDragImageKind default diComplete; property DragOperations: TDragOperations read FDragOperations write FDragOperations default [doCopy, doMove]; property DragSelection: TNodeArray read FDragSelection; property DragType: TVTDragType read FDragType write FDragType default dtOLE; property DragWidth: Integer read FDragWidth write FDragWidth default 200; property DrawSelectionMode: TVTDrawSelectionMode read FDrawSelectionMode write FDrawSelectionMode default smDottedRectangle; property EditColumn: TColumnIndex read FEditColumn write FEditColumn; property EditDelay: Cardinal read FEditDelay write FEditDelay default 1000; property Header: TVTHeader read FHeader write SetHeader; property HeaderRect: TRect read FHeaderRect; property HintMode: TVTHintMode read FHintMode write FHintMode default hmDefault; property HotCursor: TCursor read FHotCursor write FHotCursor default crDefault; property Images: TCustomImageList read FImages write SetImages; property IncrementalSearch: TVTIncrementalSearch read FIncrementalSearch write SetSearchOption default isNone; property IncrementalSearchDirection: TVTSearchDirection read FSearchDirection write FSearchDirection default sdForward; property IncrementalSearchStart: TVTSearchStart read FSearchStart write FSearchStart default ssFocusedNode; property IncrementalSearchTimeout: Cardinal read FSearchTimeout write FSearchTimeout default 1000; property Indent: Cardinal read FIndent write SetIndent default 18; property LastClickPos: TPoint read FLastClickPos write FLastClickPos; property LastDropMode: TDropMode read FLastDropMode write FlastDropMode; property LineMode: TVTLineMode read FLineMode write SetLineMode default lmNormal; property LineStyle: TVTLineStyle read FLineStyle write SetLineStyle default lsDotted; property Margin: Integer read FMargin write SetMargin default 4; property NodeAlignment: TVTNodeAlignment read FNodeAlignment write SetNodeAlignment default naProportional; property NodeDataSize: Integer read FNodeDataSize write SetNodeDataSize default -1; property OperationCanceled: Boolean read GetOperationCanceled; property RootNodeCount: Cardinal read GetRootNodeCount write SetRootNodeCount default 0; property ScrollBarOptions: TScrollBarOptions read FScrollBarOptions write SetScrollBarOptions; property SelectionBlendFactor: Byte read FSelectionBlendFactor write FSelectionBlendFactor default 128; property SelectionCurveRadius: Cardinal read FSelectionCurveRadius write SetSelectionCurveRadius default 0; property StateImages: TCustomImageList read FStateImages write SetStateImages; property TextMargin: Integer read FTextMargin write SetTextMargin default 4; property TotalInternalDataSize: Cardinal read FTotalInternalDataSize; property TreeOptions: TCustomVirtualTreeOptions read FOptions write SetOptions; property WantTabs: Boolean read FWantTabs write FWantTabs default False; property OnAdvancedHeaderDraw: TVTAdvancedHeaderPaintEvent read FOnAdvancedHeaderDraw write FOnAdvancedHeaderDraw; property OnAfterAutoFitColumn: TVTAfterAutoFitColumnEvent read FOnAfterAutoFitColumn write FOnAfterAutoFitColumn; property OnAfterAutoFitColumns: TVTAfterAutoFitColumnsEvent read FOnAfterAutoFitColumns write FOnAfterAutoFitColumns; property OnAfterCellPaint: TVTAfterCellPaintEvent read FOnAfterCellPaint write FOnAfterCellPaint; property OnAfterColumnExport : TVTColumnExportEvent read FOnAfterColumnExport write FOnAfterColumnExport; property OnAfterColumnWidthTracking: TVTAfterColumnWidthTrackingEvent read FOnAfterColumnWidthTracking write FOnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth: TVTAfterGetMaxColumnWidthEvent read FOnAfterGetMaxColumnWidth write FOnAfterGetMaxColumnWidth; property OnAfterHeaderExport: TVTTreeExportEvent read FOnBeforeHeaderExport write FOnBeforeHeaderExport; property OnAfterHeaderHeightTracking: TVTAfterHeaderHeightTrackingEvent read FOnAfterHeaderHeightTracking write FOnAfterHeaderHeightTracking; property OnAfterItemErase: TVTAfterItemEraseEvent read FOnAfterItemErase write FOnAfterItemErase; property OnAfterItemPaint: TVTAfterItemPaintEvent read FOnAfterItemPaint write FOnAfterItemPaint; property OnAfterNodeExport: TVTNodeExportEvent read FOnAfterNodeExport write FOnAfterNodeExport; property OnAfterPaint: TVTPaintEvent read FOnAfterPaint write FOnAfterPaint; property OnAfterTreeExport: TVTTreeExportEvent read FOnAfterTreeExport write FOnAfterTreeExport; property OnBeforeAutoFitColumn: TVTBeforeAutoFitColumnEvent read FOnBeforeAutoFitColumn write FOnBeforeAutoFitColumn; property OnBeforeAutoFitColumns: TVTBeforeAutoFitColumnsEvent read FOnBeforeAutoFitColumns write FOnBeforeAutoFitColumns; property OnBeforeCellPaint: TVTBeforeCellPaintEvent read FOnBeforeCellPaint write FOnBeforeCellPaint; property OnBeforeColumnExport: TVTColumnExportEvent read FOnBeforeColumnExport write FOnBeforeColumnExport; property OnBeforeColumnWidthTracking: TVTBeforeColumnWidthTrackingEvent read FOnBeforeColumnWidthTracking write FOnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth: TVTBeforeGetMaxColumnWidthEvent read FOnBeforeGetMaxColumnWidth write FOnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport: TVTTreeExportEvent read FOnBeforeHeaderExport write FOnBeforeHeaderExport; property OnBeforeHeaderHeightTracking: TVTBeforeHeaderHeightTrackingEvent read FOnBeforeHeaderHeightTracking write FOnBeforeHeaderHeightTracking; property OnBeforeItemErase: TVTBeforeItemEraseEvent read FOnBeforeItemErase write FOnBeforeItemErase; property OnBeforeItemPaint: TVTBeforeItemPaintEvent read FOnBeforeItemPaint write FOnBeforeItemPaint; property OnBeforeNodeExport: TVTNodeExportEvent read FOnBeforeNodeExport write FOnBeforeNodeExport; property OnBeforePaint: TVTPaintEvent read FOnBeforePaint write FOnBeforePaint; property OnBeforeTreeExport: TVTTreeExportEvent read FOnBeforeTreeExport write FOnBeforeTreeExport; property OnCanSplitterResizeColumn: TVTCanSplitterResizeColumnEvent read FOnCanSplitterResizeColumn write FOnCanSplitterResizeColumn; property OnChange: TVTChangeEvent read FOnChange write FOnChange; property OnChecked: TVTChangeEvent read FOnChecked write FOnChecked; property OnChecking: TVTCheckChangingEvent read FOnChecking write FOnChecking; property OnCollapsed: TVTChangeEvent read FOnCollapsed write FOnCollapsed; property OnCollapsing: TVTChangingEvent read FOnCollapsing write FOnCollapsing; property OnColumnClick: TVTColumnClickEvent read FOnColumnClick write FOnColumnClick; property OnColumnDblClick: TVTColumnDblClickEvent read FOnColumnDblClick write FOnColumnDblClick; property OnColumnExport : TVTColumnExportEvent read FOnColumnExport write FOnColumnExport; property OnColumnResize: TVTHeaderNotifyEvent read FOnColumnResize write FOnColumnResize; property OnColumnWidthDblClickResize: TVTColumnWidthDblClickResizeEvent read FOnColumnWidthDblClickResize write FOnColumnWidthDblClickResize; property OnColumnWidthTracking: TVTColumnWidthTrackingEvent read FOnColumnWidthTracking write FOnColumnWidthTracking; property OnCompareNodes: TVTCompareEvent read FOnCompareNodes write FOnCompareNodes; property OnCreateDataObject: TVTCreateDataObjectEvent read FOnCreateDataObject write FOnCreateDataObject; property OnCreateDragManager: TVTCreateDragManagerEvent read FOnCreateDragManager write FOnCreateDragManager; property OnCreateEditor: TVTCreateEditorEvent read FOnCreateEditor write FOnCreateEditor; property OnDragAllowed: TVTDragAllowedEvent read FOnDragAllowed write FOnDragAllowed; property OnDragOver: TVTDragOverEvent read FOnDragOver write FOnDragOver; property OnDragDrop: TVTDragDropEvent read FOnDragDrop write FOnDragDrop; property OnEditCancelled: TVTEditCancelEvent read FOnEditCancelled write FOnEditCancelled; property OnEditing: TVTEditChangingEvent read FOnEditing write FOnEditing; property OnEdited: TVTEditChangeEvent read FOnEdited write FOnEdited; property OnExpanded: TVTChangeEvent read FOnExpanded write FOnExpanded; property OnExpanding: TVTChangingEvent read FOnExpanding write FOnExpanding; property OnFocusChanged: TVTFocusChangeEvent read FOnFocusChanged write FOnFocusChanged; property OnFocusChanging: TVTFocusChangingEvent read FOnFocusChanging write FOnFocusChanging; property OnFreeNode: TVTFreeNodeEvent read FOnFreeNode write FOnFreeNode; property OnGetCellIsEmpty: TVTGetCellIsEmptyEvent read FOnGetCellIsEmpty write FOnGetCellIsEmpty; property OnGetCursor: TVTGetCursorEvent read FOnGetCursor write FOnGetCursor; property OnGetHeaderCursor: TVTGetHeaderCursorEvent read FOnGetHeaderCursor write FOnGetHeaderCursor; property OnGetHelpContext: TVTHelpContextEvent read FOnGetHelpContext write FOnGetHelpContext; property OnGetImageIndex: TVTGetImageEvent read FOnGetImage write FOnGetImage; property OnGetImageIndexEx: TVTGetImageExEvent read FOnGetImageEx write FOnGetImageEx; property OnGetImageText: TVTGetImageTextEvent read FOnGetImageText write FOnGetImageText; property OnGetLineStyle: TVTGetLineStyleEvent read FOnGetLineStyle write FOnGetLineStyle; property OnGetNodeDataSize: TVTGetNodeDataSizeEvent read FOnGetNodeDataSize write FOnGetNodeDataSize; property OnGetPopupMenu: TVTPopupEvent read FOnGetPopupMenu write FOnGetPopupMenu; property OnGetUserClipboardFormats: TVTGetUserClipboardFormatsEvent read FOnGetUserClipboardFormats write FOnGetUserClipboardFormats; property OnHeaderCheckBoxClick: TVTHeaderClickEvent read FOnHeaderCheckBoxClick write FOnHeaderCheckBoxClick; property OnHeaderClick: TVTHeaderClickEvent read FOnHeaderClick write FOnHeaderClick; property OnHeaderDblClick: TVTHeaderClickEvent read FOnHeaderDblClick write FOnHeaderDblClick; property OnHeaderDragged: TVTHeaderDraggedEvent read FOnHeaderDragged write FOnHeaderDragged; property OnHeaderDraggedOut: TVTHeaderDraggedOutEvent read FOnHeaderDraggedOut write FOnHeaderDraggedOut; property OnHeaderDragging: TVTHeaderDraggingEvent read FOnHeaderDragging write FOnHeaderDragging; property OnHeaderDraw: TVTHeaderPaintEvent read FOnHeaderDraw write FOnHeaderDraw; property OnHeaderDrawQueryElements: TVTHeaderPaintQueryElementsEvent read FOnHeaderDrawQueryElements write FOnHeaderDrawQueryElements; property OnHeaderHeightTracking: TVTHeaderHeightTrackingEvent read FOnHeaderHeightTracking write FOnHeaderHeightTracking; property OnHeaderHeightDblClickResize: TVTHeaderHeightDblClickResizeEvent read FOnHeaderHeightDblClickResize write FOnHeaderHeightDblClickResize; property OnHeaderImageClick: TVTHeaderClickEvent read FOnHeaderImageClick write FOnHeaderImageClick; property OnHeaderMouseDown: TVTHeaderMouseEvent read FOnHeaderMouseDown write FOnHeaderMouseDown; property OnHeaderMouseMove: TVTHeaderMouseMoveEvent read FOnHeaderMouseMove write FOnHeaderMouseMove; property OnHeaderMouseUp: TVTHeaderMouseEvent read FOnHeaderMouseUp write FOnHeaderMouseUp; property OnHotChange: TVTHotNodeChangeEvent read FOnHotChange write FOnHotChange; property OnIncrementalSearch: TVTIncrementalSearchEvent read FOnIncrementalSearch write FOnIncrementalSearch; property OnInitChildren: TVTInitChildrenEvent read FOnInitChildren write FOnInitChildren; property OnInitNode: TVTInitNodeEvent read FOnInitNode write FOnInitNode; property OnKeyAction: TVTKeyActionEvent read FOnKeyAction write FOnKeyAction; property OnLoadNode: TVTSaveNodeEvent read FOnLoadNode write FOnLoadNode; property OnMeasureItem: TVTMeasureItemEvent read FOnMeasureItem write FOnMeasureItem; property OnNodeCopied: TVTNodeCopiedEvent read FOnNodeCopied write FOnNodeCopied; property OnNodeCopying: TVTNodeCopyingEvent read FOnNodeCopying write FOnNodeCopying; property OnNodeExport: TVTNodeExportEvent read FOnNodeExport write FOnNodeExport; property OnNodeHeightTracking: TVTNodeHeightTrackingEvent read FOnNodeHeightTracking write FOnNodeHeightTracking; property OnNodeHeightDblClickResize: TVTNodeHeightDblClickResizeEvent read FOnNodeHeightDblClickResize write FOnNodeHeightDblClickResize; property OnNodeMoved: TVTNodeMovedEvent read FOnNodeMoved write FOnNodeMoved; property OnNodeMoving: TVTNodeMovingEvent read FOnNodeMoving write FOnNodeMoving; property OnPaintBackground: TVTBackgroundPaintEvent read FOnPaintBackground write FOnPaintBackground; property OnRenderOLEData: TVTRenderOLEDataEvent read FOnRenderOLEData write FOnRenderOLEData; property OnResetNode: TVTChangeEvent read FOnResetNode write FOnResetNode; property OnSaveNode: TVTSaveNodeEvent read FOnSaveNode write FOnSaveNode; property OnScroll: TVTScrollEvent read FOnScroll write FOnScroll; property OnShowScrollbar: TVTScrollbarShowEvent read FOnShowScrollbar write FOnShowScrollbar; property OnStateChange: TVTStateChangeEvent read FOnStateChange write FOnStateChange; property OnStructureChange: TVTStructureChangeEvent read FOnStructureChange write FOnStructureChange; property OnUpdating: TVTUpdatingEvent read FOnUpdating write FOnUpdating; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function AbsoluteIndex(Node: PVirtualNode): Cardinal; function AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode; virtual; procedure AddFromStream(Stream: TStream; TargetNode: PVirtualNode); procedure AfterConstruction; override; procedure Assign(Source: TPersistent); override; procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1); procedure BeginSynch; procedure BeginUpdate; virtual; procedure CancelCutOrCopy; function CancelEditNode: Boolean; procedure CancelOperation; function CanEdit(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; procedure Clear; virtual; procedure ClearChecked; procedure ClearSelection; function CopyTo(Source: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; overload; function CopyTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; overload; procedure CopyToClipBoard; virtual; procedure CutToClipBoard; virtual; procedure DefaultHandler(var AMessage); override; procedure DeleteChildren(Node: PVirtualNode; ResetHasChildren: Boolean = False); procedure DeleteNode(Node: PVirtualNode; Reindex: Boolean = True); procedure DeleteSelectedNodes; virtual; function Dragging: Boolean; function EditNode(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; function EndEditNode: Boolean; procedure EndSynch; procedure EndUpdate; virtual; function ExecuteAction(Action: TBasicAction): Boolean; override; procedure FinishCutOrCopy; procedure FlushClipboard; procedure FullCollapse(Node: PVirtualNode = nil); virtual; procedure FullExpand(Node: PVirtualNode = nil); virtual; {$ifndef fpc} function GetControlsAlignment: TAlignment; override; {$endif} function GetDisplayRect(Node: PVirtualNode; Column: TColumnIndex; TextOnly: Boolean; Unclipped: Boolean = False; ApplyCellContentMargin: Boolean = False): TRect; function GetFirst(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstChecked(State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstChild(Node: PVirtualNode): PVirtualNode; function GetFirstCutCopy(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstInitialized(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstLeaf: PVirtualNode; function GetFirstLevel(NodeLevel: Cardinal): PVirtualNode; function GetFirstNoInit(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstSelected(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetFirstVisibleChild(Node: PVirtualNode): PVirtualNode; function GetFirstVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; function GetFirstVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; procedure GetHitTestInfoAt(X, Y: Integer; Relative: Boolean; var HitInfo: THitInfo); virtual; function GetLast(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastInitialized(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastChild(Node: PVirtualNode): PVirtualNode; function GetLastChildNoInit(Node: PVirtualNode): PVirtualNode; function GetLastVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetLastVisibleChild(Node: PVirtualNode): PVirtualNode; function GetLastVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; function GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer; function GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextLeaf(Node: PVirtualNode): PVirtualNode; function GetNextLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; function GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSibling(Node: PVirtualNode): PVirtualNode; function GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; function GetNextVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNodeAt(X, Y: Integer): PVirtualNode; overload; function GetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; overload; function GetNodeData(Node: PVirtualNode): Pointer; function GetNodeLevel(Node: PVirtualNode): Cardinal; function GetPrevious(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousLeaf(Node: PVirtualNode): PVirtualNode; function GetPreviousLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; function GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSibling(Node: PVirtualNode): PVirtualNode; function GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; function GetPreviousVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetSortedCutCopySet(Resolve: Boolean): TNodeArray; function GetSortedSelection(Resolve: Boolean): TNodeArray; procedure GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); virtual; function GetTreeRect: TRect; function GetVisibleParent(Node: PVirtualNode): PVirtualNode; function HasAsParent(Node, PotentialParent: PVirtualNode): Boolean; function InsertNode(Node: PVirtualNode; Mode: TVTNodeAttachMode; UserData: Pointer = nil): PVirtualNode; procedure InvalidateChildren(Node: PVirtualNode; Recursive: Boolean); procedure InvalidateColumn(Column: TColumnIndex); function InvalidateNode(Node: PVirtualNode): TRect; virtual; procedure InvalidateToBottom(Node: PVirtualNode); procedure InvertSelection(VisibleOnly: Boolean); function IsEditing: Boolean; function IsMouseSelecting: Boolean; function IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer; Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode; procedure LoadFromFile(const FileName: TFileName); virtual; procedure LoadFromStream(Stream: TStream); virtual; procedure MeasureItemHeight(const Canvas: TCanvas; Node: PVirtualNode); procedure MoveTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload; procedure MoveTo(Node: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload; procedure PaintTree(TargetCanvas: TCanvas; const Window: TRect; Target: TPoint; PaintOptions: TVTInternalPaintOptions; PixelFormat: TPixelFormat = pfDevice); function PasteFromClipboard: Boolean; virtual; procedure PrepareDragImage(HotSpot: TPoint; const DataObject: IDataObject); {$ifdef EnablePrint} procedure Print(Printer: TPrinter; PrintHeader: Boolean); {$endif} function ProcessDrop(DataObject: IDataObject; TargetNode: PVirtualNode; var Effect: LongWord; Mode: TVTNodeAttachMode): Boolean; function ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; procedure RepaintNode(Node: PVirtualNode); procedure ReinitChildren(Node: PVirtualNode; Recursive: Boolean); virtual; procedure ReinitNode(Node: PVirtualNode; Recursive: Boolean); virtual; procedure ResetNode(Node: PVirtualNode); virtual; procedure SaveToFile(const FileName: TFileName); procedure SaveToStream(Stream: TStream; Node: PVirtualNode = nil); virtual; function ScrollIntoView(Node: PVirtualNode; Center: Boolean; Horizontally: Boolean = False): Boolean; overload; function ScrollIntoView(Column: TColumnIndex; Center: Boolean): Boolean; overload; procedure SelectAll(VisibleOnly: Boolean); procedure Sort(Node: PVirtualNode; Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); virtual; procedure SortTree(Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); virtual; procedure ToggleNode(Node: PVirtualNode); function UpdateAction(Action: TBasicAction): Boolean; override; procedure UpdateHorizontalScrollBar(DoRepaint: Boolean); procedure UpdateScrollBars(DoRepaint: Boolean); virtual; procedure UpdateVerticalScrollBar(DoRepaint: Boolean); //lcl: reenable in case TControl implementation change to match Delphi // function UseRightToLeftReading: Boolean; procedure ValidateChildren(Node: PVirtualNode; Recursive: Boolean); procedure ValidateNode(Node: PVirtualNode; Recursive: Boolean); {$ifdef EnableAccessible} property Accessible: IAccessible read FAccessible write FAccessible; property AccessibleItem: IAccessible read FAccessibleItem write FAccessibleItem; property AccessibleName: string read FAccessibleName write FAccessibleName; {$endif} property BottomNode: PVirtualNode read GetBottomNode write SetBottomNode; property CheckedCount: Integer read GetCheckedCount; property CheckImages: TBitmap read FCheckImages; property CheckState[Node: PVirtualNode]: TCheckState read GetCheckState write SetCheckState; property CheckType[Node: PVirtualNode]: TCheckType read GetCheckType write SetCheckType; property ChildCount[Node: PVirtualNode]: Cardinal read GetChildCount write SetChildCount; property ChildrenInitialized[Node: PVirtualNode]: Boolean read GetChildrenInitialized; property CutCopyCount: Integer read GetCutCopyCount; property DragImage: TVTDragImage read FDragImage; property VTVDragManager: IVTDragManager read GetDragManager; property DropTargetNode: PVirtualNode read FDropTargetNode; property EditLink: IVTEditLink read FEditLink; property Expanded[Node: PVirtualNode]: Boolean read GetExpanded write SetExpanded; property FocusedColumn: TColumnIndex read FFocusedColumn write SetFocusedColumn default InvalidColumn; property FocusedNode: PVirtualNode read FFocusedNode write SetFocusedNode; property Font; property FullyVisible[Node: PVirtualNode]: Boolean read GetFullyVisible write SetFullyVisible; property HasChildren[Node: PVirtualNode]: Boolean read GetHasChildren write SetHasChildren; property HotNode: PVirtualNode read FCurrentHotNode; property IsDisabled[Node: PVirtualNode]: Boolean read GetDisabled write SetDisabled; property IsVisible[Node: PVirtualNode]: Boolean read GetVisible write SetVisible; property MultiLine[Node: PVirtualNode]: Boolean read GetMultiline write SetMultiline; property NodeHeight[Node: PVirtualNode]: Cardinal read GetNodeHeight write SetNodeHeight; property NodeParent[Node: PVirtualNode]: PVirtualNode read GetNodeParent write SetNodeParent; property OffsetX: Integer read FOffsetX write SetOffsetX; property OffsetXY: TPoint read GetOffsetXY write SetOffsetXY; property OffsetY: Integer read FOffsetY write SetOffsetY; property RootNode: PVirtualNode read FRoot; property SearchBuffer: String read FSearchBuffer; property Selected[Node: PVirtualNode]: Boolean read GetSelected write SetSelected; property SelectionLocked: Boolean read FSelectionLocked write FSelectionLocked; property TotalCount: Cardinal read GetTotalCount; property TreeStates: TVirtualTreeStates read FStates write FStates; property SelectedCount: Integer read FSelectionCount; property TopNode: PVirtualNode read GetTopNode write SetTopNode; property VerticalAlignment[Node: PVirtualNode]: Byte read GetVerticalAlignment write SetVerticalAlignment; property VisibleCount: Cardinal read FVisibleCount; property VisiblePath[Node: PVirtualNode]: Boolean read GetVisiblePath write SetVisiblePath; property UpdateCount: Cardinal read FUpdateCount; end; // --------- TCustomVirtualStringTree // Options regarding strings (useful only for the string tree and descendants): TVTStringOption = ( toSaveCaptions, // If set then the caption is automatically saved with the tree node, regardless of what is // saved in the user data. toShowStaticText, // Show static text in a caption which can be differently formatted than the caption // but cannot be edited. toAutoAcceptEditChange // Automatically accept changes during edit if the user finishes editing other then // VK_RETURN or ESC. If not set then changes are cancelled. ); TVTStringOptions = set of TVTStringOption; const DefaultStringOptions = [toSaveCaptions, toAutoAcceptEditChange]; type TCustomStringTreeOptions = class(TCustomVirtualTreeOptions) private FStringOptions: TVTStringOptions; procedure SetStringOptions(const Value: TVTStringOptions); protected property StringOptions: TVTStringOptions read FStringOptions write SetStringOptions default DefaultStringOptions; public constructor Create(AOwner: TBaseVirtualTree); override; procedure AssignTo(Dest: TPersistent); override; end; TStringTreeOptions = class(TCustomStringTreeOptions) published property AnimationOptions; property AutoOptions; property ExportMode; property MiscOptions; property PaintOptions; property SelectionOptions; property StringOptions; end; TCustomVirtualStringTree = class; // Edit support classes. TStringEditLink = class; { TVTEdit } TVTEdit = class(TCustomEdit) private procedure CMAutoAdjust(var Message: TLMessage); message CM_AUTOADJUST; procedure CMExit(var Message: TLMessage); message CM_EXIT; procedure CNCommand(var Message: TLMCommand); message CN_COMMAND; procedure DoRelease(Data: PtrInt); procedure WMChar(var Message: TLMChar); message LM_CHAR; procedure WMDestroy(var Message: TLMDestroy); message LM_DESTROY; procedure WMGetDlgCode(var Message: TLMNoParams); message LM_GETDLGCODE; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; protected FRefLink: IVTEditLink; FLink: TStringEditLink; procedure AutoAdjustSize; virtual; procedure CreateParams(var Params: TCreateParams); override; public constructor Create(Link: TStringEditLink); reintroduce; procedure Release; property AutoSelect; property AutoSize; property BorderStyle; property CharCase; //property HideSelection; property MaxLength; //property OEMConvert; property PasswordChar; end; TStringEditLink = class(TInterfacedObject, IVTEditLink) private FEdit: TVTEdit; // A normal custom edit control. procedure SetEdit(const Value: TVTEdit); protected FTree: TCustomVirtualStringTree; // A back reference to the tree calling. FNode: PVirtualNode; // The node to be edited. FColumn: TColumnIndex; // The column of the node. FAlignment: TAlignment; FTextBounds: TRect; // Smallest rectangle around the text. FStopping: Boolean; // Set to True when the edit link requests stopping the edit action. public constructor Create; virtual; destructor Destroy; override; function BeginEdit: Boolean; virtual; stdcall; function CancelEdit: Boolean; virtual; stdcall; property Edit: TVTEdit read FEdit write SetEdit; function EndEdit: Boolean; virtual; stdcall; function GetBounds: TRect; virtual; stdcall; function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; stdcall; procedure ProcessMessage(var Message: TLMessage); virtual; stdcall; procedure SetBounds(R: TRect); virtual; stdcall; end; // Describes the type of text to return in the text and draw info retrival events. TVSTTextType = ( ttNormal, // normal label of the node, this is also the text which can be edited ttStatic // static (non-editable) text after the normal text ); // Describes the source to use when converting a string tree into a string for clipboard etc. TVSTTextSourceType = ( tstAll, // All nodes are rendered. Initialization is done on the fly. tstInitialized, // Only initialized nodes are rendered. tstSelected, // Only selected nodes are rendered. tstCutCopySet, // Only nodes currently marked as being in the cut/copy clipboard set are rendered. tstVisible // Only visible nodes are rendered. ); TVTPaintText = procedure(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType) of object; TVSTGetTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: String) of object; TVSTGetHintEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: String) of object; // New text can only be set for variable caption. TVSTNewTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; const NewText: String) of object; TVSTShortenStringEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; TextSpace: Integer; var Result: String; var Done: Boolean) of object; TVTMeasureTextWidthEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String; var Width: Integer) of object; TVTDrawTextEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String; const CellRect: TRect; var DefaultDraw: Boolean) of object; // Helper class to speed up rendering text formats for clipboard and drag'n drop transfers. { TBufferedUTF8String } TBufferedUTF8String = class private FStart, FPosition, FEnd: PChar; function GetAsAnsiString: AnsiString; function GetAsUTF16String: UnicodeString; function GetAsUTF8String: String; public destructor Destroy; override; procedure Add(const S: String); procedure AddNewLine; property AsAnsiString: AnsiString read GetAsAnsiString; property AsUTF8String: String read GetAsUTF8String; property AsUTF16String: UnicodeString read GetAsUTF16String; end; { TCustomVirtualStringTree } TCustomVirtualStringTree = class(TBaseVirtualTree) private FDefaultText: String; // text to show if there's no OnGetText event handler (e.g. at design time) FTextHeight: Integer; // true size of the font FEllipsisWidth: Integer; // width of '...' for the current font FInternalDataOffset: Cardinal; // offset to the internal data of the string tree FOnPaintText: TVTPaintText; // triggered before either normal or fixed text is painted to allow // even finer customization (kind of sub cell painting) FOnGetText: TVSTGetTextEvent; // used to retrieve the string to be displayed for a specific node FOnGetHint: TVSTGetHintEvent; // used to retrieve the hint to be displayed for a specific node FOnNewText: TVSTNewTextEvent; // used to notify the application about an edited node caption FOnShortenString: TVSTShortenStringEvent; // used to allow the application a customized string shortage FOnMeasureTextWidth: TVTMeasureTextWidthEvent; // used to adjust the width of the cells FOnDrawText: TVTDrawTextEvent; // used to custom draw the node text procedure AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String); function GetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): String; procedure GetRenderStartValues(Source: TVSTTextSourceType; out Node: PVirtualNode; out NextNodeProc: TGetNextNodeProc); function GetOptions: TCustomStringTreeOptions; function GetText(Node: PVirtualNode; Column: TColumnIndex): String; procedure InitializeTextProperties(var PaintInfo: TVTPaintInfo); procedure PaintNormalText(var PaintInfo: TVTPaintInfo; TextOutFlags: Integer; Text: String); procedure PaintStaticText(const PaintInfo: TVTPaintInfo; TextOutFlags: Integer; const Text: String); procedure SetDefaultText(const Value: String); procedure SetOptions(const Value: TCustomStringTreeOptions); procedure SetText(Node: PVirtualNode; Column: TColumnIndex; const Value: String); procedure CMFontChanged(var Msg: TLMessage); message CM_FONTCHANGED; protected procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); override; function CanExportNode(Node: PVirtualNode): Boolean; function CalculateTextWidth(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; virtual; function ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; override; function DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; override; function DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; override; function DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; override; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; override; procedure DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: String); virtual; function DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; override; procedure DoNewText(Node: PVirtualNode; Column: TColumnIndex; const Text: String); virtual; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; procedure DoPaintText(Node: PVirtualNode; const Canvas: TCanvas; Column: TColumnIndex; TextType: TVSTTextType); virtual; function DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; virtual; procedure DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); virtual; function DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; virtual; function GetOptionsClass: TTreeOptionsClass; override; function InternalData(Node: PVirtualNode): Pointer; procedure MainColumnChanged; override; function ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; override; function RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; override; procedure WriteChunks(Stream: TStream; Node: PVirtualNode); override; property DefaultText: String read FDefaultText write SetDefaultText; property EllipsisWidth: Integer read FEllipsisWidth; property TreeOptions: TCustomStringTreeOptions read GetOptions write SetOptions; property OnGetHint: TVSTGetHintEvent read FOnGetHint write FOnGetHint; property OnGetText: TVSTGetTextEvent read FOnGetText write FOnGetText; property OnNewText: TVSTNewTextEvent read FOnNewText write FOnNewText; property OnPaintText: TVTPaintText read FOnPaintText write FOnPaintText; property OnShortenString: TVSTShortenStringEvent read FOnShortenString write FOnShortenString; property OnMeasureTextWidth: TVTMeasureTextWidthEvent read FOnMeasureTextWidth write FOnMeasureTextWidth; property OnDrawText: TVTDrawTextEvent read FOnDrawText write FOnDrawText; public constructor Create(AOwner: TComponent); override; function ComputeNodeHeight(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; S: String = ''): Integer; virtual; function ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; procedure ContentToCustom(Source: TVSTTextSourceType); function ContentToHTML(Source: TVSTTextSourceType; const Caption: String = ''): String; function ContentToRTF(Source: TVSTTextSourceType): AnsiString; function ContentToAnsi(Source: TVSTTextSourceType; const Separator: String): AnsiString; function ContentToText(Source: TVSTTextSourceType; const Separator: String): AnsiString; inline; function ContentToUnicode(Source: TVSTTextSourceType; const Separator: String): UnicodeString; inline; function ContentToUTF16(Source: TVSTTextSourceType; const Separator: String): UnicodeString; function ContentToUTF8(Source: TVSTTextSourceType; const Separator: String): String; {$ifndef LCLWin32} procedure CopyToClipBoard; override; procedure CutToClipBoard; override; {$endif} procedure GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); override; function InvalidateNode(Node: PVirtualNode): TRect; override; function Path(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; Delimiter: Char): String; procedure ReinitNode(Node: PVirtualNode; Recursive: Boolean); override; property ImageText[Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex]: String read GetImageText; property Text[Node: PVirtualNode; Column: TColumnIndex]: String read GetText write SetText; end; TVirtualStringTree = class(TCustomVirtualStringTree) private function GetOptions: TStringTreeOptions; procedure SetOptions(const Value: TStringTreeOptions); protected function GetOptionsClass: TTreeOptionsClass; override; public property Canvas; published {$ifdef EnableAccessible} property AccessibleName; {$endif} property Action; property Align; property Alignment; property Anchors; property AnimationDuration; property AutoExpandDelay; property AutoScrollDelay; property AutoScrollInterval; property Background; property BackgroundOffsetX; property BackgroundOffsetY; property BiDiMode; //property BevelEdges; //property BevelInner; //property BevelOuter; //property BevelKind; //property BevelWidth; property BorderSpacing; property BorderStyle default bsSingle; property BottomSpace; property ButtonFillMode; property ButtonStyle; property BorderWidth; property ChangeDelay; property CheckImageKind; property ClipboardFormats; property Color; property Colors; property Constraints; //todo: see a way to set CustomCheckImages at design time //property CustomCheckImages; property DefaultNodeHeight; property DefaultPasteMode; property DefaultText; property DragCursor; property DragHeight; property DragKind; property DragImageKind; property DragMode; property DragOperations; property DragType; property DragWidth; property DrawSelectionMode; property EditDelay; property Enabled; property Font; property Header; property HintMode; property HotCursor; property Images; property IncrementalSearch; property IncrementalSearchDirection; property IncrementalSearchStart; property IncrementalSearchTimeout; property Indent; property LineMode; property LineStyle; property Margin; property NodeAlignment; property NodeDataSize; property OperationCanceled; property ParentBiDiMode; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property RootNodeCount; property ScrollBarOptions; property SelectionBlendFactor; property SelectionCurveRadius; property ShowHint; property StateImages; property TabOrder; property TabStop default True; property TextMargin; property TreeOptions: TStringTreeOptions read GetOptions write SetOptions; property Visible; property WantTabs; property OnAdvancedHeaderDraw; property OnAfterAutoFitColumn; property OnAfterAutoFitColumns; property OnAfterCellPaint; property OnAfterColumnExport; property OnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth; property OnAfterHeaderExport; property OnAfterHeaderHeightTracking; property OnAfterItemErase; property OnAfterItemPaint; property OnAfterNodeExport; property OnAfterPaint; property OnAfterTreeExport; property OnBeforeAutoFitColumn; property OnBeforeAutoFitColumns; property OnBeforeCellPaint; property OnBeforeColumnExport; property OnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport; property OnBeforeHeaderHeightTracking; property OnBeforeItemErase; property OnBeforeItemPaint; property OnBeforeNodeExport; property OnBeforePaint; property OnBeforeTreeExport; property OnCanSplitterResizeColumn; property OnChange; property OnChecked; property OnChecking; property OnClick; property OnCollapsed; property OnCollapsing; property OnColumnClick; property OnColumnDblClick; property OnColumnExport; property OnColumnResize; property OnColumnWidthDblClickResize; property OnColumnWidthTracking; property OnCompareNodes; property OnContextPopup; property OnCreateDataObject; property OnCreateDragManager; property OnCreateEditor; property OnDblClick; property OnDragAllowed; property OnDragOver; property OnDragDrop; property OnDrawText; property OnEditCancelled; property OnEdited; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnExpanded; property OnExpanding; property OnFocusChanged; property OnFocusChanging; property OnFreeNode; property OnGetCellIsEmpty; property OnGetCursor; property OnGetHeaderCursor; property OnGetText; property OnPaintText; property OnGetHelpContext; property OnGetImageIndex; property OnGetImageIndexEx; property OnGetImageText; property OnGetHint; property OnGetLineStyle; property OnGetNodeDataSize; property OnGetPopupMenu; property OnGetUserClipboardFormats; property OnHeaderCheckBoxClick; property OnHeaderClick; property OnHeaderDblClick; property OnHeaderDragged; property OnHeaderDraggedOut; property OnHeaderDragging; property OnHeaderDraw; property OnHeaderDrawQueryElements; property OnHeaderHeightDblClickResize; property OnHeaderHeightTracking; property OnHeaderImageClick; property OnHeaderMouseDown; property OnHeaderMouseMove; property OnHeaderMouseUp; property OnHotChange; property OnIncrementalSearch; property OnInitChildren; property OnInitNode; property OnKeyAction; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnLoadNode; property OnMeasureItem; property OnMeasureTextWidth; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnNewText; property OnNodeCopied; property OnNodeCopying; property OnNodeExport; property OnNodeHeightDblClickResize; property OnNodeHeightTracking; property OnNodeMoved; property OnNodeMoving; property OnPaintBackground; property OnRenderOLEData; property OnResetNode; property OnResize; property OnSaveNode; property OnScroll; property OnShortenString; property OnShowScrollbar; property OnStartDock; property OnStartDrag; property OnStateChange; property OnStructureChange; property OnUpdating; property OnUTF8KeyPress; end; TVTDrawHintEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex) of object; TVTDrawNodeEvent = procedure(Sender: TBaseVirtualTree; const PaintInfo: TVTPaintInfo) of object; TVTGetCellContentMarginEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType; var CellContentMargin: TPoint) of object; TVTGetNodeWidthEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; var NodeWidth: Integer) of object; TVTGetHintSizeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var R: TRect) of object; // Tree descendant to let an application draw its stuff itself. TCustomVirtualDrawTree = class(TBaseVirtualTree) private FOnDrawNode: TVTDrawNodeEvent; FOnGetCellContentMargin: TVTGetCellContentMarginEvent; FOnGetNodeWidth: TVTGetNodeWidthEvent; FOnGetHintSize: TVTGetHintSizeEvent; FOnDrawHint: TVTDrawHintEvent; protected procedure DoDrawHint(Canvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex); function DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; override; procedure DoGetHintSize(Node: PVirtualNode; Column: TColumnIndex; var R: TRect); virtual; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; override; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; property OnDrawHint: TVTDrawHintEvent read FOnDrawHint write FOnDrawHint; property OnDrawNode: TVTDrawNodeEvent read FOnDrawNode write FOnDrawNode; property OnGetCellContentMargin: TVTGetCellContentMarginEvent read FOnGetCellContentMargin write FOnGetCellContentMargin; property OnGetHintSize: TVTGetHintSizeEvent read FOnGetHintSize write FOnGetHintSize; property OnGetNodeWidth: TVTGetNodeWidthEvent read FOnGetNodeWidth write FOnGetNodeWidth; end; TVirtualDrawTree = class(TCustomVirtualDrawTree) private function GetOptions: TVirtualTreeOptions; procedure SetOptions(const Value: TVirtualTreeOptions); protected function GetOptionsClass: TTreeOptionsClass; override; public property Canvas; published property Action; property Align; property Alignment; property Anchors; property AnimationDuration; property AutoExpandDelay; property AutoScrollDelay; property AutoScrollInterval; property Background; property BackgroundOffsetX; property BackgroundOffsetY; property BiDiMode; //property BevelEdges; //property BevelInner; //property BevelOuter; //property BevelKind; // property BevelWidth; property BorderSpacing; property BorderStyle default bsSingle; property BottomSpace; property ButtonFillMode; property ButtonStyle; property BorderWidth; property ChangeDelay; property CheckImageKind; property ClipboardFormats; property Color; property Colors; property Constraints; property CustomCheckImages; property DefaultNodeHeight; property DefaultPasteMode; property DragCursor; property DragHeight; property DragKind; property DragImageKind; property DragMode; property DragOperations; property DragType; property DragWidth; property DrawSelectionMode; property EditDelay; property Enabled; property Font; property Header; property HintMode; property HotCursor; property Images; property IncrementalSearch; property IncrementalSearchDirection; property IncrementalSearchStart; property IncrementalSearchTimeout; property Indent; property LineMode; property LineStyle; property Margin; property NodeAlignment; property NodeDataSize; property OperationCanceled; property ParentBiDiMode; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property RootNodeCount; property ScrollBarOptions; property SelectionBlendFactor; property SelectionCurveRadius; property ShowHint; property StateImages; property TabOrder; property TabStop default True; property TextMargin; property TreeOptions: TVirtualTreeOptions read GetOptions write SetOptions; property Visible; property WantTabs; property OnAdvancedHeaderDraw; property OnAfterAutoFitColumn; property OnAfterAutoFitColumns; property OnAfterCellPaint; property OnAfterColumnExport; property OnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth; property OnAfterHeaderExport; property OnAfterHeaderHeightTracking; property OnAfterItemErase; property OnAfterItemPaint; property OnAfterNodeExport; property OnAfterPaint; property OnAfterTreeExport; property OnBeforeAutoFitColumn; property OnBeforeAutoFitColumns; property OnBeforeCellPaint; property OnBeforeColumnExport; property OnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport; property OnBeforeHeaderHeightTracking; property OnBeforeItemErase; property OnBeforeItemPaint; property OnBeforeNodeExport; property OnBeforePaint; property OnBeforeTreeExport; property OnCanSplitterResizeColumn; property OnChange; property OnChecked; property OnChecking; property OnClick; property OnCollapsed; property OnCollapsing; property OnColumnClick; property OnColumnDblClick; property OnColumnExport; property OnColumnResize; property OnColumnWidthDblClickResize; property OnColumnWidthTracking; property OnCompareNodes; property OnContextPopup; property OnCreateDataObject; property OnCreateDragManager; property OnCreateEditor; property OnDblClick; property OnDragAllowed; property OnDragOver; property OnDragDrop; property OnDrawHint; property OnDrawNode; property OnEdited; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnExpanded; property OnExpanding; property OnFocusChanged; property OnFocusChanging; property OnFreeNode; property OnGetCellIsEmpty; property OnGetCursor; property OnGetHeaderCursor; property OnGetHelpContext; property OnGetHintSize; property OnGetImageIndex; property OnGetImageIndexEx; property OnGetLineStyle; property OnGetNodeDataSize; property OnGetNodeWidth; property OnGetPopupMenu; property OnGetUserClipboardFormats; property OnHeaderCheckBoxClick; property OnHeaderClick; property OnHeaderDblClick; property OnHeaderDragged; property OnHeaderDraggedOut; property OnHeaderDragging; property OnHeaderDraw; property OnHeaderDrawQueryElements; property OnHeaderHeightTracking; property OnHeaderHeightDblClickResize; property OnHeaderImageClick; property OnHeaderMouseDown; property OnHeaderMouseMove; property OnHeaderMouseUp; property OnHotChange; property OnIncrementalSearch; property OnInitChildren; property OnInitNode; property OnKeyAction; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnLoadNode; property OnMeasureItem; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnNodeCopied; property OnNodeCopying; property OnNodeExport; property OnNodeHeightTracking; property OnNodeHeightDblClickResize; property OnNodeMoved; property OnNodeMoving; property OnPaintBackground; property OnRenderOLEData; property OnResetNode; property OnResize; property OnSaveNode; property OnScroll; property OnShowScrollbar; property OnStartDock; property OnStartDrag; property OnStateChange; property OnStructureChange; property OnUpdating; property OnUTF8KeyPress; end; // OLE Clipboard and drag'n drop helper procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; const List: TStrings); overload; procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray); overload; function GetVTClipboardFormatDescription(AFormat: Word): string; procedure RegisterVTClipboardFormat(AFormat: Word; TreeClass: TVirtualTreeClass; Priority: Cardinal); overload; function RegisterVTClipboardFormat(Description: string; TreeClass: TVirtualTreeClass; Priority: Cardinal; tymed: Integer = TYMED_HGLOBAL; ptd: PDVTargetDevice = nil; dwAspect: Integer = DVASPECT_CONTENT; lindex: Integer = -1): Word; overload; // utility routines {$ifdef EnablePrint} procedure PrtStretchDrawDIB(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap); {$endif} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; function TreeFromNode(Node: PVirtualNode): TBaseVirtualTree; procedure GetStringDrawRect(DC: HDC; const S: String; var Bounds: TRect; DrawFormat: Cardinal); function WrapString(DC: HDC; const S: String; const Bounds: TRect; RTL: Boolean; DrawFormat: Cardinal): String; //---------------------------------------------------------------------------------------------------------------------- implementation uses StrUtils, Math, {$ifdef EnableOLE} //AxCtrls, // TOLEStream {$endif} {$ifdef UseFlatScrollbars} FlatSB, // wrapper for systems without flat SB support {$endif UseFlatScrollbars} {$ifdef Windows} MMSystem, // for animation timer (does not include further resources) {$else} FakeMMSystem, {$endif} TypInfo, // for migration stuff ActnList, StdActns, // for standard action support GraphType, LCLProc {$ifdef EnableAccessible} ,VTAccessibilityFactory {$endif}; // accessibility helper class resourcestring // Localizable strings. SEditLinkIsNil = 'Edit link must not be nil.'; SWrongMoveError = 'Target node cannot be a child node of the node to be moved.'; SWrongStreamFormat = 'Unable to load tree structure, the format is wrong.'; SWrongStreamVersion = 'Unable to load tree structure, the version is unknown.'; SStreamTooSmall = 'Unable to load tree structure, not enough data available.'; SCorruptStream1 = 'Stream data corrupt. A node''s anchor chunk is missing.'; SCorruptStream2 = 'Stream data corrupt. Unexpected data after node''s end position.'; SClipboardFailed = 'Clipboard operation failed.'; SCannotSetUserData = 'Cannot set initial user data because there is not enough user data space allocated.'; const ClipboardStates = [tsCopyPending, tsCutPending]; DefaultScrollUpdateFlags = [suoRepaintHeader, suoRepaintScrollbars, suoScrollClientArea, suoUpdateNCArea]; MinimumTimerInterval = 1; // minimum resolution for timeGetTime TreeNodeSize = (SizeOf(TVirtualNode) + 3) and not 3; // used for node allocation and access to internal data // Lookup to quickly convert a specific check state into its pressed counterpart and vice versa. PressedState: array[TCheckState] of TCheckState = ( csUncheckedPressed, csUncheckedPressed, csCheckedPressed, csCheckedPressed, csMixedPressed, csMixedPressed ); UnpressedState: array[TCheckState] of TCheckState = ( csUncheckedNormal, csUncheckedNormal, csCheckedNormal, csCheckedNormal, csMixedNormal, csMixedNormal ); MouseButtonDown = [tsLeftButtonDown, tsMiddleButtonDown, tsRightButtonDown]; // Do not modify the copyright in any way! Usage of this unit is prohibited without the copyright notice // in the compiled binary file. Copyright: string = 'Virtual Treeview ? 1999, 2010 Mike Lischke'; var //Workaround to LCL bug 8553 {$ifndef LCLWin32} pf32bit: TPixelFormat = pfDevice; {$endif} StandardOLEFormat: TFormatEtc = ( // Format must later be set. cfFormat: 0; // No specific target device to render on. ptd: nil; // Normal content to render. dwAspect: DVASPECT_CONTENT; // No specific page of multipage data (we don't use multipage data by default). lindex: -1; // Acceptable storage formats are IStream and global memory. The first is preferred. tymed: TYMED_ISTREAM or TYMED_HGLOBAL; ); type // streaming support TMagicID = array[0..5] of Char; TChunkHeader = record ChunkType, ChunkSize: Integer; // contains the size of the chunk excluding the header end; // base information about a node TBaseChunkBody = packed record ChildCount, NodeHeight: Cardinal; States: TVirtualNodeStates; Align: Byte; CheckState: TCheckState; CheckType: TCheckType; Reserved: Cardinal; end; TBaseChunk = packed record Header: TChunkHeader; Body: TBaseChunkBody; end; // Toggle animation modes. TToggleAnimationMode = ( tamScrollUp, tamScrollDown, tamNoScroll ); // Internally used data for animations. TToggleAnimationData = record Window: HWND; // copy of the tree's window handle DC: HDC; // the DC of the window to erase uncovered parts Brush: HBRUSH; // the brush to be used to erase uncovered parts R1, R2: TRect; // animation rectangles Mode1, Mode2: TToggleAnimationMode; // animation modes ScaleFactor: Double; // the factor between the missing step size when doing two animations MissedSteps: Double; end; const CheckImagesStrings: array [TCheckImageKind] of String = ('VT_CHECK_LIGHT', 'VT_CHECK_DARK', 'VT_TICK_LIGHT', 'VT_TICK_DARK', 'VT_FLAT', 'VT_XP', '',//ckCustom, // Only the button images are used for ckSystem * // The check buttons are draw at fly as requested 'VT_FLAT',//ckSystemFlat 'VT_CHECK_DARK' //ckSystemDefault ); MagicID: TMagicID = (#$45, 'V', 'T', Char(VTTreeStreamVersion), ' ', #$46); // chunk IDs NodeChunk = 1; BaseChunk = 2; // chunk containing node state, check state, child node count etc. // this chunk is immediately followed by all child nodes CaptionChunk = 3; // used by the string tree to store a node's caption UserChunk = 4; // used for data supplied by the application {$ifdef UseFlatScrollbars} ScrollBarProp: array[TScrollBarStyle] of Integer = ( FSB_REGULAR_MODE, FSB_FLAT_MODE, FSB_ENCARTA_MODE ); {$endif} RTLFlag: array[Boolean] of Integer = (0, ETO_RTLREADING); AlignmentToDrawFlag: array[TAlignment] of Cardinal = (DT_LEFT, DT_RIGHT, DT_CENTER); WideCR = WideChar(#13); WideLF = WideChar(#10); type // internal worker thread TWorkerThread = class(TThread) private FCurrentTree: TBaseVirtualTree; FWaiterList: TThreadList; FRefCount: Cardinal; protected procedure CancelValidation(Tree: TBaseVirtualTree); procedure ChangeTreeStates(EnterStates, LeaveStates: TChangeStates); procedure Execute; override; public constructor Create(CreateSuspended: Boolean); destructor Destroy; override; procedure AddTree(Tree: TBaseVirtualTree); procedure RemoveTree(Tree: TBaseVirtualTree); property CurrentTree: TBaseVirtualTree read FCurrentTree; end; var WorkerThread: TWorkerThread; WorkEvent: TEvent; UtilityImages: TBitmap; // some small additional images (e.g for header dragging) Initialized: Boolean; // True if global structures have been initialized. NeedToUnitialize: Boolean; // True if the OLE subsystem could be initialized successfully. //----------------- TClipboardFormats ---------------------------------------------------------------------------------- type PClipboardFormatListEntry = ^TClipboardFormatListEntry; TClipboardFormatListEntry = record Description: string; // The string used to register the format with Windows. TreeClass: TVirtualTreeClass; // The tree class which supports rendering this format. Priority: Cardinal; // Number which determines the order of formats used in IDataObject. FormatEtc: TFormatEtc; // The definition of the format in the IDataObject. end; TClipboardFormatList = class private FList: TFpList; procedure Sort; public constructor Create; destructor Destroy; override; procedure Add(FormatString: string; AClass: TVirtualTreeClass; Priority: Cardinal; AFormatEtc: TFormatEtc); procedure Clear; procedure EnumerateFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray; const AllowedFormats: TClipboardFormats = nil); overload; procedure EnumerateFormats(TreeClass: TVirtualTreeClass; const Formats: TStrings); overload; function FindFormat(FormatString: string): PClipboardFormatListEntry; overload; function FindFormat(FormatString: string; var Fmt: Word): TVirtualTreeClass; overload; function FindFormat(Fmt: Word; out Description: string): TVirtualTreeClass; overload; end; var InternalClipboardFormats: TClipboardFormatList; //---------------------------------------------------------------------------------------------------------------------- constructor TClipboardFormatList.Create; begin FList := TFpList.Create; end; //---------------------------------------------------------------------------------------------------------------------- destructor TClipboardFormatList.Destroy; begin Clear; FList.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Sort; // Sorts all entry for priority (increasing priority value). //--------------- local function -------------------------------------------- procedure QuickSort(L, R: Integer); var I, J: Integer; P, T: PClipboardFormatListEntry; begin repeat I := L; J := R; P := FList[(L + R) shr 1]; repeat while PClipboardFormatListEntry(FList[I]).Priority < P.Priority do Inc(I); while PClipboardFormatListEntry(Flist[J]).Priority > P.Priority do Dec(J); if I <= J then begin T := Flist[I]; FList[I] := FList[J]; FList[J] := T; Inc(I); Dec(J); end; until I > J; if L < J then QuickSort(L, J); L := I; until I >= R; end; //--------------- end local function ---------------------------------------- begin if FList.Count > 1 then QuickSort(0, FList.Count - 1); end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Add(FormatString: string; AClass: TVirtualTreeClass; Priority: Cardinal; AFormatEtc: TFormatEtc); // Adds the given data to the internal list. The priority value is used to sort formats for importance. Larger priority // values mean less priority. var Entry: PClipboardFormatListEntry; begin New(Entry); Entry.Description := FormatString; Entry.TreeClass := AClass; Entry.Priority := Priority; Entry.FormatEtc := AFormatEtc; FList.Add(Entry); Sort; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Clear; var I: Integer; begin for I := 0 to FList.Count - 1 do Dispose(PClipboardFormatListEntry(FList[I])); FList.Clear; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.EnumerateFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray; const AllowedFormats: TClipboardFormats = nil); // Returns a list of format records for the given class. If assigned the AllowedFormats is used to limit the // enumerated formats to those described in the list. var I, Count: Integer; Entry: PClipboardFormatListEntry; begin SetLength(Formats, FList.Count); Count := 0; for I := 0 to FList.Count - 1 do begin Entry := FList[I]; // Does the tree class support this clipboard format? if TreeClass.InheritsFrom(Entry.TreeClass) then begin // Is this format allowed to be included? if (AllowedFormats = nil) or (AllowedFormats.IndexOf(Entry.Description) > -1) then begin // The list could change before we use the FormatEtc so it is best not to pass a pointer to the true FormatEtc // structure. Instead make a copy and send that. Formats[Count] := Entry.FormatEtc; Inc(Count); end; end; end; SetLength(Formats, Count); end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.EnumerateFormats(TreeClass: TVirtualTreeClass; const Formats: TStrings); // Returns a list of format descriptions for the given class. var I: Integer; Entry: PClipboardFormatListEntry; begin for I := 0 to FList.Count - 1 do begin Entry := FList[I]; if TreeClass.InheritsFrom(Entry.TreeClass) then Formats.Add(Entry.Description); end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(FormatString: string): PClipboardFormatListEntry; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if CompareText(Entry.Description, FormatString) = 0 then begin Result := Entry; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(FormatString: string; var Fmt: Word): TVirtualTreeClass; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if CompareText(Entry.Description, FormatString) = 0 then begin Result := Entry.TreeClass; Fmt := Entry.FormatEtc.cfFormat; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(Fmt: Word; out Description: string): TVirtualTreeClass; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if Entry.FormatEtc.cfFormat = Fmt then begin Result := Entry.TreeClass; Description := Entry.Description; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- type TClipboardFormatEntry = record ID: Word; Description: string; end; var ClipboardDescriptions: array [1..CF_MAX - 1] of TClipboardFormatEntry = ( (ID: CF_TEXT; Description: 'Plain text'), // Do not localize (ID: CF_BITMAP; Description: 'Windows bitmap'), // Do not localize (ID: CF_METAFILEPICT; Description: 'Windows metafile'), // Do not localize (ID: CF_SYLK; Description: 'Symbolic link'), // Do not localize (ID: CF_DIF; Description: 'Data interchange format'), // Do not localize (ID: CF_TIFF; Description: 'Tiff image'), // Do not localize (ID: CF_OEMTEXT; Description: 'OEM text'), // Do not localize (ID: CF_DIB; Description: 'DIB image'), // Do not localize (ID: CF_PALETTE; Description: 'Palette data'), // Do not localize (ID: CF_PENDATA; Description: 'Pen data'), // Do not localize (ID: CF_RIFF; Description: 'Riff audio data'), // Do not localize (ID: CF_WAVE; Description: 'Wav audio data'), // Do not localize (ID: CF_UNICODETEXT; Description: 'Unicode text'), // Do not localize (ID: CF_ENHMETAFILE; Description: 'Enhanced metafile image'), // Do not localize (ID: CF_HDROP; Description: 'File name(s)'), // Do not localize (ID: CF_LOCALE; Description: 'Locale descriptor') // Do not localize ); //---------------------------------------------------------------------------------------------------------------------- procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; const List: TStrings); begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; InternalClipboardFormats.EnumerateFormats(TreeClass, List); end; //---------------------------------------------------------------------------------------------------------------------- procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray); begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; InternalClipboardFormats.EnumerateFormats(TreeClass, Formats); end; //---------------------------------------------------------------------------------------------------------------------- function GetVTClipboardFormatDescription(AFormat: Word): string; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; if InternalClipboardFormats.FindFormat(AFormat, Result) = nil then Result := ''; end; //---------------------------------------------------------------------------------------------------------------------- procedure RegisterVTClipboardFormat(AFormat: Word; TreeClass: TVirtualTreeClass; Priority: Cardinal); // Registers the given clipboard format for the given TreeClass. var I: Integer; FormatEtc: TFormatEtc; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; // Assumes a HGlobal format. FormatEtc.cfFormat := AFormat; FormatEtc.ptd := nil; FormatEtc.dwAspect := DVASPECT_CONTENT; FormatEtc.lindex := -1; FormatEtc.tymed := TYMED_HGLOBAL; // Determine description string of the given format. For predefined formats we need the lookup table because they // don't have a description string. For registered formats the description string is the string which was used // to register them. if AFormat < CF_MAX then begin for I := 1 to High(ClipboardDescriptions) do if ClipboardDescriptions[I].ID = AFormat then begin InternalClipboardFormats.Add(ClipboardDescriptions[I].Description, TreeClass, Priority, FormatEtc); Break; end; end else begin InternalClipboardFormats.Add(ClipboardFormatToMimeType(AFormat), TreeClass, Priority, FormatEtc); end; end; //---------------------------------------------------------------------------------------------------------------------- function RegisterVTClipboardFormat(Description: string; TreeClass: TVirtualTreeClass; Priority: Cardinal; tymed: Integer = TYMED_HGLOBAL; ptd: PDVTargetDevice = nil; dwAspect: Integer = DVASPECT_CONTENT; lindex: Integer = -1): Word; // Alternative method to register a certain clipboard format for a given tree class. Registration with the // clipboard is done here too and the assigned ID returned by the function. // tymed may contain or'ed TYMED constants which allows to register several storage formats for one clipboard format. var FormatEtc: TFormatEtc; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; Result := ClipboardRegisterFormat(Description); FormatEtc.cfFormat := Result; FormatEtc.ptd := ptd; FormatEtc.dwAspect := dwAspect; FormatEtc.lindex := lindex; FormatEtc.tymed := tymed; InternalClipboardFormats.Add(Description, TreeClass, Priority, FormatEtc); end; //----------------- utility functions ---------------------------------------------------------------------------------- procedure ShowError(Msg: String; HelpContext: Integer); begin raise EVirtualTreeError.CreateHelp(Msg, HelpContext); end; //---------------------------------------------------------------------------------------------------------------------- function TreeFromNode(Node: PVirtualNode): TBaseVirtualTree; // Returns the tree the node currently belongs to or nil if the node is not attached to a tree. begin Assert(Assigned(Node), 'Node must not be nil.'); // The root node is marked by having its NextSibling (and PrevSibling) pointing to itself. while Assigned(Node) and (Node.NextSibling <> Node) do Node := Node.Parent; if Assigned(Node) then Result := TBaseVirtualTree(Node.Parent) else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function OrderRect(const R: TRect): TRect; // Converts the incoming rectangle so that left and top are always less than or equal to right and bottom. begin if R.Left < R.Right then begin Result.Left := R.Left; Result.Right := R.Right; end else begin Result.Left := R.Right; Result.Right := R.Left; end; if R.Top < R.Bottom then begin Result.Top := R.Top; Result.Bottom := R.Bottom; end else begin Result.Top := R.Bottom; Result.Bottom := R.Top; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure QuickSort(const TheArray: TNodeArray; L, R: Integer); var I, J: Integer; P, T: Pointer; begin repeat I := L; J := R; P := TheArray[(L + R) shr 1]; repeat while TheArray[I] < P do Inc(I); while TheArray[J] > P do Dec(J); if I <= J then begin T := TheArray[I]; TheArray[I] := TheArray[J]; TheArray[J] := T; Inc(I); Dec(J); end; until I > J; if L < J then QuickSort(TheArray, L, J); L := I; until I >= R; end; //---------------------------------------------------------------------------------------------------------------------- //todo: Unify the procedure or change to widgetset specific // Currently the UTF-8 version is broken. // the unicode version is used when all winapi is available {$ifndef INCOMPLETE_WINAPI} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; // Adjusts the given string S so that it fits into the given width. EllipsisWidth gives the width of // the three points to be added to the shorted string. If this value is 0 then it will be determined implicitely. // For higher speed (and multiple entries to be shorted) specify this value explicitely. // Note: It is assumed that the string really needs shortage. Check this in advance. var Size: TSize; Len: Integer; L, H, N, W: Integer; WideStr: UnicodeString; begin WideStr := UTF8Decode(S); Len := Length(WideStr); if (Len = 0) or (Width <= 0) then Result := '' else begin // Determine width of triple point using the current DC settings (if not already done). if EllipsisWidth = 0 then begin GetTextExtentPoint32W(DC, '...', 3, Size); EllipsisWidth := Size.cx; end; if Width <= EllipsisWidth then Result := '' else begin // Do a binary search for the optimal string length which fits into the given width. L := 0; H := Len - 1; while L < H do begin N := (L + H + 1) shr 1; GetTextExtentPoint32W(DC, PWideChar(WideStr), N, Size); W := Size.cx + EllipsisWidth; if W <= Width then L := N else H := N - 1; end; Result := UTF8Encode(Copy(WideStr, 1, L) + '...'); end; end; end; {$else} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; // Adjusts the given string S so that it fits into the given width. EllipsisWidth gives the width of // the three points to be added to the shorted string. If this value is 0 then it will be determined implicitely. // For higher speed (and multiple entries to be shorted) specify this value explicitely. // Note: It is assumed that the string really needs shortage. Check this in advance. var Size: TSize; Len: Integer; L, H, N, W: Integer; begin Len := Length(S); if (Len = 0) or (Width <= 0) then Result := '' else begin // Determine width of triple point using the current DC settings (if not already done). if EllipsisWidth = 0 then begin GetTextExtentPoint32(DC, '...', 3, Size); EllipsisWidth := Size.cx; end; if Width <= EllipsisWidth then Result := '' else begin // Do a binary search for the optimal string length which fits into the given width. L := 0; H := Len - 1; while L < H do begin N := (L + H + 1) shr 1; GetTextExtentPoint32(DC, PAnsiChar(S), N, Size); W := Size.cx + EllipsisWidth; if W <= Width then L := N else H := N - 1; end; Result := Copy(S, 1, L) + '...'; end; end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function WrapString(DC: HDC; const S: String; const Bounds: TRect; RTL: Boolean; DrawFormat: Cardinal): String; // Wrap the given string S so that it fits into a space of given width. // RTL determines if right-to-left reading is active. var Width, Len, WordCounter, WordsInLine, I, W: Integer; Buffer, Line: String; Words: Array of String; R: TRect; begin Result := ''; Width := Bounds.Right - Bounds.Left; R := Rect(0, 0, 0, 0); // Leading and trailing are ignored. Buffer := Trim(S); Len := Length(Buffer); if Len < 1 then Exit; // Count the words in the string. WordCounter := 1; for I := 1 to Len do if Buffer[I] = ' ' then Inc(WordCounter); SetLength(Words, WordCounter); if RTL then begin // At first we split the string into words with the last word being the // first element in Words. W := 0; for I := 1 to Len do if Buffer[I] = ' ' then Inc(W) else Words[W] := Words[W] + Buffer[I]; // Compose Result. while WordCounter > 0 do begin WordsInLine := 0; Line := ''; while WordCounter > 0 do begin GetStringDrawRect(DC, Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter - 1], R, DrawFormat); if R.Right > Width then begin // If at least one word fits into this line then continue with the next line. if WordsInLine > 0 then Break; Buffer := Words[WordCounter - 1]; if Len > 1 then begin for Len := Length(Buffer) - 1 downto 2 do begin GetStringDrawRect(DC, RightStr(Buffer, Len), R, DrawFormat); if R.Right <= Width then Break; end; end else Len := Length(Buffer); Line := Line + RightStr(Buffer, Max(Len, 1)); Words[WordCounter - 1] := LeftStr(Buffer, Length(Buffer) - Max(Len, 1)); if Words[WordCounter - 1] = '' then Dec(WordCounter); Break; end else begin Dec(WordCounter); Line := Words[WordCounter] + IfThen(WordsInLine > 0, ' ', '') + Line; Inc(WordsInLine); end; end; Result := Result + Line + LineEnding; end; end else begin // At first we split the string into words with the last word being the // first element in Words. W := WordCounter - 1; for I := 1 to Len do if Buffer[I] = ' ' then Dec(W) else Words[W] := Words[W] + Buffer[I]; // Compose Result. while WordCounter > 0 do begin WordsInLine := 0; Line := ''; while WordCounter > 0 do begin GetStringDrawRect(DC, Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter - 1], R, DrawFormat); if R.Right > Width then begin // If at least one word fits into this line then continue with the next line. if WordsInLine > 0 then Break; Buffer := Words[WordCounter - 1]; if Len > 1 then begin for Len := Length(Buffer) - 1 downto 2 do begin GetStringDrawRect(DC, LeftStr(Buffer, Len), R, DrawFormat); if R.Right <= Width then Break; end; end else Len := Length(Buffer); Line := Line + LeftStr(Buffer, Max(Len, 1)); Words[WordCounter - 1] := RightStr(Buffer, Length(Buffer) - Max(Len, 1)); if Words[WordCounter - 1] = '' then Dec(WordCounter); Break; end else begin Dec(WordCounter); Line := Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter]; Inc(WordsInLine); end; end; Result := Result + Line + LineEnding; end; end; Len := Length(Result) - Length(LineEnding); if CompareByte(Result[Len + 1], String(LineEnding)[1], Length(LineEnding)) = 0 then SetLength(Result, Len); end; //---------------------------------------------------------------------------------------------------------------------- // Calculates bounds of a drawing rectangle for the given string procedure GetStringDrawRect(DC: HDC; const S: String; var Bounds: TRect; DrawFormat: Cardinal); begin Bounds.Right := Bounds.Left + 1; Bounds.Bottom := Bounds.Top + 1; DrawText(DC, PChar(S), Length(S), Bounds, DrawFormat or DT_CALCRECT); end; //---------------------------------------------------------------------------------------------------------------------- procedure FillDragRectangles(DragWidth, DragHeight, DeltaX, DeltaY: Integer; out RClip, RScroll, RSamp1, RSamp2, RDraw1, RDraw2: TRect); // Fills the given rectangles with values which can be used while dragging around an image // (used in DragMove of the drag manager and DragTo of the header columns). begin // ScrollDC limits RClip := Rect(0, 0, DragWidth, DragHeight); if DeltaX > 0 then begin // move to the left if DeltaY = 0 then begin // move only to the left // background movement RScroll := Rect(0, 0, DragWidth - DeltaX, DragHeight); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RDraw1 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end else if DeltaY < 0 then begin // move to bottom left RScroll := Rect(0, -DeltaY, DragWidth - DeltaX, DragHeight); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RSamp2 := Rect(DeltaX, DragHeight + DeltaY, DragWidth - DeltaX, -DeltaY); RDraw1 := Rect(0, 0, DragWidth - DeltaX, -DeltaY); RDraw2 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end else begin // move to upper left RScroll := Rect(0, 0, DragWidth - DeltaX, DragHeight - DeltaY); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RSamp2 := Rect(DeltaX, 0, DragWidth - DeltaX, DeltaY); RDraw1 := Rect(0, DragHeight - DeltaY, DragWidth - DeltaX, DeltaY); RDraw2 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end; end else if DeltaX = 0 then begin // vertical movement only if DeltaY < 0 then begin // move downwards RScroll := Rect(0, -DeltaY, DragWidth, DragHeight); RSamp2 := Rect(0, DragHeight + DeltaY, DragWidth, -DeltaY); RDraw2 := Rect(0, 0, DragWidth, -DeltaY); end else begin // move upwards RScroll := Rect(0, 0, DragWidth, DragHeight - DeltaY); RSamp2 := Rect(0, 0, DragWidth, DeltaY); RDraw2 := Rect(0, DragHeight - DeltaY, DragWidth, DeltaY); end; end else begin // move to the right if DeltaY > 0 then begin // move up right RScroll := Rect(-DeltaX, 0, DragWidth, DragHeight); RSamp1 := Rect(0, 0, DragWidth + DeltaX, DeltaY); RSamp2 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); RDraw2 := Rect(-DeltaX, DragHeight - DeltaY, DragWidth + DeltaX, DeltaY); end else if DeltaY = 0 then begin // to the right only RScroll := Rect(-DeltaX, 0, DragWidth, DragHeight); RSamp1 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); end else begin // move down right RScroll := Rect(-DeltaX, -DeltaY, DragWidth, DragHeight); RSamp1 := Rect(0, DragHeight + DeltaY, DragWidth + DeltaX, -DeltaY); RSamp2 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); RDraw2 := Rect(-DeltaX, 0, DragWidth + DeltaX, -DeltaY); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function GetRGBColor(Value: TColor): DWORD; // Little helper to convert a Delphi color to an image list color. begin Result := ColorToRGB(Value); case Result of clNone: Result := CLR_NONE; clDefault: Result := CLR_DEFAULT; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef CPU64} function HasMMX: Boolean; begin Result := True; end; {$else} function HasMMX: Boolean; // Helper method to determine whether the current processor supports MMX. asm PUSH EBX XOR EAX, EAX // Result := False PUSHFD // determine if the processor supports the CPUID command POP EDX MOV ECX, EDX XOR EDX, $200000 PUSH EDX POPFD PUSHFD POP EDX XOR ECX, EDX JZ @1 // no CPUID support so we can't even get to the feature information PUSH EDX POPFD MOV EAX, 1 DW $A20F // CPUID, EAX contains now version info and EDX feature information MOV EBX, EAX // free EAX to get the result value XOR EAX, EAX // Result := False CMP EBX, $50 JB @1 // if processor family is < 5 then it is not a Pentium class processor TEST EDX, $800000 JZ @1 // if the MMX bit is not set then we don't have MMX INC EAX // Result := True @1: POP EBX end; {$endif} //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrint} procedure PrtStretchDrawDIB(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap); // Stretch draw on to the new canvas. var Header, Bits: Pointer; HeaderSize, BitsSize: Cardinal; begin GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize); GetMem(Header, HeaderSize); GetMem(Bits, BitsSize); try GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^); StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top, DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top, 0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^), DIB_RGB_COLORS, SRCCOPY); finally FreeMem(Header); FreeMem(Bits); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableAccessible} procedure GetAccessibilityFactory; // Accessibility helper function to create a singleton class that will create or return // the IAccessible interface for the tree and the focused node. begin // Check to see if the class has already been created. if VTAccessibleFactory = nil then VTAccessibleFactory := TVTAccessibilityFactory.Create; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure InitializeGlobalStructures; // initialization of stuff global to the unit begin Initialized := True; // For the drag image a fast MMX blend routine is used. We have to make sure MMX is available. MMXAvailable := HasMMX; // There is a bug in Win95 and WinME (and potentially in Win98 too) regarding GetDCEx which causes sometimes // serious trouble within GDI (see method WMNCPaint). //IsWinNT := (Win32Platform and VER_PLATFORM_WIN32_NT) <> 0; IsWinNT := True; {$ifdef EnableOLE} // Initialize OLE subsystem for drag'n drop and clipboard operations. //todo: replace by Suceeded (see in windows unit) NeedToUnitialize := OleInitialize(nil) in [S_FALSE,S_OK]; {$endif} // Register the tree reference clipboard format. Others will be handled in InternalClipboarFormats. CF_VTREFERENCE := ClipboardRegisterFormat(CFSTR_VTREFERENCE); UtilityImages := TBitmap.Create; UtilityImages.Transparent := True; UtilityImages.LoadFromLazarusResource('VT_UTILITIES'); // Specify an useful timer resolution for timeGetTime. timeBeginPeriod(MinimumTimerInterval); // Delphi (at least version 6 and lower) does not provide a standard split cursor. // Hence we have to load our own. Screen.Cursors[crHeaderSplit] := LoadCursorFromLazarusResource('VT_HEADERSPLIT'); Screen.Cursors[crVertSplit] := LoadCursorFromLazarusResource('VT_VERTSPLIT'); // Clipboard format registration. // Native clipboard format. Needs a new identifier and has an average priority to allow other formats to take over. // This format is supposed to use the IStream storage format but unfortunately this does not work when // OLEFlushClipboard is used. Hence it is disabled until somebody finds a solution. CF_VIRTUALTREE := RegisterVTClipboardFormat(CFSTR_VIRTUALTREE, TBaseVirtualTree, 50, TYMED_HGLOBAL {or TYMED_ISTREAM}); // Specialized string tree formats. CF_HTML := RegisterVTClipboardFormat(CFSTR_HTML, TCustomVirtualStringTree, 80); CF_VRTFNOOBJS := RegisterVTClipboardFormat(CFSTR_RTFNOOBJS, TCustomVirtualStringTree, 84); CF_VRTF := RegisterVTClipboardFormat(CFSTR_RTF, TCustomVirtualStringTree, 85); CF_CSV := RegisterVTClipboardFormat(CFSTR_CSV, TCustomVirtualStringTree, 90); // Predefined clipboard formats. Just add them to the internal list. RegisterVTClipboardFormat(CF_TEXT, TCustomVirtualStringTree, 100); RegisterVTClipboardFormat(CF_UNICODETEXT, TCustomVirtualStringTree, 95); end; //---------------------------------------------------------------------------------------------------------------------- procedure FinalizeGlobalStructures; begin timeEndPeriod(MinimumTimerInterval); FreeAndNil(UtilityImages); if NeedToUnitialize then OleUninitialize; end; //----------------- TWorkerThread -------------------------------------------------------------------------------------- procedure AddThreadReference; begin if WorkerThread = nil then begin // Create an event used to trigger our worker thread when something is to do. WorkEvent := TEvent.Create(nil, False, False, ''); //todo: see how to check if a event was succesfully created under linux since handle is allways 0 {$ifdef Windows} if WorkEvent.Handle = TEventHandle(0) then Raise Exception.Create('VirtualTreeView - Error creating TEvent instance'); {$endif} // Create worker thread, initialize it and send it to its wait loop. WorkerThread := TWorkerThread.Create(False); end; Inc(WorkerThread.FRefCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure ReleaseThreadReference(Tree: TBaseVirtualTree); begin if Assigned(WorkerThread) then begin Dec(WorkerThread.FRefCount); // Make sure there is no reference remaining to the releasing tree. Tree.InterruptValidation; if WorkerThread.FRefCount = 0 then begin with WorkerThread do begin Terminate; WorkEvent.SetEvent; //lcl: probably not necessary under fpc. Remove later // The following work around is no longer necessary with Delphi 6 and up. {$ifndef fpc} // There is a problem when the thread is freed in the exit code of a DLL. This can happen when a tree is // destroyed on unload of a DLL (e.g. control panel applet). In this case only the main thread will get // CPU time, other threads will never awake again. The VCL however waits for a thread when freeing it // which will result in a deadlock (the WaitFor call does not return because the thread does not get CPU time). // If a thread is however suspended then the VCL does not wait and all is fine. if IsLibrary then Suspend; {$endif} WorkerThread.Free; end; WorkerThread := nil; WorkEvent.Free; end; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TWorkerThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); FWaiterList := TThreadList.Create; end; //---------------------------------------------------------------------------------------------------------------------- destructor TWorkerThread.Destroy; begin // First let the ancestor stop the thread before freeing our resources. inherited; FWaiterList.Free; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.CancelValidation(Tree: TBaseVirtualTree); var Msg: TMsg; begin // Wait for any references to this tree to be released. // Pump WM_CHANGESTATE messages so the thread doesn't block on SendMessage calls. while FCurrentTree = Tree do begin if Tree.HandleAllocated and PeekMessage(Msg, Tree.Handle, WM_CHANGESTATE, WM_CHANGESTATE, PM_REMOVE) then begin //todo: see if is correct / will work Application.ProcessMessages; //TranslateMessage(Msg); //DispatchMessage(Msg); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.ChangeTreeStates(EnterStates, LeaveStates: TChangeStates); begin if Assigned(FCurrentTree) and (FCurrentTree.HandleAllocated) then SendMessage(FCurrentTree.Handle, WM_CHANGESTATE, Byte(EnterStates), Byte(LeaveStates)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.Execute; // Does some background tasks, like validating tree caches. var EnterStates, LeaveStates: TChangeStates; begin while not Terminated do begin WorkEvent.WaitFor(INFINITE); if not Terminated then begin // Get the next waiting tree. with FWaiterList.LockList do try if Count > 0 then begin FCurrentTree := Items[0]; // Remove this tree from waiter list. Delete(0); // If there is yet another tree to work on then set the work event to keep looping. if Count > 0 then WorkEvent.SetEvent; end else FCurrentTree := nil; finally FWaiterList.UnlockList; end; // Something to do? if Assigned(FCurrentTree) then begin try ChangeTreeStates([csValidating], [csUseCache]); EnterStates := []; if not (tsStopValidation in FCurrentTree.FStates) and FCurrentTree.DoValidateCache then EnterStates := [csUseCache]; finally LeaveStates := [csValidating, csStopValidation]; if csUseCache in EnterStates then Include(LeaveStates, csValidationNeeded); ChangeTreeStates(EnterStates, LeaveStates); FCurrentTree := nil; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.AddTree(Tree: TBaseVirtualTree); begin Assert(Assigned(Tree), 'Tree must not be nil.'); // Remove validation stop flag, just in case it is still set. Tree.DoStateChange([], [tsStopValidation]); with FWaiterList.LockList do try if IndexOf(Tree) = -1 then Add(Tree); finally FWaiterList.UnlockList; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.RemoveTree(Tree: TBaseVirtualTree); begin Assert(Assigned(Tree), 'Tree must not be nil.'); with FWaiterList.LockList do try Remove(Tree); finally FWaiterList.UnlockList; end; CancelValidation(Tree); end; //----------------- TBufferedUTF8String -------------------------------------------------------------------------------- const AllocIncrement = 2 shl 11; // Must be a power of 2. destructor TBufferedUTF8String.Destroy; begin FreeMem(FStart); inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsAnsiString: AnsiString; begin //an implicit conversion is done Result := AsUTF16String; end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsUTF16String: UnicodeString; begin //todo: optimize Result := UTF8Decode(AsUTF8String); end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsUTF8String: String; begin SetString(Result, FStart, FPosition - FStart); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBufferedUTF8String.Add(const S: String); var NewLen, LastOffset, Len: Integer; begin Len := Length(S); // Make room for the new string. if FEnd - FPosition <= Len then begin // Round up NewLen so it is always a multiple of AllocIncrement. NewLen := FEnd - FStart + (Len + AllocIncrement - 1) and not (AllocIncrement - 1); // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. LastOffset := FPosition - FStart; ReallocMem(FStart, NewLen); FPosition := FStart + LastOffset; FEnd := FStart + NewLen; end; Move(PChar(S)^, FPosition^, Len); Inc(FPosition, Len); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBufferedUTF8String.AddNewLine; var NewLen, LastOffset: Integer; begin // Make room for the CR/LF characters. if FEnd - FPosition <= 4 then begin //todo: see in calculation of NewLen is correct for String // Round up NewLen so it is always a multiple of AllocIncrement. NewLen := FEnd - FStart + (2 + AllocIncrement - 1) and not (AllocIncrement - 1); // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. LastOffset := FPosition - FStart; ReallocMem(FStart, NewLen); FPosition := FStart + LastOffset; FEnd := FStart + NewLen; end; FPosition^ := #13; Inc(FPosition); FPosition^ := #10; Inc(FPosition); end; //----------------- TCustomVirtualTreeOptions -------------------------------------------------------------------------- constructor TCustomVirtualTreeOptions.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FPaintOptions := DefaultPaintOptions; FAnimationOptions := DefaultAnimationOptions; FAutoOptions := DefaultAutoOptions; FSelectionOptions := DefaultSelectionOptions; FMiscOptions := DefaultMiscOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetAnimationOptions(const Value: TVTAnimationOptions); begin FAnimationOptions := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetAutoOptions(const Value: TVTAutoOptions); var ChangedOptions: TVTAutoOptions; begin if FAutoOptions <> Value then begin // Exclusive ORing to get all entries wich are in either set but not in both. ChangedOptions := FAutoOptions + Value - (FAutoOptions * Value); FAutoOptions := Value; with FOwner do if (toAutoSpanColumns in ChangedOptions) and not (csLoading in ComponentState) and HandleAllocated then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetMiscOptions(const Value: TVTMiscOptions); var ToBeSet, ToBeCleared: TVTMiscOptions; begin if FMiscOptions <> Value then begin ToBeSet := Value - FMiscOptions; ToBeCleared := FMiscOptions - Value; FMiscOptions := Value; {$ifndef Windows} Exclude(FMiscOptions,toAcceptOLEDrop); Exclude(ToBeCleared,toAcceptOLEDrop); Exclude(ToBeSet,toAcceptOLEDrop); {$endif} with FOwner do if not (csLoading in ComponentState) and HandleAllocated then begin if toCheckSupport in ToBeSet + ToBeCleared then begin CheckImageListNeeded; Invalidate; end; if not (csDesigning in ComponentState) then begin if toFullRepaintOnResize in (TobeSet + ToBeCleared) then //todo_lcl_check RecreateWnd(FOwner); if toAcceptOLEDrop in ToBeSet then RegisterDragDrop(Handle, DragManager as IDropTarget); if toAcceptOLEDrop in ToBeCleared then RevokeDragDrop(Handle); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetPaintOptions(const Value: TVTPaintOptions); var ToBeSet, ToBeCleared: TVTPaintOptions; begin if FPaintOptions <> Value then begin ToBeSet := Value - FPaintOptions; ToBeCleared := FPaintOptions - Value; FPaintOptions := Value; with FOwner do if HandleAllocated then begin {$ifdef ThemeSupport} //todo // if (tsUseThemes in FStates) or (toThemeAware in ToBeSet) then // if (toUseExplorerTheme in ToBeSet) and IsWinVistaOrAbove then // SetWindowTheme(Handle, 'explorer', nil) // else // SetWindowTheme(Handle, '', nil); {$endif ThemeSupport} if not (csLoading in ComponentState) then begin {$ifdef ThemeSupport} if (toThemeAware in ToBeSet + ToBeCleared) or (toUseExplorerTheme in ToBeSet + ToBeCleared) then begin if (toThemeAware in ToBeSet) and ThemeServices.ThemesEnabled then DoStateChange([tsUseThemes]) else if (toThemeAware in ToBeCleared) then DoStateChange([], [tsUseThemes]); PrepareBitmaps(True, False); RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_VALIDATE or RDW_FRAME); end else {$endif ThemeSupport} Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetSelectionOptions(const Value: TVTSelectionOptions); var ToBeSet, ToBeCleared: TVTSelectionOptions; begin if FSelectionOptions <> Value then begin ToBeSet := Value - FSelectionOptions; ToBeCleared := FSelectionOptions - Value; FSelectionOptions := Value; with FOwner do begin if (toMultiSelect in (ToBeCleared + ToBeSet)) or ([toLevelSelectConstraint, toSiblingSelectConstraint] * ToBeSet <> []) then ClearSelection; if (toExtendedFocus in ToBeCleared) and (FFocusedColumn > 0) and HandleAllocated then begin FFocusedColumn := FHeader.MainColumn; Invalidate; end; if not (toExtendedFocus in FSelectionOptions) then FFocusedColumn := FHeader.MainColumn; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.AssignTo(Dest: TPersistent); begin if Dest is TCustomVirtualTreeOptions then begin with TCustomVirtualTreeOptions(Dest) do begin PaintOptions := Self.PaintOptions; AnimationOptions := Self.AnimationOptions; AutoOptions := Self.AutoOptions; SelectionOptions := Self.SelectionOptions; MiscOptions := Self.MiscOptions; end; end else inherited; end; {$i vtvdragmanager.inc} //----------------- TVirtualTreeHintWindow ----------------------------------------------------------------------------- procedure TVirtualTreeHintWindow.WMShowWindow(var Message: TLMShowWindow); // Clear hint data when the window becomes hidden. begin if not Message.Show then begin // Don't touch the last hint rectangle stored in the associated tree to avoid flickering in certain situations. Finalize(FHintData); FillChar(FHintData, SizeOf(FHintData), 0); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeHintWindow.Paint; begin with FHintData do begin if Tree is TCustomVirtualDrawTree and Assigned(Node) then begin // The draw tree has by default no hint text so let it draw the hint itself. // HintBorderWidth is a private constant in hint code and is set to two TCustomVirtualDrawTree(Tree).DoDrawHint(Canvas, Node, Rect(0, 0, Width - 2, Height - 2), Column); end else inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeHintWindow.CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect; var P: TPoint; begin if AData = nil then // Defensive approach, it *can* happen that AData is nil. Maybe when several user defined hint classes are used. Result := Rect(0, 0, 0, 0) else begin FHintData := PVTHintData(AData)^; with FHintData do begin // The draw tree gets its hint size by the application (but only if not a header hint is about to show). // This size has already been determined in CMHintShow. if (Tree is TCustomVirtualDrawTree) and Assigned(Node) then Result := HintRect else begin //todo remove this define as soon as 0.9.30 is released to avoid future problems if Column <= NoColumn then begin BidiMode := Tree.BidiMode; Alignment := Tree.Alignment; end else begin BidiMode := Tree.Header.Columns[Column].BidiMode; Alignment := Tree.Header.Columns[Column].Alignment; end; //select font according to the type of hint if (Node = nil) or (Tree.FHintMode <> hmToolTip) then Canvas.Font := Screen.HintFont else begin Canvas.Font := Tree.Font; //necessary to set customized fonts if Tree is TCustomVirtualStringTree then with TCustomVirtualStringTree(Tree) do DoPaintText(Node, Self.Canvas, Column, ttNormal); //force the default hint font color Canvas.Font.Color := Screen.HintFont.Color; end; //let THintWindow do the job Result := inherited CalcHintRect(MaxWidth, AHint, AData); //fix position taking into account bidimode and control bounds if (Tree.HintMode <> hmTooltip) or ((Result.Right - Result.Left) < Tree.Width) then begin if BiDiMode = bdLeftToRight then begin P := Tree.ClientToScreen(Point(0, 0)); HintInfo^.HintPos.X := Max(P.X, HintInfo^.HintPos.X); end else begin if (Tree.HintMode = hmTooltip) and (Node <> nil) then begin P := Tree.ClientToScreen(Point(Min(Tree.ClientWidth, HintInfo^.CursorRect.Right), 0)); Dec(P.X, Result.Right); HintInfo^.HintPos.X := Max(P.X, HintInfo^.HintPos.X); end else Dec(HintInfo^.HintPos.X, Result.Right - 20); end; end; end; end; end; end; //----------------- TVTDragImage --------------------------------------------------------------------------------------- constructor TVTDragImage.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FTransparency := 128; FPreBlendBias := 0; FPostBlendBias := 0; FFade := False; FRestriction := dmrNone; FColorKey := clNone; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragImage.Destroy; begin EndDrag; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.GetVisible: Boolean; // Returns True if the internal drag image is used (i.e. the system does not natively support drag images) and // the internal image is currently visible on screen. begin Result := FStates * [disHidden, disInDrag, disPrepared, disSystemSupport] = [disInDrag, disPrepared]; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.InternalShowDragImage(ScreenDC: HDC); // Frequently called helper routine to actually do the blend and put it onto the screen. // Only used if the system does not support drag images. var BlendMode: TBlendMode; begin with FAlphaImage do BitBlt(Canvas.Handle, 0, 0, Width, Height, FBackImage.Canvas.Handle, 0, 0, SRCCOPY); if not FFade and (FColorKey = clNone) then BlendMode := bmConstantAlpha else BlendMode := bmMasterAlpha; with FDragImage do AlphaBlend(Canvas.Handle, FAlphaImage.Canvas.Handle, Rect(0, 0, Width, Height), Point(0, 0), BlendMode, FTransparency, FPostBlendBias); with FAlphaImage do BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.MakeAlphaChannel(Source, Target: TBitmap); // Helper method to create a proper alpha channel in Target (which must be in 32 bit pixel format), depending // on the settings for the drag image and the color values in Source. // Only used if the system does not support drag images. type PBGRA = ^TBGRA; TBGRA = packed record case Boolean of False: (Color: Cardinal); True: (BGR: array[0..2] of Byte; Alpha: Byte); end; var Color, ColorKeyRef: COLORREF; UseColorKey: Boolean; SourceRun, TargetRun: PBGRA; X, Y, MaxDimension, HalfWidth, HalfHeight: Integer; T: Extended; SourceBits, TargetBits: Pointer; begin {$ifdef EnableAdvancedGraphics} SourceBits := GetBitmapBitsFromBitmap(Source.Handle); TargetBits := GetBitmapBitsFromBitmap(Target.Handle); if (SourceBits = nil) or (TargetBits = nil) then Exit; UseColorKey := ColorKey <> clNone; ColorKeyRef := ColorToRGB(ColorKey) and $FFFFFF; // Color values are in the form BGR (red on LSB) while bitmap colors are in the form ARGB (blue on LSB) // hence we have to swap red and blue in the color key. with TBGRA(ColorKeyRef) do begin X := BGR[0]; BGR[0] := BGR[2]; BGR[2] := X; end; with Target do begin MaxDimension := Max(Width, Height); HalfWidth := Width div 2; HalfHeight := Height div 2; for Y := 0 to Height - 1 do begin TargetRun := CalculateScanline(TargetBits, Width, Height, Y); SourceRun := CalculateScanline(SourceBits, Source.Width, Source.Height, Y); for X := 0 to Width - 1 do begin Color := SourceRun.Color and $FFFFFF; if UseColorKey and (Color = ColorKeyRef) then TargetRun.Alpha := 0 else begin // If the color is not the given color key (or none is used) then do full calculation of a bell curve. T := exp(-8 * Sqrt(Sqr((X - HalfWidth) / MaxDimension) + Sqr((Y - HalfHeight) / MaxDimension))); TargetRun.Alpha := Round(255 * T); end; Inc(SourceRun); Inc(TargetRun); end; end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.DragTo(const P: TPoint; ForceRepaint: Boolean): Boolean; // Moves the drag image to a new position, which is determined from the passed point P and the previous // mouse position. // ForceRepaint is True if something on the screen changed and the back image must be refreshed. var ScreenDC: HDC; DeltaX, DeltaY: Integer; // optimized drag image move support RSamp1, RSamp2, // newly added parts from screen which will be overwritten RDraw1, RDraw2, // parts to be restored to screen RScroll, RClip: TRect; // ScrollDC of the existent background begin // Determine distances to move the drag image. Take care for restrictions. case FRestriction of dmrHorizontalOnly: begin DeltaX := FLastPosition.X - P.X; DeltaY := 0; end; dmrVerticalOnly: begin DeltaX := 0; DeltaY := FLastPosition.Y - P.Y; end; else // dmrNone DeltaX := FLastPosition.X - P.X; DeltaY := FLastPosition.Y - P.Y; end; Result := (DeltaX <> 0) or (DeltaY <> 0) or ForceRepaint; if Result then begin if Visible then begin // All this stuff is only called if we have to handle the drag image ourselves. If the system supports // drag image then this is all never executed. ScreenDC := GetDC(0); try if (Abs(DeltaX) >= FDragImage.Width) or (Abs(DeltaY) >= FDragImage.Height) or ForceRepaint then begin // If moved more than image size then just restore old screen and blit image to new position. BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, FBackImage.Width, FBackImage.Height, FBackImage.Canvas.Handle, 0, 0, SRCCOPY); if ForceRepaint then UpdateWindow(FOwner.Handle); Inc(FImagePosition.X, -DeltaX); Inc(FImagePosition.Y, -DeltaY); BitBlt(FBackImage.Canvas.Handle, 0, 0, FBackImage.Width, FBackImage.Height, ScreenDC, FImagePosition.X, FImagePosition.Y, SRCCOPY); end else begin // overlapping copy FillDragRectangles(FDragImage.Width, FDragImage.Height, DeltaX, DeltaY, RClip, RScroll, RSamp1, RSamp2, RDraw1, RDraw2); with FBackImage.Canvas do begin // restore uncovered areas of the screen if DeltaX = 0 then begin with RDraw2 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end else begin if DeltaY = 0 then begin with RDraw1 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end else begin with RDraw1 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); with RDraw2 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end; end; //todo: implement ScrollDC. Alternatively reimplement drag operations {$ifndef INCOMPLETE_WINAPI} // move existent background ScrollDC(Handle, DeltaX, DeltaY, RScroll, RClip, 0, nil); {$endif} Inc(FImagePosition.X, -DeltaX); Inc(FImagePosition.Y, -DeltaY); // Get first and second additional rectangle from screen. if DeltaX = 0 then begin with RSamp2 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end else if DeltaY = 0 then begin with RSamp1 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end else begin with RSamp1 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); with RSamp2 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end; end; end; InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; FLastPosition.X := P.X; FLastPosition.Y := P.Y; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.EndDrag; begin HideDragImage; FStates := FStates - [disInDrag, disPrepared]; FBackImage.Free; FBackImage := nil; FDragImage.Free; FDragImage := nil; FAlphaImage.Free; FAlphaImage := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.GetDragImageRect: TRect; // Returns the current size and position of the drag image (screen coordinates). begin if Visible then begin with FBackImage do Result := Rect(FImagePosition.X, FImagePosition.Y, FImagePosition.X + Width, FImagePosition.Y + Height); end else Result := Rect(0, 0, 0, 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.HideDragImage; var ScreenDC: HDC; begin if Visible then begin Include(FStates, disHidden); ScreenDC := GetDC(0); try // restore screen with FBackImage do BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); finally ReleaseDC(0, ScreenDC); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.PrepareDrag(DragImage: TBitmap; const ImagePosition, HotSpot: TPoint; const DataObject: IDataObject); // Creates all necessary structures to do alpha blended dragging using the given image. // ImagePostion and Hotspot are given in screen coordinates. The first determines where to place the drag image while // the second is the initial mouse position. // This method also determines whether the system supports drag images natively. If so then only minimal structures // are created. var Width, Height: Integer; DragSourceHelper: IDragSourceHelper; DragInfo: TSHDragImage; begin Width := DragImage.Width; Height := DragImage.Height; // Determine whether the system supports the drag helper interfaces. if Assigned(DataObject) and Succeeded(CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDragSourceHelper, DragSourceHelper)) then begin Include(FStates, disSystemSupport); // Supply the drag source helper with our drag image. DragInfo.sizeDragImage.cx := Width; DragInfo.sizeDragImage.cy := Height; DragInfo.ptOffset.x := Width div 2; DragInfo.ptOffset.y := Height div 2; //todo: replace CopyImage. Alternatively reimplement Drag support {$ifndef INCOMPLETE_WINAPI} DragInfo.hbmpDragImage := CopyImage(DragImage.Handle, IMAGE_BITMAP, Width, Height, LR_COPYRETURNORG); {$else} DragInfo.hbmpDragImage := 0; {$endif} DragInfo.ColorRef := ColorToRGB(FColorKey); if not Succeeded(DragSourceHelper.InitializeFromBitmap(DragInfo, DataObject)) then begin DeleteObject(DragInfo.hbmpDragImage); Exclude(FStates, disSystemSupport); end; end else Exclude(FStates, disSystemSupport); if MMXAvailable and not (disSystemSupport in FStates) then begin FLastPosition := HotSpot; FDragImage := TBitmap.Create; FDragImage.PixelFormat := pf32Bit; FDragImage.Width := Width; FDragImage.Height := Height; FAlphaImage := TBitmap.Create; FAlphaImage.PixelFormat := pf32Bit; FAlphaImage.Width := Width; FAlphaImage.Height := Height; FBackImage := TBitmap.Create; FBackImage.PixelFormat := pf32Bit; FBackImage.Width := Width; FBackImage.Height := Height; // Copy the given drag image and apply pre blend bias if required. if FPreBlendBias = 0 then with FDragImage do BitBlt(Canvas.Handle, 0, 0, Width, Height, DragImage.Canvas.Handle, 0, 0, SRCCOPY) else AlphaBlend(DragImage.Canvas.Handle, FDragImage.Canvas.Handle, Rect(0, 0, Width, Height), Point(0, 0), bmConstantAlpha, 255, FPreBlendBias); // Create a proper alpha channel also if no fading is required (transparent parts). MakeAlphaChannel(DragImage, FDragImage); FImagePosition := ImagePosition; // Initially the drag image is hidden and will be shown during the immediately following DragEnter event. FStates := FStates + [disInDrag, disHidden, disPrepared]; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.RecaptureBackground(Tree: TBaseVirtualTree; R: TRect; VisibleRegion: HRGN; CaptureNCArea, ReshowDragImage: Boolean); // Notification by the drop target tree to update the background image because something in the tree has changed. // Note: The passed rectangle is given in client coordinates of the current drop target tree (given in Tree). // The caller does not check if the given rectangle is actually within the drag image. Hence this method must do // all the checks. // This method does nothing if the system manages the drag image. {$ifndef INCOMPLETE_WINAPI} var DragRect, ClipRect: TRect; PaintTarget: TPoint; PaintOptions: TVTInternalPaintOptions; ScreenDC: HDC; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} // Recapturing means we want the tree to paint the new part into our back bitmap instead to the screen. if Visible then begin // Create the minimum rectangle to be recaptured. MapWindowPoints(Tree.Handle, 0, R, 2); DragRect := GetDragImageRect; IntersectRect(R, R, DragRect); OffsetRgn(VisibleRegion, -DragRect.Left, -DragRect.Top); // The target position for painting in the drag image is relative and can be determined from screen coordinates too. PaintTarget.X := R.Left - DragRect.Left; PaintTarget.Y := R.Top - DragRect.Top; // The source rectangle is determined by the offsets in the tree. MapWindowPoints(0, Tree.Handle, R, 2); OffsetRect(R, -Tree.FOffsetX, -Tree.FOffsetY); // Finally let the tree paint the relevant part and upate the drag image on screen. PaintOptions := [poBackground, poColumnColor, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]; with FBackImage do begin ClipRect.TopLeft := PaintTarget; ClipRect.Right := ClipRect.Left + R.Right - R.Left; ClipRect.Bottom := ClipRect.Top + R.Bottom - R.Top; Tree.LimitPaintingToArea(Canvas, ClipRect, VisibleRegion); Tree.PaintTree(Canvas, R, PaintTarget, PaintOptions); if CaptureNCArea then begin // For the non-client area we only need the visible region of the window as limit for painting. SelectClipRgn(Canvas.Handle, VisibleRegion); // Since WM_PRINT cannot be given a position where to draw we simply move the window origin and // get the same effect. GetWindowRect(Tree.Handle, ClipRect); SetWindowOrgEx(Canvas.Handle, DragRect.Left - ClipRect.Left, DragRect.Top - ClipRect.Top, nil); //todo: see what todo here //Tree.Perform(WM_PRINT, Integer(Canvas.Handle), PRF_NONCLIENT); SetWindowOrgEx(Canvas.Handle, 0, 0, nil); end; SelectClipRgn(Canvas.Handle, 0); if ReshowDragImage then begin GDIFlush; ScreenDC := GetDC(0); try InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.ShowDragImage; // Shows the drag image after it has been hidden by HideDragImage. // Note: there might be a new background now. // Also this method does nothing if the system manages the drag image. {$ifndef INCOMPLETE_WINAPI} var ScreenDC: HDC; {$endif} begin {$ifndef INCOMPLETE_WINAPI} if FStates * [disInDrag, disHidden, disPrepared, disSystemSupport] = [disInDrag, disHidden, disPrepared] then begin Exclude(FStates, disHidden); GDIFlush; ScreenDC := GetDC(0); try BitBlt(FBackImage.Canvas.Handle, 0, 0, FBackImage.Width, FBackImage.Height, ScreenDC, FImagePosition.X, FImagePosition.Y, SRCCOPY); InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.WillMove(const P: TPoint): Boolean; // This method determines whether the drag image would "physically" move when DragTo would be called with the same // target point. // Always returns False if the system drag image support is available. var DeltaX, DeltaY: Integer; begin Result := Visible; if Result then begin // Determine distances to move the drag image. Take care for restrictions. case FRestriction of dmrHorizontalOnly: begin DeltaX := FLastPosition.X - P.X; DeltaY := 0; end; dmrVerticalOnly: begin DeltaX := 0; DeltaY := FLastPosition.Y - P.Y; end; else // dmrNone DeltaX := FLastPosition.X - P.X; DeltaY := FLastPosition.Y - P.Y; end; Result := (DeltaX <> 0) or (DeltaY <> 0); end; end; //----------------- TVirtualTreeColumn --------------------------------------------------------------------------------- constructor TVirtualTreeColumn.Create(Collection: TCollection); begin FMinWidth := 10; FMaxWidth := 10000; FImageIndex := -1; FMargin := 4; FSpacing := 4; FText := ''; FOptions := DefaultColumnOptions; FAlignment := taLeftJustify; FBidiMode := bdLeftToRight; FColor := clWindow; FLayout := blGlyphLeft; FBonusPixel := False; FCaptionAlignment := taLeftJustify; FCheckType := ctCheckBox; FCheckState := csUncheckedNormal; FCheckBox := False; FHasImage := False; inherited Create(Collection); FWidth := Owner.FDefaultWidth; FLastWidth := Owner.FDefaultWidth; //lcl: setting FPosition here will override the Design time value //FPosition := Owner.Count - 1; // Read parent bidi mode and color values as default values. ParentBiDiModeChanged; ParentColorChanged; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVirtualTreeColumn.Destroy; var I: Integer; //--------------- local function --------------------------------------------- procedure AdjustColumnIndex(var ColumnIndex: TColumnIndex); begin if Index = ColumnIndex then ColumnIndex := NoColumn else if Index < ColumnIndex then Dec(ColumnIndex); end; //--------------- end local function ----------------------------------------- begin // Check if this column is somehow referenced by its collection parent or the header. with Owner do begin // If the columns collection object is currently deleting all columns // then we don't need to check the various cached indices individually. if not FClearing then begin IndexChanged(Index, -1); AdjustColumnIndex(FHoverIndex); AdjustColumnIndex(FDownIndex); AdjustColumnIndex(FTrackIndex); AdjustColumnIndex(FClickIndex); with Header do begin AdjustColumnIndex(FAutoSizeIndex); if Index = FMainColumn then begin // If the current main column is about to be destroyed then we have to find a new main column. FMainColumn := NoColumn; for I := 0 to Count - 1 do if I <> Index then begin FMainColumn := I; Break; end; end; AdjustColumnIndex(FSortColumn); end; end; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetCaptionAlignment: TAlignment; begin if coUseCaptionAlignment in FOptions then Result := FCaptionAlignment else Result := FAlignment; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetLeft: Integer; begin Result := FLeft; if [coVisible, coFixed] * FOptions <> [coVisible, coFixed] then Dec(Result, Owner.Header.Treeview.FEffectiveOffsetX); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsBiDiModeStored: Boolean; begin Result := not (coParentBiDiMode in FOptions); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsCaptionAlignmentStored: Boolean; begin Result := coUseCaptionAlignment in FOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsColorStored: Boolean; begin Result := not (coParentColor in FOptions); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; Changed(False); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetBiDiMode(Value: TBiDiMode); begin if Value <> FBiDiMode then begin FBiDiMode := Value; Exclude(FOptions, coParentBiDiMode); Changed(False); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCaptionAlignment(const Value: TAlignment); begin if not (coUseCaptionAlignment in FOptions) or (FCaptionAlignment <> Value) then begin FCaptionAlignment := Value; Exclude(FOptions, coUseCaptionAlignment); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.Invalidate(Self); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetColor(const Value: TColor); begin if FColor <> Value then begin FColor := Value; Exclude(FOptions, coParentColor); Changed(False); Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckBox(Value: boolean); begin if Value <> FCheckBox then begin FCheckBox := Value; //lcl if FCheckBox then Owner.Header.Treeview.CheckImageListNeeded; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckState(Value: TCheckState); begin if Value <> FCheckState then begin FCheckState := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckType(Value: TCheckType); begin if Value <> FCheckType then begin FCheckType := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetImageIndex(Value: TImageIndex); begin if Value <> FImageIndex then begin FImageIndex := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetLayout(Value: TVTHeaderColumnLayout); begin if FLayout <> Value then begin FLayout := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMargin(Value: Integer); begin // Compatibility setting for -1. if Value < 0 then Value := 4; if FMargin <> Value then begin FMargin := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMaxWidth(Value: Integer); begin if Value < FMinWidth then Value := FMinWidth; if not IsWinNT and (Value > 10000) then Value := 10000; FMaxWidth := Value; SetWidth(FWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMinWidth(Value: Integer); begin if Value < 0 then Value := 0; if Value > FMaxWidth then Value := FMaxWidth; FMinWidth := Value; SetWidth(FWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetOptions(Value: TVTColumnOptions); var ToBeSet, ToBeCleared: TVTColumnOptions; AVisibleChanged, ColorChanged: Boolean; begin if FOptions <> Value then begin ToBeCleared := FOptions - Value; ToBeSet := Value - FOptions; FOptions := Value; AVisibleChanged := coVisible in (ToBeSet + ToBeCleared); ColorChanged := coParentColor in ToBeSet; if coParentBidiMode in ToBeSet then ParentBiDiModeChanged; if ColorChanged then ParentColorChanged; if coAutoSpring in ToBeSet then FSpringRest := 0; if ((coFixed in ToBeSet) or (coFixed in ToBeCleared)) and (coVisible in FOptions) then Owner.Header.RescaleHeader; Changed(False); // Need to repaint and adjust the owner tree too. //lcl: fpc refuses to compile the original code by no aparent reason. //Found: Was confounding TControl.VisibleChanged with Owner, Header.Treeview do if not (csLoading in ComponentState) and (AVisibleChanged or ColorChanged) and (UpdateCount = 0) and HandleAllocated then begin Invalidate; if AVisibleChanged then UpdateHorizontalScrollBar(False); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetPosition(Value: TColumnPosition); var Temp: TColumnIndex; begin if csLoading in Owner.Header.Treeview.ComponentState then // Only cache the position for final fixup when loading from DFM. FPosition := Value else begin if Value >= TColumnPosition(Collection.Count) then Value := Collection.Count - 1; if FPosition <> Value then begin with Owner do begin InitializePositionArray; Header.Treeview.CancelEditNode; AdjustPosition(Self, Value); Self.Changed(False); // Need to repaint. with Header do begin if (UpdateCount = 0) and Treeview.HandleAllocated then begin Invalidate(Self); Treeview.Invalidate; end; end; end; // If the moved column is now within the fixed columns then we make it fixed as well. If it's not // we clear the fixed state (in case that fixed column is moved outside fixed area). if (coFixed in FOptions) and (FPosition > 0) then Temp := Owner.ColumnFromPosition(FPosition - 1) else Temp := Owner.ColumnFromPosition(FPosition + 1); if Temp <> NoColumn then begin if coFixed in Owner[Temp].Options then Options := Options + [coFixed] else Options := Options - [coFixed] end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetSpacing(Value: Integer); begin if FSpacing <> Value then begin FSpacing := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetStyle(Value: TVirtualTreeColumnStyle); begin if FStyle <> Value then begin FStyle := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetText(const Value: String); begin if FText <> Value then begin FText := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetWidth(Value: Integer); var EffectiveMaxWidth, EffectiveMinWidth, TotalFixedMaxWidth, TotalFixedMinWidth: Integer; I: TColumnIndex; begin if not (hsScaling in Owner.FHeader.FStates) then if ([coVisible, coFixed] * FOptions = [coVisible, coFixed]) then begin with Owner, FHeader, FFixedAreaConstraints, TreeView do begin TotalFixedMinWidth := 0; TotalFixedMaxWidth := 0; for I := 0 to FColumns.Count - 1 do if ([coVisible, coFixed] * FColumns[I].FOptions = [coVisible, coFixed]) then begin Inc(TotalFixedMaxWidth, FColumns[I].FMaxWidth); Inc(TotalFixedMinWidth, FColumns[I].FMinWidth); end; // The percentage values have precedence over the pixel values. TotalFixedMinWidth := IfThen(FMaxWidthPercent > 0, Min((ClientWidth * FMaxWidthPercent) div 100, TotalFixedMinWidth), TotalFixedMinWidth); TotalFixedMaxWidth := IfThen(FMinWidthPercent > 0, Max((ClientWidth * FMinWidthPercent) div 100, TotalFixedMaxWidth), TotalFixedMaxWidth); EffectiveMaxWidth := Min(TotalFixedMaxWidth - (GetVisibleFixedWidth - Self.FWidth), FMaxWidth); EffectiveMinWidth := Max(TotalFixedMinWidth - (GetVisibleFixedWidth - Self.FWidth), FMinWidth); Value := Min(Max(Value, EffectiveMinWidth), EffectiveMaxWidth); if FMinWidthPercent > 0 then Value := Max((ClientWidth * FMinWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value); if FMaxWidthPercent > 0 then Value := Min((ClientWidth * FMaxWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value); end; end else Value := Min(Max(Value, FMinWidth), FMaxWidth); if FWidth <> Value then begin FLastWidth := FWidth; if not (hsResizing in Owner.Header.States) then FBonusPixel := False; with Owner, Header do begin if not (hoAutoResize in FOptions) or (Index <> FAutoSizeIndex) then begin FWidth := Value; UpdatePositions; end; if not (csLoading in Treeview.ComponentState) and (UpdateCount = 0) then begin if hoAutoResize in FOptions then AdjustAutoSize(Index); Treeview.DoColumnResize(Index); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ComputeHeaderLayout(DC: HDC; const Client: TRect; UseHeaderGlyph, UseSortGlyph: Boolean; var HeaderGlyphPos, SortGlyphPos: TPoint; var TextBounds: TRect; DrawFormat: Cardinal; CalculateTextRect: Boolean = False); // The layout of a column header is determined by a lot of factors. This method takes them all into account and // determines all necessary positions and bounds: // - for the header text // - the header glyph // - the sort glyph var TextSize: TSize; TextPos, ClientSize, HeaderGlyphSize, SortGlyphSize: TPoint; CurrentAlignment: TAlignment; MinLeft, MaxRight, TextSpacing: Integer; UseText: Boolean; R: TRect; begin UseText := Length(FText) > 0; // If nothing is to show then don't waste time with useless preparation. if not (UseText or UseHeaderGlyph or UseSortGlyph) then Exit; CurrentAlignment := CaptionAlignment; if FBidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(CurrentAlignment); // Calculate sizes of the involved items. ClientSize := Point(Client.Right - Client.Left, Client.Bottom - Client.Top); with Owner, Header do begin if UseHeaderGlyph then if not FCheckBox then HeaderGlyphSize := Point(FImages.Width, FImages.Height) else HeaderGlyphSize := Point(Treeview.CheckImages.Width, Treeview.CheckImages.Height) else HeaderGlyphSize := Point(0, 0); if UseSortGlyph then begin SortGlyphSize := Point(UtilityImages.Height, UtilityImages.Height); // In any case, the sort glyph is vertically centered. SortGlyphPos.Y := (ClientSize.Y - SortGlyphSize.Y) div 2; end else SortGlyphSize := Point(0, 0); end; if UseText then begin if not (coWrapCaption in FOptions) then begin FCaptionText := FText; GetTextExtentPoint32(DC, PChar(FText), Length(FText), TextSize); Inc(TextSize.cx, 2); TextBounds := Rect(0, 0, TextSize.cx, TextSize.cy); end else begin R := Client; if FCaptionText = '' then FCaptionText := FText; GetStringDrawRect(DC, FCaptionText, R, DrawFormat); TextSize.cx := Client.Right - Client.Left; TextSize.cy := R.Bottom - R.Top; TextBounds := Rect(0, 0, TextSize.cx, TextSize.cy); end; TextSpacing := FSpacing; end else begin TextSpacing := 0; TextSize.cx := 0; TextSize.cy := 0; end; // Check first for the special case where nothing is shown except the sort glyph. if UseSortGlyph and not (UseText or UseHeaderGlyph) then begin // Center the sort glyph in the available area if nothing else is there. SortGlyphPos := Point((ClientSize.X - SortGlyphSize.X) div 2, (ClientSize.Y - SortGlyphSize.Y) div 2); end else begin // Determine extents of text and glyph and calculate positions which are clear from the layout. if (Layout in [blGlyphLeft, blGlyphRight]) or not UseHeaderGlyph then begin HeaderGlyphPos.Y := (ClientSize.Y - HeaderGlyphSize.Y) div 2; // If the text is taller than the given height, perform no vertical centration as this // would make the text even less readable. if TextSize.cy >= ClientSize.Y then TextPos.Y := 0 else TextPos.Y := (ClientSize.Y - TextSize.cy) div 2; end else begin if Layout = blGlyphTop then begin HeaderGlyphPos.Y := (ClientSize.Y - HeaderGlyphSize.Y - TextSize.cy - TextSpacing) div 2; TextPos.Y := HeaderGlyphPos.Y + HeaderGlyphSize.Y + TextSpacing; end else begin TextPos.Y := (ClientSize.Y - HeaderGlyphSize.Y - TextSize.cy - TextSpacing) div 2; HeaderGlyphPos.Y := TextPos.Y + TextSize.cy + TextSpacing; end; end; // Each alignment needs special consideration. case CurrentAlignment of taLeftJustify: begin MinLeft := FMargin; if UseSortGlyph and (FBidiMode <> bdLeftToRight) then begin // In RTL context is the sort glyph placed on the left hand side. SortGlyphPos.X := MinLeft; Inc(MinLeft, SortGlyphSize.X + FSpacing); end; if Layout in [blGlyphTop, blGlyphBottom] then begin // Header glyph is above or below text, so both must be considered when calculating // the left positition of the sort glyph (if it is on the right hand side). TextPos.X := MinLeft; if UseHeaderGlyph then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; if HeaderGlyphPos.X < MinLeft then HeaderGlyphPos.X := MinLeft; MinLeft := Max(TextPos.X + TextSize.cx + TextSpacing, HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing); end else MinLeft := TextPos.X + TextSize.cx + TextSpacing; end else begin // Everything is lined up. TextSpacing might be 0 if there is no text. // This simplifies the calculation because no extra tests are necessary. if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + FSpacing); end; TextPos.X := MinLeft; Inc(MinLeft, TextSize.cx + TextSpacing); if UseHeaderGlyph and (Layout = blGlyphRight) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + FSpacing); end; end; if UseSortGlyph and (FBidiMode = bdLeftToRight) then SortGlyphPos.X := MinLeft; end; taCenter: begin if Layout in [blGlyphTop, blGlyphBottom] then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; TextPos.X := (ClientSize.X - TextSize.cx) div 2; if UseSortGlyph then Dec(TextPos.X, SortGlyphSize.X div 2); end else begin MinLeft := (ClientSize.X - HeaderGlyphSize.X - TextSpacing - TextSize.cx) div 2; if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + TextSpacing); end; TextPos.X := MinLeft; Inc(MinLeft, TextSize.cx + TextSpacing); if UseHeaderGlyph and (Layout = blGlyphRight) then HeaderGlyphPos.X := MinLeft; end; if UseHeaderGlyph then begin MinLeft := Min(HeaderGlyphPos.X, TextPos.X); MaxRight := Max(HeaderGlyphPos.X + HeaderGlyphSize.X, TextPos.X + TextSize.cx); end else begin MinLeft := TextPos.X; MaxRight := TextPos.X + TextSize.cx; end; // Place the sort glyph directly to the left or right of the larger item. if UseSortGlyph then if FBidiMode = bdLeftToRight then begin // Sort glyph on the right hand side. SortGlyphPos.X := MaxRight + FSpacing; end else begin // Sort glyph on the left hand side. SortGlyphPos.X := MinLeft - FSpacing - SortGlyphSize.X; end; end; else // taRightJustify MaxRight := ClientSize.X - FMargin; if UseSortGlyph and (FBidiMode = bdLeftToRight) then begin // In LTR context is the sort glyph placed on the right hand side. Dec(MaxRight, SortGlyphSize.X); SortGlyphPos.X := MaxRight; Dec(MaxRight, FSpacing); end; if Layout in [blGlyphTop, blGlyphBottom] then begin TextPos.X := MaxRight - TextSize.cx; if UseHeaderGlyph then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; if HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing > MaxRight then HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X - FSpacing; MaxRight := Min(TextPos.X - TextSpacing, HeaderGlyphPos.X - FSpacing); end else MaxRight := TextPos.X - TextSpacing; end else begin // Everything is lined up. TextSpacing might be 0 if there is no text. // This simplifies the calculation because no extra tests are necessary. if UseHeaderGlyph and (Layout = blGlyphRight) then begin HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; MaxRight := HeaderGlyphPos.X - FSpacing; end; TextPos.X := MaxRight - TextSize.cx; MaxRight := TextPos.X - TextSpacing; if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; MaxRight := HeaderGlyphPos.X - FSpacing; end; end; if UseSortGlyph and (FBidiMode <> bdLeftToRight) then SortGlyphPos.X := MaxRight - SortGlyphSize.X; end; end; // Once the position of each element is determined there remains only one but important step. // The horizontal positions of every element must be adjusted so that it always fits into the // given header area. This is accomplished by shorten the text appropriately. // These are the maximum bounds. Nothing goes beyond them. MinLeft := FMargin; MaxRight := ClientSize.X - FMargin; if UseSortGlyph then begin if FBidiMode = bdLeftToRight then begin // Sort glyph on the right hand side. if SortGlyphPos.X + SortGlyphSize.X > MaxRight then SortGlyphPos.X := MaxRight - SortGlyphSize.X; MaxRight := SortGlyphPos.X - FSpacing; end; // Consider also the left side of the sort glyph regardless of the bidi mode. if SortGlyphPos.X < MinLeft then SortGlyphPos.X := MinLeft; // Left border needs only adjustment if the sort glyph marks the left border. if FBidiMode <> bdLeftToRight then MinLeft := SortGlyphPos.X + SortGlyphSize.X + FSpacing; // Finally transform sort glyph to its actual position. with SortGlyphPos do begin Inc(X, Client.Left); Inc(Y, Client.Top); end; end; if UseHeaderGlyph then begin if HeaderGlyphPos.X + HeaderGlyphSize.X > MaxRight then HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; if Layout = blGlyphRight then MaxRight := HeaderGlyphPos.X - FSpacing; if HeaderGlyphPos.X < MinLeft then HeaderGlyphPos.X := MinLeft; if Layout = blGlyphLeft then MinLeft := HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing; // Finally transform header glyph to its actual position. with HeaderGlyphPos do begin Inc(X, Client.Left); Inc(Y, Client.Top); end; end; if UseText then begin if TextPos.X < MinLeft then TextPos.X := MinLeft; OffsetRect(TextBounds, TextPos.X, TextPos.Y); if TextBounds.Right > MaxRight then TextBounds.Right := MaxRight; OffsetRect(TextBounds, Client.Left, Client.Top); if coWrapCaption in FOptions then begin // Wrap the column caption if necessary. R := TextBounds; FCaptionText := WrapString(DC, FText, R, DT_RTLREADING and DrawFormat <> 0, DrawFormat); GetStringDrawRect(DC, FCaptionText, R, DrawFormat); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.GetAbsoluteBounds(var Left, Right: Integer); // Returns the column's left and right bounds in header coordinates, that is, independent of the scrolling position. begin Left := FLeft; Right := FLeft + FWidth; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetDisplayName: string; // Returns the column text otherwise the column id is returned begin if Length(FText) > 0 then Result := FText else Result := Format('Column %d', [Index]); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetOwner: TVirtualTreeColumns; begin Result := Collection as TVirtualTreeColumns; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.Assign(Source: TPersistent); var OldOptions: TVTColumnOptions; begin if Source is TVirtualTreeColumn then begin OldOptions := FOptions; FOptions := []; BiDiMode := TVirtualTreeColumn(Source).BiDiMode; ImageIndex := TVirtualTreeColumn(Source).ImageIndex; Layout := TVirtualTreeColumn(Source).Layout; Margin := TVirtualTreeColumn(Source).Margin; MaxWidth := TVirtualTreeColumn(Source).MaxWidth; MinWidth := TVirtualTreeColumn(Source).MinWidth; Position := TVirtualTreeColumn(Source).Position; Spacing := TVirtualTreeColumn(Source).Spacing; Style := TVirtualTreeColumn(Source).Style; Text := TVirtualTreeColumn(Source).Text; Hint := TVirtualTreeColumn(Source).Hint; Width := TVirtualTreeColumn(Source).Width; Alignment := TVirtualTreeColumn(Source).Alignment; CaptionAlignment := TVirtualTreeColumn(Source).CaptionAlignment; Color := TVirtualTreeColumn(Source).Color; Tag := TVirtualTreeColumn(Source).Tag; // Order is important. Assign options last. FOptions := OldOptions; Options := TVirtualTreeColumn(Source).Options; Changed(False); end else inherited Assign(Source); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.Equals(OtherColumnObj: TObject): Boolean; var OtherColumn : TVirtualTreeColumn; begin if OtherColumnObj is TVirtualTreeColumn then begin OtherColumn := TVirtualTreeColumn (OtherColumnObj); Result := (BiDiMode = OtherColumn.BiDiMode) and (ImageIndex = OtherColumn.ImageIndex) and (Layout = OtherColumn.Layout) and (Margin = OtherColumn.Margin) and (MaxWidth = OtherColumn.MaxWidth) and (MinWidth = OtherColumn.MinWidth) and (Position = OtherColumn.Position) and (Spacing = OtherColumn.Spacing) and (Style = OtherColumn.Style) and (Text = OtherColumn.Text) and (Hint = OtherColumn.Hint) and (Width = OtherColumn.Width) and (Alignment = OtherColumn.Alignment) and (CaptionAlignment = OtherColumn.CaptionAlignment) and (Color = OtherColumn.Color) and (Tag = OtherColumn.Tag) and (Options = OtherColumn.Options) end else Result := False end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetRect: TRect; // Returns the rectangle this column occupies in the header (relative to (0, 0) of the non-client area). begin with TVirtualTreeColumns(GetOwner).FHeader do Result := Treeview.FHeaderRect; Inc(Result.Left, FLeft); Result.Right := Result.Left + FWidth; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.LoadFromStream(const Stream: TStream; Version: Integer); var Dummy: Integer; S: String; begin with Stream do begin ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(S, Dummy); ReadBuffer(PChar(S)^, Dummy); Text := S; ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(FHint, Dummy); ReadBuffer(PChar(FHint)^, Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Width := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); MinWidth := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); MaxWidth := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Style := TVirtualTreeColumnStyle(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); ImageIndex := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Layout := TVTHeaderColumnLayout(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Margin := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Spacing := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); BiDiMode := TBiDiMode(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Options := TVTColumnOptions(Word(Dummy and $FFFF)); // Parts which have been introduced/changed with header stream version 1+. // LCL port started with header stream version 6 so no need to do the check here ReadBuffer(Dummy, SizeOf(Dummy)); Tag := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Alignment := TAlignment(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Color := TColor(Dummy); if coUseCaptionAlignment in FOptions then begin ReadBuffer(Dummy, SizeOf(Dummy)); CaptionAlignment := TAlignment(Dummy); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ParentBiDiModeChanged; var Columns: TVirtualTreeColumns; begin if coParentBiDiMode in FOptions then begin Columns := GetOwner as TVirtualTreeColumns; if Assigned(Columns) and (FBidiMode <> Columns.FHeader.Treeview.BiDiMode) then begin FBiDiMode := Columns.FHeader.Treeview.BiDiMode; Changed(False); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ParentColorChanged; var Columns: TVirtualTreeColumns; TreeViewColor: TColor; begin if coParentColor in FOptions then begin Columns := GetOwner as TVirtualTreeColumns; if Assigned(Columns) then begin TreeViewColor := Columns.FHeader.Treeview.Brush.Color; if FColor <> TreeViewColor then begin FColor := TreeViewColor; Changed(False); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.RestoreLastWidth; begin TVirtualTreeColumns(GetOwner).AnimatedResize(Index, FLastWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SaveToStream(const Stream: TStream); var Dummy: Integer; begin with Stream do begin Dummy := Length(FText); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PChar(FText)^, Dummy); Dummy := Length(FHint); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PChar(FHint)^, Dummy); WriteBuffer(FWidth, SizeOf(FWidth)); WriteBuffer(FMinWidth, SizeOf(FMinWidth)); WriteBuffer(FMaxWidth, SizeOf(FMaxWidth)); Dummy := Ord(FStyle); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FImageIndex; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Ord(FLayout); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(FMargin, SizeOf(FMargin)); WriteBuffer(FSpacing, SizeOf(FSpacing)); Dummy := Ord(FBiDiMode); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Word(FOptions); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 1 WriteBuffer(FTag, SizeOf(Dummy)); Dummy := Cardinal(FAlignment); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 2 Dummy := Integer(FColor); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 6 if coUseCaptionAlignment in FOptions then begin Dummy := Cardinal(FCaptionAlignment); WriteBuffer(Dummy, SizeOf(Dummy)); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.UseRightToLeftReading: Boolean; begin Result := FBiDiMode <> bdLeftToRight; end; //----------------- TVirtualTreeColumns -------------------------------------------------------------------------------- constructor TVirtualTreeColumns.Create(AOwner: TVTHeader); var ColumnClass: TVirtualTreeColumnClass; begin FHeader := AOwner; // Determine column class to be used in the header. ColumnClass := AOwner.FOwner.GetColumnClass; // The owner tree always returns the default tree column class if not changed by application/descendants. inherited Create(ColumnClass); FHeaderBitmap := TBitmap.Create; FHeaderBitmap.PixelFormat := pf32Bit; FHoverIndex := NoColumn; FDownIndex := NoColumn; FClickIndex := NoColumn; FDropTarget := NoColumn; FTrackIndex := NoColumn; FDefaultWidth := 50; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVirtualTreeColumns.Destroy; begin FHeaderBitmap.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetCount: Integer; begin Result := inherited Count; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetItem(Index: TColumnIndex): TVirtualTreeColumn; begin Result := TVirtualTreeColumn(inherited GetItem(Index)); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNewIndex(P: TPoint; var OldIndex: TColumnIndex): Boolean; var NewIndex: Integer; begin Result := False; // convert to local coordinates Inc(P.Y, FHeader.FHeight); NewIndex := ColumnFromPosition(P); if NewIndex <> OldIndex then begin if OldIndex > NoColumn then FHeader.Invalidate(Items[OldIndex]); OldIndex := NewIndex; if OldIndex > NoColumn then FHeader.Invalidate(Items[OldIndex]); Result := True; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SetDefaultWidth(Value: Integer); begin FDefaultWidth := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SetItem(Index: TColumnIndex; Value: TVirtualTreeColumn); begin inherited SetItem(Index, Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AdjustAutoSize(CurrentIndex: TColumnIndex; Force: Boolean = False); // Called only if the header is in auto-size mode which means a column needs to be so large // that it fills all the horizontal space not occupied by the other columns. // CurrentIndex (if not InvalidColumn) describes which column has just been resized. var NewValue, AutoIndex, Index, RestWidth: Integer; begin if Count > 0 then begin // Determine index to be used for auto resizing. This is usually given by the owner's AutoSizeIndex, but // could be different if the column whose resize caused the invokation here is either the auto column itself // or visually to the right of the auto size column. AutoIndex := FHeader.FAutoSizeIndex; if (AutoIndex < 0) or (AutoIndex >= Count) then AutoIndex := Count - 1; if AutoIndex >= 0 then begin with FHeader.Treeview do begin if HandleAllocated then RestWidth := ClientWidth else RestWidth := Width; end; // Go through all columns and calculate the rest space remaining. for Index := 0 to Count - 1 do if (Index <> AutoIndex) and (coVisible in Items[Index].FOptions) then Dec(RestWidth, Items[Index].Width); with Items[AutoIndex] do begin NewValue := Max(MinWidth, Min(MaxWidth, RestWidth)); if Force or (FWidth <> NewValue) then begin FWidth := NewValue; UpdatePositions; FHeader.Treeview.DoColumnResize(AutoIndex); end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.AdjustDownColumn(P: TPoint): TColumnIndex; // Determines the column from the given position and returns it. If this column is allowed to be clicked then // it is also kept for later use. begin // Convert to local coordinates. Inc(P.Y, FHeader.FHeight); Result := ColumnFromPosition(P); if (Result > NoColumn) and (Result <> FDownIndex) and (coAllowClick in Items[Result].FOptions) and (coEnabled in Items[Result].FOptions) then begin if FDownIndex > NoColumn then FHeader.Invalidate(Items[FDownIndex]); FDownIndex := Result; FHeader.Invalidate(Items[FDownIndex]); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.AdjustHoverColumn(const P: TPoint): Boolean; // Determines the new hover column index and returns True if the index actually changed else False. begin Result := GetNewIndex(P, FHoverIndex); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AdjustPosition(Column: TVirtualTreeColumn; Position: Cardinal); // Reorders the column position array so that the given column gets the given position. var OldPosition: Cardinal; begin OldPosition := Column.Position; if OldPosition <> Position then begin if OldPosition < Position then begin // column will be moved up so move down other entries Move(FPositionToIndex[OldPosition + 1], FPositionToIndex[OldPosition], (Position - OldPosition) * SizeOf(Cardinal)); end else begin // column will be moved down so move up other entries Move(FPositionToIndex[Position], FPositionToIndex[Position + 1], (OldPosition - Position) * SizeOf(Cardinal)); end; FPositionToIndex[Position] := Column.Index; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.CanSplitterResize(P: TPoint; Column: TColumnIndex): Boolean; begin Result := (Column > NoColumn) and ([coResizable, coVisible] * Items[Column].FOptions = [coResizable, coVisible]); DoCanSplitterResize(P, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.DoCanSplitterResize(P: TPoint; Column: TColumnIndex; var Allowed: Boolean); begin if Assigned(FHeader.Treeview.FOnCanSplitterResizeColumn) then FHeader.Treeview.FOnCanSplitterResizeColumn(FHeader, P, Column, Allowed); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.DrawButtonText(DC: HDC; Caption: String; Bounds: TRect; Enabled, Hot: Boolean; DrawFormat: Cardinal; WrapCaption: Boolean); var TextSpace: Integer; Size: TSize; begin if not WrapCaption then begin // Do we need to shorten the caption due to limited space? GetTextExtentPoint32(DC, PChar(Caption), Length(Caption), Size); TextSpace := Bounds.Right - Bounds.Left; if TextSpace < Size.cx then Caption := ShortenString(DC, Caption, TextSpace); end; SetBkMode(DC, TRANSPARENT); if not Enabled then begin OffsetRect(Bounds, 1, 1); SetTextColor(DC, ColorToRGB(clBtnHighlight)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); OffsetRect(Bounds, -1, -1); SetTextColor(DC, ColorToRGB(clBtnShadow)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); end else begin if Hot then SetTextColor(DC, ColorToRGB(FHeader.Treeview.FColors.HeaderHotColor)) else SetTextColor(DC, ColorToRGB(FHeader.FFont.Color)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); end; end; //---------------------------------------------------------------------------------------------------------------------- // XP style header button legacy code. This procedure is only used on non-XP systems to simulate the themed // header style. // Note: the theme elements displayed here only correspond to the standard themes of Windows XP const XPMainHeaderColorUp = $DBEAEB; // Main background color of the header if drawn as being not pressed. XPMainHeaderColorDown = $D8DFDE; // Main background color of the header if drawn as being pressed. XPMainHeaderColorHover = $F3F8FA; // Main background color of the header if drawn as being under the mouse pointer. XPDarkSplitBarColor = $B2C5C7; // Dark color of the splitter bar. XPLightSplitBarColor = $FFFFFF; // Light color of the splitter bar. XPDarkGradientColor = $B8C7CB; // Darkest color in the bottom gradient. Other colors will be interpolated. XPDownOuterLineColor = $97A5A5; // Down state border color. XPDownMiddleLineColor = $B8C2C1; // Down state border color. XPDownInnerLineColor = $C9D1D0; // Down state border color. procedure TVirtualTreeColumns.DrawXPButton(DC: HDC; const ButtonR: TRect; DrawSplitter, Down, Hover: Boolean); // Helper procedure to draw an Windows XP like header button. var PaintBrush: HBRUSH; Pen, OldPen: HPEN; PenColor, FillColor: COLORREF; dRed, dGreen, dBlue: Single; Width, XPos: Integer; begin if Down then FillColor := XPMainHeaderColorDown else if Hover then FillColor := XPMainHeaderColorHover else FillColor := XPMainHeaderColorUp; PaintBrush := CreateSolidBrush(FillColor); FillRect(DC, ButtonR, PaintBrush); DeleteObject(PaintBrush); if DrawSplitter and not (Down or Hover) then begin // One solid pen for the dark line... Pen := CreatePen(PS_SOLID, 1, XPDarkSplitBarColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Right - 2, ButtonR.Top + 3, nil); LineTo(DC, ButtonR.Right - 2, ButtonR.Bottom - 5); // ... and one solid pen for the light line. Pen := CreatePen(PS_SOLID, 1, XPLightSplitBarColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Right - 1, ButtonR.Top + 3, nil); LineTo(DC, ButtonR.Right - 1, ButtonR.Bottom - 5); SelectObject(DC, OldPen); DeleteObject(Pen); end; if Down then begin // Down state. Three lines to draw. // First one is the outer line, drawn at left, bottom and right. Pen := CreatePen(PS_SOLID, 1, XPDownOuterLineColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Left, ButtonR.Top, nil); LineTo(DC, ButtonR.Left, ButtonR.Bottom - 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Bottom - 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Top - 1); // Second one is the middle line, which is a bit lighter. Pen := CreatePen(PS_SOLID, 1, XPDownMiddleLineColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left + 1, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Left + 1, ButtonR.Top); LineTo(DC, ButtonR.Right - 1, ButtonR.Top); // Third line is the inner line, which is even lighter than the middle line. Pen := CreatePen(PS_SOLID, 1, XPDownInnerLineColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left + 2, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Left + 2, ButtonR.Top + 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Top + 1); // Housekeeping: SelectObject(DC, OldPen); DeleteObject(Pen); end else if Hover then begin // Hover state. There are three lines at the bottom border, but they are rendered in a way which // requires expensive construction. Width := ButtonR.Right - ButtonR.Left; if Width <= 32 then begin BitBlt(DC, ButtonR.Right - 16, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 8 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); BitBlt(DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, UtilityImages.Canvas.Handle, 6 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, CLR_NONE, // CLR_NONE, ILD_NORMAL); end else begin BitBlt(DC, ButtonR.Left, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 6 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); // Replicate inner part as many times as need to fill up the button rectangle. XPos := ButtonR.Left + 16; repeat BitBlt(DC, XPos, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 7 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 7, DC, XPos, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, ILD_NORMAL); Inc(XPos, 16); until XPos + 16 >= ButtonR.Right; BitBlt(DC, ButtonR.Right - 16, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 8 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); end; end else begin // There is a three line gradient near the bottom border which transforms from the button color to a dark, // clBtnFace like color (here XPDarkGradientColor). PenColor := XPMainHeaderColorUp; dRed := ((PenColor and $FF) - (XPDarkGradientColor and $FF)) / 3; dGreen := (((PenColor shr 8) and $FF) - ((XPDarkGradientColor shr 8) and $FF)) / 3; dBlue := (((PenColor shr 16) and $FF) - ((XPDarkGradientColor shr 16) and $FF)) / 3; // First line: PenColor := PenColor - Round(dRed) - Round(dGreen) shl 8 - Round(dBlue) shl 16; Pen := CreatePen(PS_SOLID, 1, PenColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 3, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 3); // Second line: PenColor := PenColor - Round(dRed) - Round(dGreen) shl 8 - Round(dBlue) shl 16; Pen := CreatePen(PS_SOLID, 1, PenColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 2); // Third line: Pen := CreatePen(PS_SOLID, 1, XPDarkGradientColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 1, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 1); // Housekeeping: DeleteObject(SelectObject(DC, OldPen)); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.FixPositions; // Fixes column positions after loading from DFM or Bidi mode change. var I: Integer; begin for I := 0 to Count - 1 do FPositionToIndex[Items[I].Position] := I; FNeedPositionsFix := False; UpdatePositions(True); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetColumnAndBounds(const P: TPoint; var ColumnLeft, ColumnRight: Integer; Relative: Boolean = True): Integer; // Returns the column where the mouse is currently in as well as the left and right bound of // this column (Left and Right are undetermined if no column is involved). var I: Integer; begin Result := InvalidColumn; if Relative and (P.X > Header.Columns.GetVisibleFixedWidth) then ColumnLeft := -FHeader.Treeview.FEffectiveOffsetX else ColumnLeft := 0; if FHeader.Treeview.UseRightToLeftAlignment then Inc(ColumnLeft, FHeader.Treeview.ComputeRTLOffset(True)); for I := 0 to Count - 1 do with Items[FPositionToIndex[I]] do if coVisible in FOptions then begin ColumnRight := ColumnLeft + FWidth; if P.X < ColumnRight then begin Result := FPositionToIndex[I]; Exit; end; ColumnLeft := ColumnRight; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetOwner: TPersistent; begin Result := FHeader; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); // Generates a click event if the mouse button has been released over the same column it was pressed first. // Alternatively, Force might be set to True to indicate that the down index does not matter (right, middle and // double click). var NewClickIndex: Integer; Shift: TShiftState; begin // Convert vertical position to local coordinates. Inc(P.Y, FHeader.FHeight); NewClickIndex := ColumnFromPosition(P); if (NewClickIndex > NoColumn) and (coAllowClick in Items[NewClickIndex].FOptions) and ((NewClickIndex = FDownIndex) or Force) then begin FClickIndex := NewClickIndex; Shift := FHeader.GetShiftState; if DblClick then Shift := Shift + [ssDouble]; if Items[NewClickIndex].FHasImage and PtInRect(Items[NewClickIndex].FImageRect, P) then begin if Items[NewClickIndex].CheckBox then begin FHeader.Treeview.UpdateColumnCheckState(Items[NewClickIndex]); FHeader.Treeview.DoHeaderCheckBoxClick(NewClickIndex, Button, Shift, P.X, P.Y); end else FHeader.Treeview.DoHeaderImageClick(NewClickIndex, Button, Shift, P.X, P.Y) end else FHeader.Treeview.DoHeaderClick(NewClickIndex, Button, Shift, P.X, P.Y); FHeader.Invalidate(Items[NewClickIndex]); end else FClickIndex := NoColumn; if (FClickIndex > NoColumn) and (FClickIndex <> NewClickIndex) then FHeader.Invalidate(Items[FClickIndex]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.IndexChanged(OldIndex, NewIndex: Integer); // Called by a column when its index in the collection changes. If NewIndex is -1 then the column is // about to be removed, otherwise it is moved to a new index. // The method will then update the position array to reflect the change. var I: Integer; Increment: Integer; Lower, Upper: Integer; begin if NewIndex = -1 then begin // Find position in the array with the old index. Upper := High(FPositionToIndex); for I := 0 to Upper do begin if FPositionToIndex[I] = OldIndex then begin // Index found. Move all higher entries one step down and remove the last entry. if I < Upper then Move(FPositionToIndex[I + 1], FPositionToIndex[I], (Upper - I) * SizeOf(Integer)); end; // Decrease all indices, which are greater than the index to be deleted. if FPositionToIndex[I] > OldIndex then Dec(FPositionToIndex[I]); end; SetLength(FPositionToIndex, High(FPositionToIndex)); end else begin if OldIndex < NewIndex then Increment := -1 else Increment := 1; Lower := Min(OldIndex, NewIndex); Upper := Max(OldIndex, NewIndex); for I := 0 to High(FPositionToIndex) do begin if (FPositionToIndex[I] >= Lower) and (FPositionToIndex[I] < Upper) then Inc(FPositionToIndex[I], Increment) else if FPositionToIndex[I] = OldIndex then FPositionToIndex[I] := NewIndex; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.InitializePositionArray; // Ensures that the column position array contains as many entries as columns are defined. // The array is resized and initialized with default values if needed. var I, OldSize: Integer; Changed: Boolean; begin if Count <> Length(FPositionToIndex) then begin OldSize := Length(FPositionToIndex); SetLength(FPositionToIndex, Count); if Count > OldSize then begin // New items have been added, just set their position to the same as their index. for I := OldSize to Count - 1 do FPositionToIndex[I] := I; end else begin // Items have been deleted, so reindex remaining entries by decrementing values larger than the highest // possible index until no entry is higher than this limit. repeat Changed := False; for I := 0 to Count - 1 do if FPositionToIndex[I] >= Count then begin Dec(FPositionToIndex[I]); Changed := True; end; until not Changed; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.ReorderColumns(RTL: Boolean); var I: Integer; begin if RTL then begin for I := 0 to Count - 1 do FPositionToIndex[I] := Count - I - 1; end else begin for I := 0 to Count - 1 do FPositionToIndex[I] := I; end; UpdatePositions(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Update(Item: TCollectionItem); begin //lcl // Skip while Destroying if csDestroying in FHeader.TreeView.ComponentState then Exit; // This is the only place which gets notified when a new column has been added or removed // and we need this event to adjust the column position array. InitializePositionArray; if csLoading in Header.Treeview.ComponentState then FNeedPositionsFix := True else UpdatePositions; // The first column which is created is by definition also the main column. if (Count > 0) and (Header.FMainColumn < 0) then FHeader.FMainColumn := 0; if not (csLoading in Header.Treeview.ComponentState) and not (hsLoading in FHeader.FStates) then begin with FHeader do begin if hoAutoResize in FOptions then AdjustAutoSize(InvalidColumn); if Assigned(Item) then Invalidate(Item as TVirtualTreeColumn) else if Treeview.HandleAllocated then begin Treeview.UpdateHorizontalScrollBar(False); Invalidate(nil); Treeview.Invalidate; end; if not (tsUpdating in Treeview.FStates) then // This is mainly to let the designer know when a change occurs at design time which // doesn't involve the object inspector (like column resizing with the mouse). // This does NOT include design time code as the communication is done via an interface. Treeview.UpdateDesigner; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.UpdatePositions(Force: Boolean = False); // Recalculates the left border of every column and updates their position property according to the // PostionToIndex array which primarily determines where each column is placed visually. var I, RunningPos: Integer; begin if not FNeedPositionsFix and (Force or (UpdateCount = 0)) then begin RunningPos := 0; for I := 0 to High(FPositionToIndex) do with Items[FPositionToIndex[I]] do begin FPosition := I; FLeft := RunningPos; if coVisible in FOptions then Inc(RunningPos, FWidth); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.Add: TVirtualTreeColumn; begin Result := TVirtualTreeColumn(inherited Add); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AnimatedResize(Column: TColumnIndex; NewWidth: Integer); // Resizes the given column animated by scrolling the window DC. {$ifndef INCOMPLETE_WINAPI} var OldWidth: Integer; DC: HDC; I, Steps, DX: Integer; HeaderScrollRect, ScrollRect, R: TRect; NewBrush, LastBrush: HBRUSH; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} if not IsValidColumn(Column) then exit; // Just in case. // Make sure the width constrains are considered. if NewWidth < Items[Column].FMinWidth then NewWidth := Items[Column].FMinWidth; if NewWidth > Items[Column].FMaxWidth then NewWidth := Items[Column].FMaxWidth; OldWidth := Items[Column].Width; // Nothing to do if the width is the same. if OldWidth <> NewWidth then begin if not ( (hoDisableAnimatedResize in FHeader.Options) or (coDisableAnimatedResize in Items[Column].Options) ) then begin DC := GetWindowDC(FHeader.Treeview.Handle); with FHeader.Treeview do try Steps := 32; DX := (NewWidth - OldWidth) div Steps; // Determination of the scroll rectangle is a bit complicated since we neither want // to scroll the scrollbars nor the border of the treeview window. HeaderScrollRect := FHeaderRect; ScrollRect := HeaderScrollRect; // Exclude the header itself from scrolling. ScrollRect.Top := ScrollRect.Bottom; ScrollRect.Bottom := ScrollRect.Top + ClientHeight; ScrollRect.Right := ScrollRect.Left + ClientWidth; with Items[Column] do Inc(ScrollRect.Left, FLeft + FWidth); HeaderScrollRect.Left := ScrollRect.Left; HeaderScrollRect.Right := ScrollRect.Right; // When the new width is larger then avoid artefacts on the left hand side // by deleting a small stripe if NewWidth > OldWidth then begin R := ScrollRect; NewBrush := CreateSolidBrush(ColorToRGB(Brush.Color)); LastBrush := SelectObject(DC, NewBrush); R.Right := R.Left + DX; FillRect(DC, R, NewBrush); SelectObject(DC, LastBrush); DeleteObject(NewBrush); end else begin Inc(HeaderScrollRect.Left, DX); Inc(ScrollRect.Left, DX); end; for I := 0 to Steps - 1 do begin ScrollDC(DC, DX, 0, HeaderScrollRect, HeaderScrollRect, 0, nil); Inc(HeaderScrollRect.Left, DX); ScrollDC(DC, DX, 0, ScrollRect, ScrollRect, 0, nil); Inc(ScrollRect.Left, DX); Sleep(1); end; finally ReleaseDC(Handle, DC); end; end; Items[Column].Width := NewWidth; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Assign(Source: TPersistent); begin // Let the collection class assign the items. inherited; if Source is TVirtualTreeColumns then begin // Copying the position array is the only needed task here. FPositionToIndex := Copy(TVirtualTreeColumns(Source).FPositionToIndex, 0, MaxInt); // Make sure the left edges are correct after assignment. FNeedPositionsFix := False; UpdatePositions(True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Clear; begin FClearing := True; try // Since we're freeing all columns, the following have to be true when we're done. FHoverIndex := NoColumn; FDownIndex := NoColumn; FTrackIndex := NoColumn; FClickIndex := NoColumn; with Header do if not (hsLoading in FStates) then begin FAutoSizeIndex := NoColumn; FMainColumn := NoColumn; FSortColumn := NoColumn; end; inherited Clear; finally FClearing := False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.ColumnFromPosition(const P: TPoint; Relative: Boolean = True): TColumnIndex; // Determines the current column based on the position passed in P. var I, Sum: Integer; begin Result := InvalidColumn; // The position must be within the header area, but we extend the vertical bounds to the entire treeview area. if (P.X >= 0) and (P.Y >= 0) and (P.Y <= FHeader.TreeView.Height) then with FHeader, Treeview do begin if Relative and (P.X > GetVisibleFixedWidth) then Sum := -FEffectiveOffsetX else Sum := 0; if UseRightToLeftAlignment then Inc(Sum, ComputeRTLOffset(True)); for I := 0 to Count - 1 do if coVisible in Items[FPositionToIndex[I]].FOptions then begin Inc(Sum, Items[FPositionToIndex[I]].Width); if P.X < Sum then begin Result := FPositionToIndex[I]; Break; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.ColumnFromPosition(PositionIndex: TColumnPosition): TColumnIndex; // Returns the index of the column at the given position. begin if Integer(PositionIndex) < Length(FPositionToIndex) then Result := FPositionToIndex[PositionIndex] else Result := NoColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.Equals(OtherColumnsObj: TObject): Boolean; // Compares itself with the given set of columns and returns True if all published properties are the same // (including column order), otherwise False is returned. var I: Integer; OtherColumns : TVirtualTreeColumns; begin if not (OtherColumnsObj is TVirtualTreeColumns) then begin Result := False; Exit end; OtherColumns := TVirtualTreeColumns (OtherColumnsObj); // Same number of columns? Result := OtherColumns.Count = Count; if Result then begin // Same order of columns? Result := CompareMem(Pointer(FPositionToIndex), Pointer(OtherColumns.FPositionToIndex), Length(FPositionToIndex) * SizeOf(TColumnIndex)); if Result then begin for I := 0 to Count - 1 do if not Items[I].Equals(OtherColumns[I]) then begin Result := False; Break; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.GetColumnBounds(Column: TColumnIndex; out Left, Right: Integer); // Returns the left and right bound of the given column. If Column is NoColumn then the entire client width is returned. begin if Column <= NoColumn then begin Left := 0; Right := FHeader.Treeview.ClientWidth; end else begin Left := Items[Column].Left; Right := Left + Items[Column].Width; if FHeader.Treeview.UseRightToLeftAlignment then begin Inc(Left, FHeader.Treeview.ComputeRTLOffset(True)); Inc(Right, FHeader.Treeview.ComputeRTLOffset(True)); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetScrollWidth: Integer; // Returns the average width of all visible, non-fixed columns. If there is no such column the indent is returned. var I: Integer; ScrollColumnCount: Integer; begin Result := 0; ScrollColumnCount := 0; for I := 0 to FHeader.Columns.Count - 1 do begin if ([coVisible, coFixed] * FHeader.Columns[I].Options = [coVisible]) then begin Inc(Result, FHeader.Columns[I].Width); Inc(ScrollColumnCount); end; end; if ScrollColumnCount > 0 then // use average width Result := Round(Result / ScrollColumnCount) else // use indent Result := Integer(FHeader.Treeview.FIndent); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetFirstVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the index of the first visible column or "InvalidColumn" if either no columns are defined or // all columns are hidden. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. var I: Integer; begin Result := InvalidColumn; for I := 0 to Count - 1 do if (coVisible in Items[FPositionToIndex[I]].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[FPositionToIndex[I]].FOptions) ) then begin Result := FPositionToIndex[I]; Break; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetLastVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the index of the last visible column or "InvalidColumn" if either no columns are defined or // all columns are hidden. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. var I: Integer; begin Result := InvalidColumn; for I := Count - 1 downto 0 do if (coVisible in Items[FPositionToIndex[I]].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[FPositionToIndex[I]].FOptions) ) then begin Result := FPositionToIndex[I]; Break; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNextColumn(Column: TColumnIndex): TColumnIndex; // Returns the next column in display order. Column is the index of an item in the collection (a column). var Position: Integer; begin if Column < 0 then Result := InvalidColumn else begin Position := Items[Column].Position; if Position < Count - 1 then Result := FPositionToIndex[Position + 1] else Result := InvalidColumn; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNextVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the next visible column in display order, Column is an index into the columns list. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. begin Result := Column; repeat Result := GetNextColumn(Result); until (Result = InvalidColumn) or ( (coVisible in Items[Result].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[Result].FOptions) ) ); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetPreviousColumn(Column: TColumnIndex): TColumnIndex; // Returns the previous column in display order, Column is an index into the columns list. var Position: Integer; begin if Column < 0 then Result := InvalidColumn else begin Position := Items[Column].Position; if Position > 0 then Result := FPositionToIndex[Position - 1] else Result := InvalidColumn; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetPreviousVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the previous visible column in display order, Column is an index into the columns list. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. begin Result := Column; repeat Result := GetPreviousColumn(Result); until (Result = InvalidColumn) or ( (coVisible in Items[Result].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[Result].FOptions) ) ); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetVisibleColumns: TColumnsArray; // Returns a list of all currently visible columns in actual order. var I, Counter: Integer; begin SetLength(Result, Count); Counter := 0; for I := 0 to Count - 1 do if coVisible in Items[FPositionToIndex[I]].FOptions then begin Result[Counter] := Items[FPositionToIndex[I]]; Inc(Counter); end; // Set result length to actual visible count. SetLength(Result, Counter); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetVisibleFixedWidth: Integer; // Determines the horizontal space all visible and fixed columns occupy. var I: Integer; begin Result := 0; for I := 0 to Count - 1 do begin if Items[I].Options * [coVisible, coFixed] = [coVisible, coFixed] then Inc(Result, Items[I].Width); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.IsValidColumn(Column: TColumnIndex): Boolean; // Determines whether the given column is valid or not, that is, whether it is one of the current columns. begin Result := (Column > NoColumn) and (Column < Count); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.LoadFromStream(const Stream: TStream; Version: Integer); var I, ItemCount: Integer; begin Clear; Stream.ReadBuffer(ItemCount, SizeOf(ItemCount)); // number of columns if ItemCount > 0 then begin BeginUpdate; try for I := 0 to ItemCount - 1 do Add.LoadFromStream(Stream, Version); SetLength(FPositionToIndex, ItemCount); Stream.ReadBuffer(FPositionToIndex[0], ItemCount * SizeOf(Cardinal)); UpdatePositions(True); finally EndUpdate; end; end; // Data introduced with header stream version 5 // LCL port started with header stream version 6 so no need to do the check here Stream.ReadBuffer(FDefaultWidth, SizeOf(FDefaultWidth)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.PaintHeader(DC: HDC; const R: TRect; HOffset: Integer); // Main paint method to draw the header. const SortGlyphs: array[TSortDirection, Boolean] of Integer = ( // ascending/descending, normal/XP style (3, 5) {ascending}, (2, 4) {descending} ); var I, Y, SortIndex: Integer; Run: TRect; RightBorderFlag, NormalButtonStyle, NormalButtonFlags, PressedButtonStyle, PressedButtonFlags, RaisedButtonStyle, RaisedButtonFlags: Cardinal; DrawFormat: Cardinal; Images: TCustomImageList; ButtonRgn: HRGN; OwnerDraw, WrapCaption, AdvancedOwnerDraw: Boolean; {$ifdef ThemeSupport} Details: TThemedElementDetails; {$endif ThemeSupport} PaintInfo: THeaderPaintInfo; RequestedElements, ActualElements: THeaderPaintElements; Temp: TRect; ColCaptionText: String; ColImages: TCustomImageList; ColImageIndex: Integer; begin Run := FHeader.Treeview.FHeaderRect; FHeaderBitmap.Width := Max(Run.Right, R.Right - R.Left); FHeaderBitmap.Height := Run.Bottom; OwnerDraw := (hoOwnerDraw in FHeader.FOptions) and Assigned(FHeader.Treeview.FOnHeaderDraw) and not (csDesigning in FHeader.Treeview.ComponentState); AdvancedOwnerDraw := (hoOwnerDraw in FHeader.FOptions) and Assigned(FHeader.Treeview.FOnAdvancedHeaderDraw) and Assigned(FHeader.Treeview.FOnHeaderDrawQueryElements) and not (csDesigning in FHeader.Treeview.ComponentState); // If both draw posibillities are specified then prefer the advanced way. if AdvancedOwnerDraw then OwnerDraw := False; FillChar(PaintInfo, SizeOf(PaintInfo),#0); PaintInfo.TargetCanvas := FHeaderBitmap.Canvas; with PaintInfo, TargetCanvas do begin Font := FHeader.FFont; RaisedButtonStyle := 0; RaisedButtonFlags := 0; case FHeader.Style of hsThickButtons: begin NormalButtonStyle := BDR_RAISEDINNER or BDR_RAISEDOUTER; NormalButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_SOFT or BF_ADJUST; PressedButtonStyle := BDR_RAISEDINNER or BDR_RAISEDOUTER; PressedButtonFlags := NormalButtonFlags or BF_RIGHT or BF_FLAT or BF_ADJUST; end; hsFlatButtons: begin NormalButtonStyle := BDR_RAISEDINNER; NormalButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_ADJUST; PressedButtonStyle := BDR_SUNKENOUTER; PressedButtonFlags := BF_RECT or BF_MIDDLE or BF_ADJUST; end; else // hsPlates or hsXPStyle, values are not used in the latter case begin NormalButtonStyle := BDR_RAISEDINNER; NormalButtonFlags := BF_RECT or BF_MIDDLE or BF_SOFT or BF_ADJUST; PressedButtonStyle := BDR_SUNKENOUTER; PressedButtonFlags := BF_RECT or BF_MIDDLE or BF_ADJUST; RaisedButtonStyle := BDR_RAISEDINNER; RaisedButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_ADJUST; end; end; // Use shortcut for the images. Images := FHeader.FImages; // Erase background of the header. // See if the application wants to do that on its own. RequestedElements := []; if AdvancedOwnerDraw then begin PaintInfo.PaintRectangle := R; PaintInfo.Column := nil; FHeader.Treeview.DoHeaderDrawQueryElements(PaintInfo, RequestedElements); end; if hpeBackground in RequestedElements then begin FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, [hpeBackground]); end else begin {$ifdef ThemeSupport} if tsUseThemes in FHeader.Treeview.FStates then begin Details := ThemeServices.GetElementDetails(thHeaderItemRightNormal); ThemeServices.DrawElement(Handle, Details, R, @R); end else {$endif ThemeSupport} if FHeader.Style = hsXPStyle then DrawXPButton(Handle, Run, False, False, False) else begin Brush.Color := FHeader.FBackground; FillRect(R); end; end; Run.Top := R.Top; Run.Right := R.Left; Run.Bottom := R.Bottom; // Run.Left is set in the loop // Consider right-to-left directionality. with FHeader.Treeview do if UseRightToLeftAlignment then Inc(Run.Right, ComputeRTLOffset); Temp := Run; //todo_lcl_check ShowRightBorder := (FHeader.Style = hsThickButtons) or not (hoAutoResize in FHeader.FOptions);// or //(FHeader.Treeview.BevelKind = bkNone); // Now go for each button. for I := 0 to Count - 1 do begin with Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if not (coFixed in FOptions) then begin Inc(Run.Right, HOffset); HOffset := 0; end; Temp := Rect(Temp.Right, Run.Top, Max(Temp.Right, Run.Right + Width), Run.Bottom); Run.Left := Run.Right; Inc(Run.Right, Width); // Skip columns which are not visible at all. if (Run.Right > R.Left) and (Run.Right > Temp.Left) then begin // Stop painting if the rectangle is filled. if Run.Left > R.Right then Break; // Create a clip region to avoid overpainting any other area which does not belong to this column. if Temp.Right > R.Right then Temp.Right := R.Right; if Temp.Left < R.Left then Temp.Left := R.Left; ButtonRgn := CreateRectRgnIndirect(Temp); SelectClipRgn(Handle, ButtonRgn); DeleteObject(ButtonRgn); //lclheader //Under Delphi/VCL, unlike LCL, the hover index is not changed while dragging. //Here we check if dragging and not draw as hover IsHoverIndex := (Integer(FPositionToIndex[I]) = FHoverIndex) and (hoHotTrack in FHeader.FOptions) and (coEnabled in FOptions) and not (hsDragging in FHeader.States); IsDownIndex := Integer(FPositionToIndex[I]) = FDownIndex; if (coShowDropMark in FOptions) and (Integer(FPositionToIndex[I]) = FDropTarget) and (Integer(FPositionToIndex[I]) <> FDragIndex) then begin if FDropBefore then DropMark := dmmLeft else DropMark := dmmRight; end else DropMark := dmmNone; IsEnabled := (coEnabled in FOptions) and (FHeader.Treeview.Enabled); ShowHeaderGlyph := (hoShowImages in FHeader.FOptions) and Assigned(Images) and (FImageIndex > -1); ShowSortGlyph := (Integer(FPositionToIndex[I]) = FHeader.FSortColumn) and (hoShowSortGlyphs in FHeader.FOptions); WrapCaption := coWrapCaption in FOptions; PaintRectangle := Run; // This path for text columns or advanced owner draw. if (Style = vsText) or not OwnerDraw or AdvancedOwnerDraw then begin // See if the application wants to draw part of the header itself. RequestedElements := []; if AdvancedOwnerDraw then begin PaintInfo.Column := Items[FPositionToIndex[I]]; FHeader.Treeview.DoHeaderDrawQueryElements(PaintInfo, RequestedElements); end; if ShowRightBorder or (I < Count - 1) then RightBorderFlag := BF_RIGHT else RightBorderFlag := 0; if hpeBackground in RequestedElements then FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, [hpeBackground]) else begin // Draw button first before setting the clip region. {$ifdef ThemeSupport} if tsUseThemes in FHeader.Treeview.FStates then begin if IsDownIndex then Details := ThemeServices.GetElementDetails(thHeaderItemPressed) else if IsHoverIndex then Details := ThemeServices.GetElementDetails(thHeaderItemHot) else Details := ThemeServices.GetElementDetails(thHeaderItemNormal); ThemeServices.DrawElement(Handle, Details, PaintRectangle, @PaintRectangle); end else {$endif ThemeSupport} begin if FHeader.Style = hsXPStyle then DrawXPButton(Handle, PaintRectangle, RightBorderFlag <> 0, IsDownIndex, IsHoverIndex) else if IsDownIndex then DrawEdge(Handle, PaintRectangle, PressedButtonStyle, PressedButtonFlags) else // Plates have the special case of raising on mouse over. if (FHeader.Style = hsPlates) and IsHoverIndex and (coAllowClick in FOptions) and (coEnabled in FOptions) then DrawEdge(Handle, PaintRectangle, RaisedButtonStyle, RaisedButtonFlags or RightBorderFlag) else DrawEdge(Handle, PaintRectangle, NormalButtonStyle, NormalButtonFlags or RightBorderFlag); end; end; end; PaintRectangle := Run; if (Style = vsText) or not OwnerDraw or AdvancedOwnerDraw then begin // calculate text and glyph position InflateRect(PaintRectangle, -2, -2); DrawFormat := DT_TOP or DT_NOPREFIX; case CaptionAlignment of taLeftJustify : DrawFormat := DrawFormat or DT_LEFT; taRightJustify : DrawFormat := DrawFormat or DT_RIGHT; taCenter : DrawFormat := DrawFormat or DT_CENTER; end; if UseRightToLeftReading then DrawFormat := DrawFormat + DT_RTLREADING; ComputeHeaderLayout(Handle, PaintRectangle, ShowHeaderGlyph, ShowSortGlyph, GlyphPos, SortGlyphPos, TextRectangle, DrawFormat); // Move glyph and text one pixel to the right and down to simulate a pressed button. if IsDownIndex then begin OffsetRect(TextRectangle, 1, 1); Inc(GlyphPos.X); Inc(GlyphPos.Y); Inc(SortGlyphPos.X); Inc(SortGlyphPos.Y); end; // Advanced owner draw allows to paint elements, which would normally not be painted (because of space // limitations, empty captions etc.). ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark, hpeText]; // main glyph FHasImage := False; if not (hpeHeaderGlyph in ActualElements) and ShowHeaderGlyph and (not ShowSortGlyph or (FBidiMode <> bdLeftToRight) or (GlyphPos.X + Images.Width <= SortGlyphPos.X) ) then begin if not FCheckBox then begin ColImages := Images; ColImageIndex := FImageIndex; ColImages.Draw(FHeaderBitmap.Canvas, GlyphPos.X, GlyphPos.Y, ColImageIndex, IsEnabled ); end else begin with Header.Treeview do begin CheckImageListNeeded; ColImageIndex := GetCheckImage(nil, FCheckType, FCheckState, IsEnabled); {$ifdef USE_DELPHICOMPAT} with FCheckImages do DirectMaskBlt(FHeaderBitmap.Canvas.Handle, GlyphPos.X, GlyphPos.Y, Height, Height, Canvas.Handle, ColImageIndex * Height, 0, MaskHandle); {$else} with FCheckImages do StretchMaskBlt(FHeaderBitmap.Canvas.Handle, GlyphPos.X, GlyphPos.Y, Height, Height, Canvas.Handle, ColImageIndex * Height, 0, Height, Height, MaskHandle, ColImageIndex * Height, 0, SRCCOPY); {$endif} end; end; FHasImage := True; with FImageRect do begin Left := GlyphPos.X; Top := GlyphPos.Y; Right := Left + ColImages.Width; Bottom := Top + ColImages.Height; end; end; // caption if WrapCaption then ColCaptionText := FCaptionText else ColCaptionText := Text; if not (hpeText in ActualElements) and (Length(Text) > 0) then DrawButtonText(Handle, ColCaptionText, TextRectangle, IsEnabled, IsHoverIndex and (hoHotTrack in FHeader.FOptions) and not (tsUseThemes in FHeader.Treeview.FStates), DrawFormat, WrapCaption ); // sort glyph if not (hpeSortGlyph in ActualElements) and ShowSortGlyph then begin SortIndex := SortGlyphs[FHeader.FSortDirection, tsUseThemes in FHeader.Treeview.FStates]; {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, SortIndex * UtilityImageSize, 0, UtilityImages.MaskHandle); {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, SortIndex * UtilityImageSize, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle,SortIndex * UtilityImageSize, 0, SRCCOPY); {$endif} end; // Show an indication if this column is the current drop target in a header drag operation. if not (hpeDropMark in ActualElements) and (DropMark <> dmmNone) then begin Y := (PaintRectangle.Top + PaintRectangle.Bottom - UtilityImages.Height) div 2; if DropMark = dmmLeft then {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Left, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, 0, 0, UtilityImages.MaskHandle) {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Left, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, 0, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle, 0, 0, SRCCOPY) {$endif} else {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Right - 16, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, UtilityImageSize, 0, UtilityImages.MaskHandle); {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Right - 16, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, UtilityImageSize, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle, UtilityImageSize, 0, SRCCOPY); {$endif} end; if ActualElements <> [] then begin SaveHandleState; FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, ActualElements); RestoreHandleState; end; end else // Let application draw the header. FHeader.Treeview.DoHeaderDraw(FHeaderBitmap.Canvas, Items[FPositionToIndex[I]], PaintRectangle, IsHoverIndex, IsDownIndex, DropMark); SelectClipRgn(Handle, 0); end; end; end; // Blit the result to target. with R do BitBlt(DC, Left, Top, Right - Left, Bottom - Top, Handle, Left, Top, SRCCOPY); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SaveToStream(const Stream: TStream); var I: Integer; begin I := Count; Stream.WriteBuffer(I, SizeOf(I)); if I > 0 then begin for I := 0 to Count - 1 do TVirtualTreeColumn(Items[I]).SaveToStream(Stream); Stream.WriteBuffer(FPositionToIndex[0], Count * SizeOf(Cardinal)); end; // Data introduced with header stream version 5. Stream.WriteBuffer(DefaultWidth, SizeOf(DefaultWidth)); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.TotalWidth: Integer; var LastColumn: TColumnIndex; begin Result := 0; if (Count > 0) and (Length(FPositionToIndex) > 0) then begin LastColumn := FPositionToIndex[Count - 1]; if not (coVisible in Items[LastColumn].FOptions) then LastColumn := GetPreviousVisibleColumn(LastColumn); if LastColumn > NoColumn then with Items[LastColumn] do Result := FLeft + FWidth end; end; //----------------- TVTFixedAreaConstraints ---------------------------------------------------------------------------- constructor TVTFixedAreaConstraints.Create(AOwner: TVTHeader); begin inherited Create; FHeader := AOwner; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.SetConstraints(Index: Integer; Value: TVTConstraintPercent); begin case Index of 0: if Value <> FMaxHeightPercent then begin FMaxHeightPercent := Value; if (Value > 0) and (Value < FMinHeightPercent) then FMinHeightPercent := Value; Change; end; 1: if Value <> FMaxWidthPercent then begin FMaxWidthPercent := Value; if (Value > 0) and (Value < FMinWidthPercent) then FMinWidthPercent := Value; Change; end; 2: if Value <> FMinHeightPercent then begin FMinHeightPercent := Value; if (FMaxHeightPercent > 0) and (Value > FMaxHeightPercent) then FMaxHeightPercent := Value; Change; end; 3: if Value <> FMinWidthPercent then begin FMinWidthPercent := Value; if (FMaxWidthPercent > 0) and (Value > FMaxWidthPercent) then FMaxWidthPercent := Value; Change; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.Change; begin if Assigned(FOnChange) then FOnChange(Self); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.Assign(Source: TPersistent); begin if Source is TVTFixedAreaConstraints then begin FMaxHeightPercent := TVTFixedAreaConstraints(Source).FMaxHeightPercent; FMaxWidthPercent := TVTFixedAreaConstraints(Source).FMaxWidthPercent; FMinHeightPercent := TVTFixedAreaConstraints(Source).FMinHeightPercent; FMinWidthPercent := TVTFixedAreaConstraints(Source).FMinWidthPercent; Change; end else inherited; end; //----------------- TVTHeader ----------------------------------------------------------------------------------------- constructor TVTHeader.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; FColumns := GetColumnsClass.Create(Self); FHeight := 17; FDefaultHeight := 17; FMinHeight := 10; FMaxHeight := 10000; FFont := TFont.Create; FFont.OnChange := FontChanged; FParentFont := False; FBackground := clBtnFace; FOptions := [hoColumnResize, hoDrag, hoShowSortGlyphs]; FImageChangeLink := TChangeLink.Create; FImageChangeLink.OnChange := ImageListChange; FSortColumn := NoColumn; FSortDirection := sdAscending; FMainColumn := NoColumn; FDragImage := TVTDragImage.Create(AOwner); with FDragImage do begin Fade := False; PostBlendBias := 0; PreBlendBias := -50; Transparency := 140; end; FFixedAreaConstraints := TVTFixedAreaConstraints.Create(Self); FFixedAreaConstraints.OnChange := FixedAreaConstraintsChanged; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTHeader.Destroy; begin FDragImage.Free; FFixedAreaConstraints.Free; FImageChangeLink.Free; FFont.Free; FColumns.Clear; // TCollection's Clear method is not virtual, so we have to call our own Clear method manually. FColumns.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.FontChanged(Sender: TObject); begin Invalidate(nil); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetMainColumn: TColumnIndex; begin if FColumns.Count > 0 then Result := FMainColumn else Result := NoColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetUseColumns: Boolean; begin Result := FColumns.Count > 0; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.IsFontStored: Boolean; begin Result := not ParentFont; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetAutoSizeIndex(Value: TColumnIndex); begin if FAutoSizeIndex <> Value then begin FAutoSizeIndex := Value; if hoAutoResize in FOptions then Columns.AdjustAutoSize(InvalidColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetBackground(Value: TColor); begin if FBackground <> Value then begin FBackground := Value; Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetColumns(Value: TVirtualTreeColumns); begin FColumns.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetDefaultHeight(Value: Integer); begin if Value < FMinHeight then Value := FMinHeight; if Value > FMaxHeight then Value := FMaxHeight; if FHeight = FDefaultHeight then SetHeight(Value); FDefaultHeight := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetFont(const Value: TFont); begin FFont.Assign(Value); FParentFont := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetHeight(Value: Integer); var RelativeMaxHeight, RelativeMinHeight, EffectiveMaxHeight, EffectiveMinHeight: Integer; begin if not TreeView.HandleAllocated then begin FHeight := Value; Include(FStates, hsNeedScaling); end else begin with FFixedAreaConstraints do begin RelativeMaxHeight := ((Treeview.ClientHeight + FHeight) * FMaxHeightPercent) div 100; RelativeMinHeight := ((Treeview.ClientHeight + FHeight) * FMinHeightPercent) div 100; EffectiveMinHeight := IfThen(FMaxHeightPercent > 0, Min(RelativeMaxHeight, FMinHeight), FMinHeight); EffectiveMaxHeight := IfThen(FMinHeightPercent > 0, Max(RelativeMinHeight, FMaxHeight), FMaxHeight); Value := Min(Max(Value, EffectiveMinHeight), EffectiveMaxHeight); if FMinHeightPercent > 0 then Value := Max(RelativeMinHeight, Value); if FMaxHeightPercent > 0 then Value := Min(RelativeMaxHeight, Value); end; if FHeight <> Value then begin FHeight := Value; if not (csLoading in Treeview.ComponentState) and not (hsScaling in FStates) then RecalculateHeader; Treeview.Invalidate; UpdateWindow(Treeview.Handle); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetImages(const Value: TCustomImageList); begin if FImages <> Value then begin if Assigned(FImages) then begin FImages.UnRegisterChanges(FImageChangeLink); FImages.RemoveFreeNotification(FOwner); end; FImages := Value; if Assigned(FImages) then begin FImages.RegisterChanges(FImageChangeLink); FImages.FreeNotification(FOwner); end; if not (csLoading in Treeview.ComponentState) then Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMainColumn(Value: TColumnIndex); begin if csLoading in Treeview.ComponentState then FMainColumn := Value else begin if Value < 0 then Value := 0; if Value > FColumns.Count - 1 then Value := FColumns.Count - 1; if Value <> FMainColumn then begin FMainColumn := Value; if Treeview.HandleAllocated then begin Treeview.MainColumnChanged; if not (toExtendedFocus in Treeview.FOptions.FSelectionOptions) then Treeview.FocusedColumn := Value; Treeview.Invalidate; end else begin if not (toExtendedFocus in Treeview.FOptions.FSelectionOptions) then Treeview.FFocusedColumn := Value; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMaxHeight(Value: Integer); begin if Value < FMinHeight then Value := FMinHeight; if not IsWinNT and (Value > 10000) then Value := 10000; FMaxHeight := Value; SetHeight(FHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMinHeight(Value: Integer); begin if Value < 0 then Value := 0; if Value > FMaxHeight then Value := FMaxHeight; FMinHeight := Value; SetHeight(FHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetOptions(Value: TVTHeaderOptions); var ToBeSet, ToBeCleared: TVTHeaderOptions; begin ToBeSet := Value - FOptions; ToBeCleared := FOptions - Value; FOptions := Value; if (hoAutoResize in (ToBeSet + ToBeCleared)) and (FColumns.Count > 0) then begin FColumns.AdjustAutoSize(InvalidColumn); if Treeview.HandleAllocated then begin Treeview.UpdateHorizontalScrollBar(False); if hoAutoResize in ToBeSet then Treeview.Invalidate; end; end; if not (csLoading in Treeview.ComponentState) and Treeview.HandleAllocated then begin if hoVisible in (ToBeSet + ToBeCleared) then RecalculateHeader; Invalidate(nil); Treeview.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetParentFont(Value: Boolean); begin if FParentFont <> Value then begin FParentFont := Value; if FParentFont then FFont.Assign(FOwner.Font); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetSortColumn(Value: TColumnIndex); begin if csLoading in Treeview.ComponentState then FSortColumn := Value else DoSetSortColumn(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetSortDirection(const Value: TSortDirection); begin if Value <> FSortDirection then begin FSortDirection := Value; Invalidate(nil); if (toAutoSort in Treeview.FOptions.FAutoOptions) and (Treeview.FUpdateCount = 0) then Treeview.SortTree(FSortColumn, FSortDirection, True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetStyle(Value: TVTHeaderStyle); begin if FStyle <> Value then begin FStyle := Value; if not (csLoading in Treeview.ComponentState) then Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.ChangeScale(M, D: Integer); begin FFont.Size := MulDiv(FFont.Size, M, D); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DetermineSplitterIndex(const P: TPoint): Boolean; // Tries to find the index of that column whose right border corresponds to P. // Result is True if column border was hit (with -3..+5 pixels tolerance). // For continuous resizing the current track index and the column's left/right border are set. // Note: The hit test is checking from right to left (or left to right in RTL mode) to make enlarging of zero-sized // columns possible. var I, VisibleFixedWidth: Integer; SplitPoint: Integer; //--------------- local function -------------------------------------------- function IsNearBy(IsFixedCol: Boolean; LeftTolerance, RightTolerance: Integer): Boolean; begin if IsFixedCol then Result := (P.X < SplitPoint + Treeview.FEffectiveOffsetX + RightTolerance) and (P.X > SplitPoint + Treeview.FEffectiveOffsetX - LeftTolerance) else Result := (P.X > VisibleFixedWidth) and (P.X < SplitPoint + RightTolerance) and (P.X > SplitPoint - LeftTolerance); end; //--------------- end local function ---------------------------------------- begin Result := False; FColumns.FTrackIndex := NoColumn; VisibleFixedWidth := FColumns.GetVisibleFixedWidth; if FColumns.Count > 0 then begin if Treeview.UseRightToLeftAlignment then begin SplitPoint := -Treeview.FEffectiveOffsetX; if Integer(Treeview.FRangeX) < Treeview.ClientWidth then Inc(SplitPoint, Treeview.ClientWidth - Integer(Treeview.FRangeX)); for I := 0 to FColumns.Count - 1 do with FColumns, Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if IsNearBy(coFixed in FOptions, 5, 3) then begin if CanSplitterResize(P, FPositionToIndex[I]) then begin Result := True; FTrackIndex := FPositionToIndex[I]; // Keep the right border of this column. This and the current mouse position // directly determine the current column width. FTrackPoint.X := SplitPoint + IfThen(coFixed in FOptions, Treeview.FEffectiveOffsetX) + FWidth; FTrackPoint.Y := P.Y; Break; end; end; Inc(SplitPoint, FWidth); end; end else begin SplitPoint := -Treeview.FEffectiveOffsetX + Integer(Treeview.FRangeX); for I := FColumns.Count - 1 downto 0 do with FColumns, Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if IsNearBy(coFixed in FOptions, 3, 5) then begin if CanSplitterResize(P, FPositionToIndex[I]) then begin Result := True; FTrackIndex := FPositionToIndex[I]; // Keep the left border of this column. This and the current mouse position // directly determine the current column width. FTrackPoint.X := SplitPoint + IfThen(coFixed in FOptions, Treeview.FEffectiveOffsetX) - FWidth; FTrackPoint.Y := P.Y; Break; end; end; Dec(SplitPoint, FWidth); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterAutoFitColumn(Column: TColumnIndex); begin if Assigned(TreeView.FOnAfterAutoFitColumn) then TreeView.FOnAfterAutoFitColumn(Self, Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterColumnWidthTracking(Column: TColumnIndex); // Tell the application that a column width tracking operation has been finished. begin if Assigned(TreeView.FOnAfterColumnWidthTracking) then TreeView.FOnAfterColumnWidthTracking(Self, Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterHeightTracking; // Tell the application that a height tracking operation has been finished. begin if Assigned(TreeView.FOnAfterHeaderHeightTracking) then TreeView.FOnAfterHeaderHeightTracking(Self); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoBeforeAutoFitColumn(Column: TColumnIndex; SmartAutoFitType: TSmartAutoFitType): Boolean; // Query the application if we may autofit a column. begin Result := True; if Assigned(TreeView.FOnBeforeAutoFitColumn) then TreeView.FOnBeforeAutoFitColumn(Self, Column, SmartAutoFitType, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoBeforeColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState); // Tell the a application that a column width tracking operation may begin. begin if Assigned(TreeView.FOnBeforeColumnWidthTracking) then TreeView.FOnBeforeColumnWidthTracking(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoBeforeHeightTracking(Shift: TShiftState); // Tell the application that a height tracking operation may begin. begin if Assigned(TreeView.FOnBeforeHeaderHeightTracking) then TreeView.FOnBeforeHeaderHeightTracking(Self, Shift); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoColumnWidthDblClickResize(Column: TColumnIndex; P: TPoint; Shift: TShiftState): Boolean; // Queries the application whether a double click on the column splitter should resize the column. begin Result := True; if Assigned(TreeView.FOnColumnWidthDblClickResize) then TreeView.FOnColumnWidthDblClickResize(Self, Column, Shift, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; begin Result := True; if Assigned(TreeView.FOnColumnWidthTracking) then TreeView.FOnColumnWidthTracking(Self, Column, Shift, TrackPoint, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoGetPopupMenu(Column: TColumnIndex; Position: TPoint): TPopupMenu; // Queries the application whether there is a column specific header popup menu. var AskParent: Boolean; begin Result := nil; if Assigned(TreeView.FOnGetPopupMenu) then TreeView.FOnGetPopupMenu(TreeView, nil, Column, Position, AskParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoHeightTracking(var P: TPoint; Shift: TShiftState): Boolean; begin Result := True; if Assigned(TreeView.FOnHeaderHeightTracking) then TreeView.FOnHeaderHeightTracking(Self, P, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoHeightDblClickResize(var P: TPoint; Shift: TShiftState): Boolean; begin Result := True; if Assigned(TreeView.FOnHeaderHeightDblClickResize) then TreeView.FOnHeaderHeightDblClickResize(Self, P, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoSetSortColumn(Value: TColumnIndex); begin if Value < NoColumn then Value := NoColumn; if Value > Columns.Count - 1 then Value := Columns.Count - 1; if FSortColumn <> Value then begin if FSortColumn > NoColumn then Invalidate(Columns[FSortColumn]); FSortColumn := Value; if FSortColumn > NoColumn then Invalidate(Columns[FSortColumn]); if (toAutoSort in Treeview.FOptions.FAutoOptions) and (Treeview.FUpdateCount = 0) then Treeview.SortTree(FSortColumn, FSortDirection, True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DragTo(const P: TPoint); // Moves the drag image to a new position, which is determined from the passed point P and the previous // mouse position. var I, NewTarget: Integer; // optimized drag image move support ClientP: TPoint; Left, Right: Integer; NeedRepaint: Boolean; // True if the screen needs an update (changed drop target or drop side) begin // Determine new drop target and which side of it is prefered. ClientP := Treeview.ScreenToClient(P); // Make coordinates relative to (0, 0) of the non-client area. Inc(ClientP.Y, FHeight); NewTarget := FColumns.ColumnFromPosition(ClientP); NeedRepaint := (NewTarget <> InvalidColumn) and (NewTarget <> FColumns.FDropTarget); if NewTarget >= 0 then begin FColumns.GetColumnBounds(NewTarget, Left, Right); if (ClientP.X < ((Left + Right) div 2)) <> FColumns.FDropBefore then begin NeedRepaint := True; FColumns.FDropBefore := not FColumns.FDropBefore; end; end; if NeedRepaint then begin // Invalidate columns which need a repaint. if FColumns.FDropTarget > NoColumn then begin I := FColumns.FDropTarget; FColumns.FDropTarget := NoColumn; Invalidate(FColumns.Items[I]); end; if (NewTarget > NoColumn) and (NewTarget <> FColumns.FDropTarget) then begin Invalidate(FColumns.Items[NewTarget]); FColumns.FDropTarget := NewTarget; end; end; FDragImage.DragTo(P, NeedRepaint); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.FixedAreaConstraintsChanged(Sender: TObject); // This method gets called when FFixedAreaConstraints is changed. begin Include(FStates, hsNeedScaling); if Treeview.HandleAllocated then RescaleHeader; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetColumnsClass: TVirtualTreeColumnsClass; // Returns the class to be used for the actual column implementation. descendants may optionally override this and // return their own class. begin Result := TVirtualTreeColumns; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetOwner: TPersistent; begin Result := FOwner; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetShiftState: TShiftState; begin Result := []; if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift); if GetKeyState(VK_LWIN) < 0 then // Mac OS X substitute of ssCtrl Include(Result, ssMeta); if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl); if GetKeyState(VK_MENU) < 0 then Include(Result, ssAlt); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.HandleHeaderMouseMove(var Message: TLMMouseMove): Boolean; var P: TPoint; I: TColumnIndex; begin Result := False; with Message do begin P := Point(XPos, YPos); if hsColumnWidthTrackPending in FStates then begin FStates := FStates - [hsColumnWidthTrackPending] + [hsColumnWidthTracking]; HandleHeaderMouseMove := True; Result := 0; end else if hsHeightTrackPending in FStates then begin FStates := FStates - [hsHeightTrackPending] + [hsHeightTracking]; HandleHeaderMouseMove := True; Result := 0; end else if hsColumnWidthTracking in FStates then begin if DoColumnWidthTracking(FColumns.FTrackIndex, GetShiftState, FTrackPoint, P) then if Treeview.UseRightToLeftAlignment then FColumns[FColumns.FTrackIndex].Width := FTrackPoint.X - XPos else FColumns[FColumns.FTrackIndex].Width := XPos - FTrackPoint.X; HandleHeaderMouseMove := True; Result := 0; end else if hsHeightTracking in FStates then begin //lclheader //fixes setting height Dec(P.Y, FHeight); if DoHeightTracking(P, GetShiftState) then SetHeight(Integer(FHeight) + P.Y); HandleHeaderMouseMove := True; Result := 0; end else begin if hsDragPending in FStates then begin P := Treeview.ClientToScreen(P); // start actual dragging if allowed if (hoDrag in FOptions) and Treeview.DoHeaderDragging(FColumns.FDownIndex) then begin if ((Abs(FDragStart.X - P.X) > DragManager.DragThreshold) or (Abs(FDragStart.Y - P.Y) > DragManager.DragThreshold)) then begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag], 'HandleHeaderMouseMove - DragIndex: %d - DownIndex: %d', [FColumns.FDragIndex, FColumns.FDownIndex]);{$endif} I := FColumns.FDownIndex; FColumns.FDownIndex := NoColumn; FColumns.FHoverIndex := NoColumn; if I > NoColumn then Invalidate(FColumns[I]); //todo: implement drag image under gtk PrepareDrag(P, FDragStart); FStates := FStates - [hsDragPending] + [hsDragging]; HandleHeaderMouseMove := True; Result := 0; end; end; end else if hsDragging in FStates then begin DragTo(Treeview.ClientToScreen(P)); HandleHeaderMouseMove := True; Result := 0; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.HandleMessage(var Message: TLMessage): Boolean; // The header gets here the opportunity to handle certain messages before they reach the tree. This is important // because the tree needs to handle various non-client area messages for the header as well as some dragging/tracking // events. // By returning True the message will not be handled further, otherwise the message is then dispatched // to the proper message handlers. var P: TPoint; R: TRect; I: TColumnIndex; OldPosition: Integer; HitIndex: TColumnIndex; NewCursor: HCURSOR; Button: TMouseButton; Menu: TPopupMenu; IsInHeader, IsHSplitterHit, IsVSplitterHit: Boolean; //--------------- local function -------------------------------------------- function HSPlitterHit: Boolean; var NextCol: TColumnIndex; begin Result := (hoColumnResize in FOptions) and DetermineSplitterIndex(P); if Result and not InHeader(P) then begin NextCol := FColumns.GetNextVisibleColumn(FColumns.FTrackIndex); if not (coFixed in FColumns[FColumns.FTrackIndex].Options) or (NextCol <= NoColumn) or (coFixed in FColumns[NextCol].Options) or (P.Y > Integer(Treeview.FRangeY)) then Result := False; end; end; //--------------- end local function ---------------------------------------- begin Result := False; case Message.Msg of LM_SIZE: begin if not (tsWindowCreating in FOwner.FStates) then if (hoAutoResize in FOptions) and not (hsAutoSizing in FStates) then begin FColumns.AdjustAutoSize(InvalidColumn); Invalidate(nil); end else if not (hsScaling in FStates) then begin RescaleHeader; Invalidate(nil); end; end; CM_PARENTFONTCHANGED: if FParentFont then FFont.Assign(FOwner.Font); CM_BIDIMODECHANGED: for I := 0 to FColumns.Count - 1 do if coParentBiDiMode in FColumns[I].FOptions then FColumns[I].ParentBiDiModeChanged; LM_MBUTTONDOWN: begin //lclheader: NCMessages are given in screen coordinates unlike the ordinary with TLMMButtonDown(Message) do P:= Point(XPos, YPos); //P := Treeview.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then FOwner.DoHeaderMouseDown(mbMiddle, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_MBUTTONUP: begin with TLMMButtonUp(Message) do P:= Point(XPos, YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then begin FColumns.HandleClick(P, mbMiddle, True, False); FOwner.DoHeaderMouseUp(mbMiddle, GetShiftState, P.X, P.Y + Integer(FHeight)); FColumns.FDownIndex := NoColumn; end; end; LM_LBUTTONDBLCLK, LM_MBUTTONDBLCLK, LM_RBUTTONDBLCLK: begin with TLMLButtonDblClk(Message) do P := Point(XPos, YPos); if (hoHeightDblClickResize in FOptions) and InHeaderSplitterArea(P) and (FDefaultHeight > 0) then begin if DoHeightDblClickResize(P, GetShiftState) and (FDefaultHeight > 0) then SetHeight(FMinHeight); Result := True; end else if HSplitterHit and (Message.Msg = LM_LBUTTONDBLCLK) and (hoDblClickResize in FOptions) and (FColumns.FTrackIndex > NoColumn) then begin // If the click was on a splitter then resize column to smallest width. if DoColumnWidthDblClickResize(FColumns.FTrackIndex, P, GetShiftState) then AutoFitColumns(True, smaUseColumnOption, Columns.FTrackIndex, Columns.FTrackIndex); Message.Result := 0; Result := True; end else if InHeader(P) and (Message.Msg <> LM_LBUTTONDBLCLK) then begin case Message.Msg of LM_MBUTTONDBLCLK: Button := mbMiddle; LM_RBUTTONDBLCLK: Button := mbRight; else // WM_NCLBUTTONDBLCLK Button := mbLeft; end; FColumns.HandleClick(P, Button, True, True); end; end; // The "hot" area of the headers horizontal splitter is partly within the client area of the the tree, so we need // to handle WM_LBUTTONDOWN here, too. LM_LBUTTONDOWN: begin if csDesigning in Treeview.ComponentState then Exit; Application.CancelHint; // make sure no auto scrolling is active... KillTimer(Treeview.Handle, ScrollTimer); Treeview.DoStateChange([], [tsScrollPending, tsScrolling]); // ... pending editing is cancelled (actual editing remains active) KillTimer(Treeview.Handle, EditTimer); Treeview.DoStateChange([], [tsEditPending]); with TLMLButtonDown(Message) do begin // want the drag start point in screen coordinates P := Point(XPos, YPos); FDragStart := Treeview.ClientToScreen(P); //FDragStart := Point(XPos, YPos); //P := Treeview.ScreenToClient(FDragStart); end; IsInHeader := InHeader(P); IsVSplitterHit := (hoHeightResize in FOptions) and InHeaderSplitterArea(P); IsHSplitterHit := HSplitterHit; if IsVSplitterHit or IsHSplitterHit then begin FTrackStart := P; FColumns.FHoverIndex := NoColumn; if IsVSplitterHit then begin DoBeforeHeightTracking(GetShiftState); Include(FStates, hsHeightTrackPending) end else begin DoBeforeColumnWidthTracking(FColumns.FTrackIndex, GetShiftState); Include(FStates, hsColumnWidthTrackPending); end; SetCapture(Treeview.Handle); Result := True; Message.Result := 0; end else if IsInHeader then begin HitIndex := Columns.AdjustDownColumn(P); if (hoDrag in FOptions) and (HitIndex > NoColumn) and (coDraggable in FColumns[HitIndex].FOptions) then begin // Show potential drag operation. // Disabled columns do not start a drag operation because they can't be clicked. Include(FStates, hsDragPending); SetCapture(Treeview.Handle); Result := True; Message.Result := 0; end; end; // This is a good opportunity to notify the application. if IsInHeader then FOwner.DoHeaderMouseDown(mbLeft, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_RBUTTONDOWN: begin with TLMRButtonDown(Message) do P:=Point(XPos,YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then FOwner.DoHeaderMouseDown(mbRight, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_RBUTTONUP: if not (csDesigning in FOwner.ComponentState) then with TLMRButtonUp(Message) do begin Application.CancelHint; P := Point(XPos,YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then begin FColumns.HandleClick(P, mbRight, True, False); FOwner.DoHeaderMouseUp(mbRight, GetShiftState, P.X, P.Y + Integer(FHeight)); FColumns.FDownIndex := NoColumn; FColumns.FTrackIndex := NoColumn; Menu := FPopupMenu; if not Assigned(Menu) then Menu := DoGetPopupMenu(FColumns.ColumnFromPosition(Point(P.X, P.Y + Integer(FHeight))), P); // Trigger header popup if there's one. if Assigned(Menu) then begin KillTimer(Treeview.Handle, ScrollTimer); FColumns.FHoverIndex := NoColumn; Treeview.DoStateChange([], [tsScrollPending, tsScrolling]); Menu.PopupComponent := Treeview; P := Treeview.ClientToScreen(Point(XPos, YPos)); Menu.Popup(P.X, P.Y); HandleMessage := True; end; end; end; // When the tree window has an active mouse capture then we only get "client-area" messages. LM_LBUTTONUP: begin Application.CancelHint; if FStates <> [] then begin ReleaseCapture; //lcl if hsColumnWidthTracking in FStates then begin if not InHeader(SmallPointToPoint(TLMLButtonUp(Message).Pos)) then TreeView.Cursor := crDefault; end; if hsDragging in FStates then begin // successfull dragging moves columns with TLMLButtonUp(Message) do P := Treeview.ClientToScreen(Point(XPos, YPos)); GetWindowRect(Treeview.Handle, R); {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / R',R);{$endif} with FColumns do begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropTarget: %d FDragIndex: %d FDragIndexPosition: %d', [FDropTarget, FDragIndex, FColumns[FDragIndex].Position]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropBefore', FColumns.FDropBefore);{$endif} FDragImage.EndDrag; if (FDropTarget > -1) and (FDropTarget <> FDragIndex) and PtInRect(R, P) then begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropTargetPosition', FColumns[FDropTarget].Position);{$endif} OldPosition := FColumns[FDragIndex].Position; if FColumns.FDropBefore then begin if FColumns[FDragIndex].Position < FColumns[FDropTarget].Position then FColumns[FDragIndex].Position := Max(0, FColumns[FDropTarget].Position - 1) else FColumns[FDragIndex].Position := FColumns[FDropTarget].Position; end else begin if FColumns[FDragIndex].Position < FColumns[FDropTarget].Position then FColumns[FDragIndex].Position := FColumns[FDropTarget].Position else FColumns[FDragIndex].Position := FColumns[FDropTarget].Position + 1; end; Treeview.DoHeaderDragged(FDragIndex, OldPosition); end else Treeview.DoHeaderDraggedOut(FDragIndex, P); FDropTarget := NoColumn; end; Invalidate(nil); end; Result := True; Message.Result := 0; end; case Message.Msg of LM_LBUTTONUP: with TLMLButtonUp(Message) do begin if FColumns.FDownIndex > NoColumn then FColumns.HandleClick(Point(XPos, YPos), mbLeft, False, False); if FStates <> [] then FOwner.DoHeaderMouseUp(mbLeft, KeysToShiftState(Keys), XPos, YPos); end; //todo: there's a difference here { LM_NCLBUTTONUP: with TLMLButtonUp(Message) do begin P := FOwner.ScreenToClient(Point(XPos, YPos)); FColumns.HandleClick(P, mbLeft, False, False); FOwner.DoHeaderMouseUp(mbLeft, GetShiftState, P.X, P.Y + Integer(FHeight)); end; } end; if FColumns.FTrackIndex > NoColumn then begin if hsColumnWidthTracking in FStates then DoAfterColumnWidthTracking(FColumns.FTrackIndex); Invalidate(Columns[FColumns.FTrackIndex]); FColumns.FTrackIndex := NoColumn; end; if FColumns.FDownIndex > NoColumn then begin Invalidate(Columns[FColumns.FDownIndex]); FColumns.FDownIndex := NoColumn; end; if hsHeightTracking in FStates then DoAfterHeightTracking; FStates := FStates - [hsDragging, hsDragPending, hsColumnWidthTracking, hsColumnWidthTrackPending, hsHeightTracking, hsHeightTrackPending]; end; // hovering, mouse leave detection CM_MOUSELEAVE: with FColumns do begin if FHoverIndex > NoColumn then Invalidate(Items[FHoverIndex]); FHoverIndex := NoColumn; FClickIndex := NoColumn; FDownIndex := NoColumn; end; //todo: see the difference to below LM_MOUSEMOVE: with TLMMouseMove(Message), FColumns do begin //lcl HandleMessage := HandleHeaderMouseMove(TLMMouseMove(Message)); P := Point(XPos,YPos); //P := Treeview.ScreenToClient(Point(XPos, YPos)); IsInHeader := InHeader(P); if IsInHeader then begin Treeview.DoHeaderMouseMove(GetShiftState, P.X, P.Y); if ((AdjustHoverColumn(P)) or ((FDownIndex > NoColumn) and (FHoverIndex <> FDownIndex))) then begin Invalidate(nil); // todo: under lcl, the hint is show even if HintMouseMessage is not implemented // Is it necessary here? // use Delphi's internal hint handling for header hints too if hoShowHint in FOptions then begin // client coordinates! XPos := P.x; YPos := P.y; Application.HintMouseMessage(Treeview, Message); end; end; end else begin if FHoverIndex > NoColumn then Invalidate(Items[FHoverIndex]); FHoverIndex := NoColumn; FClickIndex := NoColumn; FDownIndex := NoColumn; end; //Adjust Cursor if not (csDesigning in FOwner.ComponentState) and (FStates = []) then begin //todo: see a way to store the user defined cursor. IsHSplitterHit := IsInHeader and HSplitterHit; IsVSplitterHit := (hoHeightResize in FOptions) and InHeaderSplitterArea(P); if IsVSplitterHit or IsHSplitterHit then begin NewCursor := crDefault; if IsVSplitterHit and (hoHeightResize in FOptions) then NewCursor := crVertSplit else if IsHSplitterHit then NewCursor := crHeaderSplit; Treeview.DoGetHeaderCursor(NewCursor); if NewCursor <> crDefault then begin Treeview.Cursor := NewCursor; HandleMessage := True; Message.Result := 1; end; end; end else begin Message.Result := 1; HandleMessage := True; end; end; LM_KEYDOWN, LM_KILLFOCUS: if (Message.Msg = LM_KILLFOCUS) or (TLMKeyDown(Message).CharCode = VK_ESCAPE) then begin if hsDragging in FStates then begin ReleaseCapture; FDragImage.EndDrag; Exclude(FStates, hsDragging); FColumns.FDropTarget := NoColumn; Invalidate(nil); Result := True; Message.Result := 0; end else begin if [hsColumnWidthTracking, hsHeightTracking] * FStates <> [] then begin ReleaseCapture; if hsColumnWidthTracking in FStates then DoAfterColumnWidthTracking(FColumns.FTrackIndex); if hsHeightTracking in FStates then DoAfterHeightTracking; Result := True; Message.Result := 0; end; FStates := FStates - [hsColumnWidthTracking, hsColumnWidthTrackPending, hsHeightTracking, hsHeightTrackPending]; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.ImageListChange(Sender: TObject); begin if not (csDestroying in Treeview.ComponentState) then Invalidate(nil); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.PrepareDrag(P, Start: TPoint); // Initializes dragging of the header, P is the current mouse postion and Start the initial mouse position. var HeaderR: TRect; Image: TBitmap; ImagePos: TPoint; DragColumn: TVirtualTreeColumn; begin // Determine initial position of drag image (screen coordinates). FColumns.FDropTarget := NoColumn; Start := Treeview.ScreenToClient(Start); FColumns.FDragIndex := FColumns.ColumnFromPosition(Start); DragColumn := FColumns[FColumns.FDragIndex]; HeaderR := Treeview.FHeaderRect; // Set right border of the header rectangle to the maximum extent. // Adjust top border too, it is already covered elsewhere. HeaderR.Right := FColumns.TotalWidth; HeaderR.Top := 0; // Take out influence of border since we need a seamless drag image. OffsetRect(HeaderR, -Treeview.BorderWidth, -Treeview.BorderWidth); if Treeview.UseRightToLeftAlignment then Dec(HeaderR.Left, Treeview.ComputeRTLOffset); Image := TBitmap.Create; with Image do try PixelFormat := pf32Bit; Width := DragColumn.Width; Height := FHeight; // Erase the entire image with the color key value, for the case not everything // in the image is covered by the header image. Canvas.Brush.Color := clBtnFace; Canvas.FillRect(Rect(0, 0, Width, Height)); // Now move the window origin of bitmap DC so that although the entire header is painted // only the dragged column becomes visible. SetWindowOrgEx(Canvas.Handle, DragColumn.FLeft, 0, nil); FColumns.PaintHeader(Canvas.Handle, HeaderR, 0); SetWindowOrgEx(Canvas.Handle, 0, 0, nil); if Treeview.UseRightToLeftAlignment then ImagePos := Treeview.ClientToScreen(Point(DragColumn.Left + Treeview.ComputeRTLOffset(True), 0)) else ImagePos := Treeview.ClientToScreen(Point(DragColumn.Left, 0)); //lclheader // Column rectangles are given in local window coordinates not client coordinates. // The above statement is not valid under LCL //Dec(ImagePos.Y, FHeight); if hoRestrictDrag in FOptions then FDragImage.MoveRestriction := dmrHorizontalOnly else FDragImage.MoveRestriction := dmrNone; FDragImage.PrepareDrag(Image, ImagePos, P, nil); FDragImage.ShowDragImage; finally Image.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RecalculateHeader; // Initiate a recalculation of the non-client area of the owner tree. begin if Treeview.HandleAllocated then begin Treeview.UpdateHeaderRect; //lclheader //not necessary since header is draw inside client area //SetWindowPos(Treeview.Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOACTIVATE or SWP_NOOWNERZORDER or // SWP_NOSENDCHANGING or SWP_NOSIZE or SWP_NOZORDER); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RescaleHeader; // Rescale the fixed elements (fixed columns, header itself) to FixedAreaConstraints. var FixedWidth, MaxFixedWidth, MinFixedWidth: Integer; //--------------- local function -------------------------------------------- procedure ComputeConstraints; var I: TColumnIndex; begin with FColumns do begin I := GetFirstVisibleColumn; while I > NoColumn do begin if (coFixed in FColumns[I].Options) and (FColumns[I].Width < FColumns[I].MinWidth) then FColumns[I].FWidth := FColumns[I].FMinWidth; I := GetNextVisibleColumn(I); end; FixedWidth := GetVisibleFixedWidth; end; with FFixedAreaConstraints do begin MinFixedWidth := (TreeView.ClientWidth * FMinWidthPercent) div 100; MaxFixedWidth := (TreeView.ClientWidth * FMaxWidthPercent) div 100; end; end; //----------- end local function -------------------------------------------- begin if ([csLoading, csReading, csWriting, csDestroying] * Treeview.ComponentState = []) and not (hsLoading in FStates) and Treeview.HandleAllocated then begin Include(FStates, hsScaling); SetHeight(FHeight); RecalculateHeader; with FFixedAreaConstraints do if (FMinHeightPercent > 0) or (FMaxHeightPercent > 0) then begin ComputeConstraints; with FColumns do if (FMaxWidthPercent > 0) and (FixedWidth > MaxFixedWidth) then ResizeColumns(MaxFixedWidth - FixedWidth, 0, Count - 1, [coVisible, coFixed]) else if (FMinWidthPercent > 0) and (FixedWidth < MinFixedWidth) then ResizeColumns(MinFixedWidth - FixedWidth, 0, Count - 1, [coVisible, coFixed]); FColumns.UpdatePositions; end; Exclude(FStates, hsScaling); Exclude(FStates, hsNeedScaling); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.UpdateMainColumn; // Called once the load process of the owner tree is done. begin if FMainColumn < 0 then FMainColumn := 0; if FMainColumn > FColumns.Count - 1 then FMainColumn := FColumns.Count - 1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.UpdateSpringColumns; var I: TColumnIndex; SpringCount: Integer; Sign: Integer; ChangeBy: Single; Difference: Single; NewAccumulator: Single; begin with TreeView do ChangeBy := FHeaderRect.Right - FHeaderRect.Left - FLastWidth; if (hoAutoSpring in FOptions) and (FLastWidth <> 0) and (ChangeBy <> 0) then begin // Stay positive if downsizing the control. if ChangeBy < 0 then Sign := -1 else Sign := 1; ChangeBy := Abs(ChangeBy); // Count how many columns have spring enabled. SpringCount := 0; for I := 0 to FColumns.Count-1 do if [coVisible, coAutoSpring] * FColumns[I].FOptions = [coVisible, coAutoSpring] then Inc(SpringCount); if SpringCount > 0 then begin // Calculate the size to add/sub to each columns. Difference := ChangeBy / SpringCount; // Adjust the column's size accumulators and resize if the result is >= 1. for I := 0 to FColumns.Count - 1 do if [coVisible, coAutoSpring] * FColumns[I].FOptions = [coVisible, coAutoSpring] then begin // Sum up rest changes from previous runs and the amount from this one and store it in the // column. If there is at least one pixel difference then do a resize and reset the accumulator. NewAccumulator := FColumns[I].FSpringRest + Difference; // Set new width if at least one pixel size difference is reached. if NewAccumulator >= 1 then FColumns[I].SetWidth(FColumns[I].FWidth + (Trunc(NewAccumulator) * Sign)); FColumns[I].FSpringRest := Frac(NewAccumulator); // Keep track of the size count. ChangeBy := ChangeBy - Difference; // Exit loop if resize count drops below freezing point. if ChangeBy < 0 then Break; end; end; end; with TreeView do FLastWidth := FHeaderRect.Right - FHeaderRect.Left; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.AllowFocus(ColumnIndex: TColumnIndex): Boolean; begin Result := False; if not FColumns.IsValidColumn(ColumnIndex) then exit; // Just in case. Result := (coAllowFocus in FColumns[ColumnIndex].Options); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.Assign(Source: TPersistent); begin if Source is TVTHeader then begin AutoSizeIndex := TVTHeader(Source).AutoSizeIndex; Background := TVTHeader(Source).Background; Columns := TVTHeader(Source).Columns; Font := TVTHeader(Source).Font; FixedAreaConstraints.Assign(TVTHeader(Source).FixedAreaConstraints); Height := TVTHeader(Source).Height; Images := TVTHeader(Source).Images; MainColumn := TVTHeader(Source).MainColumn; Options := TVTHeader(Source).Options; ParentFont := TVTHeader(Source).ParentFont; PopupMenu := TVTHeader(Source).PopupMenu; SortColumn := TVTHeader(Source).SortColumn; SortDirection := TVTHeader(Source).SortDirection; Style := TVTHeader(Source).Style; RescaleHeader; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn); //--------------- local functions ------------------------------------------- function GetUseSmartColumnWidth(ColumnIndex: TColumnIndex): Boolean; begin Result := False; case SmartAutoFitType of smaAllColumns: Result := True; smaNoColumn: Result := False; smaUseColumnOption: Result := coSmartResize in FColumns.Items[ColumnIndex].FOptions; end; end; //---------------------------------------------------------------------------- procedure DoAutoFitColumn(Column: TColumnIndex); begin with FColumns do if ([coResizable, coVisible] * Items[FPositionToIndex[Column]].FOptions = [coResizable, coVisible]) and DoBeforeAutoFitColumn(FPositionToIndex[Column], SmartAutoFitType) and not TreeView.OperationCanceled then begin if Animated then AnimatedResize(FPositionToIndex[Column], Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column]))) else FColumns[FPositionToIndex[Column]].Width := Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column])); DoAfterAutoFitColumn(FPositionToIndex[Column]); end; end; //--------------- end local functions ---------------------------------------- var I: Integer; StartCol, EndCol: Integer; begin StartCol := Max(NoColumn + 1, RangeStartCol); if RangeEndCol <= NoColumn then EndCol := FColumns.Count - 1 else EndCol := Min(RangeEndCol, FColumns.Count - 1); if StartCol > EndCol then Exit; // nothing to do TreeView.BeginOperation; if Assigned(TreeView.FOnBeforeAutoFitColumns) then TreeView.FOnBeforeAutoFitColumns(Self, SmartAutoFitType); for I := StartCol to EndCol do DoAutoFitColumn(I); if Assigned(TreeView.FOnAfterAutoFitColumns) then TreeView.FOnAfterAutoFitColumns(Self); Treeview.EndOperation; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.InHeader(const P: TPoint): Boolean; // Determines whether the given point (client coordinates!) is within the header rectangle (non-client coordinates). begin //lclheader //todo: remove this function and use PtInRect directly ?? Result := PtInRect(TreeView.FHeaderRect, P); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.InHeaderSplitterArea(P: TPoint): Boolean; // Determines whether the given point (client coordinates!) hits the horizontal splitter area of the header. var R: TRect; begin Result := (hoVisible in FOptions); if Result then begin R := Treeview.FHeaderRect; R.Top := R.Bottom - 2; Inc(R.Bottom, 2); Result := PtInRect(R, P); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.Invalidate(Column: TVirtualTreeColumn; ExpandToBorder: Boolean = False); // Because the header is in the non-client area of the tree it needs some special handling in order to initiate its // repainting. // If ExpandToBorder is True then not only the given column but everything or (depending on hoFullRepaintOnResize) just // everything to its right (or left, in RTL mode) will be invalidated (useful for resizing). This makes only sense when // a column is given. var R: TRect; begin if (hoVisible in FOptions) and Treeview.HandleAllocated then with Treeview do begin if Column = nil then R := FHeaderRect else begin R := Column.GetRect; if not (coFixed in Column.Options) then OffsetRect(R, -FEffectiveOffsetX, 0); if UseRightToLeftAlignment then OffsetRect(R, ComputeRTLOffset, 0); if ExpandToBorder then begin if (hoFullRepaintOnResize in FHeader.FOptions) then begin R.Left := FHeaderRect.Left; R.Right := FHeaderRect.Right; end else begin if UseRightToLeftAlignment then R.Left := FHeaderRect.Left else R.Right := FHeaderRect.Right; end; end; end; //lclheader RedrawWindow(Handle, @R, 0, RDW_FRAME or RDW_INVALIDATE or RDW_VALIDATE or RDW_NOINTERNALPAINT or RDW_NOERASE or RDW_NOCHILDREN); { // Current position of the owner in screen coordinates. GetWindowRect(Handle, RW); // Consider the header within this rectangle. OffsetRect(R, RW.Left, RW.Top); // Expressed in client coordinates (because RedrawWindow wants them so, they will actually become negative). MapWindowPoints(0, Handle, R, 2); RedrawWindow(Handle, @R, 0, RDW_FRAME or RDW_INVALIDATE or RDW_VALIDATE or RDW_NOINTERNALPAINT or RDW_NOERASE or RDW_NOCHILDREN); } end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.LoadFromStream(const Stream: TStream); // restore the state of the header from the given stream var Dummy, Version: Integer; S: AnsiString; OldOptions: TVTHeaderOptions; begin Include(FStates, hsLoading); with Stream do try // Switch off all options which could influence loading the columns (they will be later set again). OldOptions := FOptions; FOptions := []; // Determine whether the stream contains data without a version number. ReadBuffer(Dummy, SizeOf(Dummy)); if Dummy > -1 then begin // Seek back to undo the read operation if this is an old stream format. Seek(-SizeOf(Dummy), soFromCurrent); Version := -1; end else // Read version number if this is a "versionized" format. ReadBuffer(Version, SizeOf(Version)); Columns.LoadFromStream(Stream, Version); ReadBuffer(Dummy, SizeOf(Dummy)); AutoSizeIndex := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Background := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Height := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); FOptions := OldOptions; Options := TVTHeaderOptions(Word(Dummy)); // PopupMenu is neither saved nor restored ReadBuffer(Dummy, SizeOf(Dummy)); Style := TVTHeaderStyle(Dummy); // TFont has no own save routine so we do it manually with Font do begin ReadBuffer(Dummy, SizeOf(Dummy)); Color := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Height := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(S, Dummy); ReadBuffer(PAnsiChar(S)^, Dummy); Name := S; ReadBuffer(Dummy, SizeOf(Dummy)); Pitch := TFontPitch(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Style := TFontStyles(LongWord(Dummy)); end; // LCL port started with header stream version 6 so no need to do the check here // Read data introduced by stream version 1+. ReadBuffer(Dummy, SizeOf(Dummy)); MainColumn := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SortColumn := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SortDirection := TSortDirection(Byte(Dummy)); // Read data introduced by stream version 5+. ReadBuffer(Dummy, SizeOf(Dummy)); ParentFont := Boolean(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMaxHeight := Integer(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMinHeight := Integer(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FDefaultHeight := Integer(Dummy); with FFixedAreaConstraints do begin ReadBuffer(Dummy, SizeOf(Dummy)); FMaxHeightPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, Sizeof(Dummy)); FMaxWidthPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMinHeightPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, Sizeof(Dummy)); FMinWidthPercent := TVTConstraintPercent(Dummy); end finally Exclude(FStates, hsLoading); Treeview.DoColumnResize(NoColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.ResizeColumns(ChangeBy: Integer; RangeStartCol: TColumnIndex; RangeEndCol: TColumnIndex; Options: TVTColumnOptions = [coVisible]): Integer; // Distribute the given width change to a range of columns. A 'fair' way is used to distribute ChangeBy to the columns, // while ensuring that everything that can be distributed will be distributed. var Start, I: TColumnIndex; ColCount, ToGo, Sign, Rest, MaxDelta, Difference: Integer; Constraints, Widths: Array of Integer; BonusPixel: Boolean; //--------------- local functions ------------------------------------------- function IsResizable (Column: TColumnIndex): Boolean; begin if BonusPixel then Result := Widths[Column - RangeStartCol] < Constraints[Column - RangeStartCol] else Result := Widths[Column - RangeStartCol] > Constraints[Column - RangeStartCol]; end; //--------------------------------------------------------------------------- procedure IncDelta(Column: TColumnIndex); begin if BonusPixel then Inc(MaxDelta, FColumns[Column].MaxWidth - Widths[Column - RangeStartCol]) else Inc(MaxDelta, Widths[Column - RangeStartCol] - Constraints[Column - RangeStartCol]); end; //--------------------------------------------------------------------------- function ChangeWidth(Column: TColumnIndex; Delta: Integer): Integer; begin if Delta > 0 then Delta := Min(Delta, Constraints[Column - RangeStartCol] - Widths[Column - RangeStartCol]) else Delta := Max(Delta, Constraints[Column - RangeStartCol] - Widths[Column - RangeStartCol]); Inc(Widths[Column - RangeStartCol], Delta); Dec(ToGo, Abs(Delta)); Result := Abs(Delta); end; //--------------------------------------------------------------------------- function ReduceConstraints: Boolean; var MaxWidth, MaxReserveCol, Column: TColumnIndex; begin Result := True; if not (hsScaling in FStates) or BonusPixel then Exit; MaxWidth := 0; MaxReserveCol := NoColumn; for Column := RangeStartCol to RangeEndCol do if (Options * FColumns[Column].FOptions = Options) and (FColumns[Column].FWidth > MaxWidth) then begin MaxWidth := Widths[Column - RangeStartCol]; MaxReserveCol := Column; end; if (MaxReserveCol <= NoColumn) or (Constraints[MaxReserveCol - RangeStartCol] <= 10) then Result := False else Dec(Constraints[MaxReserveCol - RangeStartCol], Constraints[MaxReserveCol - RangeStartCol] div 10); end; //----------- end local functions ------------------------------------------- begin Result := 0; if ChangeBy <> 0 then begin // Do some initialization here BonusPixel := ChangeBy > 0; Sign := IfThen(BonusPixel, 1, -1); Start := IfThen(BonusPixel, RangeStartCol, RangeEndCol); ToGo := Abs(ChangeBy); SetLength(Widths, RangeEndCol - RangeStartCol + 1); SetLength(Constraints, RangeEndCol - RangeStartCol + 1); for I := RangeStartCol to RangeEndCol do begin Widths[I - RangeStartCol] := FColumns[I].FWidth; Constraints[I - RangeStartCol] := IfThen(BonusPixel, FColumns[I].MaxWidth, FColumns[I].MinWidth); end; repeat repeat MaxDelta := 0; ColCount := 0; for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then begin Inc(ColCount); IncDelta(I); end; if MaxDelta < Abs(ChangeBy) then if not ReduceConstraints then Break; until (MaxDelta >= Abs(ChangeBy)) or not (hsScaling in FStates); if ColCount = 0 then Break; ToGo := Min(ToGo, MaxDelta); Difference := ToGo div ColCount; Rest := ToGo mod ColCount; if Difference > 0 then for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then ChangeWidth(I, Difference * Sign); // Now distribute Rest. I := Start; while Rest > 0 do begin if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then if FColumns[I].FBonusPixel <> BonusPixel then begin Dec(Rest, ChangeWidth(I, Sign)); FColumns[I].FBonusPixel := BonusPixel; end; Inc(I, Sign); if (BonusPixel and (I > RangeEndCol)) or (not BonusPixel and (I < RangeStartCol)) then begin for I := RangeStartCol to RangeEndCol do if Options * FColumns[I].FOptions = Options then FColumns[I].FBonusPixel := not FColumns[I].FBonusPixel; I := Start; end; end; until ToGo <= 0; // Now set the computed widths. We also compute the result here. Include(FStates, hsResizing); for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) then begin Inc(Result, Widths[I - RangeStartCol] - FColumns[I].FWidth); FColumns[I].SetWidth(Widths[I - RangeStartCol]); end; Exclude(FStates, hsResizing); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RestoreColumns; // Restores all columns to their width which they had before they have been auto fitted. var I: TColumnIndex; begin with FColumns do for I := Count - 1 downto 0 do if [coResizable, coVisible] * Items[FPositionToIndex[I]].FOptions = [coResizable, coVisible] then Items[I].RestoreLastWidth; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SaveToStream(const Stream: TStream); // Saves the complete state of the header into the provided stream. var Dummy: Integer; Tmp: AnsiString; begin with Stream do begin // In previous version of VT was no header stream version defined. // For feature enhancements it is necessary, however, to know which stream // format we are trying to load. // In order to distict from non-version streams an indicator is inserted. Dummy := -1; WriteBuffer(Dummy, SizeOf(Dummy)); // Write current stream version number, nothing more is required at the time being. Dummy := VTHeaderStreamVersion; WriteBuffer(Dummy, SizeOf(Dummy)); // Save columns in case they depend on certain options (like auto size). Columns.SaveToStream(Stream); Dummy := FAutoSizeIndex; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FBackground; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FHeight; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Word(FOptions); WriteBuffer(Dummy, SizeOf(Dummy)); // PopupMenu is neither saved nor restored Dummy := Ord(FStyle); WriteBuffer(Dummy, SizeOf(Dummy)); // TFont has no own save routine so we do it manually with Font do begin Dummy := Color; WriteBuffer(Dummy, SizeOf(Dummy)); // Need only to write one: size or height, I decided to write height. Dummy := Height; WriteBuffer(Dummy, SizeOf(Dummy)); Tmp := Name; Dummy := Length(Tmp); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PAnsiChar(Tmp)^, Dummy); Dummy := Ord(Pitch); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(Style); WriteBuffer(Dummy, SizeOf(Dummy)); end; // Data introduced by stream version 1. Dummy := FMainColumn; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FSortColumn; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Byte(FSortDirection); WriteBuffer(Dummy, SizeOf(Dummy)); // Data introduced by stream version 5. Dummy := Integer(ParentFont); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMaxHeight); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinHeight); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FDefaultHeight); WriteBuffer(Dummy, SizeOf(Dummy)); with FFixedAreaConstraints do begin Dummy := Integer(FMaxHeightPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMaxWidthPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinHeightPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinWidthPercent); WriteBuffer(Dummy, SizeOf(Dummy)); end end; end; //----------------- TScrollBarOptions ---------------------------------------------------------------------------------- constructor TScrollBarOptions.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; FAlwaysVisible := False; FScrollBarStyle := sbmRegular; FScrollBars := ssBoth; FIncrementX := 20; FIncrementY := 20; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetAlwaysVisible(Value: Boolean); begin if FAlwaysVisible <> Value then begin FAlwaysVisible := Value; //todo_lcl_check if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then RecreateWnd(FOwner); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetScrollBars(Value: TScrollStyle); begin if FScrollbars <> Value then begin FScrollBars := Value; //todo_lcl_check if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then RecreateWnd(FOwner); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetScrollBarStyle(Value: TVTScrollBarStyle); begin {$ifndef UseFlatScrollbars} Assert(Value = sbmRegular, 'Flat scrollbars styles are disabled. Enable UseFlatScrollbars in VTConfig.inc for' + 'flat scrollbar support.'); {$endif UseFlatScrollbars} if FScrollBarStyle <> Value then begin FScrollBarStyle := Value; {$ifdef UseFlatScrollbars} if FOwner.HandleAllocated then begin // If set to regular style then don't use the emulation mode of the FlatSB APIs but the original APIs. // This is necessary because the FlatSB APIs don't respect NC paint request with limited update region // (which is necessary for the transparent drag image). FOwner.RecreateWnd; end; {$endif UseFlatScrollbars} end; end; //---------------------------------------------------------------------------------------------------------------------- function TScrollBarOptions.GetOwner: TPersistent; begin Result := FOwner; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.Assign(Source: TPersistent); begin if Source is TScrollBarOptions then begin AlwaysVisible := TScrollBarOptions(Source).AlwaysVisible; HorizontalIncrement := TScrollBarOptions(Source).HorizontalIncrement; ScrollBars := TScrollBarOptions(Source).ScrollBars; ScrollBarStyle := TScrollBarOptions(Source).ScrollBarStyle; VerticalIncrement := TScrollBarOptions(Source).VerticalIncrement; end else inherited; end; //----------------- TVTColors ------------------------------------------------------------------------------------------ constructor TVTColors.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FColors[0] := clBtnShadow; // DisabledColor FColors[1] := clHighlight; // DropMarkColor FColors[2] := clHighLight; // DropTargetColor FColors[3] := clHighLight; // FocusedSelectionColor FColors[4] := clBtnFace; // GridLineColor FColors[5] := clBtnShadow; // TreeLineColor FColors[6] := clBtnFace; // UnfocusedSelectionColor FColors[7] := clBtnFace; // BorderColor FColors[8] := clWindowText; // HotColor FColors[9] := clHighLight; // FocusedSelectionBorderColor FColors[10] := clBtnFace; // UnfocusedSelectionBorderColor FColors[11] := clHighlight; // DropTargetBorderColor FColors[12] := clHighlight; // SelectionRectangleBlendColor FColors[13] := clHighlight; // SelectionRectangleBorderColor FColors[14] := clBtnShadow; // HeaderHotColor end; //---------------------------------------------------------------------------------------------------------------------- function TVTColors.GetColor(const Index: Integer): TColor; begin Result := FColors[Index]; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTColors.SetColor(const Index: Integer; const Value: TColor); begin if FColors[Index] <> Value then begin FColors[Index] := Value; if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then begin // Cause helper bitmap rebuild if the button color changed. case Index of 5: begin FOwner.PrepareBitmaps(True, False); FOwner.Invalidate; end; 7: RedrawWindow(FOwner.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN) else FOwner.Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTColors.Assign(Source: TPersistent); begin if Source is TVTColors then begin FColors := TVTColors(Source).FColors; if FOwner.FUpdateCount = 0 then FOwner.Invalidate; end else inherited; end; //----------------- TClipboardFormats ---------------------------------------------------------------------------------- constructor TClipboardFormats.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; Sorted := True; Duplicates := dupIgnore; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormats.Add(const S: string): Integer; // Restrict additions to the clipbard formats to only those which are registered with the owner tree or one of its // ancestors. var Format: Word; RegisteredClass: TVirtualTreeClass; begin RegisteredClass := InternalClipboardFormats.FindFormat(S, Format); if Assigned(RegisteredClass) and FOwner.ClassType.InheritsFrom(RegisteredClass) then Result := inherited Add(S) else Result := -1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormats.Insert(Index: Integer; const S: string); // Restrict additions to the clipbard formats to only those which are registered with the owner tree or one of its // ancestors. var Format: Word; RegisteredClass: TVirtualTreeClass; begin RegisteredClass := InternalClipboardFormats.FindFormat(S, Format); if Assigned(RegisteredClass) and FOwner.ClassType.InheritsFrom(RegisteredClass) then inherited Insert(Index, S); end; //----------------- TBaseVirtualTree ----------------------------------------------------------------------------------- constructor TBaseVirtualTree.Create(AOwner: TComponent); begin if not Initialized then InitializeGlobalStructures; inherited; ControlStyle := ControlStyle - [csSetCaption] + [csCaptureMouse, csOpaque, csReplicatable, csDisplayDragImage, csReflector]; FTotalInternalDataSize := 0; FNodeDataSize := -1; Width := 200; Height := 100; TabStop := True; ParentColor := False; FDefaultNodeHeight := 18; FDragOperations := [doCopy, doMove]; FHotCursor := crDefault; FScrollBarOptions := TScrollBarOptions.Create(Self); FFocusedColumn := NoColumn; FDragImageKind := diComplete; FLastSelectionLevel := -1; FSelectionBlendFactor := 128; FIndent := 18; FPlusBM := TBitmap.Create; FHotPlusBM := TBitmap.Create; FMinusBM := TBitmap.Create; FHotMinusBM := TBitmap.Create; BorderStyle := bsSingle; FButtonStyle := bsRectangle; FButtonFillMode := fmTreeColor; FHeader := GetHeaderClass.Create(Self); // we have an own double buffer handling DoubleBuffered := False; FCheckImageKind := ckSystemDefault; FImageChangeLink := TChangeLink.Create; FImageChangeLink.OnChange := ImageListChange; FStateChangeLink := TChangeLink.Create; FStateChangeLink.OnChange := ImageListChange; FCustomCheckChangeLink := TChangeLink.Create; FCustomCheckChangeLink.OnChange := ImageListChange; FAutoExpandDelay := 1000; FAutoScrollDelay := 1000; FAutoScrollInterval := 1; FBackground := TPicture.Create; FDefaultPasteMode := amAddChildLast; FMargin := 4; FTextMargin := 4; FDragType := dtOLE; FDragHeight := 350; FDragWidth := 200; FColors := TVTColors.Create(Self); FEditDelay := 1000; FDragImage := TVTDragImage.Create(Self); with FDragImage do begin Fade := True; PostBlendBias := 0; PreBlendBias := 0; Transparency := 200; end; SetLength(FSingletonNodeArray, 1); FAnimationDuration := 200; FSearchTimeout := 1000; FSearchStart := ssFocusedNode; FNodeAlignment := naProportional; FLineStyle := lsDotted; FIncrementalSearch := isNone; FClipboardFormats := TClipboardFormats.Create(Self); FOptions := GetOptionsClass.Create(Self); {$ifdef EnableThreadSupport} AddThreadReference; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- destructor TBaseVirtualTree.Destroy; begin Exclude(FOptions.FMiscOptions, toReadOnly); {$ifdef EnableThreadSupport} ReleaseThreadReference(Self); {$endif} StopWheelPanning; //lcl FPanningWindow.Free; // Just in case it didn't happen already release the edit link. FEditLink := nil; FClipboardFormats.Free; // Clear will also free the drag manager if it is still alive. Clear; FDragImage.Free; FColors.Free; FBackground.Free; FImageChangeLink.Free; FStateChangeLink.Free; FCustomCheckChangeLink.Free; FScrollBarOptions.Free; FOptions.Free; // The window handle must be destroyed before the header is freed because it is needed in WM_NCDESTROY. //todo_lcl_check { if HandleAllocated then DestroyWindowHandle; } FreeAndNil(FHeader); if FCheckImages <> FCustomCheckImages then FCheckImages.Free; FreeMem(FRoot); FPlusBM.Free; FHotPlusBM.Free; FMinusBM.Free; FHotMinusBM.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer); // During painting of the main column some coordinates must be adjusted due to the tree lines. // The offset resulting from the tree lines and indentation level is given in Indent. var Offset: Integer; begin with PaintInfo do begin Offset := Indent * Integer(FIndent); if BidiMode = bdLeftToRight then begin Inc(ContentRect.Left, Offset); Inc(ImageInfo[iiNormal].XPos, Offset); Inc(ImageInfo[iiState].XPos, Offset); Inc(ImageInfo[iiCheck].XPos, Offset); end else begin Dec(ContentRect.Right, Offset); Dec(ImageInfo[iiNormal].XPos, Offset); Dec(ImageInfo[iiState].XPos, Offset); Dec(ImageInfo[iiCheck].XPos, Offset); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect; var ImageInfo: TVTImageInfo); // Depending on the width of the image list as well as the given bidi mode R must be adjusted. begin if BidiMode = bdLeftToRight then begin ImageInfo.XPos := R.Left; Inc(R.Left, ImageWidth + 2); end else begin ImageInfo.XPos := R.Right - Images.Width; Dec(R.Right, ImageWidth + 2); end; ImageInfo.YPos := R.Top + VAlign - ImageHeight div 2; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); // Sets a node's total count to the given value and recursively adjusts the parent's total count // (actually, the adjustment is done iteratively to avoid function call overheads). var Difference: Integer; Run: PVirtualNode; begin if Relative then Difference := Value else Difference := Integer(Value) - Integer(Node.TotalCount); if Difference <> 0 then begin Run := Node; // Root node has as parent the tree view. while Assigned(Run) and (Run <> Pointer(Self)) do begin Inc(Integer(Run.TotalCount), Difference); Run := Run.Parent; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustTotalHeight(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); // Sets a node's total height to the given value and recursively adjusts the parent's total height. var Difference: Integer; Run: PVirtualNode; begin if Relative then Difference := Value else Difference := Integer(Value) - Integer(Node.TotalHeight); if Difference <> 0 then begin Run := Node; repeat Inc(Integer(Run.TotalHeight), Difference); // If the node is not visible or the parent node is not expanded or we are already at the top // then nothing more remains to do. if not (vsVisible in Run.States) or (Run = FRoot) or (Run.Parent = nil) or not (vsExpanded in Run.Parent.States) then Break; Run := Run.Parent; until False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CalculateCacheEntryCount: Integer; // Calculates the size of the position cache. begin if FVisibleCount > 1 then Result := Ceil(FVisibleCount / CacheThreshold) else Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign, VButtonAlign: Integer); // Calculates the vertical alignment of the given node and its associated expand/collapse button during // a node paint cycle depending on the required node alignment style. begin // For absolute alignment the calculation is trivial. case FNodeAlignment of naFromTop: VAlign := Node.Align; naFromBottom: VAlign := NodeHeight[Node] - Node.Align; else // naProportional // Consider button and line alignment, but make sure neither the image nor the button (whichever is taller) // go out of the entire node height (100% means bottom alignment to the node's bounds). if ShowImages or ShowStateImages then begin if ShowImages then VAlign := FImages.Height else VAlign := FStateImages.Height; VAlign := MulDiv((Integer(NodeHeight[Node]) - VAlign), Node.Align, 100) + VAlign div 2; end else if toShowButtons in FOptions.FPaintOptions then VAlign := MulDiv((Integer(NodeHeight[Node]) - FPlusBM.Height), Node.Align, 100) + FPlusBM.Height div 2 else VAlign := MulDiv(Node.NodeHeight, Node.Align, 100); end; VButtonAlign := VAlign - FPlusBM.Height div 2; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ChangeCheckState(Node: PVirtualNode; Value: TCheckState): Boolean; // Sets the check state of the node according to the given value and the node's check type. // If the check state must be propagated to the parent nodes and one of them refuses to change then // nothing happens and False is returned, otherwise True. var Run: PVirtualNode; UncheckedCount, MixedCheckCount, CheckedCount: Cardinal; begin Result := not (vsChecking in Node.States); with Node^ do if Result then begin Include(States, vsChecking); if not (vsInitialized in States) then InitNode(Node); // Indicate that we are going to propagate check states up and down the hierarchy. if FCheckPropagationCount = 0 then // WL, 05.02.2004: Do not enter tsCheckPropagation more than once DoStateChange([tsCheckPropagation]); Inc(FCheckPropagationCount); // WL, 05.02.2004 // Do actions which are associated with the given check state. case CheckType of // Check state change with additional consequences for check states of the children. ctTriStateCheckBox: begin // Propagate state down to the children. if toAutoTristateTracking in FOptions.FAutoOptions then case Value of csUncheckedNormal: if Node.ChildCount > 0 then begin Run := FirstChild; CheckedCount := 0; MixedCheckCount := 0; UncheckedCount := 0; while Assigned(Run) do begin if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin SetCheckState(Run, csUncheckedNormal); // Check if the new child state was set successfully, otherwise we have to adjust the // node's new check state accordingly. case Run.CheckState of csCheckedNormal: Inc(CheckedCount); csMixedNormal: Inc(MixedCheckCount); csUncheckedNormal: Inc(UncheckedCount); end; end; Run := Run.NextSibling; end; // If there is still a mixed state child node checkbox then this node must be mixed checked too. if MixedCheckCount > 0 then Value := csMixedNormal else // If nodes are normally checked child nodes then the unchecked count determines what // to set for the node itself. if CheckedCount > 0 then if UncheckedCount > 0 then Value := csMixedNormal else Value := csCheckedNormal; end; csCheckedNormal: if Node.ChildCount > 0 then begin Run := FirstChild; CheckedCount := 0; MixedCheckCount := 0; UncheckedCount := 0; while Assigned(Run) do begin if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin SetCheckState(Run, csCheckedNormal); // Check if the new child state was set successfully, otherwise we have to adjust the // node's new check state accordingly. case Run.CheckState of csCheckedNormal: Inc(CheckedCount); csMixedNormal: Inc(MixedCheckCount); csUncheckedNormal: Inc(UncheckedCount); end; end; Run := Run.NextSibling; end; // If there is still a mixed state child node checkbox then this node must be mixed checked too. if MixedCheckCount > 0 then Value := csMixedNormal else // If nodes are normally checked child nodes then the unchecked count determines what // to set for the node itself. if CheckedCount > 0 then if UncheckedCount > 0 then Value := csMixedNormal else Value := csCheckedNormal; end; end; end; // radio button check state change ctRadioButton: if Value = csCheckedNormal then begin // Make sure only this node is checked. Run := Parent.FirstChild; while Assigned(Run) do begin if Run.CheckType = ctRadioButton then Run.CheckState := csUncheckedNormal; Run := Run.NextSibling; end; Invalidate; end; end; if Result then CheckState := Value // Set new check state else CheckState := UnpressedState[CheckState]; // Reset dynamic check state. // Propagate state up to the parent. if not (vsInitialized in Parent.States) then InitNode(Parent); if (toAutoTristateTracking in FOptions.FAutoOptions) and ([vsChecking, vsDisabled] * Parent.States = []) and (CheckType in [ctCheckBox, ctTriStateCheckBox]) and (Parent <> FRoot) and (Parent.CheckType = ctTriStateCheckBox) then Result := CheckParentCheckState(Node, Value) else Result := True; InvalidateNode(Node); Exclude(States, vsChecking); Dec(FCheckPropagationCount); // WL, 05.02.2004 if FCheckPropagationCount = 0 then // WL, 05.02.2004: Allow state change event after all check operations finished DoStateChange([], [tsCheckPropagation]); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; // Helper routine used when a draw selection takes place. This version handles left-to-right directionality. // In the process of adding or removing nodes the current selection is modified which requires to pack it after // the function returns. Another side effect of this method is that a temporary list of nodes will be created // (see also InternalCacheNode) which must be inserted into the current selection by the caller. var Run, NextNode: PVirtualNode; TextRight, TextLeft, CheckOffset, CurrentTop, CurrentRight, NextTop, NextColumn, NodeWidth, Dummy: Integer; MinY, MaxY: Integer; ImageOffset, StateImageOffset: Integer; IsInOldRect, IsInNewRect: Boolean; // quick check variables for various parameters WithCheck, WithImages, WithStateImages, DoSwitch, AutoSpan: Boolean; SimpleSelection: Boolean; begin // A priori nothing changes. Result := False; // Determine minimum and maximum vertical coordinates to limit iteration to. MinY := Min(OldRect.Top, NewRect.Top); MaxY := Max(OldRect.Bottom, NewRect.Bottom); // Initialize short hand variables to speed up tests below. DoSwitch := ssCtrlOS in FDrawSelShiftState; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); // Don't check the events here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; AutoSpan := FHeader.UseColumns and (toAutoSpanColumns in FOptions.FAutoOptions); SimpleSelection := toSimpleDrawSelection in FOptions.FSelectionOptions; // This is the node to start with. Run := InternalGetNodeAt(0, MinY, False, CurrentTop); if Assigned(Run) then begin // The initial minimal left border is determined by the identation level of the node and is dynamically adjusted. if toShowRoot in FOptions.FPaintOptions then Inc(NodeLeft, Integer((GetNodeLevel(Run) + 1) * FIndent) + FMargin) else Inc(NodeLeft, Integer(GetNodeLevel(Run) * FIndent) + FMargin); // ----- main loop // Change selection depending on the node's rectangle being in the selection rectangle or not, but // touch only those nodes which overlap either the old selection rectangle or the new one but not both. repeat // Collect offsets for check, normal and state images. TextLeft := NodeLeft; if WithCheck and (Run.CheckType <> ctNone) then Inc(TextLeft, CheckOffset); if WithImages and HasImage(Run, ikNormal, MainColumn) then Inc(TextLeft, ImageOffset); if WithStateImages and HasImage(Run, ikState, MainColumn) then Inc(TextLeft, StateImageOffset); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Run); NextTop := CurrentTop + Integer(NodeHeight[Run]); // Simple selection allows to draw the selection rectangle anywhere. No intersection with node captions is // required. Only top and bottom bounds of the rectangle matter. if SimpleSelection then begin IsInOldRect := (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end else begin // The right column border might be extended if column spanning is enabled. if AutoSpan then begin with FHeader.FColumns do begin NextColumn := MainColumn; repeat Dummy := GetNextVisibleColumn(NextColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(Run, Dummy) or (Items[Dummy].BidiMode <> bdLeftToRight) then Break; NextColumn := Dummy; until False; if NextColumn = MainColumn then CurrentRight := NodeRight else GetColumnBounds(NextColumn, Dummy, CurrentRight); end; end else CurrentRight := NodeRight; // Check if we need the node's width. This is the case when the node is not left aligned or the // left border of the selection rectangle is to the right of the left node border. if (TextLeft < OldRect.Left) or (TextLeft < NewRect.Left) or (Alignment <> taLeftJustify) then begin NodeWidth := DoGetNodeWidth(Run, MainColumn); if NodeWidth >= (CurrentRight - TextLeft) then TextRight := CurrentRight else case Alignment of taLeftJustify: TextRight := TextLeft + NodeWidth; taCenter: begin TextLeft := (TextLeft + CurrentRight - NodeWidth) div 2; TextRight := TextLeft + NodeWidth; end; else // taRightJustify TextRight := CurrentRight; TextLeft := TextRight - NodeWidth; end; end else TextRight := CurrentRight; // Now determine whether we need to change the state. IsInOldRect := (OldRect.Left <= TextRight) and (OldRect.Right >= TextLeft) and (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NewRect.Left <= TextRight) and (NewRect.Right >= TextLeft) and (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end; if IsInOldRect xor IsInNewRect then begin Result := True; if DoSwitch then begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); end else begin if IsInNewRect then InternalCacheNode(Run) else InternalRemoveFromSelection(Run); end; end; CurrentTop := NextTop; // Get next visible node and update left node position. NextNode := GetNextVisibleNoInit(Run, True); if NextNode = nil then Break; Inc(NodeLeft, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; until CurrentTop > MaxY; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; // Helper routine used when a draw selection takes place. This version handles right-to-left directionality. // See also comments in CollectSelectedNodesLTR. var Run, NextNode: PVirtualNode; TextRight, TextLeft, CheckOffset, CurrentTop, CurrentLeft, NextTop, NextColumn, NodeWidth, Dummy: Integer; MinY, MaxY: Integer; ImageOffset, StateImageOffset: Integer; IsInOldRect, IsInNewRect: Boolean; // quick check variables for various parameters WithCheck, WithImages, WithStateImages, DoSwitch, AutoSpan: Boolean; SimpleSelection: Boolean; begin // A priori nothing changes. Result := False; // Switch the alignment to the opposite value in RTL context. ChangeBiDiModeAlignment(Alignment); // Determine minimum and maximum vertical coordinates to limit iteration to. MinY := Min(OldRect.Top, NewRect.Top); MaxY := Max(OldRect.Bottom, NewRect.Bottom); // Initialize short hand variables to speed up tests below. DoSwitch := ssCtrlOS in FDrawSelShiftState; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); // Don't check the events here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; AutoSpan := FHeader.UseColumns and (toAutoSpanColumns in FOptions.FAutoOptions); SimpleSelection := toSimpleDrawSelection in FOptions.FSelectionOptions; // This is the node to start with. Run := InternalGetNodeAt(0, MinY, False, CurrentTop); if Assigned(Run) then begin // The initial minimal left border is determined by the identation level of the node and is dynamically adjusted. if toShowRoot in FOptions.FPaintOptions then Dec(NodeRight, Integer((GetNodeLevel(Run) + 1) * FIndent) + FMargin) else Dec(NodeRight, Integer(GetNodeLevel(Run) * FIndent) + FMargin); // ----- main loop // Change selection depending on the node's rectangle being in the selection rectangle or not, but // touch only those nodes which overlap either the old selection rectangle or the new one but not both. repeat // Collect offsets for check, normal and state images. TextRight := NodeRight; if WithCheck and (Run.CheckType <> ctNone) then Dec(TextRight, CheckOffset); if WithImages and HasImage(Run, ikNormal, MainColumn) then Dec(TextRight, ImageOffset); if WithStateImages and HasImage(Run, ikState, MainColumn) then Dec(TextRight, StateImageOffset); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Run); NextTop := CurrentTop + Integer(NodeHeight[Run]); // Simple selection allows to draw the selection rectangle anywhere. No intersection with node captions is // required. Only top and bottom bounds of the rectangle matter. if SimpleSelection then begin IsInOldRect := (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end else begin // The left column border might be extended if column spanning is enabled. if AutoSpan then begin NextColumn := MainColumn; repeat Dummy := FHeader.FColumns.GetPreviousVisibleColumn(NextColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(Run, Dummy) or (FHeader.FColumns[Dummy].BiDiMode = bdLeftToRight) then Break; NextColumn := Dummy; until False; if NextColumn = MainColumn then CurrentLeft := NodeLeft else FHeader.FColumns.GetColumnBounds(NextColumn, CurrentLeft, Dummy); end else CurrentLeft := NodeLeft; // Check if we need the node's width. This is the case when the node is not left aligned (in RTL context this // means actually right aligned) or the right border of the selection rectangle is to the left // of the right node border. if (TextRight > OldRect.Right) or (TextRight > NewRect.Right) or (Alignment <> taRightJustify) then begin NodeWidth := DoGetNodeWidth(Run, MainColumn); if NodeWidth >= (TextRight - CurrentLeft) then TextLeft := CurrentLeft else case Alignment of taLeftJustify: begin TextLeft := CurrentLeft; TextRight := TextLeft + NodeWidth; end; taCenter: begin TextLeft := (TextRight + CurrentLeft - NodeWidth) div 2; TextRight := TextLeft + NodeWidth; end; else // taRightJustify TextLeft := TextRight - NodeWidth; end; end else TextLeft := CurrentLeft; // Now determine whether we need to change the state. IsInOldRect := (OldRect.Right >= TextLeft) and (OldRect.Left <= TextRight) and (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NewRect.Right >= TextLeft) and (NewRect.Left <= TextRight) and (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end; if IsInOldRect xor IsInNewRect then begin Result := True; if DoSwitch then begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); end else begin if IsInNewRect then InternalCacheNode(Run) else InternalRemoveFromSelection(Run); end; end; CurrentTop := NextTop; // Get next visible node and update left node position. NextNode := GetNextVisibleNoInit(Run, True); if NextNode = nil then Break; Dec(NodeRight, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; until CurrentTop > MaxY; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearNodeBackground(const PaintInfo: TVTPaintInfo; UseBackground, Floating: Boolean; R: TRect); // Erases a node's background depending on what the application decides to do. // UseBackground determines whether or not to use the background picture, while Floating indicates // that R is given in coordinates of the small node bitmap or the superordinated target bitmap used in PaintTree. var BackColor: TColor; EraseAction: TItemEraseAction; Offset: TPoint; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'ClearNodeBackground');{$endif} with PaintInfo do begin EraseAction := eaDefault; BackColor := Brush.Color; if Floating then begin Offset := Point(-FEffectiveOffsetX, R.Top); OffsetRect(R, 0, -Offset.Y); end else Offset := Point(0, 0); DoBeforeItemErase(Canvas, Node, R, Backcolor, EraseAction); with Canvas do begin case EraseAction of eaNone: ; eaColor: begin // User has given a new background color. Brush.Color := BackColor; FillRect(R); end; else // eaDefault if UseBackground then begin if toStaticBackground in TreeOptions.PaintOptions then StaticBackground(FBackground.Bitmap, Canvas, Offset, R) else TileBackground(FBackground.Bitmap, Canvas, Offset, R); end else begin //clear the node background //note there's a bug in original VTV that can lead to wrong node paint //so, here the node is always cleared even if is selected Brush.Color := Self.Brush.Color; FillRect(R); {$ifdef DEBUG_VTV}Logger.SendColor([lcPaintDetails],'Clearing a node background - Brush.Color', Brush.Color);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Clearing Rectangle (R)', R);{$endif} if (poDrawSelection in PaintOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (vsSelected in Node.States) and not (toUseBlendedSelection in FOptions.PaintOptions) and not ((tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) and IsWinVistaOrAbove) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails, lcDrag], 'Draw the background of a selected node');{$endif} if toShowHorzGridLines in FOptions.PaintOptions then Dec(R.Bottom); if Focused or (toPopupMode in FOptions.FPaintOptions) then begin Brush.Color := FColors.FocusedSelectionColor; Pen.Color := FColors.FocusedSelectionBorderColor; end else begin Brush.Color := FColors.UnfocusedSelectionColor; Pen.Color := FColors.UnfocusedSelectionBorderColor; end; with R do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end; end; end; DoAfterItemErase(Canvas, Node, R); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'ClearNodeBackground');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CompareNodePositions(Node1, Node2: PVirtualNode; ConsiderChildrenAbove: Boolean = False): Integer; // Tries hard and smart to quickly determine whether Node1's structural position is before Node2's position. // If ConsiderChildrenAbove is True, the nodes will be compared with their visual order in mind. // Returns 0 if Node1 = Node2, < 0 if Node1 is located before Node2 else > 0. var Run1, Run2: PVirtualNode; Level1, Level2: Cardinal; begin Assert(Assigned(Node1) and Assigned(Node2), 'Nodes must never be nil.'); if Node1 = Node2 then Result := 0 else begin if HasAsParent(Node1, Node2) then Result := IfThen(ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions), -1, 1) else if HasAsParent(Node2, Node1) then Result := IfThen(ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions), 1, -1) else begin // the given nodes are neither equal nor are they parents of each other, so go up to FRoot // for each node and compare the child indices of the top level parents // Note: neither Node1 nor Node2 can be FRoot at this point as this (a bit strange) circumstance would // be caught by the previous code. // start lookup at the same level Level1 := GetNodeLevel(Node1); Level2 := GetNodeLevel(Node2); Run1 := Node1; while Level1 > Level2 do begin Run1 := Run1.Parent; Dec(Level1); end; Run2 := Node2; while Level2 > Level1 do begin Run2 := Run2.Parent; Dec(Level2); end; // now go up until we find a common parent node (loop will safely stop at FRoot if the nodes // don't share a common parent) while Run1.Parent <> Run2.Parent do begin Run1 := Run1.Parent; Run2 := Run2.Parent; end; Result := Integer(Run1.Index) - Integer(Run2.Index); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineLineImageAndSelectLevel(Node: PVirtualNode; out LineImage: TLineImage): Integer; // This method is used during paint cycles and initializes an array of line type IDs. These IDs are used to paint // the tree lines in front of the given node. // Additionally an initial count of selected parents is determined and returned which is used for specific painting. var X: Integer; Run: PVirtualNode; begin Result := 0; if toShowRoot in FOptions.FPaintOptions then X := 1 else X := 0; Run := Node; // Determine indentation level of top node. while Run.Parent <> FRoot do begin Inc(X); Run := Run.Parent; // Count selected nodes (FRoot is never selected). if vsSelected in Run.States then Inc(Result); end; // Set initial size of line index array, this will automatically initialized all entries to ltNone. SetLength(LineImage, X); // Only use lines if requested. if toShowTreeLines in FOptions.FPaintOptions then begin if toChildrenAbove in FOptions.FPaintOptions then begin Dec(X); if not HasVisiblePreviousSibling(Node) then begin if (Node.Parent <> FRoot) or HasVisibleNextSibling(Node) then LineImage[X] := ltBottomRight else LineImage[X] := ltRight; end else if (Node.Parent = FRoot) and (not HasVisibleNextSibling(Node)) then LineImage[X] := ltTopRight else LineImage[X] := ltTopDownRight; // Now go up to the root to determine the rest. Run := Node.Parent; while Run <> FRoot do begin Dec(X); if HasVisiblePreviousSibling(Run) then LineImage[X] := ltTopDown; Run := Run.Parent; end; end else begin // Start over parent traversal if necessary. Run := Node; if Run.Parent <> FRoot then begin // The very last image (the one immediately before the item label) is different. if HasVisibleNextSibling(Run) then LineImage[X - 1] := ltTopDownRight else LineImage[X - 1] := ltTopRight; Run := Run.Parent; // Now go up all parents. repeat if Run.Parent = FRoot then Break; Dec(X); if HasVisibleNextSibling(Run) then LineImage[X - 1] := ltTopDown else LineImage[X - 1] := ltNone; Run := Run.Parent; until False; end; // Prepare root level. Run points at this stage to a top level node. if (toShowRoot in FOptions.FPaintOptions) and (toShowTreeLines in FOptions.FPaintOptions) then begin // Is the top node a root node? if Run = Node then begin // First child gets the bottom-right bitmap if it isn't also the only child. if IsFirstVisibleChild(FRoot, Run) then // Is it the only child? if IsLastVisibleChild(FRoot, Run) then LineImage[0] := ltRight else LineImage[0] := ltBottomRight else // real last child if IsLastVisibleChild(FRoot, Run) then LineImage[0] := ltTopRight else LineImage[0] := ltTopDownRight; end else begin // No, top node is not a top level node. So we need different painting. if HasVisibleNextSibling(Run) then LineImage[0] := ltTopDown else LineImage[0] := ltNone; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawLineImage(const PaintInfo: TVTPaintInfo; X, Y, H, VAlign: Integer; Style: TVTLineType; Reverse: Boolean); // Draws (depending on Style) one of the 5 line types of the tree. // If Reverse is True then a right-to-left column is being drawn, hence horizontal lines must be mirrored. // X and Y describe the left upper corner of the line image rectangle, while H denotes its height (and width). var HalfWidth, TargetX: Integer; begin HalfWidth := Integer(FIndent) div 2; if Reverse then TargetX := 0 else TargetX := FIndent; with PaintInfo.Canvas do begin case Style of ltBottomRight: begin DrawDottedVLine(PaintInfo, Y + VAlign, Y + H, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltTopDown: DrawDottedVLine(PaintInfo, Y, Y + H, X + HalfWidth); ltTopDownRight: begin DrawDottedVLine(PaintInfo, Y, Y + H, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltRight: DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); ltTopRight: begin DrawDottedVLine(PaintInfo, Y, Y + VAlign, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltLeft: // left can also mean right for RTL context if Reverse then DrawDottedVLine(PaintInfo, Y, Y + H, X + Integer(FIndent)) else DrawDottedVLine(PaintInfo, Y, Y + H, X); ltLeftBottom: if Reverse then begin DrawDottedVLine(PaintInfo, Y, Y + H, X + Integer(FIndent)); DrawDottedHLine(PaintInfo, X, X + Integer(FIndent), Y + H); end else begin DrawDottedVLine(PaintInfo, Y, Y + H, X); DrawDottedHLine(PaintInfo, X, X + Integer(FIndent), Y + H); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindInPositionCache(Node: PVirtualNode; var CurrentPos: Cardinal): PVirtualNode; // Looks through the position cache and returns the node whose top position is the largest one which is smaller or equal // to the position of the given node. var L, H, I: Integer; begin L := 0; H := High(FPositionCache); while L <= H do begin I := (L + H) shr 1; if CompareNodePositions(FPositionCache[I].Node, Node) <= 0 then L := I + 1 else H := I - 1; end; if L = 0 then // High(FPositionCache) = -1 begin Result := nil; CurrentPos := 0; end else begin Result := FPositionCache[L - 1].Node; CurrentPos := FPositionCache[L - 1].AbsoluteTop; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindInPositionCache(Position: Cardinal; var CurrentPos: Cardinal): PVirtualNode; // Looks through the position cache and returns the node whose top position is the largest one which is smaller or equal // to the given vertical position. // The returned node does not necessarily occupy the given position but is the nearest one to start // iterating from to approach the real node for a given position. CurrentPos receives the actual position of the found // node which is needed for further iteration. var L, H, I: Integer; begin L := 0; H := High(FPositionCache); while L <= H do begin I := (L + H) shr 1; if FPositionCache[I].AbsoluteTop <= Position then L := I + 1 else H := I - 1; end; if L = 0 then // High(FPositionCache) = -1 begin Result := nil; CurrentPos := 0; end else begin Result := FPositionCache[L - 1].Node; CurrentPos := FPositionCache[L - 1].AbsoluteTop; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FixupTotalCount(Node: PVirtualNode); // Called after loading a subtree from stream. The child count in each node is already set but not // their total count. var Child: PVirtualNode; begin // Initial total count is set to one on node creation. Child := Node.FirstChild; while Assigned(Child) do begin FixupTotalCount(Child); Inc(Node.TotalCount, Child.TotalCount); Child := Child.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FixupTotalHeight(Node: PVirtualNode); // Called after loading a subtree from stream. The individual height of each node is set already, // but their total height needs an adjustment depending on their visibility state. var Child: PVirtualNode; begin // Initial total height is set to the node height on load. Child := Node.FirstChild; if vsExpanded in Node.States then begin while Assigned(Child) do begin FixupTotalHeight(Child); if vsVisible in Child.States then Inc(Node.TotalHeight, Child.TotalHeight); Child := Child.NextSibling; end; end else begin // The node is collapsed, so just update the total height of its child nodes. while Assigned(Child) do begin FixupTotalHeight(Child); Child := Child.NextSibling; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetBottomNode: PVirtualNode; begin Result := InternalGetNodeAt(0, ClientHeight - 1); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckedCount: Integer; var Node: PVirtualNode; begin Result := 0; Node := GetFirstChecked; while Assigned(Node) do begin Inc(Result); Node := GetNextChecked(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckState(Node: PVirtualNode): TCheckState; begin Result := Node.CheckState; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckType(Node: PVirtualNode): TCheckType; begin Result := Node.CheckType; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetChildCount(Node: PVirtualNode): Cardinal; begin if (Node = nil) or (Node = FRoot) then Result := FRoot.ChildCount else Result := Node.ChildCount; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetChildrenInitialized(Node: PVirtualNode): Boolean; begin Result := not (vsHasChildren in Node.States) or (Node.ChildCount > 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCutCopyCount: Integer; var Node: PVirtualNode; begin Result := 0; Node := GetFirstCutCopy; while Assigned(Node) do begin Inc(Result); Node := GetNextCutCopy(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDisabled(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (vsDisabled in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDragManager: IVTDragManager; // Returns the internal drag manager interface. If this does not yet exist then it is created here. begin if FDragManager = nil then begin FDragManager := DoCreateDragManager; if FDragManager = nil then FDragManager := TVTDragManager.Create(Self); end; Result := FDragManager; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetExpanded(Node: PVirtualNode): Boolean; begin if Assigned(Node) then Result := vsExpanded in Node.States else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFullyVisible(Node: PVirtualNode): Boolean; // Determines whether the given node has the visibility flag set as well as all its parents are expanded. begin Assert(Assigned(Node), 'Invalid parameter.'); Result := vsVisible in Node.States; if Result and (Node <> FRoot) then Result := VisiblePath[Node]; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHasChildren(Node: PVirtualNode): Boolean; begin if Assigned(Node) then Result := vsHasChildren in Node.States else Result := vsHasChildren in FRoot.States; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMultiline(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (Node <> FRoot) and (vsMultiline in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeHeight(Node: PVirtualNode): Cardinal; begin if Assigned(Node) and (Node <> FRoot) then begin if toVariableNodeHeight in FOptions.FMiscOptions then begin if not (vsInitialized in Node.States) then InitNode(Node); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Node); end; Result := Node.NodeHeight end else Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeParent(Node: PVirtualNode): PVirtualNode; begin if Assigned(Node) and (Node.Parent <> FRoot) then Result := Node.Parent else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOffsetXY: TPoint; begin Result := Point(FOffsetX, FOffsetY); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetRootNodeCount: Cardinal; begin Result := FRoot.ChildCount; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSelected(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (vsSelected in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTopNode: PVirtualNode; begin Result := InternalGetNodeAt(0, 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTotalCount: Cardinal; begin Inc(FUpdateCount); try ValidateNode(FRoot, True); finally Dec(FUpdateCount); end; // The root node itself doesn't count as node. Result := FRoot.TotalCount - 1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVerticalAlignment(Node: PVirtualNode): Byte; begin Result := Node.Align; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisible(Node: PVirtualNode): Boolean; // Determines if the given node is marked as being visible. begin if Node = nil then Node := FRoot; if not (vsInitialized in Node.States) then InitNode(Node); Result := vsVisible in Node.States; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisiblePath(Node: PVirtualNode): Boolean; // Determines if all parents of the given node are expanded and have the visibility flag set. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameters.'); // FRoot is always expanded repeat Node := Node.Parent; until (Node = FRoot) or not (vsExpanded in Node.States) or not (vsVisible in Node.States); Result := Node = FRoot; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleClickSelection(LastFocused, NewNode: PVirtualNode; Shift: TShiftState; DragPending: Boolean); // Handles multi-selection with mouse click. begin // Ctrl key down if ssCtrlOS in Shift then begin if ssShift in Shift then begin SelectNodes(FRangeAnchor, NewNode, True); Invalidate; end else begin if not (toSiblingSelectConstraint in FOptions.SelectionOptions) then FRangeAnchor := NewNode; // Delay selection change if a drag operation is pending. // Otherwise switch selection state here. if DragPending then DoStateChange([tsToggleFocusedSelection]) else if vsSelected in NewNode.States then RemoveFromSelection(NewNode) else AddToSelection(NewNode); end; end else // Shift key down if ssShift in Shift then begin if FRangeAnchor = nil then FRangeAnchor := FRoot.FirstChild; // select node range if Assigned(FRangeAnchor) then begin SelectNodes(FRangeAnchor, NewNode, False); Invalidate; end; end else begin // any other case if not (vsSelected in NewNode.States) then begin AddToSelection(NewNode); InvalidateNode(NewNode); end; // assign new reference item FRangeAnchor := NewNode; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HandleDrawSelection(X, Y: Integer): Boolean; // Handles multi-selection with a focus rectangle. // Result is True if something changed in selection. var OldRect, NewRect: TRect; MainColumn: TColumnIndex; MaxValue: Integer; // limits of a node and its text NodeLeft, NodeRight: Integer; // alignment and directionality CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; begin Result := False; // Selection changes are only done if the user drew a selection rectangle large // enough to exceed the threshold. if (FRoot.TotalCount > 1) and (tsDrawSelecting in FStates) then begin // Effective handling of node selection is done by using two rectangles stored in FSelectRec. OldRect := OrderRect(FLastSelRect); NewRect := OrderRect(FNewSelRect); ClearTempCache; MainColumn := FHeader.MainColumn; // Alignment and bidi mode determine where the node text is located within a node. if MainColumn <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[MainColumn].BidiMode; CurrentAlignment := FHeader.FColumns[MainColumn].Alignment; end; // Determine initial left border of first node (take column reordering into account). if FHeader.UseColumns then begin // The mouse coordinates don't include any horizontal scrolling hence take this also // out from the returned column position. NodeLeft := FHeader.FColumns[MainColumn].Left - FEffectiveOffsetX; NodeRight := NodeLeft + FHeader.FColumns[MainColumn].Width; end else begin NodeLeft := 0; NodeRight := ClientWidth; end; if CurrentBidiMode = bdLeftToRight then Result := CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight, CurrentAlignment, OldRect, NewRect) else Result := CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight, CurrentAlignment, OldRect, NewRect); end; if Result then begin // Do some housekeeping if there was a change. MaxValue := PackArray(FSelection, FSelectionCount); if MaxValue > -1 then begin FSelectionCount := MaxValue; SetLength(FSelection, FSelectionCount); end; if FTempNodeCount > 0 then begin AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; end; Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasVisibleNextSibling(Node: PVirtualNode): Boolean; // Helper method to determine if the given node has a visible next sibling. This is needed to // draw correct tree lines. begin // Check if there is a sibling at all. Result := Assigned(Node.NextSibling); if Result then begin repeat Node := Node.NextSibling; Result := vsVisible in Node.States; until Result or (Node.NextSibling = nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasVisiblePreviousSibling(Node: PVirtualNode): Boolean; // Helper method to determine if the given node has a visible previous sibling. This is needed to // draw correct tree lines. begin // Check if there is a sibling at all. Result := Assigned(Node.PrevSibling); if Result then begin repeat Node := Node.PrevSibling; Result := vsVisible in Node.States; until Result or (Node.PrevSibling = nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ImageListChange(Sender: TObject); begin if not (csDestroying in ComponentState) then Invalidate; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitializeFirstColumnValues(var PaintInfo: TVTPaintInfo); // Determines initial index, position and cell size of the first visible column. begin PaintInfo.Column := FHeader.FColumns.GetFirstVisibleColumn; with FHeader.FColumns, PaintInfo do begin if Column > NoColumn then begin CellRect.Right := CellRect.Left + Items[Column].Width; Position := Items[Column].Position; end else Position := 0; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitRootNode(OldSize: Cardinal = 0); // Reinitializes the root node. var NewSize: Cardinal; begin NewSize := TreeNodeSize + FTotalInternalDataSize; if FRoot = nil then FRoot := AllocMem(NewSize) else begin ReallocMem(FRoot, NewSize); FillChar(PAnsiChar(PAnsiChar(FRoot) + OldSize)^, NewSize - OldSize, 0); end; with FRoot^ do begin // Indication that this node is the root node. PrevSibling := FRoot; NextSibling := FRoot; Parent := Pointer(Self); States := [vsInitialized, vsExpanded, vsHasChildren, vsVisible]; TotalHeight := FDefaultNodeHeight; TotalCount := 1; TotalHeight := FDefaultNodeHeight; NodeHeight := FDefaultNodeHeight; Align := 50; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InterruptValidation; var WasValidating: Boolean; begin DoStateChange([tsStopValidation], [tsUseCache]); {$ifdef EnableThreadSupport} // Check the worker thread existance. It might already be gone (usually on destruction of the last tree). if Assigned(WorkerThread) then begin WasValidating := (tsValidating in FStates); WorkerThread.RemoveTree(Self); if WasValidating then DoStateChange([tsValidationNeeded]); end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsFirstVisibleChild(Parent, Node: PVirtualNode): Boolean; // Helper method to check if Node is the same as the first visible child of Parent. var Run: PVirtualNode; begin // Find first visible child. Run := Parent.FirstChild; while Assigned(Run) and not (vsVisible in Run.States) do Run := Run.NextSibling; Result := Assigned(Run) and (Run = Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsLastVisibleChild(Parent, Node: PVirtualNode): Boolean; // Helper method to check if Node is the same as the last visible child of Parent. var Run: PVirtualNode; begin // Find last visible child. Run := Parent.LastChild; while Assigned(Run) and not (vsVisible in Run.States) do Run := Run.PrevSibling; Result := Assigned(Run) and (Run = Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LimitPaintingToArea(Canvas: TCanvas; ClipRect: TRect; VisibleRegion: HRGN = 0); // Limits further painting onto the given canvas to the given rectangle. // VisibleRegion is an optional region which can be used to limit drawing further. var ClipRegion: HRGN; begin // Regions expect their coordinates in device coordinates, hence we have to transform the region rectangle. LPtoDP(Canvas.Handle, ClipRect, 2); ClipRegion := CreateRectRgnIndirect(ClipRect); if VisibleRegion <> 0 then CombineRgn(ClipRegion, ClipRegion, VisibleRegion, RGN_AND); SelectClipRgn(Canvas.Handle, ClipRegion); DeleteObject(ClipRegion); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadPanningCursors; begin with Screen do begin Cursors[crVT_MOVEALL]:=LoadCursorFromLazarusResource('VT_MOVEALL'); Cursors[crVT_MOVEEW]:=LoadCursorFromLazarusResource('VT_MOVEEW'); Cursors[crVT_MOVENS]:=LoadCursorFromLazarusResource('VT_MOVENS'); Cursors[crVT_MOVENW]:=LoadCursorFromLazarusResource('VT_MOVENW'); Cursors[crVT_MOVESW]:=LoadCursorFromLazarusResource('VT_MOVESW'); Cursors[crVT_MOVESE]:=LoadCursorFromLazarusResource('VT_MOVESE'); Cursors[crVT_MOVENE]:=LoadCursorFromLazarusResource('VT_MOVENE'); Cursors[crVT_MOVEW]:=LoadCursorFromLazarusResource('VT_MOVEW'); Cursors[crVT_MOVEE]:=LoadCursorFromLazarusResource('VT_MOVEE'); Cursors[crVT_MOVEN]:=LoadCursorFromLazarusResource('VT_MOVEN'); Cursors[crVT_MOVES]:=LoadCursorFromLazarusResource('VT_MOVES'); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.MakeNewNode: PVirtualNode; var Size: Cardinal; begin Size := TreeNodeSize; if not (csDesigning in ComponentState) then begin // Make sure FNodeDataSize is valid. if FNodeDataSize = -1 then ValidateNodeDataSize(FNodeDataSize); // Take record alignment into account. Inc(Size, FNodeDataSize); end; Result := AllocMem(Size + FTotalInternalDataSize); // Fill in some default values. with Result^ do begin TotalCount := 1; TotalHeight := FDefaultNodeHeight; NodeHeight := FDefaultNodeHeight; States := [vsVisible]; Align := 50; end; end; {$ifdef PACKARRAYPASCAL} function TBaseVirtualTree.PackArray(const TheArray: TNodeArray; Count: Integer): Integer; var Source, Dest: ^PVirtualNode; ConstOne: PtrInt; begin Source := Pointer(TheArray); ConstOne := 1; Result := 0; // Do the fastest scan possible to find the first entry while (Count <> 0) and {not Odd(NativeInt(Source^))} (PtrInt(Source^) and ConstOne = 0) do begin Inc(Result); Inc(Source); Dec(Count); end; if Count <> 0 then begin Dest := Source; repeat // Skip odd entries if {not Odd(NativeInt(Source^))} PtrInt(Source^) and ConstOne = 0 then begin Dest^ := Source^; Inc(Result); Inc(Dest); end; Inc(Source); // Point to the next entry Dec(Count); until Count = 0; end; end; {$else} //---------------------------------------------------------------------------------------------------------------------- {$IMPLICITEXCEPTIONS OFF} function TBaseVirtualTree.PackArray(TheArray: TNodeArray; Count: Integer): Integer; assembler; // Removes all entries from the selection array which are no longer in use. The selection array must be sorted for this // algo to work. Values which must be removed are marked with bit 0 (LSB) set. This little trick works because memory // is always allocated DWORD aligned. Since the selection array must be sorted while determining the entries to be // removed it is much more efficient to increment the entry in question instead of setting it to nil (which would break // the ordered appearance of the list). // // On enter EAX contains self reference, EDX the address to TheArray and ECX Count // The returned value is the number of remaining entries in the array, so the caller can reallocate (shorten) // the selection array if needed or -1 if nothing needs to be changed. asm PUSH EBX PUSH EDI PUSH ESI MOV ECX, EDX //fpc: count is in EDX. Move to ECX MOV ESI, [EBP+8] //fpc: TheArray is in EBP+8 MOV EDX, -1 JCXZ @@Finish // Empty list? INC EDX // init remaining entries counter MOV EDI, ESI // source and destination point to the list memory MOV EBX, 1 // use a register instead of immediate operant to check against @@PreScan: TEST [ESI], EBX // do the fastest scan possible to find the first entry // which must be removed JNZ @@DoMainLoop INC EDX ADD ESI, 4 DEC ECX JNZ @@PreScan JMP @@Finish @@DoMainLoop: MOV EDI, ESI @@MainLoop: TEST [ESI], EBX // odd entry? JNE @@Skip // yes, so skip this one MOVSD // else move the entry to new location INC EDX // count the moved entries DEC ECX JNZ @@MainLoop // do it until all entries are processed JMP @@Finish @@Skip: ADD ESI, 4 // point to the next entry DEC ECX JNZ @@MainLoop // do it until all entries are processed @@Finish: MOV EAX, EDX // prepare return value POP ESI POP EDI POP EBX end; {$IMPLICITEXCEPTIONS ON} {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareBitmaps(NeedButtons, NeedLines: Boolean); // initializes the contents of the internal bitmaps const LineBitsDotted: array [0..8] of Word = ($55, $AA, $55, $AA, $55, $AA, $55, $AA, $55); LineBitsSolid: array [0..7] of Word = (0, 0, 0, 0, 0, 0, 0, 0); var PatternBitmap: HBITMAP; Bits: Pointer; Size: TSize; {$ifdef ThemeSupport} //Theme: HTHEME; R: TRect; const TVP_HOTGLYPH = 4; {$endif ThemeSupport} //--------------- local function -------------------------------------------- procedure FillBitmap (ABitmap: TBitmap); begin with ABitmap, Canvas do begin ABitmap.Width := Size.cx; ABitmap.Height := Size.cy; {$Ifdef ThemeSupport} if IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) then begin if (FHeader.FMainColumn > NoColumn) and not (coParentColor in FHeader.FColumns[FHeader.FMainColumn].FOptions) then Brush.Color := FHeader.FColumns[FHeader.FMainColumn].Color else Brush.Color := Self.Brush.Color; end else begin {$EndIf ThemeSupport} MaskHandle := 0; Transparent := True; TransparentColor := clFuchsia; Brush.Color := clFuchsia; {$Ifdef ThemeSupport} end; {$EndIf ThemeSupport} FillRect(Rect(0, 0, ABitmap.Width, ABitmap.Height)); end; end; //--------------- end local function ---------------------------------------- begin Size.cx := 9; Size.cy := 9; {$ifdef ThemeSupport} //todo { if tsUseThemes in FStates then begin Theme := OpenThemeData(Handle, 'TREEVIEW'); if IsWinVistaOrAbove and (toUseExplorerTheme in FOptions.FPaintOptions) then begin R := Rect(0, 0, 100, 100); GetThemePartSize(Theme, FPlusBM.Canvas.Handle, TVP_GLYPH, GLPS_OPENED, @R, TS_TRUE, Size); end; end else Theme := 0; } {$endif ThemeSupport} if NeedButtons then begin with FMinusBM, Canvas do begin // box is always of odd size FillBitmap(FMinusBM); FillBitmap(FHotMinusBM); if not (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then begin if FButtonStyle = bsTriangle then begin Brush.Color := clBlack; Pen.Color := clBlack; Polygon([Point(0, 2), Point(8, 2), Point(4, 6)]); end else begin // Button style is rectangular. Now ButtonFillMode determines how to fill the interior. if FButtonFillMode in [fmTreeColor, fmWindowColor, fmTransparent] then begin case FButtonFillMode of fmTreeColor: Brush.Color := Self.Brush.Color; fmWindowColor: Brush.Color := clWindow; end; Pen.Color := FColors.TreeLineColor; Rectangle(0, 0, Width, Height); Pen.Color := Self.Font.Color; MoveTo(2, Width div 2); LineTo(Width - 2 , Width div 2); end else FMinusBM.LoadFromLazarusResource('VT_XPBUTTONMINUS'); FHotMinusBM.Canvas.Draw(0, 0, FMinusBM); end; end; end; with FPlusBM, Canvas do begin FillBitmap(FPlusBM); FillBitmap(FHotPlusBM); if not (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then begin if FButtonStyle = bsTriangle then begin Brush.Color := clBlack; Pen.Color := clBlack; Polygon([Point(2, 0), Point(6, 4), Point(2, 8)]); end else begin // Button style is rectangular. Now ButtonFillMode determines how to fill the interior. if FButtonFillMode in [fmTreeColor, fmWindowColor, fmTransparent] then begin case FButtonFillMode of fmTreeColor: Brush.Color := Self.Brush.Color; fmWindowColor: Brush.Color := clWindow; end; Pen.Color := FColors.TreeLineColor; Rectangle(0, 0, Width, Height); Pen.Color := Self.Font.Color; MoveTo(2, Width div 2); LineTo(Width - 2 , Width div 2); MoveTo(Width div 2, 2); LineTo(Width div 2, Width - 2); end else FPlusBM.LoadFromLazarusResource('VT_XPBUTTONPLUS'); FHotPlusBM.Canvas.Draw(0, 0, FPlusBM); end; end; end; {$ifdef ThemeSupport} //todo // Overwrite glyph images if theme is active. { if (tsUseThemes in FStates) and (Theme <> 0) then begin R := Rect(0, 0, Size.cx, Size.cy); DrawThemeBackground(Theme, FPlusBM.Canvas.Handle, TVP_GLYPH, GLPS_CLOSED, R, nil); DrawThemeBackground(Theme, FMinusBM.Canvas.Handle, TVP_GLYPH, GLPS_OPENED, R, nil); if IsWinVistaOrAbove and (toUseExplorerTheme in FOptions.FPaintOptions) then begin DrawThemeBackground(Theme, FHotPlusBM.Canvas.Handle, TVP_HOTGLYPH, GLPS_CLOSED, R, nil); DrawThemeBackground(Theme, FHotMinusBM.Canvas.Handle, TVP_HOTGLYPH, GLPS_OPENED, R, nil); end else begin FHotPlusBM.Canvas.Draw(0, 0, FPlusBM); FHotMinusBM.Canvas.Draw(0, 0, FMinusBM); end; end; } {$endif ThemeSupport} end; if NeedLines then begin if FDottedBrush <> 0 then DeleteObject(FDottedBrush); case FLineStyle of lsDotted: Bits := @LineBitsDotted; lsSolid: Bits := @LineBitsSolid; else // lsCustomStyle Bits := @LineBitsDotted; DoGetLineStyle(Bits); end; PatternBitmap := CreateBitmap(8, 8, 1, 1, Bits); FDottedBrush := CreatePatternBrush(PatternBitmap); DeleteObject(PatternBitmap); end; {$ifdef ThemeSupport} // if Theme <> 0 then // CloseThemeData(Theme); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetAnimationDuration(const Value: Cardinal); begin FAnimationDuration := Value; if FAnimationDuration = 0 then Exclude(FOptions.FAnimationOptions, toAnimatedToggle) else Include(FOptions.FAnimationOptions, toAnimatedToggle); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBackground(const Value: TPicture); begin FBackground.Assign(Value); Invalidate; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBackgroundOffset(const Index, Value: Integer); begin case Index of 0: if FBackgroundOffsetX <> Value then begin FBackgroundOffsetX := Value; Invalidate; end; 1: if FBackgroundOffsetY <> Value then begin FBackgroundOffsetY := Value; Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- { procedure TBaseVirtualTree.SetBorderStyle(Value: TBorderStyle); begin if FBorderStyle <> Value then begin FBorderStyle := Value; RecreateWnd; end; end; } //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBottomNode(Node: PVirtualNode); var Run: PVirtualNode; R: TRect; begin if Assigned(Node) then begin // make sure all parents of the node are expanded Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; R := GetDisplayRect(Node, FHeader.MainColumn, True); DoSetOffsetXY(Point(FOffsetX, FOffsetY + ClientHeight - R.Top - Integer(NodeHeight[Node])), [suoRepaintScrollbars, suoUpdateNCArea]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBottomSpace(const Value: Cardinal); begin if FBottomSpace <> Value then begin FBottomSpace := Value; UpdateVerticalScrollbar(True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetButtonFillMode(const Value: TVTButtonFillMode); begin if FButtonFillMode <> Value then begin FButtonFillMode := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetButtonStyle(const Value: TVTButtonStyle); begin if FButtonStyle <> Value then begin FButtonStyle := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckImageKind(Value: TCheckImageKind); begin if FCheckImageKind <> Value then begin FCheckImageKind := Value; if toCheckSupport in FOptions.FMiscOptions then UpdateCheckImageList; if HandleAllocated and (FUpdateCount = 0) and not (csLoading in ComponentState) then InvalidateRect(Handle, nil, False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckState(Node: PVirtualNode; Value: TCheckState); begin if (Node.CheckState <> Value) and not (vsDisabled in Node.States) and DoChecking(Node, Value) then DoCheckClick(Node, Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckType(Node: PVirtualNode; Value: TCheckType); begin if (Node.CheckType <> Value) and not (toReadOnly in FOptions.FMiscOptions) then begin Node.CheckType := Value; Node.CheckState := csUncheckedNormal; // For check boxes with tri-state check box parents we have to initialize differently. if (toAutoTriStateTracking in FOptions.FAutoOptions) and (Value in [ctCheckBox, ctTriStateCheckBox]) and (Node.Parent <> FRoot) then begin if not (vsInitialized in Node.Parent.States) then InitNode(Node.Parent); if (Node.Parent.CheckType = ctTriStateCheckBox) and (Node.Parent.CheckState in [csUncheckedNormal, csCheckedNormal]) then CheckState[Node] := Node.Parent.CheckState; end; InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetChildCount(Node: PVirtualNode; NewChildCount: Cardinal); // Changes a node's child structure to accomodate the new child count. This is used to add or delete // child nodes to/from the end of the node's child list. To insert or delete a specific node a separate // routine is used. var Remaining: Cardinal; Index: Cardinal; Child: PVirtualNode; Count: Integer; NewHeight: Integer; begin if not (toReadOnly in FOptions.FMiscOptions) then begin if Node = nil then Node := FRoot; if NewChildCount = 0 then DeleteChildren(Node) else begin // If nothing changed then do nothing. if NewChildCount <> Node.ChildCount then begin InterruptValidation; NewHeight := 0; if NewChildCount > Node.ChildCount then begin Remaining := NewChildCount - Node.ChildCount; Count := Remaining; // New nodes to add. if Assigned(Node.LastChild) then Index := Node.LastChild.Index + 1 else begin Index := 0; Include(Node.States, vsHasChildren); end; Node.States := Node.States - [vsAllChildrenHidden, vsHeightMeasured]; // New nodes are by default always visible, so we don't need to check the visibility. while Remaining > 0 do begin Child := MakeNewNode; Child.Index := Index; Child.PrevSibling := Node.LastChild; if Assigned(Node.LastChild) then Node.LastChild.NextSibling := Child; Child.Parent := Node; Node.LastChild := Child; if Node.FirstChild = nil then Node.FirstChild := Child; Dec(Remaining); Inc(Index); // The actual node height will later be computed once it is clear // whether this node has a variable node height or not. Inc(NewHeight, Child.NodeHeight); end; if vsExpanded in Node.States then begin AdjustTotalHeight(Node, NewHeight, True); if FullyVisible[Node] then Inc(Integer(FVisibleCount), Count); end; AdjustTotalCount(Node, Count, True); Node.ChildCount := NewChildCount; if (FUpdateCount = 0) and (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then Sort(Node, FHeader.FSortColumn, FHeader.FSortDirection, True); InvalidateCache; end else begin // Nodes have to be deleted. Remaining := Node.ChildCount - NewChildCount; while Remaining > 0 do begin DeleteNode(Node.LastChild); Dec(Remaining); end; end; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; if Node = FRoot then StructureChange(nil, crChildAdded) else StructureChange(Node, crChildAdded); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetClipboardFormats(const Value: TClipboardFormats); var I: Integer; begin // Add string by string instead doing an Assign or AddStrings because the list may return -1 for // invalid entries which cause trouble for the standard implementation. FClipboardFormats.Clear; for I := 0 to Value.Count - 1 do FClipboardFormats.Add(Value[I]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetColors(const Value: TVTColors); begin FColors.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCustomCheckImages(const Value: TBitmap); begin if FCustomCheckImages <> Value then begin if Assigned(FCustomCheckImages) then begin // Reset the internal check image list reference too, if necessary. if FCheckImages = FCustomCheckImages then FCheckImages := nil; end; FCustomCheckImages := Value; // Check if currently custom check images are active. if FCheckImageKind = ckCustom then FCheckImages := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetDefaultNodeHeight(Value: Cardinal); begin if Value = 0 then Value := 18; if FDefaultNodeHeight <> Value then begin DoStateChange([tsNeedScale]); Inc(Integer(FRoot.TotalHeight), Integer(Value) - Integer(FDefaultNodeHeight)); Inc(SmallInt(FRoot.NodeHeight), Integer(Value) - Integer(FDefaultNodeHeight)); FDefaultNodeHeight := Value; InvalidateCache; if (FUpdateCount = 0) and HandleAllocated and not (csLoading in ComponentState) then begin ValidateCache; UpdateScrollBars(True); ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetDisabled(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and (Value xor (vsDisabled in Node.States)) then begin if Value then Include(Node.States, vsDisabled) else Exclude(Node.States, vsDisabled); if FUpdateCount = 0 then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetExpanded(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and (Node <> FRoot) and (Value xor (vsExpanded in Node.States)) then ToggleNode(Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedColumn(Value: TColumnIndex); begin if (FFocusedColumn <> Value) and DoFocusChanging(FFocusedNode, FFocusedNode, FFocusedColumn, Value) then begin CancelEditNode; InvalidateColumn(FFocusedColumn); InvalidateColumn(Value); FFocusedColumn := Value; if Assigned(FFocusedNode) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then begin if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)) then InvalidateNode(FFocusedNode); end; if Assigned(FDropTargetNode) then InvalidateNode(FDropTargetNode); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedNode(Value: PVirtualNode); var WasDifferent: Boolean; begin WasDifferent := Value <> FFocusedNode; DoFocusNode(Value, True); // Do change event only if there was actually a change. if WasDifferent and (FFocusedNode = Value) then DoFocusChange(FFocusedNode, FFocusedColumn); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFullyVisible(Node: PVirtualNode; Value: Boolean); // This method ensures that a node is visible and all its parent nodes are expanded and also visible // if Value is True. Otherwise the visibility flag of the node is reset but the expand state // of the parent nodes stays untouched. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter'); IsVisible[Node] := Value; if Value then begin repeat Node := Node.Parent; if Node = FRoot then Break; if not (vsExpanded in Node.States) then ToggleNode(Node); if not (vsVisible in Node.States) then IsVisible[Node] := True; until False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetHasChildren(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and not (toReadOnly in FOptions.FMiscOptions) then begin if Value then Include(Node.States, vsHasChildren) else begin Exclude(Node.States, vsHasChildren); DeleteChildren(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetHeader(const Value: TVTHeader); begin FHeader.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetImages(const Value: TCustomImageList); begin if FImages <> Value then begin if Assigned(FImages) then begin FImages.UnRegisterChanges(FImageChangeLink); FImages.RemoveFreeNotification(Self); end; FImages := Value; if Assigned(FImages) then begin FImages.RegisterChanges(FImageChangeLink); FImages.FreeNotification(Self); end; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetIndent(Value: Cardinal); begin if FIndent <> Value then begin FIndent := Value; if not (csLoading in ComponentState) and (FUpdateCount = 0) and HandleAllocated then begin UpdateScrollBars(True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetLineMode(const Value: TVTLineMode); begin if FLineMode <> Value then begin FLineMode := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetLineStyle(const Value: TVTLineStyle); begin if FLineStyle <> Value then begin FLineStyle := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(False, True); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetMargin(Value: Integer); begin if FMargin <> Value then begin FMargin := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetMultiline(Node: PVirtualNode; const Value: Boolean); begin if Assigned(Node) and (Node <> FRoot) then if Value <> (vsMultiline in Node.States) then begin if Value then Include(Node.States, vsMultiline) else Exclude(Node.States, vsMultiline); if FUpdateCount = 0 then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeAlignment(const Value: TVTNodeAlignment); begin if FNodeAlignment <> Value then begin FNodeAlignment := Value; if HandleAllocated and not (csReading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeDataSize(Value: Integer); var LastRootCount: Cardinal; begin if Value < -1 then Value := -1; if FNodeDataSize <> Value then begin FNodeDataSize := Value; if not (csLoading in ComponentState) and not (csDesigning in ComponentState) then begin LastRootCount := FRoot.ChildCount; Clear; SetRootNodeCount(LastRootCount); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeHeight(Node: PVirtualNode; Value: Cardinal); var Difference: Integer; begin if Assigned(Node) and (Node <> FRoot) and (Node.NodeHeight <> Value) and not (toReadOnly in FOptions.FMiscOptions) then begin Difference := Integer(Value) - Integer(Node.NodeHeight); Node.NodeHeight := Value; AdjustTotalHeight(Node, Difference, True); // If an edit operation is currently active then update the editors boundaries as well. UpdateEditBounds; // Stay away from touching the node cache while it is being validated. if not (tsValidating in FStates) and FullyVisible[Node] then begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; InvalidateToBottom(Node); UpdateScrollBars(True); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeParent(Node: PVirtualNode; const Value: PVirtualNode); begin if Assigned(Node) and Assigned(Value) and (Node.Parent <> Value) then MoveTo(Node, Value, amAddChildLast, False); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetX(const Value: Integer); begin DoSetOffsetXY(Point(Value, FOffsetY), DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetXY(const Value: TPoint); begin DoSetOffsetXY(Value, DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetY(const Value: Integer); begin DoSetOffsetXY(Point(FOffsetX, Value), DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOptions(const Value: TCustomVirtualTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetRootNodeCount(Value: Cardinal); begin // Don't set the root node count until all other properties (in particular the OnInitNode event) have been set. if csLoading in ComponentState then begin FRoot.ChildCount := Value; DoStateChange([tsNeedRootCountUpdate]); end else if FRoot.ChildCount <> Value then begin BeginUpdate; InterruptValidation; SetChildCount(FRoot, Value); EndUpdate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetScrollBarOptions(Value: TScrollBarOptions); begin FScrollBarOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSearchOption(const Value: TVTIncrementalSearch); begin if FIncrementalSearch <> Value then begin FIncrementalSearch := Value; if FIncrementalSearch = isNone then begin KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSelected(Node: PVirtualNode; Value: Boolean); begin if not FSelectionLocked and Assigned(Node) and (Node <> FRoot) and (Value xor (vsSelected in Node.States)) then begin if Value then begin if FSelectionCount = 0 then FRangeAnchor := Node else if not (toMultiSelect in FOptions.FSelectionOptions) then ClearSelection; AddToSelection(Node); // Make sure there is a valid column selected (if there are columns at all). if ((FFocusedColumn < 0) or not (coVisible in FHeader.Columns[FFocusedColumn].Options)) and (FHeader.MainColumn > NoColumn) then if ([coVisible, coAllowFocus] * FHeader.Columns[FHeader.MainColumn].Options = [coVisible, coAllowFocus]) then FFocusedColumn := FHeader.MainColumn else FFocusedColumn := FHeader.Columns.GetFirstVisibleColumn(True); if FRangeAnchor = nil then FRangeAnchor := Node; end else begin RemoveFromSelection(Node); if FSelectionCount = 0 then ResetRangeAnchor; end; if FullyVisible[Node] then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSelectionCurveRadius(const Value: Cardinal); begin if FSelectionCurveRadius <> Value then begin FSelectionCurveRadius := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetStateImages(const Value: TCustomImageList); begin if FStateImages <> Value then begin if Assigned(FStateImages) then begin FStateImages.UnRegisterChanges(FStateChangeLink); FStateImages.RemoveFreeNotification(Self); end; FStateImages := Value; if Assigned(FStateImages) then begin FStateImages.RegisterChanges(FStateChangeLink); FStateImages.FreeNotification(Self); end; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetTextMargin(Value: Integer); begin if FTextMargin <> Value then begin FTextMargin := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetTopNode(Node: PVirtualNode); var R: TRect; Run: PVirtualNode; begin if Assigned(Node) then begin // make sure all parents of the node are expanded Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; R := GetDisplayRect(Node, FHeader.MainColumn, True); //lclheader if hoVisible in FHeader.Options then Dec(R.Top, FHeader.Height); SetOffsetY(FOffsetY - R.Top); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetUpdateState(Updating: Boolean); begin // The check for visibility is necessary otherwise the tree is automatically shown when // updating is allowed. As this happens internally the VCL does not get notified and // still assumes the control is hidden. This results in weird "cannot focus invisible control" errors. //lcl todo if Visible and HandleAllocated and (FUpdateCount = 0) then SendMessage(Handle, WM_SETREDRAW, Ord(not Updating), 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVerticalAlignment(Node: PVirtualNode; Value: Byte); begin if Value > 100 then Value := 100; if Node.Align <> Value then begin Node.Align := Value; if FullyVisible[Node] then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVisible(Node: PVirtualNode; Value: Boolean); // Sets the visibility style of the given node according to Value. var NeedUpdate: Boolean; begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); if Value <> (vsVisible in Node.States) then begin InterruptValidation; NeedUpdate := False; if Value then begin Include(Node.States, vsVisible); if vsExpanded in Node.Parent.States then AdjustTotalHeight(Node.Parent, Node.TotalHeight, True); if VisiblePath[Node] then begin Inc(FVisibleCount, 1 + CountVisibleChildren(Node)); NeedUpdate := True; end; // Update the hidden children flag of the parent. // Since this node is now visible we simply have to remove the flag. Exclude(Node.Parent.States, vsAllChildrenHidden); end else begin Exclude(Node.States, vsVisible); if vsExpanded in Node.Parent.States then AdjustTotalHeight(Node.Parent, -Integer(Node.TotalHeight), True); if VisiblePath[Node] then begin Dec(FVisibleCount, 1 + CountVisibleChildren(Node)); NeedUpdate := True; end; if FUpdateCount = 0 then DetermineHiddenChildrenFlag(Node.Parent) else Include(FStates, tsUpdateHiddenChildrenNeeded) end; InvalidateCache; if NeedUpdate and (FUpdateCount = 0) then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVisiblePath(Node: PVirtualNode; Value: Boolean); // If Value is True then all parent nodes of Node are expanded. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); if Value then begin repeat Node := Node.Parent; if Node = FRoot then Break; if not (vsExpanded in Node.States) then ToggleNode(Node); until False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StaticBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; const R: TRect); // Draws the given source graphic so that it stays static in the given rectangle which is relative to the target bitmap. // The graphic is aligned so that it always starts at the upper left corner of the target canvas. // Offset gives the position of the target window as a possible superordinated surface. const DST = $00AA0029; // Ternary Raster Operation - Destination unchanged var PicRect: TRect; AreaRect: TRect; DrawRect: TRect; begin // clear background Target.Brush.Color := Brush.Color; Target.FillRect(R); // Picture rect in relation to client viewscreen. PicRect := Rect(FBackgroundOffsetX, FBackgroundOffsetY, FBackgroundOffsetX + Source.Width, FBackgroundOffsetY + Source.Height); // Area to be draw in relation to client viewscreen. AreaRect := Rect(Offset.X + R.Left, Offset.Y + R.Top, Offset.X + R.Right, Offset.Y + R.Bottom); // If picture falls in AreaRect, return intersection (DrawRect). if IntersectRect(DrawRect, PicRect, AreaRect) then begin // Draw portion of image which falls in canvas area. if Source.Transparent then begin // Leave transparent area as destination unchanged (DST), copy non-transparent areas to canvas (SRCCOPY). with DrawRect do MaskBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X), (Bottom - Offset.Y) - (Top - Offset.Y), Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top, Source.MaskHandle, Left - PicRect.Left, Top - PicRect.Top, MakeROP4(DST, SRCCOPY)); end else begin // copy image to destination with DrawRect do BitBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X), (Bottom - Offset.Y) - (Top - Offset.Y) + R.Top, Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top, SRCCOPY); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TileBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; R: TRect); // Draws the given source graphic so that it tiles into the given rectangle which is relative to the target bitmap. // The graphic is aligned so that it always starts at the upper left corner of the target canvas. // Offset gives the position of the target window in an possible superordinated surface. var SourceX, SourceY, TargetX, DeltaY: Integer; begin with Target do begin SourceY := (R.Top + Offset.Y + FBackgroundOffsetY) mod Source.Height; // Always wrap the source coordinates into positive range. if SourceY < 0 then SourceY := Source.Height + SourceY; // Tile image vertically until target rect is filled. while R.Top < R.Bottom do begin SourceX := (R.Left + Offset.X + FBackgroundOffsetX) mod Source.Width; // always wrap the source coordinates into positive range if SourceX < 0 then SourceX := Source.Width + SourceX; TargetX := R.Left; // height of strip to draw DeltaY := Min(R.Bottom - R.Top, Source.Height - SourceY); // tile the image horizontally while TargetX < R.Right do begin BitBlt(Handle, TargetX, R.Top, Min(R.Right - TargetX, Source.Width - SourceX), DeltaY, Source.Canvas.Handle, SourceX, SourceY, SRCCOPY); Inc(TargetX, Source.Width - SourceX); SourceX := 0; end; Inc(R.Top, Source.Height - SourceY); SourceY := 0; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ToggleCallback(Step, StepSize: Integer; Data: Pointer): Boolean; var Column: TColumnIndex; Run: TRect; SecondaryStepSize: Integer; //--------------- local functions ------------------------------------------- procedure EraseLine; var LocalBrush: HBRUSH; begin with TToggleAnimationData(Data^), FHeader.FColumns do begin // Iterate through all columns and erase background in their local color. // LocalBrush is a brush in the color of the particular column. Column := GetFirstVisibleColumn; while (Column > InvalidColumn) and (Run.Left < ClientWidth) do begin GetColumnBounds(Column, Run.Left, Run.Right); if coParentColor in Items[Column].FOptions then FillRect(DC, Run, Brush) else begin LocalBrush := CreateSolidBrush(ColorToRGB(Items[Column].Color)); FillRect(DC, Run, LocalBrush); DeleteObject(LocalBrush); end; Column := GetNextVisibleColumn(Column); end; end; end; //--------------------------------------------------------------------------- procedure DoScrollUp(DC: HDC; Brush: HBRUSH; Area: TRect; Steps: Integer); begin {$ifndef INCOMPLETE_WINAPI} ScrollDC(DC, 0, -Steps, Area, Area, 0, nil); {$endif} if Step = 0 then if not FHeader.UseColumns then FillRect(DC, Rect(Area.Left, Area.Bottom - Steps - 1, Area.Right, Area.Bottom), Brush) else begin Run := Rect(Area.Left, Area.Bottom - Steps - 1, Area.Right, Area.Bottom); EraseLine; end; end; //--------------------------------------------------------------------------- procedure DoScrollDown(DC: HDC; Brush: HBRUSH; Area: TRect; Steps: Integer); begin {$ifndef INCOMPLETE_WINAPI} ScrollDC(DC, 0, Steps, Area, Area, 0, nil); {$endif} if Step = 0 then if not FHeader.UseColumns then FillRect(DC, Rect(Area.Left, Area.Top, Area.Right, Area.Top + Steps + 1), Brush) else begin Run := Rect(Area.Left, Area.Top, Area.Right, Area.Top + Steps + 1); EraseLine; end; end; //--------------- end local functions --------------------------------------- begin Result := True; if StepSize > 0 then begin SecondaryStepSize := 0; with TToggleAnimationData(Data^) do begin if Mode1 <> tamNoScroll then begin if Mode1 = tamScrollUp then DoScrollUp(DC, Brush, R1, StepSize) else DoScrollDown(DC, Brush, R1, StepSize); if (Mode2 <> tamNoScroll) and (ScaleFactor > 0) then begin // As this routine is able to scroll two independent areas at once, the missing StepSize is // computed in that case. To ensure the maximal accuracy the rounding error is accumulated. SecondaryStepSize := Round((StepSize + MissedSteps) * ScaleFactor); MissedSteps := MissedSteps + StepSize * ScaleFactor - SecondaryStepSize; end; end else SecondaryStepSize := StepSize; if Mode2 <> tamNoScroll then if Mode2 = tamScrollUp then DoScrollUp(DC, Brush, R2, SecondaryStepSize) else DoScrollDown(DC, Brush, R2, SecondaryStepSize); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMColorChange(var Message: TLMessage); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'CMColorChange');{$endif} if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'CMColorChange');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMBiDiModeChanged(var Message: TLMessage); begin inherited; if UseRightToLeftAlignment then FEffectiveOffsetX := Integer(FRangeX) - ClientWidth + FOffsetX else FEffectiveOffsetX := -FOffsetX; if FEffectiveOffsetX < 0 then FEffectiveOffsetX := 0; if toAutoBidiColumnOrdering in FOptions.FAutoOptions then FHeader.FColumns.ReorderColumns(UseRightToLeftAlignment); FHeader.Invalidate(nil); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX after CMBidiModeChanged',FEffectiveOffsetX);{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMDenySubclassing(var Message: TLMessage); // If a Windows XP Theme Manager component is used in the application it will try to subclass all controls which do not // explicitly deny this. Virtual Treeview knows how to handle XP themes so it does not need subclassing. begin Message.Result := 1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean): LRESULT; var S: TObject; KeyState: LongWord; P: TPoint; Formats: TFormatArray; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoDragMsg');{$endif} S := ADragObject; Formats := nil; // Let the ancestor handle dock operations. if S is TDragDockObject then inherited else begin // We need an extra check for the control drag object as there might be other objects not derived from // this class (e.g. TActionDragObject). if not (tsUserDragObject in FStates) and (S is TDragControlObject) then S := (S as TDragControlObject).Control; case ADragMessage of dmDragEnter, dmDragLeave, dmDragMove: begin if ADragMessage = dmDragEnter then DoStateChange([tsVCLDragging]); if ADragMessage = dmDragLeave then DoStateChange([], [tsVCLDragging]); if ADragMessage = dmDragMove then with ScreenToClient(APosition) do DoAutoScroll(X, Y); KeyState := 0; // Alt key will be queried by the KeysToShiftState function in DragOver. if GetKeyState(VK_SHIFT) < 0 then KeyState := KeyState or MK_SHIFT; if GetKeyState(VK_CONTROL) < 0 then KeyState := KeyState or MK_CONTROL; // Allowed drop effects are simulated for VCL dd. FVCLDragEffect := DROPEFFECT_MOVE or DROPEFFECT_COPY; DragOver(S, KeyState, TDragState(ADragMessage), APosition, FVCLDragEffect); Result := LRESULT(FVCLDragEffect); FLastVCLDragTarget := FDropTargetNode; if (ADragMessage = dmDragLeave) and Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; dmDragDrop: begin KeyState := 0; // Alt key will be queried by the KeysToShiftState function in DragOver if GetKeyState(VK_SHIFT) < 0 then KeyState := KeyState or MK_SHIFT; if GetKeyState(VK_CONTROL) < 0 then KeyState := KeyState or MK_CONTROL; // allowed drop effects are simulated for VCL dd, // replace target node with cached node from other VCL dd messages if Assigned(FDropTargetNode) then InvalidateNode(FDropTargetNode); FDropTargetNode := FLastVCLDragTarget; P := ScreenToClient(APosition); DoDragDrop(S, nil, Formats, KeysToShiftState(KeyState), P, FVCLDragEffect, FLastDropMode); if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; dmFindTarget: begin Result := LRESULT(ControlAtPos(ScreenToClient(APosition), False)); if Result = 0 then Result := LRESULT(Self); // This is a reliable place to check whether VCL drag has // really begun. if tsVCLDragPending in FStates then DoStateChange([tsVCLDragging], [tsVCLDragPending, tsEditPending, tsClearPending]); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoDragMsg');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMFontChanged(var Message: TLMessage); var HeaderMessage: TLMessage; begin inherited; if not (csLoading in ComponentState) then PrepareBitmaps(True, False); HeaderMessage.Msg := CM_PARENTFONTCHANGED; HeaderMessage.WParam := 0; HeaderMessage.LParam := 0; HeaderMessage.Result := 0; FHeader.HandleMessage(HeaderMessage); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMHintShow(var Message: TCMHintShow); // Determines hint message (tooltip) and out-of-hint rect. // Note: A special handling is needed here because we cannot pass wide strings back to the caller. // I had to introduce the hint data record anyway so we can use this to pass the hint string. // We still need to set a dummy hint string in the message to make the VCL showing the hint window. var NodeRect: TRect; SpanColumn, Dummy, ColLeft, ColRight: Integer; HitInfo: THitInfo; ShowOwnHint: Boolean; IsFocusedOrEditing: Boolean; ParentForm: TCustomForm; BottomRightCellContentMargin: TPoint; LineBreakStyle: TVTTooltipLineBreakStyle; begin with Message do begin Result := 1; if PtInRect(FLastHintRect, HintInfo.CursorPos) then Exit; // Determine node for which to show hint/tooltip. with HintInfo^ do GetHitTestInfoAt(CursorPos.X, CursorPos.Y, True, HitInfo); // Make sure a hint is only shown if the tree or at least its parent form is active. // Active editing is ok too as long as we don't want the hint for the current edit node. if IsEditing then IsFocusedOrEditing := HitInfo.HitNode <> FFocusedNode else begin IsFocusedOrEditing := Focused; ParentForm := GetParentForm(Self); if Assigned(ParentForm) then IsFocusedOrEditing := ParentForm.Focused or Application.Active; end; if (GetCapture = 0) and ShowHint and not (Dragging or IsMouseSelecting) and ([tsScrolling] * FStates = []) and (FHeader.States = []) and IsFocusedOrEditing then begin with HintInfo^ do begin Result := 0; ShowOwnHint := False; // First check whether there is a header hint to show. if FHeader.UseColumns and (hoShowHint in FHeader.FOptions) and FHeader.InHeader(CursorPos) then begin CursorRect := FHeaderRect; // Convert the cursor rectangle into real client coordinates. OffsetRect(CursorRect, 0, -Integer(FHeader.FHeight)); HitInfo.HitColumn := FHeader.FColumns.GetColumnAndBounds(CursorPos, CursorRect.Left, CursorRect.Right); // align the vertical hint position on the bottom bound of the header, but // avoid overlapping of mouse cursor and hint HintPos.Y := Max(HintPos.Y, ClientToScreen(Point(0, CursorRect.Bottom)).Y); // Note: the test for the left mouse button in ControlState might cause problems whenever the VCL does not // realize when the button is released. This, for instance, happens when doing OLE drag'n drop and // cancel this with ESC. if (HitInfo.HitColumn > -1) and not (csLButtonDown in ControlState) then begin FHintData.DefaultHint := FHeader.FColumns[HitInfo.HitColumn].FHint; if FHintData.DefaultHint <> '' then ShowOwnHint := True else Result := 1; end else Result := 1; end else begin // Default mode is handled as would the tree be a usual VCL control (no own hint window necessary). if FHintMode = hmDefault then HintStr := GetShortHint(Hint) else begin if Assigned(HitInfo.HitNode) and (HitInfo.HitColumn > InvalidColumn) then begin // A draw tree should only display a hint when at least its OnGetHintSize // event handler is assigned. if Self is TCustomVirtualDrawTree then begin FHintData.HintRect := Rect(0, 0, 0, 0); with Self as TCustomVirtualDrawTree do DoGetHintSize(HitInfo.HitNode, HitInfo.HitColumn, FHintData.HintRect); ShowOwnHint := not IsRectEmpty(FHintData.HintRect); end else // For string trees a decision about showing the hint or not is based // on the hint string (if it is empty then no hint is shown). ShowOwnHint := True; if ShowOwnHint then begin if HitInfo.HitColumn > NoColumn then begin FHeader.FColumns.GetColumnBounds(HitInfo.HitColumn, ColLeft, ColRight); // The right column border might be extended if column spanning is enabled. if toAutoSpanColumns in FOptions.FAutoOptions then begin SpanColumn := HitInfo.HitColumn; repeat Dummy := FHeader.FColumns.GetNextVisibleColumn(SpanColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(HitInfo.HitNode, Dummy) then Break; SpanColumn := Dummy; until False; if SpanColumn <> HitInfo.HitColumn then FHeader.FColumns.GetColumnBounds(SpanColumn, Dummy, ColRight); end; end else begin ColLeft := 0; ColRight := ClientWidth; end; FHintData.DefaultHint := ''; if FHintMode <> hmTooltip then begin // Node specific hint text. CursorRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, False); CursorRect.Left := ColLeft; CursorRect.Right := ColRight; // Align the vertical hint position on the bottom bound of the node, but // avoid overlapping of mouse cursor and hint. HintPos.Y := Max(HintPos.Y, ClientToScreen(CursorRect.BottomRight).Y) + 2; end else begin // Tool tip to show. This means the full caption of the node must be displayed. if vsMultiline in HitInfo.HitNode.States then begin if hiOnItemLabel in HitInfo.HitPositions then begin ShowOwnHint := True; NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, False); end; end else begin NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, True, True); BottomRightCellContentMargin := DoGetCellContentMargin(HitInfo.HitNode, HitInfo.HitColumn, ccmtBottomRightOnly); ShowOwnHint := (HitInfo.HitColumn > InvalidColumn) and PtInRect(NodeRect, CursorPos) and (CursorPos.X <= ColRight) and (CursorPos.X >= ColLeft) and ( // Show hint also if the node text is partially out of the client area. // "ColRight - 1", since the right column border is not part of this cell. ( (NodeRect.Right + BottomRightCellContentMargin.X) > Min(ColRight - 1, ClientWidth) ) or (NodeRect.Left < Max(ColLeft, 0)) or ( (NodeRect.Bottom + BottomRightCellContentMargin.Y) > ClientHeight ) or (NodeRect.Top < 0) ); end; if ShowOwnHint then begin // Node specific hint text given will be retrieved when needed. FHintData.DefaultHint := ''; HintPos := ClientToScreen(Point(NodeRect.Left, NodeRect.Top)); CursorRect := NodeRect; end else // nothing to show Result := 1; end; end else Result := 1; // Avoid hint if this is a draw tree returning an empty hint rectangle. end else begin // No node so fall back to control's hint (if indicated) or show nothing. if FHintMode = hmHintAndDefault then HintStr := GetShortHint(Hint) else Result := 1; end; end; end; {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'ShowOwnHint: %s Result: %d', [BoolToStr(ShowOwnHint, True), Result]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'CursorRect', CursorRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'CursorPos', CursorPos);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'HintMaxWidth', HintMaxWidth);{$endif} // If hint must be show and is not the control's hint then get the hint // from the node or from the DefaultHint if ShowOwnHint and (Result = 0) then begin LineBreakStyle := hlbDefault; FLastHintRect := CursorRect; if Length(FHintData.DefaultHint) > 0 then HintStr := FHintData.DefaultHint else if FHintMode = hmToolTip then HintStr := DoGetNodeToolTip(HitInfo.HitNode, HitInfo.HitColumn, LineBreakStyle) else HintStr := DoGetNodeHint(HitInfo.HitNode, HitInfo.HitColumn, LineBreakStyle); // Determine actual line break style depending on what was returned by the methods and what's in the node. if (LineBreakStyle = hlbDefault) and Assigned(HitInfo.HitNode) and (vsMultiline in HitInfo.HitNode.States) then LineBreakStyle := hlbForceMultiLine; if LineBreakStyle = hlbForceMultiLine then begin // NodeRect is already calculated for ToolTip if FHintMode <> hmTooltip then NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, False); HintMaxWidth := NodeRect.Right - NodeRect.Left; end; HintWindowClass := GetHintWindowClass; FHintData.Tree := Self; FHintData.Column := HitInfo.HitColumn; FHintData.Node := HitInfo.HitNode; FHintData.HintInfo := HintInfo; HintData := @FHintData; end else FLastHintRect := Rect(0, 0, 0, 0); end; // Remind that a hint is about to show. if Result = 0 then DoStateChange([tsHint]) else DoStateChange([], [tsHint]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMMouseLeave(var Message: TLMessage); var LeaveStates: TVirtualTreeStates; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'CMMouseLeave');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcMessages],'FCurrentHotNode',hexStr(FCurrentHotNode));{$endif} // Reset the last used hint rectangle in case the mouse enters the window within the bounds if Assigned(FHintData.Tree) then FHintData.Tree.FLastHintRect := Rect(0, 0, 0, 0); LeaveStates := [tsHint]; if [tsWheelPanning, tsWheelScrolling] * FStates = [] then begin if HandleAllocated then KillTimer(Handle, ScrollTimer); LeaveStates := LeaveStates + [tsScrollPending, tsScrolling]; end; DoStateChange([], LeaveStates); if Assigned(FCurrentHotNode) then begin DoHotChange(FCurrentHotNode, nil); if (toHotTrack in FOptions.PaintOptions) or (toCheckSupport in FOptions.FMiscOptions) then InvalidateNode(FCurrentHotNode); FCurrentHotNode := nil; end; Header.FColumns.FDownIndex := NoColumn; Header.FColumns.FHoverIndex := NoColumn; inherited CMMouseLeave(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'CMMouseLeave');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMMouseWheel(var Message: TLMMouseEvent); var ScrollAmount: Integer; ScrollLines: DWORD; RTLFactor: Integer; WheelFactor: Double; begin //todo: rename to WM* {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'CMMouseWheel');{$endif} StopWheelPanning; inherited WMMouseWheel(Message); if Message.Result = 0 then begin with Message do begin Result := 1; WheelFactor := WheelDelta / WHEEL_DELTA; if (FRangeY > Cardinal(ClientHeight)) and (not (ssShift in State)) then begin {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'Scroll Vertical - WheelDelta', WheelDelta);{$endif} // Scroll vertically if there's something to scroll... if ssCtrlOS in State then ScrollAmount := Trunc(WheelFactor * ClientHeight) else begin SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0); if ScrollLines = WHEEL_PAGESCROLL then ScrollAmount := Integer(Trunc(WheelFactor * ClientHeight)) else ScrollAmount := Integer(Trunc(WheelFactor * ScrollLines * FDefaultNodeHeight)); end; SetOffsetY(FOffsetY + ScrollAmount); end else begin // ...else scroll horizontally if there's something to scroll. if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; if ssCtrlOS in State then ScrollAmount := Trunc(WheelFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)) else begin SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0); ScrollAmount := Trunc(WheelFactor * ScrollLines * FHeader.Columns.GetScrollWidth); end; SetOffsetX(FOffsetX + RTLFactor * ScrollAmount); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'CMMouseWheel');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNativeTVM} procedure TBaseVirtualTree.TVMGetItem(var Message: TLMessage); // Screen reader support function. The method returns information about a particular node. const StateMask = TVIS_STATEIMAGEMASK or TVIS_OVERLAYMASK or TVIS_EXPANDED or TVIS_DROPHILITED or TVIS_CUT or TVIS_SELECTED or TVIS_FOCUSED; var Item: PTVItemEx; Node: PVirtualNode; Ghosted: Boolean; ImageIndex: Integer; R: TRect; Text: String; {$ifndef UNICODE} ANSIText: ANSIString; {$endif} begin // We can only return valid data if a nodes reference is given. Item := Pointer(Message.LParam); Message.Result := Ord(((Item.mask and TVIF_HANDLE) <> 0) and Assigned(Item.hItem)); if Message.Result = 1 then begin Node := Pointer(Item.hItem); // Child count requested? if (Item.mask and TVIF_CHILDREN) <> 0 then Item.cChildren := Node.ChildCount; // Index for normal image requested? if (Item.mask and TVIF_IMAGE) <> 0 then begin Item.iImage := -1; DoGetImageIndex(Node, ikNormal, -1, Ghosted, Item.iImage); end; // Index for selected image requested? if (Item.mask and TVIF_SELECTEDIMAGE) <> 0 then begin Item.iSelectedImage := -1; DoGetImageIndex(Node, ikSelected, -1, Ghosted, Item.iSelectedImage); end; // State info requested? if (Item.mask and TVIF_STATE) <> 0 then begin // Everything, which is possible is returned. Item.stateMask := StateMask; Item.state := 0; if Node = FFocusedNode then Item.state := Item.state or TVIS_FOCUSED; if vsSelected in Node.States then Item.state := Item.state or TVIS_SELECTED; if vsCutOrCopy in Node.States then Item.state := Item.state or TVIS_CUT; if Node = FDropTargetNode then Item.state := Item.state or TVIS_DROPHILITED; if vsExpanded in Node.States then Item.state := Item.state or TVIS_EXPANDED; // Construct state image and overlay image indices. They are one based, btw. // and zero means there is no image. ImageIndex := -1; DoGetImageIndex(Node, ikState, -1, Ghosted, ImageIndex); Item.state := Item.state or Byte(IndexToStateImageMask(ImageIndex + 1)); ImageIndex := -1; DoGetImageIndex(Node, ikOverlay, -1, Ghosted, ImageIndex); Item.state := Item.state or Byte(IndexToOverlayMask(ImageIndex + 1)); end; // Node caption requested? if (Item.mask and TVIF_TEXT) <> 0 then begin GetTextInfo(Node, -1, Font, R, Text); {$ifdef UNICODE} StrLCopy(Item.pszText, PChar(Text), Item.cchTextMax - 1); Item.pszText[Length(Text)] := #0; {$else} // Convert the Unicode implicitely to ANSI using the current locale. ANSIText := Text; StrLCopy(Item.pszText, PChar(ANSIText), Item.cchTextMax - 1); Item.pszText[Length(ANSIText)] := #0; {$endif} end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TVMGetItemRect(var Message: TLMessage); // Screen read support function. This method returns a node's display rectangle. var TextOnly: Boolean; Node: PVirtualNode; begin // The lparam member is used two-way. On enter it contains a pointer to the item (node). // On exit it is to be considered as pointer to a rectangle structure. Node := Pointer(Pointer(Message.LParam)^); Message.Result := Ord(IsVisible[Node]); if Message.Result <> 0 then begin TextOnly := Message.WParam <> 0; PRect(Message.LParam)^ := GetDisplayRect(Node, -1, TextOnly); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TVMGetNextItem(var Message: TLMessage); // Screen read support function. This method returns a node depending on the requested case. var Node: PVirtualNode; begin // Start with a nil result. Message.Result := 0; Node := Pointer(Message.LParam); case Message.WParam of TVGN_CARET: Message.Result := Integer(FFocusedNode); TVGN_CHILD: if Assigned(Node) then Message.Result := Integer(GetFirstChild(Node)); TVGN_DROPHILITE: Message.Result := Integer(FDropTargetNode); TVGN_FIRSTVISIBLE: Message.Result := Integer(GetFirstVisible(nil, True)); TVGN_LASTVISIBLE: Message.Result := Integer(GetLastVisible(nil, True)); TVGN_NEXT: if Assigned(Node) then Message.Result := Integer(GetNextSibling(Node)); TVGN_NEXTVISIBLE: if Assigned(Node) then Message.Result := Integer(GetNextVisible(Node, True)); TVGN_PARENT: if Assigned(Node) and (Node <> FRoot) and (Node.Parent <> FRoot) then Message.Result := Integer(Node.Parent); TVGN_PREVIOUS: if Assigned(Node) then Message.Result := Integer(GetPreviousSibling(Node)); TVGN_PREVIOUSVISIBLE: if Assigned(Node) then Message.Result := Integer(GetPreviousVisible(Node, True)); TVGN_ROOT: Message.Result := Integer(GetFirst); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCancelMode(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCancelMode');{$endif} // Clear any transient state. KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsClearPending, tsEditPending, tsOLEDragPending, tsVCLDragPending, tsDrawSelecting, tsDrawSelPending, tsIncrementalSearching]); //lcl does not has a inherited procedure //inherited WMCancelMode(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCancelMode');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMChangeState(var Message: TLMessage); var EnterStates, LeaveStates: TVirtualTreeStates; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMChangeState');{$endif} EnterStates := []; if csStopValidation in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsStopValidation); if csUseCache in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsUseCache); if csValidating in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsValidating); if csValidationNeeded in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsValidationNeeded); LeaveStates := []; if csStopValidation in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsStopValidation); if csUseCache in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsUseCache); if csValidating in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsValidating); if csValidationNeeded in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsValidationNeeded); DoStateChange(EnterStates, LeaveStates); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMChangeState');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMChar(var Message: TLMChar); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMChar');{$endif} if tsIncrementalSearchPending in FStates then begin HandleIncrementalSearch(Message.CharCode); DoStateChange([], [tsIncrementalSearchPending]); end; inherited WMChar(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMChar');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMContextMenu(var Message: TLMContextMenu); // This method is called when a popup menu is about to be displayed. // We have to cancel some pending states here to avoid interferences. //lcl: handle mouse up here because MouseUp is not called when popup is show var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMContextMenu');{$endif} DoStateChange([], [tsClearPending, tsEditPending, tsOLEDragPending, tsVCLDragPending]); {$ifdef ContextMenuBeforeMouseUp} if Assigned(PopupMenu) then begin if FHeader.FStates = [] then begin Application.CancelHint; if IsMouseSelecting then begin // Reset selection state already here, before the inherited handler opens the default menu. DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end; inherited WMContextMenu(Message); if (toRightClickSelect in FOptions.FSelectionOptions) then begin // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(0, HitInfo); end; end; end else inherited WMContextMenu(Message); {$else} if not (tsPopupMenuShown in FStates) then inherited WMContextMenu(Message); {$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMContextMenu');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCopy(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCopy');{$endif} CopyToClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCopy');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCut(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCut');{$endif} CutToClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCut');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMEnable(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMEnable');{$endif} //LCL does not has inherited WMEnable //inherited WMEnable(Message); RedrawWindow(Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN); {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMEnable');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcEraseBkgnd],'WMEraseBkgnd');{$endif} Message.Result := 1; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcEraseBkgnd],'WMEraseBkgnd');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMGetDlgCode(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.Send([lcMessages],'WMGetDlgCode');{$endif} Message.Result := DLGC_WANTCHARS or DLGC_WANTARROWS; if FWantTabs then Message.Result := Message.Result or DLGC_WANTTAB; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableAccessible} procedure TBaseVirtualTree.WMGetObject(var Message: TLMessage); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMGetObject');{$endif} if GetAccessibilityFactory <> nil then begin // Create the IAccessibles for the tree view and tree view items, if necessary. if FAccessible = nil then FAccessible := GetAccessibilityFactory.CreateIAccessible(Self); if FAccessibleItem = nil then FAccessibleItem := GetAccessibilityFactory.CreateIAccessible(Self); if Cardinal(Message.LParam) = OBJID_CLIENT then if Assigned(Accessible) then Message.Result := LresultFromObject(IID_IAccessible, Message.WParam, FAccessible) else Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMGetObject');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMHScroll(var Message: TLMHScroll); //--------------- local functions ------------------------------------------- function GetRealScrollPosition: Integer; var SI: TScrollInfo; Code: Integer; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_TRACKPOS; Code := SB_HORZ; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, Code, SI); {$else} GetScrollInfo(Handle, Code, SI); {$endif UseFlatScrollbars} Result := SI.nTrackPos; end; //--------------- end local functions --------------------------------------- var RTLFactor: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMHScroll');{$endif} if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; case Message.ScrollCode of SB_BOTTOM: SetOffsetX(-Integer(FRangeX)); SB_ENDSCROLL: begin DoStateChange([], [tsThumbTracking]); // avoiding to adjust the vertical scroll position while tracking makes it much smoother // but we need to adjust the final position here then UpdateHorizontalScrollBar(False); end; SB_LINELEFT: SetOffsetX(FOffsetX + RTLFactor * FScrollBarOptions.FIncrementX); SB_LINERIGHT: SetOffsetX(FOffsetX - RTLFactor * FScrollBarOptions.FIncrementX); SB_PAGELEFT: SetOffsetX(FOffsetX + RTLFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)); SB_PAGERIGHT: SetOffsetX(FOffsetX - RTLFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)); SB_THUMBPOSITION, SB_THUMBTRACK: begin DoStateChange([tsThumbTracking]); {$if DEFINED(LCLQt) OR DEFINED(LCLCarbon)} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + Message.Pos) else SetOffsetX(-Message.Pos); {$else} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + GetRealScrollPosition) else SetOffsetX(-GetRealScrollPosition); {$endif} end; SB_TOP: SetOffsetX(0); end; Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMHScroll');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKeyDown(var Message: TLMKeyDown); // Keyboard event handling for node focus, selection, node specific popup menus and help invokation. // For a detailed description of every action done here read the help. var Shift: TShiftState; Node, Temp, LastFocused: PVirtualNode; Offset: Integer; ClearPending, NeedInvalidate, DoRangeSelect, HandleMultiSelect: Boolean; Context: Integer; ParentControl: TWinControl; R: TRect; NewCheckState: TCheckState; TempColumn, NewColumn: TColumnIndex; ActAsGrid: Boolean; ForceSelection: Boolean; NewWidth, NewHeight: Integer; RTLFactor: Integer; // for tabulator handling GetStartColumn: function(ConsiderAllowFocus: Boolean = False): TColumnIndex of object; GetNextColumn: function(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex of object; GetNextNode: TGetNextNodeProc; KeyState: TKeyboardState; Buffer: array[0..1] of Char; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKeyDown');{$endif} // Make form key preview work and let application modify the key if it wants this. inherited WMKeyDown(Message); with Message do begin Shift := KeyDataToShiftState(KeyData); // Ask the application if the default key handling is desired. if DoKeyAction(CharCode, Shift) then begin if (tsKeyCheckPending in FStates) and (CharCode <> VK_SPACE) then begin DoStateChange([], [tskeyCheckPending]); FCheckNode.CheckState := UnpressedState[FCheckNode.CheckState]; RepaintNode(FCheckNode); FCheckNode := nil; end; if CharCode in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_BACK, VK_TAB] then begin HandleMultiSelect := (ssShift in Shift) and (toMultiSelect in FOptions.FSelectionOptions) and not IsEditing; // Flag to avoid range selection in case of single node advance. DoRangeSelect := (CharCode in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT]) and HandleMultiSelect and not IsEditing; NeedInvalidate := DoRangeSelect or (FSelectionCount > 1); ActAsGrid := toGridExtensions in FOptions.FMiscOptions; ClearPending := (Shift = []) or (ActAsGrid and not (ssShift in Shift)) or not (toMultiSelect in FOptions.FSelectionOptions) or (CharCode in [VK_TAB, VK_BACK]); // Keep old focused node for range selection. Use a default node if none was focused until now. LastFocused := FFocusedNode; if (LastFocused = nil) and (Shift <> []) then LastFocused := GetFirstVisible(nil, True); // Set an initial range anchor if there is not yet one. if FRangeAnchor = nil then FRangeAnchor := GetFirstSelected; if FRangeAnchor = nil then FRangeAnchor := GetFirst; if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; // Determine new focused node. case CharCode of VK_HOME, VK_END: begin if (CharCode = VK_END) xor UseRightToLeftAlignment then begin GetStartColumn := FHeader.FColumns.GetLastVisibleColumn; GetNextColumn := FHeader.FColumns.GetPreviousVisibleColumn; GetNextNode := GetPreviousVisible; Node := GetLastVisible(nil, True); end else begin GetStartColumn := FHeader.FColumns.GetFirstVisibleColumn; GetNextColumn := FHeader.FColumns.GetNextVisibleColumn; GetNextNode := GetNextVisible; Node := GetFirstVisible(nil, True); end; // Advance to next/previous visible column. if FHeader.UseColumns then NewColumn := GetStartColumn else NewColumn := NoColumn; // Find a column for the new/current node which can be focused. // Make the 'DoFocusChanging' for finding a valid column // identifiable from the 'DoFocusChanging' raised later on by // "FocusedNode := Node;" while (NewColumn > NoColumn) and not DoFocusChanging(FFocusedNode, FFocusedNode, FFocusedColumn, NewColumn) do NewColumn := GetNextColumn(NewColumn); if NewColumn > InvalidColumn then begin if (Shift = [ssCtrlOS]) and not ActAsGrid then begin ScrollIntoView(Node, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); if (CharCode = VK_HOME) and not UseRightToLeftAlignment then SetOffsetX(0) else SetOffsetX(-MaxInt); end else begin if not ActAsGrid or (ssCtrlOS in Shift) then FocusedNode := Node; if ActAsGrid and not (toFullRowSelect in FOptions.FSelectionOptions) then FocusedColumn := NewColumn; end; end; end; VK_PRIOR: if ssCtrlOS in Shift then SetOffsetY(FOffsetY + ClientHeight) else begin Offset := 0; // If there's no focused node then just take the very first visible one. if FFocusedNode = nil then Node := GetFirstVisible(nil, True) else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FFocusedNode; while True do begin Temp := GetPreviousVisible(Node, True); NewHeight := NodeHeight[Node]; if (Temp = nil) or (Offset + NewHeight >= ClientHeight) then Break; Node := Temp; Inc(Offset, NodeHeight[Node]); end; end; FocusedNode := Node; end; VK_NEXT: if ssCtrlOS in Shift then SetOffsetY(FOffsetY - ClientHeight) else begin Offset := 0; // If there's no focused node then just take the very last one. if FFocusedNode = nil then Node := GetLastVisible(nil, True) else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FFocusedNode; while True do begin Temp := GetNextVisible(Node, True); NewHeight := NodeHeight[Node]; if (Temp = nil) or (Offset + NewHeight >= ClientHeight) then Break; Node := Temp; Inc(Offset, NewHeight); end; end; FocusedNode := Node; end; VK_UP: begin // scrolling without selection change if ssCtrlOS in Shift then SetOffsetY(FOffsetY + Integer(FDefaultNodeHeight)) else begin if FFocusedNode = nil then Node := GetLastVisible(nil, True) else Node := GetPreviousVisible(FFocusedNode, True); if Assigned(Node) then begin EndEditNode; if HandleMultiSelect and (CompareNodePositions(LastFocused, FRangeAnchor) > 0) and Assigned(FFocusedNode) then RemoveFromSelection(FFocusedNode); if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; FocusedNode := Node; end else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); end; end; VK_DOWN: begin // scrolling without selection change if ssCtrlOS in Shift then SetOffsetY(FOffsetY - Integer(FDefaultNodeHeight)) else begin if FFocusedNode = nil then Node := GetFirstVisible(nil, True) else Node := GetNextVisible(FFocusedNode, True); if Assigned(Node) then begin EndEditNode; if HandleMultiSelect and (CompareNodePositions(LastFocused, FRangeAnchor) < 0) and Assigned(FFocusedNode) then RemoveFromSelection(FFocusedNode); if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; FocusedNode := Node; end else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); end; end; VK_LEFT: begin // special handling if ssCtrlOS in Shift then SetOffsetX(FOffsetX + RTLFactor * FHeader.Columns.GetScrollWidth) else begin // other special cases Context := NoColumn; if (toExtendedFocus in FOptions.FSelectionOptions) and (toGridExtensions in FOptions.FMiscOptions) then begin Context := FHeader.Columns.GetPreviousVisibleColumn(FFocusedColumn, True); if Context > -1 then FocusedColumn := Context end else if Assigned(FFocusedNode) and (vsExpanded in FFocusedNode.States) and (Shift = []) and (vsHasChildren in FFocusedNode.States) then ToggleNode(FFocusedNode) else begin if FFocusedNode = nil then FocusedNode := GetFirstVisible(nil, True) else begin if FFocusedNode.Parent <> FRoot then Node := FFocusedNode.Parent else Node := nil; if Assigned(Node) then begin if HandleMultiSelect then begin // and a third special case if FFocusedNode.Index > 0 then DoRangeSelect := True else if CompareNodePositions(Node, FRangeAnchor) > 0 then RemoveFromSelection(FFocusedNode); end; FocusedNode := Node; end; end; end; end; end; VK_RIGHT: begin // special handling if ssCtrlOS in Shift then SetOffsetX(FOffsetX - RTLFactor * FHeader.Columns.GetScrollWidth) else begin // other special cases Context := NoColumn; if (toExtendedFocus in FOptions.FSelectionOptions) and (toGridExtensions in FOptions.FMiscOptions) then begin Context := FHeader.Columns.GetNextVisibleColumn(FFocusedColumn, True); if Context > -1 then FocusedColumn := Context; end else if Assigned(FFocusedNode) and not (vsExpanded in FFocusedNode.States) and (Shift = []) and (vsHasChildren in FFocusedNode.States) then ToggleNode(FFocusedNode) else begin if FFocusedNode = nil then FocusedNode := GetFirstVisible(nil, True) else begin Node := GetFirstVisibleChild(FFocusedNode); if Assigned(Node) then begin if HandleMultiSelect and (CompareNodePositions(Node, FRangeAnchor) < 0) then RemoveFromSelection(FFocusedNode); FocusedNode := Node; end; end; end; end; end; VK_BACK: if tsIncrementalSearching in FStates then DoStateChange([tsIncrementalSearchPending]) else if Assigned(FFocusedNode) and (FFocusedNode.Parent <> FRoot) then FocusedNode := FocusedNode.Parent; VK_TAB: if (toExtendedFocus in FOptions.FSelectionOptions) and FHeader.UseColumns then begin // In order to avoid duplicating source code just to change the direction // we use function variables. if ssShift in Shift then begin GetStartColumn := FHeader.FColumns.GetLastVisibleColumn; GetNextColumn := FHeader.FColumns.GetPreviousVisibleColumn; GetNextNode := GetPreviousVisible; end else begin GetStartColumn := FHeader.FColumns.GetFirstVisibleColumn; GetNextColumn := FHeader.FColumns.GetNextVisibleColumn; GetNextNode := GetNextVisible; end; // Advance to next/previous visible column/node. Node := FFocusedNode; NewColumn := GetNextColumn(FFocusedColumn, True); repeat // Find a column for the current node which can be focused. while (NewColumn > NoColumn) and not DoFocusChanging(FFocusedNode, Node, FFocusedColumn, NewColumn) do NewColumn := GetNextColumn(NewColumn, True); if NewColumn > NoColumn then begin // Set new node and column in one go. SetFocusedNodeAndColumn(Node, NewColumn); Break; end; // No next column was accepted for the current node. So advance to next node and try again. Node := GetNextNode(Node); NewColumn := GetStartColumn; until Node = nil; end; end; // Clear old selection if required but take care to select the new focused node if it was not selected before. ForceSelection := False; if ClearPending and ((LastFocused <> FFocusedNode) or (FSelectionCount <> 1)) then begin ClearSelection; ForceSelection := True; end; // Determine new selection anchor. if Shift = [] then begin FRangeAnchor := FFocusedNode; FLastSelectionLevel := GetNodeLevel(FFocusedNode); end; // Finally change the selection for a specific range of nodes. if DoRangeSelect then ToggleSelection(LastFocused, FFocusedNode); // Make sure the new focused node is also selected. if Assigned(FFocusedNode) and ((LastFocused <> FFocusedNode) or ForceSelection) then AddToSelection(FFocusedNode); // If a repaint is needed then paint the entire tree because of the ClearSelection call, if NeedInvalidate then Invalidate; {$ifdef LCLGtk2} //workaround for changing focus bug if CharCode <> VK_TAB then CharCode := 0; {$endif} end else begin // Second chance for keys not directly concerned with selection changes. // For +, -, /, * keys on the main keyboard (not numpad) there is no virtual key code defined. // We have to do special processing to get them working too. //todo: reimplement {$ifndef INCOMPLETE_WINAPI} GetKeyboardState(KeyState); // Avoid conversion to control characters. We have captured the control key state already in Shift. KeyState[VK_CONTROL] := 0; if ToASCII(Message.CharCode, (Message.KeyData shr 16) and 7, KeyState, @Buffer, 0) > 0 then begin case Buffer[0] of '*': CharCode := VK_MULTIPLY; '+': CharCode := VK_ADD; '/': CharCode := VK_DIVIDE; '-': CharCode := VK_SUBTRACT; end; end; // According to http://www.it-faq.pl/mskb/99/337.HTM there is a problem with ToASCII when used in conjunction // with dead chars. The article recommends to call ToASCII twice to restore a deleted flag in the key message // structure under certain circumstances. It turned out it is best to always call ToASCII twice. ToASCII(Message.CharCode, (Message.KeyData shr 16) and 7, KeyState, @Buffer, 0); {$endif} case CharCode of VK_F2: if (Shift = []) and Assigned(FFocusedNode) and CanEdit(FFocusedNode, FFocusedColumn) then begin FEditColumn := FFocusedColumn; DoEdit; end; VK_ADD: if not (tsIncrementalSearching in FStates) then begin if ssCtrlOS in Shift then if {$ifdef ReverseFullExpandHotKey} not {$endif ReverseFullExpandHotKey} (ssShift in Shift) then FullExpand else FHeader.AutoFitColumns else if Assigned(FFocusedNode) and not (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_SUBTRACT: if not (tsIncrementalSearching in FStates) then begin if ssCtrlOS in Shift then if {$ifdef ReverseFullExpandHotKey} not {$endif ReverseFullExpandHotKey} (ssShift in Shift) then FullCollapse else FHeader.RestoreColumns else if Assigned(FFocusedNode) and (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_MULTIPLY: if not (tsIncrementalSearching in FStates) then begin if Assigned(FFocusedNode) then FullExpand(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_DIVIDE: if not (tsIncrementalSearching in FStates) then begin if Assigned(FFocusedNode) then FullCollapse(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_ESCAPE: // cancel actions currently in progress begin if IsMouseSelecting then begin DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end //gtk1 does not like to free a component in KeyDown {$ifndef LCLGtk} else if IsEditing then CancelEditNode; {$endif} end; VK_SPACE: if (toCheckSupport in FOptions.FMiscOptions) and Assigned(FFocusedNode) and (FFocusedNode.CheckType <> ctNone) then begin if (FStates * [tsKeyCheckPending, tsMouseCheckPending] = []) and Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) then begin with FFocusedNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(FFocusedNode, NewCheckState) then begin DoStateChange([tsKeyCheckPending]); FCheckNode := FFocusedNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; RepaintNode(FCheckNode); end; end; end else DoStateChange([tsIncrementalSearchPending]); VK_F1: if Assigned(FOnGetHelpContext) then begin Context := 0; if Assigned(FFocusedNode) then begin Node := FFocusedNode; // Traverse the tree structure up to the root. repeat FOnGetHelpContext(Self, Node, 0, Context); Node := Node.Parent; until (Node = FRoot) or (Context <> 0); end; // If no help context could be found try the tree's one or its parent's contexts. ParentControl := Self; while Assigned(ParentControl) and (Context = 0) do begin Context := ParentControl.HelpContext; ParentControl := ParentControl.Parent; end; if Context <> 0 then Application.HelpContext(Context); end; VK_APPS: if Assigned(FFocusedNode) then begin R := GetDisplayRect(FFocusedNode, FFocusedColumn, True); Offset := DoGetNodeWidth(FFocusedNode, FFocusedColumn); if FFocusedColumn >= 0 then begin if Offset > FHeader.Columns[FFocusedColumn].Width then Offset := FHeader.Columns[FFocusedColumn].Width; end else begin if Offset > ClientWidth then Offset := ClientWidth; end; DoPopupMenu(FFocusedNode, FFocusedColumn, Point(R.Left + Offset div 2, (R.Top + R.Bottom) div 2)); end; Ord('a'), Ord('A'): if ssCtrlOS in Shift then SelectAll(True) else DoStateChange([tsIncrementalSearchPending]); else begin // Use the key for incremental search. // Since we are dealing with Unicode all the time there should be a more sophisticated way // of checking for valid characters for incremental search. // This is available but would require to include a significant amount of Unicode character // properties, so we stick with the simple space check. if (Shift * [ssCtrlOS, ssAlt] = []) and (CharCode >= 32) then DoStateChange([tsIncrementalSearchPending]); end; end; end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKeyDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKeyUp(var Message: TLMKeyUp); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKeyUp');{$endif} inherited WMKeyUp(Message); case Message.CharCode of VK_SPACE: if tsKeyCheckPending in FStates then begin DoStateChange([], [tskeyCheckPending]); if FCheckNode = FFocusedNode then DoCheckClick(FCheckNode, FPendingCheckState); InvalidateNode(FCheckNode); FCheckNode := nil; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKeyUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKillFocus(var Msg: TLMKillFocus); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKillFocus');{$endif} inherited WMKillFocus(Msg); // Remove hint if shown currently. Application.CancelHint; // Stop wheel panning if active. StopWheelPanning; // Don't let any timer continue if the tree is no longer the active control (except change timers). KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsScrollPending, tsScrolling, tsEditPending, tsLeftButtonDown, tsRightButtonDown, tsMiddleButtonDown, tsOLEDragPending, tsVCLDragPending, tsIncrementalSearching, tsNodeHeightTrackPending, tsNodeHeightTracking]); if (FSelectionCount > 0) or not (toGhostedIfUnfocused in FOptions.FPaintOptions) then Invalidate else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKillFocus');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonDblClk(var Message: TLMLButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMLButtonDblClk');{$endif} DoStateChange([tsLeftDblClick]); inherited WMLButtonDblClk(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); DoStateChange([], [tsLeftDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonDown(var Message: TLMLButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMLButtonDown');{$endif} DoStateChange([tsLeftButtonDown]); inherited WMLButtonDown(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); {$ifdef DEBUG_VTV} if HitInfo.HitNode <> nil then Logger.Send([lcPaintHeader, lcMouseEvent],'WMLButtonDown - HitNode.Index', HitInfo.HitNode^.Index); {$endif} HandleMouseDown(Message, HitInfo); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonUp(var Message: TLMLButtonUp); var HitInfo: THitInfo; begin DoStateChange([], [tsLeftButtonDown, tsNodeHeightTracking, tsNodeHeightTrackPending]); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(Message.Keys, HitInfo); inherited WMLButtonUp(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonDblClk(var Message: TLMMButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonDblClk');{$endif} DoStateChange([tsMiddleDblClick]); inherited WMMButtonDblClk(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); end; DoStateChange([], [tsMiddleDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMMButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonDown(var Message: TLMMButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonDown');{$endif} DoStateChange([tsMiddleButtonDown]); if FHeader.FStates = [] then begin inherited WMMButtonDown(Message); // Start wheel panning or scrolling if not already active, allowed and scrolling is useful at all. if (toWheelPanning in FOptions.FMiscOptions) and ([tsWheelScrolling, tsWheelPanning] * FStates = []) and ((Integer(FRangeX) > ClientWidth) or (Integer(FRangeY) > ClientHeight)) then begin FLastClickPos := SmallPointToPoint(Message.Pos); StartWheelPanning(FLastClickPos); end else begin StopWheelPanning; // Get information about the hit. if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDown(Message, HitInfo); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMMButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonUp(var Message: TLMMButtonUp); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonUp');{$endif} DoStateChange([], [tsMiddleButtonDown]); // If wheel panning/scrolling is active and the mouse has not yet been moved then the user starts wheel auto scrolling. // Indicate this by removing the panning flag. Otherwise (the mouse has moved meanwhile) stop panning. if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin if tsWheelScrolling in FStates then DoStateChange([], [tsWheelPanning]) else StopWheelPanning; end else if FHeader.FStates = [] then begin inherited WMMButtonUp(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(Message.Keys, HitInfo); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod('WMMButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNCFunctions} procedure TBaseVirtualTree.WMNCCalcSize(var Message: TLMNCCalcSize); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCCalcSize');{$endif} inherited WMNCCalcSize(Message); with FHeader do if hoVisible in FHeader.FOptions then with Message.CalcSize_Params^ do Inc(rgrc[0].Top, FHeight); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCCalcSize');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMNCHitTest(var Message: TWMNCHitTest); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCHitTest');{$endif} inherited WMNCHitTest(Message); if not (csDesigning in ComponentState) and (hoVisible in FHeader.FOptions) and FHeader.InHeader(ScreenToClient(SmallPointToPoint(Message.Pos))) then Message.Result := HTBORDER; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCHitTest');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMNCPaint(var Message: TRealWMNCPaint); var DC: HDC; R: TRect; Flags: DWORD; {$ifdef ThemeSupport} ExStyle: Integer; TempRgn: HRGN; BorderWidth, BorderHeight: Integer; {$endif ThemeSupport} begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCPaint');{$endif} {$ifdef ThemeSupport} if tsUseThemes in FStates then begin // If theming is enabled and the client edge border is set for the window then prevent the default window proc // from painting the old border to avoid flickering. ExStyle := GetWindowLong(Handle, GWL_EXSTYLE); if (ExStyle and WS_EX_CLIENTEDGE) <> 0 then begin GetWindowRect(Handle, R); // Determine width of the client edge. BorderWidth := GetSystemMetrics(SM_CXEDGE); BorderHeight := GetSystemMetrics(SM_CYEDGE); InflateRect(R, -BorderWidth, -BorderHeight); TempRgn := CreateRectRgnIndirect(R); // Exclude the border from the message region if there is one. Otherwise just use the inflated // window area region. if Message.Rgn <> 1 then CombineRgn(TempRgn, Message.Rgn, TempRgn, RGN_AND); DefWindowProc(Handle, Message.Msg, Integer(TempRgn), 0); DeleteObject(TempRgn); end else DefaultHandler(Message); end else {$endif ThemeSupport} DefaultHandler(Message); Flags := DCX_CACHE or DCX_CLIPSIBLINGS or DCX_WINDOW or DCX_VALIDATE; if (Message.Rgn = 1) or not IsWinNT then DC := GetDCEx(Handle, 0, Flags) else DC := GetDCEx(Handle, Message.Rgn, Flags or DCX_INTERSECTRGN); if DC <> 0 then begin if hoVisible in FHeader.FOptions then begin R := FHeaderRect; FHeader.FColumns.PaintHeader(DC, R, -FEffectiveOffsetX); end; OriginalWMNCPaint(DC); ReleaseDC(Handle, DC); end; {$ifdef ThemeSupport} if tsUseThemes in FStates then ThemeServices.PaintBorder(Self, False); {$endif ThemeSupport} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCPaint');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPaint(var Message: TLMPaint); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPaint');{$endif} //todo: //Windows.GetUpdateRect is always empty because BeginPaint was called //see if PaintStruct has the same rect {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(False); {$endif} if csPaintCopy in ControlState then FUpdateRect := ClientRect else FUpdateRect := Message.PaintStruct^.rcPaint; {$ifdef DEBUG_VTV}Logger.Send([lcPaint],'FUpdateRect', FUpdateRect);{$endif} inherited WMPaint(Message); {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(True); {$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPaint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPaste(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPaste');{$endif} PasteFromClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPaste');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrintFunctions} procedure TBaseVirtualTree.WMPrint(var Message: TWMPrint); // This message is sent to request that the tree draws itself to a given device context. This includes not only // the client area but also the non-client area (header!). begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPrint');{$endif} // Draw only if the window is visible or visibility is not required. if ((Message.Flags and PRF_CHECKVISIBLE) = 0) or IsWindowVisible(Handle) then Header.Columns.PaintHeader(Message.DC, FHeaderRect, -FEffectiveOffsetX); inherited WMPrint(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPrint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPrintClient(var Message: TWMPrintClient); var Window: TRect; Target: TPoint; Canvas: TCanvas; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPrintClient');{$endif} // Draw only if the window is visible or visibility is not required. if ((Message.Flags and PRF_CHECKVISIBLE) = 0) or IsWindowVisible(Handle) then begin // Determine area of the entire tree to be displayed in the control. Window := ClientRect; Target := Window.TopLeft; // The Window rectangle is given in client coordinates. We have to convert it into // a sliding window of the tree image. OffsetRect(Window, FEffectiveOffsetX, -FOffsetY); Canvas := TCanvas.Create; try Canvas.Handle := Message.DC; PaintTree(Canvas, Window, Target, [poBackground, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]); finally Canvas.Handle := 0; Canvas.Free; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPrintClient');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonDblClk(var Message: TLMRButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonDblClk');{$endif} DoStateChange([tsRightDblClick]); inherited WMRButtonDblClk(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); end; DoStateChange([], [tsRightDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonDown(var Message: TLMRButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonDown');{$endif} DoStateChange([tsRightButtonDown]); if FHeader.FStates = [] then begin inherited WMRButtonDown(Message); // get information about the hit if toRightClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDown(Message, HitInfo); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonUp(var Message: TLMRButtonUp); // handle right click selection and node specific popup menu var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonUp');{$endif} DoStateChange([], [tsPopupMenuShown, tsRightButtonDown]); if FHeader.FStates = [] then begin Application.CancelHint; if IsMouseSelecting and Assigned(PopupMenu) then begin // Reset selection state already here, before the inherited handler opens the default menu. DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end; inherited WMRButtonUp(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); if toRightClickSelect in FOptions.FSelectionOptions then HandleMouseUp(Message.Keys, HitInfo); if not Assigned(PopupMenu) then DoPopupMenu(HitInfo.HitNode, HitInfo.HitColumn, Point(Message.XPos, Message.YPos)); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMSetFocus(var Msg: TLMSetFocus); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMSetFocus') ;{$endif} inherited WMSetFocus(Msg); if (FSelectionCount > 0) or not (toGhostedIfUnfocused in FOptions.FPaintOptions) then Invalidate; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMSetFocus');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMSize(var Message: TLMSize); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMSize');{$endif} inherited WMSize(Message); // Need to update scroll bars here. This will cause a recursion because of the change of the client area // when changing a scrollbar. Usually this is no problem since with the second level recursion no change of the // window size happens (the same values for the scrollbars are set, which shouldn't cause a window size change). // Appearently, this applies not to all systems, however. if HandleAllocated and ([tsSizing, tsWindowCreating] * FStates = []) and (ClientHeight > 0) then try DoStateChange([tsSizing]); // This call will invalidate the entire non-client area which needs recalculation on resize. FHeader.RescaleHeader; FHeader.UpdateSpringColumns; UpdateScrollBars(True); if (tsEditing in FStates) and not FHeader.UseColumns then UpdateEditBounds; finally DoStateChange([], [tsSizing]); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMSize');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef ThemeSupport} {$ifdef Windows} //todo procedure TBaseVirtualTree.WMThemeChanged(var Message: TLMessage); begin inherited; ThemeServices.UpdateThemes; if ThemeServices.ThemesEnabled and (toThemeAware in TreeOptions.PaintOptions) then DoStateChange([tsUseThemes]) else DoStateChange([], [tsUseThemes]); RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_VALIDATE or RDW_FRAME); end; {$endif} {$endif ThemeSupport} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMTimer(var Message: TLMTimer); // centralized timer handling happens here begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages,lcTimer],'WMTimer');{$endif} with Message do begin {$ifdef DEBUG_VTV}Logger.Send([lcTimer],'TimerId',TimerId);{$endif} case TimerID of ExpandTimer: DoDragExpand; EditTimer: DoEdit; ScrollTimer: begin if tsScrollPending in FStates then begin Application.CancelHint; // Scroll delay has elapsed, set to normal scroll interval now. SetTimer(Handle, ScrollTimer, FAutoScrollInterval, nil); DoStateChange([tsScrolling], [tsScrollPending]); end; DoTimerScroll; end; ChangeTimer: DoChange(FLastChangedNode); StructureChangeTimer: DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); SearchTimer: begin // When this event triggers then the user did not pressed any key for the specified timeout period. // Hence incremental searching is stopped. DoStateChange([], [tsIncrementalSearching]); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages,lcTimer],'WMTimer');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMVScroll(var Message: TLMVScroll); //--------------- local functions ------------------------------------------- function GetRealScrollPosition: Integer; var SI: TScrollInfo; Code: Integer; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_TRACKPOS; Code := SB_VERT; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, Code, SI); {$else} GetScrollInfo(Handle, Code, SI); {$endif UseFlatScrollbars} Result := SI.nTrackPos; {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'GetRealScrollPosition',Result);{$endif} end; //--------------- end local functions --------------------------------------- begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'WMVScroll');{$endif} //{$ifdef DEBUG_VTV}Logger.SendCallStack([lcScroll],'CallStack');{$endif} case Message.ScrollCode of SB_BOTTOM: SetOffsetY(-Integer(FRoot.TotalHeight)); SB_ENDSCROLL: begin DoStateChange([], [tsThumbTracking]); // Avoiding to adjust the horizontal scroll position while tracking makes scrolling much smoother // but we need to adjust the final position here then. UpdateScrollBars(True); // Really weird invalidation needed here (and I do it only because it happens so rarely), because // when showing the horizontal scrollbar while scrolling down using the down arrow button, // the button will be repainted on mouse up (at the wrong place in the far right lower corner)... RedrawWindow(Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN); end; SB_LINEUP: SetOffsetY(FOffsetY + FScrollBarOptions.FIncrementY); SB_LINEDOWN: SetOffsetY(FOffsetY - FScrollBarOptions.FIncrementY); SB_PAGEUP: SetOffsetY(FOffsetY + ClientHeight); SB_PAGEDOWN: SetOffsetY(FOffsetY - ClientHeight); SB_THUMBPOSITION, SB_THUMBTRACK: begin DoStateChange([tsThumbTracking]); {$if DEFINED(LCLQt) OR DEFINED(LCLCarbon)} SetOffsetY(-Message.Pos); {$else} SetOffsetY(-GetRealScrollPosition); {$endif} end; SB_TOP: SetOffsetY(0); end; Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'WMVScroll');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddToSelection(Node: PVirtualNode); var Changed: Boolean; begin if not FSelectionLocked then begin Assert(Assigned(Node), 'Node must not be nil!'); FSingletonNodeArray[0] := Node; Changed := InternalAddToSelection(FSingletonNodeArray, 1, False); if Changed then begin InvalidateNode(Node); Change(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); // Adds the given items all at once into the current selection array. NewLength is the amount of // nodes to add (necessary to allow NewItems to be larger than the actual used entries). // ForceInsert is True if nodes must be inserted without consideration of level select constraint or // already set selected flags (e.g. when loading from stream). // Note: In the case ForceInsert is True the caller is responsible for making sure the new nodes aren't already in the // selection array! var Changed: Boolean; begin Changed := InternalAddToSelection(NewItems, NewLength, ForceInsert); if Changed then begin if NewLength = 1 then begin InvalidateNode(NewItems[0]); Change(NewItems[0]); end else begin Invalidate; Change(nil); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); // Used in descendants to modify the paint rectangle of the current column while painting a certain node. begin // Since cells are always drawn from left to right the next column index is independent of the // bidi mode, but not the column borders, which might change depending on the cell's content. NextNonEmpty := FHeader.FColumns.GetNextVisibleColumn(PaintInfo.Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustPanningCursor(X, Y: Integer); // Triggered by a mouse move when wheel panning/scrolling is active. // Loads the proper cursor which indicates into which direction scrolling is done. var NewCursor: HCURSOR; ScrollHorizontal, ScrollVertical: Boolean; begin ScrollHorizontal := Integer(FRangeX) > ClientWidth; ScrollVertical := Integer(FRangeY) > ClientHeight; if (Abs(X - FLastClickPos.X) < 8) and (Abs(Y - FLastClickPos.Y) < 8) then begin // Mouse is in the neutral zone. if ScrollHorizontal then begin if ScrollVertical then NewCursor := crVT_MOVEALL else NewCursor := crVT_MOVEEW end else NewCursor := crVT_MOVENS; end else begin // One of 8 directions applies: north, north-east, east, south-east, south, south-west, west and north-west. // Check also if scrolling in the particular direction is possible. if ScrollVertical and ScrollHorizontal then begin // All directions allowed. if X - FlastClickPos.X < -8 then begin // Left hand side. if Y - FLastClickPos.Y < -8 then NewCursor := crVT_MOVENW else if Y - FLastClickPos.Y > 8 then NewCursor := crVT_MOVESW else NewCursor := crVT_MOVEW; end else if X - FLastClickPos.X > 8 then begin // Right hand side. if Y - FLastClickPos.Y < -8 then NewCursor := crVT_MOVENE else if Y - FLastClickPos.Y > 8 then NewCursor := crVT_MOVESE else NewCursor := crVT_MOVEE; end else begin // Up or down. if Y < FLastClickPos.Y then NewCursor := crVT_MOVEN else NewCursor := crVT_MOVES; end; end else if ScrollHorizontal then begin // Only horizontal movement allowed. if X < FlastClickPos.X then NewCursor := crVT_MOVEW else NewCursor := crVT_MOVEE; end else begin // Only vertical movement allowed. if Y < FlastClickPos.Y then NewCursor := crVT_MOVEN else NewCursor := crVT_MOVES; end; end; // Now load the cursor and apply it. {$ifdef Windows} LCLIntf.SetCursor(Screen.Cursors[NewCursor]); {$else} Cursor := NewCursor; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); // Used to register a delayed change event. If StructureChange is False then we have a selection change event (without // a specific reason) otherwise it is a structure change. begin if StructureChange then begin if tsStructureChangePending in FStates then begin if HandleAllocated then KillTimer(Handle,StructureChangeTimer); end else DoStateChange([tsStructureChangePending]); FLastStructureChangeNode := Node; if FLastStructureChangeReason = crIgnore then FLastStructureChangeReason := Reason else if Reason <> crIgnore then FLastStructureChangeReason := crAccumulated; end else begin if tsChangePending in FStates then KillTimer(Handle, ChangeTimer) else DoStateChange([tsChangePending]); FLastChangedNode := Node; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AllocateInternalDataArea(Size: Cardinal): Cardinal; // Simple registration method to be called by each descendant to claim their internal data area. // Result is the offset from the begin of the node to the internal data area of the calling tree class. begin Assert((FRoot = nil) or (FRoot.ChildCount = 0), 'Internal data allocation must be done before any node is created.'); {$ifdef DEBUG_VTV}Logger.Send('FTotalInternalDataSize BEFORE',FTotalInternalDataSize);{$endif} {$ifdef DEBUG_VTV}Logger.Send('Size',Size);{$endif} {$ifdef DEBUG_VTV}Logger.Send('TreeNodeSize',TreeNodeSize);{$endif} Result := TreeNodeSize + FTotalInternalDataSize; {$ifdef DEBUG_VTV}Logger.Send('Result',Result);{$endif} Inc(FTotalInternalDataSize, (Size + 3) and not 3); {$ifdef DEBUG_VTV}Logger.Send('FTotalInternalDataSize AFTER', FTotalInternalDataSize);{$endif} InitRootNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Animate(Steps, Duration: Cardinal; Callback: TVTAnimationCallback; Data: Pointer); // This method does the calculation part of an animation as used for node toggling and hint animations. // Steps is the maximum amount of animation steps to do and Duration determines the milliseconds the animation // has to run. Callback is a task specific method which is called in the loop for every step and Data is simply // something to pass on to the callback. // The callback is called with the current step, the current step size and the Data parameter. Since the step amount // as well as the step size are possibly adjusted during the animation, it is impossible to determine if the current // step is the last step, even if the original step amount is known. To solve this problem the callback will be // called after the loop has finished with a step size of 0 indicating so to execute any post processing. var StepSize, RemainingTime, RemainingSteps, NextTimeStep, CurrentStep, StartTime, CurrentTime: Cardinal; begin {$ifndef Windows} //Is necessary to properly implement timeGetTime in non Windows Exit; {$endif} if not (tsInAnimation in FStates) and (Duration > 0) then begin DoStateChange([tsInAnimation]); try RemainingTime := Duration; RemainingSteps := Steps; // Determine the initial step size which is either 1 if the needed steps are less than the number of // steps possible given by the duration or > 1 otherwise. StepSize := Round(Max(1, RemainingSteps / Duration)); RemainingSteps := RemainingSteps div StepSize; CurrentStep := 0; while (RemainingSteps > 0) and (RemainingTime > 0) and not Application.Terminated do begin StartTime := timeGetTime; NextTimeStep := StartTime + RemainingTime div RemainingSteps; if not Callback(CurrentStep, StepSize, Data) then Break; // Keep duration for this step for rest calculation. CurrentTime := timeGetTime; // Wait until the calculated time has been reached. while CurrentTime < NextTimeStep do CurrentTime := timeGetTime; // Subtract the time this step really needed. if RemainingTime >= CurrentTime - StartTime then begin Dec(RemainingTime, CurrentTime - StartTime); Dec(RemainingSteps); end else begin RemainingTime := 0; RemainingSteps := 0; end; // If the remaining time per step is less than one time step then we have to decrease the // step count and increase the step size. if (RemainingSteps > 0) and ((RemainingTime div RemainingSteps) < 1) then begin repeat Inc(StepSize); RemainingSteps := RemainingTime div StepSize; until (RemainingSteps <= 0) or ((RemainingTime div RemainingSteps) >= 1); end; CurrentStep := Cardinal(Steps) - RemainingSteps; end; if not Application.Terminated then Callback(0, 0, Data); finally DoStateChange([], [tsCancelHintAnimation, tsInAnimation]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginOperation; // Called to indicate that a long-running operation has been started. begin Inc(FOperationCount); if FOperationCount = 1 then FOperationCanceled := False; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CalculateSelectionRect(X, Y: Integer): Boolean; // Recalculates old and new selection rectangle given that X, Y are new mouse coordinates. // Returns True if there was a change since the last call. var MaxValue: Integer; begin //lclheader if hoVisible in FHeader.Options then Dec(Y, FHeader.Height); if tsDrawSelecting in FStates then FLastSelRect := FNewSelRect; FNewSelRect.BottomRight := Point(X + FEffectiveOffsetX, Y - FOffsetY); if FNewSelRect.Right < 0 then FNewSelRect.Right := 0; if FNewSelRect.Bottom < 0 then FNewSelRect.Bottom := 0; MaxValue := ClientWidth; if FRangeX > Cardinal(MaxValue) then MaxValue := FRangeX; if FNewSelRect.Right > MaxValue then FNewSelRect.Right := MaxValue; MaxValue := ClientHeight; if FRangeY > Cardinal(MaxValue) then MaxValue := FRangeY; if FNewSelRect.Bottom > MaxValue then FNewSelRect.Bottom := MaxValue; Result := not CompareMem(@FLastSelRect, @FNewSelRect, SizeOf(FNewSelRect)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanAutoScroll: Boolean; // Determines if auto scrolling is currently allowed. var IsDropTarget: Boolean; IsDrawSelecting: Boolean; IsWheelPanning: Boolean; begin // Don't scroll the client area if the header is currently doing tracking or dragging. // Do auto scroll only if there is a draw selection in progress or the tree is the current drop target or // wheel panning/scrolling is active. IsDropTarget := Assigned(FDragManager) and VTVDragManager.IsDropTarget; IsDrawSelecting := [tsDrawSelPending, tsDrawSelecting] * FStates <> []; IsWheelPanning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; Result := ((toAutoScroll in FOptions.FAutoOptions) or IsWheelPanning) and (FHeader.FStates = []) and (IsDrawSelecting or IsDropTarget or (tsVCLDragging in FStates) or IsWheelPanning); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanShowDragImage: Boolean; // Determines whether a drag image should be shown. begin Result := FDragImageKind <> diNoImage; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Change(Node: PVirtualNode); begin AdviseChangeEvent(False, Node, crIgnore); if FUpdateCount = 0 then begin if (FChangeDelay > 0) and not (tsSynchMode in FStates) then SetTimer(Handle, ChangeTimer, FChangeDelay, nil) else DoChange(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ChangeScale(M, D: Integer); var DoScale: Boolean; begin inherited; if (M <> D) and (toAutoChangeScale in FOptions.FAutoOptions) then begin if (csLoading in ComponentState) then DoScale := tsNeedScale in FStates else DoScale := True; if DoScale then begin FDefaultNodeHeight := MulDiv(FDefaultNodeHeight, M, D); FHeader.ChangeScale(M, D); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CheckParentCheckState(Node: PVirtualNode; NewCheckState: TCheckState): Boolean; // Checks all siblings of node to determine which check state Node's parent must get. var CheckCount, BoxCount: Cardinal; PartialCheck: Boolean; Run: PVirtualNode; begin CheckCount := 0; BoxCount := 0; PartialCheck := False; Run := Node.Parent.FirstChild; while Assigned(Run) do begin if Run = Node then begin // The given node cannot be checked because it does not yet have its new check state (as this depends // on the outcome of this method). Instead NewCheckState is used as this contains the new state the node // will get if this method returns True. if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin Inc(BoxCount); if NewCheckState in [csCheckedNormal, csCheckedPressed] then Inc(CheckCount); PartialCheck := PartialCheck or (NewCheckState = csMixedNormal); end; end else if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin Inc(BoxCount); if Run.CheckState in [csCheckedNormal, csCheckedPressed] then Inc(CheckCount); PartialCheck := PartialCheck or (Run.CheckState = csMixedNormal); end; Run := Run.NextSibling; end; if (CheckCount = 0) and not PartialCheck then NewCheckState := csUncheckedNormal else if CheckCount < BoxCount then NewCheckState := csMixedNormal else NewCheckState := csCheckedNormal; Node := Node.Parent; Result := DoChecking(Node, NewCheckState); if Result then begin DoCheckClick(Node, NewCheckState); // Recursively adjust parent of parent. with Node^ do begin if not (vsInitialized in Parent.States) then InitNode(Parent); if ([vsChecking, vsDisabled] * Parent.States = []) and (Parent <> FRoot) and (Parent.CheckType = ctTriStateCheckBox) then Result := CheckParentCheckState(Node, NewCheckState); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearTempCache; // make sure the temporary node cache is in a reliable state begin FTempNodeCache := nil; FTempNodeCount := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Returns True if the given column is to be considered as being empty. This will usually be determined by // descendants as the base tree implementation has not enough information to decide. begin Result := True; if Assigned(FOnGetCellIsEmpty) then FOnGetCellIsEmpty(Self, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ComputeRTLOffset(ExcludeScrollbar: Boolean): Integer; // Computes the horizontal offset needed when all columns are automatically right aligned (in RTL bidi mode). // ExcludeScrollbar determines if the left-hand vertical scrollbar is to be included (if visible) or not. var HeaderWidth: Integer; ScrollbarVisible: Boolean; begin ScrollbarVisible := (Integer(FRangeY) > ClientHeight) and (ScrollbarOptions.Scrollbars in [ssVertical, ssBoth]); if ScrollbarVisible then Result := GetSystemMetrics(SM_CXVSCROLL) else Result := 0; // Make everything right aligned. HeaderWidth := FHeaderRect.Right - FHeaderRect.Left; if Integer(FRangeX) + Result <= HeaderWidth then Result := HeaderWidth - Integer(FRangeX); // Otherwise take only left-hand vertical scrollbar into account. if ScrollbarVisible and ExcludeScrollbar then Dec(Result, GetSystemMetrics(SM_CXVSCROLL)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CountLevelDifference(Node1, Node2: PVirtualNode): Integer; // This method counts how many indentation levels the given nodes are apart. If both nodes have the same parent then the // difference is 0 otherwise the result is basically GetNodeLevel(Node2) - GetNodeLevel(Node1), but with sign. // If the result is negative then Node2 is less intended than Node1. var Level1, Level2: Integer; begin Assert(Assigned(Node1) and Assigned(Node2), 'Both nodes must be Assigned.'); Level1 := 0; while Node1.Parent <> FRoot do begin Inc(Level1); Node1 := Node1.Parent; end; Level2 := 0; while Node2.Parent <> FRoot do begin Inc(Level2); Node2 := Node2.Parent; end; Result := Level2 - Level1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CountVisibleChildren(Node: PVirtualNode): Cardinal; // Returns the number of visible child nodes of the given node. begin Result := 0; // The node's direct children... if vsExpanded in Node.States then begin // ...and their children. Node := Node.FirstChild; while Assigned(Node) do begin if vsVisible in Node.States then Inc(Result, CountVisibleChildren(Node) + 1); Node := Node.NextSibling; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CreateParams(var Params: TCreateParams); const ScrollBar: array[TScrollStyle] of Cardinal = (0, WS_HSCROLL, WS_VSCROLL, WS_HSCROLL or WS_VSCROLL, 0,0,0); begin //todo_lcl inherited CreateParams(Params); with Params do begin Style := Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or ScrollBar[ScrollBarOptions.FScrollBars]; if toFullRepaintOnResize in FOptions.FMiscOptions then WindowClass.style := WindowClass.style or CS_HREDRAW or CS_VREDRAW else WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); //lcl: Ctl3D is not used in LCL. Has the same meaning of BorderStyle = bsSingle { if BorderStyle = bsSingle then begin if Ctl3D then begin ExStyle := ExStyle or WS_EX_CLIENTEDGE; Style := Style and not WS_BORDER; end else Style := Style or WS_BORDER; end else Style := Style and not WS_BORDER; } //todo_lcl_low //AddBiDiModeExStyle(ExStyle); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CreateWnd; // Initializes data which depends on a valid window handle. begin DoStateChange([tsWindowCreating]); inherited; {$ifdef DEBUG_VTV}Logger.Send([lcInfo],'Handle (CreateWnd)',Handle);{$endif} DoStateChange([], [tsWindowCreating]); {$ifdef ThemeSupport} if ThemeServices.ThemesEnabled and (toThemeAware in TreeOptions.PaintOptions) then begin DoStateChange([tsUseThemes]); //todo //if (toUseExplorerTheme in FOptions.FPaintOptions) and IsWinVistaOrAbove then // SetWindowTheme(Handle, 'explorer', nil); end else {$endif ThemeSupport} DoStateChange([], [tsUseThemes]); // Because of the special recursion and update stopper when creating the window (or resizing it) // we have to manually trigger the auto size calculation here. if hsNeedScaling in FHeader.FStates then FHeader.RescaleHeader; //lcl: Call with Force argument to true since AdjustAutoSize is not called in Loaded if hoAutoResize in FHeader.FOptions then FHeader.FColumns.AdjustAutoSize(InvalidColumn, True); // Initialize flat scroll bar library if required. {$ifdef UseFlatScrollbars} if FScrollBarOptions.FScrollBarStyle <> sbmRegular then begin InitializeFlatSB(Handle); FlatSB_SetScrollProp(Handle, WSB_PROP_HSTYLE, ScrollBarProp[FScrollBarOptions.ScrollBarStyle], False); FlatSB_SetScrollProp(Handle, WSB_PROP_VSTYLE, ScrollBarProp[FScrollBarOptions.ScrollBarStyle], False); end; {$endif UseFlatScrollbars} PrepareBitmaps(True, True); {$ifdef Windows} // Register tree as OLE drop target. if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.FMiscOptions) then RegisterDragDrop(Handle, VTVDragManager as IDropTarget); {$endif} if toCheckSupport in FOptions.FMiscOptions then CheckImageListNeeded; UpdateScrollBars(True); UpdateHeaderRect; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DestroyHandle; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'DestroyHandle');{$endif} //lcl: this code was originally called is response to WM_NCDESTROY // see if there will be issues calling here InterruptValidation; KillTimer(Handle, ChangeTimer); KillTimer(Handle, StructureChangeTimer); {$ifdef Windows} if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.FMiscOptions) then RevokeDragDrop(Handle); {$endif} // Clean up other stuff. DeleteObject(FDottedBrush); FDottedBrush := 0; CancelEditNode; inherited; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'DestroyHandle');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHiddenChildrenFlag(Node: PVirtualNode); // Update the hidden children flag of the given node. var Run: PVirtualNode; begin if Node.ChildCount = 0 then begin if vsHasChildren in Node.States then Exclude(Node.States, vsAllChildrenHidden) else Include(Node.States, vsAllChildrenHidden); end else begin // Iterate through all siblings and stop when one visible is found. Run := Node.FirstChild; while Assigned(Run) do Run := Run.NextSibling; if Assigned(Run) then Exclude(Node.States, vsAllChildrenHidden) else Include(Node.States, vsAllChildrenHidden); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHiddenChildrenFlagAllNodes; var Run: PVirtualNode; begin Run := GetFirstNoInit(False); while Assigned(Run) do begin DetermineHiddenChildrenFlag(Run); Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHitPositionLTR(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); // This method determines the hit position within a node with left-to-right orientation. var MainColumnHit: Boolean; Run: PVirtualNode; Indent, TextWidth, ImageOffset: Integer; begin MainColumnHit := HitInfo.HitColumn = FHeader.MainColumn; Indent := 0; // If columns are not used or the main column is hit then the tree indentation must be considered too. if MainColumnHit then begin if toFixedIndent in FOptions.FPaintOptions then Indent := FIndent else begin Run := HitInfo.HitNode; while (Run.Parent <> FRoot) do begin Inc(Indent, FIndent); Run := Run.Parent; end; if toShowRoot in FOptions.FPaintOptions then Inc(Indent, FIndent); end; end; if Offset < Indent then begin // Position is to the left of calculated indentation which can only happen for the main column. // Check whether it corresponds to a button/checkbox. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in HitInfo.HitNode.States) then begin // Position of button is interpreted very generously to avoid forcing the user // to click exactly into the 9x9 pixels area. The entire node height and one full // indentation level is accepted as button hit. if Offset >= Indent - Integer(FIndent) then Include(HitInfo.HitPositions, hiOnItemButton); if Offset >= Indent - FPlusBM.Width then Include(HitInfo.HitPositions, hiOnItemButtonExact); end; // no button hit so position is on indent if HitInfo.HitPositions = [] then Include(HitInfo.HitPositions, hiOnItemIndent); end else begin // The next hit positions can be: // - on the check box // - on the state image // - on the normal image // - to the left of the text area // - on the label or // - to the right of the text area // (in this order). // In report mode no hit other than in the main column is possible. if MainColumnHit or not (toReportMode in FOptions.FMiscOptions) then begin ImageOffset := Indent + FMargin; // Check support is only available for the main column. if MainColumnHit and (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (HitInfo.HitNode.CheckType <> ctNone) then Inc(ImageOffset, FCheckImages.Height + 2); if MainColumnHit and (Offset < ImageOffset) then begin HitInfo.HitPositions := [hiOnItem]; if (HitInfo.HitNode.CheckType <> ctNone) then Include(HitInfo.HitPositions, hiOnItemCheckBox); end else begin if Assigned(FStateImages) and HasImage(HitInfo.HitNode, ikState, HitInfo.HitColumn) then Inc(ImageOffset, FStateImages.Width + 2); if Offset < ImageOffset then Include(HitInfo.HitPositions, hiOnStateIcon) else begin if Assigned(FImages) and HasImage(HitInfo.HitNode, ikNormal, HitInfo.HitColumn) then Inc(ImageOffset, FImages.Width + 2); if Offset < ImageOffset then Include(HitInfo.HitPositions, hiOnNormalIcon) else begin // ImageOffset contains now the left border of the node label area. This is used to calculate the // correct alignment in the column. TextWidth := DoGetNodeWidth(HitInfo.HitNode, HitInfo.HitColumn); // Check if the text can be aligned at all. This is only possible if there is enough room // in the remaining text rectangle. if TextWidth > Right - ImageOffset then Include(HitInfo.HitPositions, hiOnItemLabel) else begin case Alignment of taCenter: begin Indent := (ImageOffset + Right - TextWidth) div 2; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else if Offset < Indent + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight) end; taRightJustify: begin Indent := Right - TextWidth; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else Include(HitInfo.HitPositions, hiOnItemLabel); end; else // taLeftJustify if Offset < ImageOffset + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight); end; end; end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHitPositionRTL(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); // This method determines the hit position within a node with right-to-left orientation. var MainColumnHit: Boolean; Run: PVirtualNode; Indent, TextWidth, ImageOffset: Integer; begin MainColumnHit := HitInfo.HitColumn = FHeader.MainColumn; // If columns are not used or the main column is hit then the tree indentation must be considered too. if MainColumnHit then begin if toFixedIndent in FOptions.FPaintOptions then Dec(Right, FIndent) else begin Run := HitInfo.HitNode; while (Run.Parent <> FRoot) do begin Dec(Right, FIndent); Run := Run.Parent; end; if toShowRoot in FOptions.FPaintOptions then Dec(Right, FIndent); end; end; if Offset >= Right then begin // Position is to the right of calculated indentation which can only happen for the main column. // Check whether it corresponds to a button/checkbox. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in HitInfo.HitNode.States) then begin // Position of button is interpreted very generously to avoid forcing the user // to click exactly into the 9x9 pixels area. The entire node height and one full // indentation level is accepted as button hit. if Offset <= Right + Integer(FIndent) then Include(HitInfo.HitPositions, hiOnItemButton); if Offset <= Right + FPlusBM.Width then Include(HitInfo.HitPositions, hiOnItemButtonExact); end; // no button hit so position is on indent if HitInfo.HitPositions = [] then Include(HitInfo.HitPositions, hiOnItemIndent); end else begin // The next hit positions can be: // - on the check box // - on the state image // - on the normal image // - to the left of the text area // - on the label or // - to the right of the text area // (in this order). // In report mode no hit other than in the main column is possible. if MainColumnHit or not (toReportMode in FOptions.FMiscOptions) then begin ImageOffset := Right - FMargin; // Check support is only available for the main column. if MainColumnHit and (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (HitInfo.HitNode.CheckType <> ctNone) then Dec(ImageOffset, FCheckImages.Height + 2); if MainColumnHit and (Offset > ImageOffset) then begin HitInfo.HitPositions := [hiOnItem]; if (HitInfo.HitNode.CheckType <> ctNone) then Include(HitInfo.HitPositions, hiOnItemCheckBox); end else begin if Assigned(FStateImages) and HasImage(HitInfo.HitNode, ikState, HitInfo.HitColumn) then Dec(ImageOffset, FStateImages.Width + 2); if Offset > ImageOffset then Include(HitInfo.HitPositions, hiOnStateIcon) else begin if Assigned(FImages) and HasImage(HitInfo.HitNode, ikNormal, HitInfo.HitColumn) then Dec(ImageOffset, FImages.Width + 2); if Offset > ImageOffset then Include(HitInfo.HitPositions, hiOnNormalIcon) else begin // ImageOffset contains now the right border of the node label area. This is used to calculate the // correct alignment in the column. TextWidth := DoGetNodeWidth(HitInfo.HitNode, HitInfo.HitColumn); // Check if the text can be aligned at all. This is only possible if there is enough room // in the remaining text rectangle. if TextWidth > ImageOffset then Include(HitInfo.HitPositions, hiOnItemLabel) else begin // Consider bidi mode here. In RTL context does left alignment actually mean right alignment // and vice versa. ChangeBiDiModeAlignment(Alignment); case Alignment of taCenter: begin Indent := (ImageOffset - TextWidth) div 2; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else if Offset < Indent + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight) end; taRightJustify: begin Indent := ImageOffset - TextWidth; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else Include(HitInfo.HitPositions, hiOnItemLabel); end; else // taLeftJustify if Offset > TextWidth then Include(HitInfo.HitPositions, hiOnItemRight) else Include(HitInfo.HitPositions, hiOnItemLabel); end; end; end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineNextCheckState(CheckType: TCheckType; CheckState: TCheckState): TCheckState; // Determines the next check state in case the user click the check image or pressed the space key. begin case CheckType of ctTriStateCheckBox, ctCheckBox: if CheckState = csCheckedNormal then Result := csUncheckedNormal else Result := csCheckedNormal; ctRadioButton: Result := csCheckedNormal; ctButton: Result := csUncheckedNormal; else Result := csMixedNormal; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineScrollDirections(X, Y: Integer): TScrollDirections; // Determines which direction the client area must be scrolled depending on the given position. begin Result:= []; if CanAutoScroll then begin // Calculation for wheel panning/scrolling is a bit different to normal auto scroll. if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin if (X - FLastClickPos.X) < -8 then Include(Result, sdLeft); if (X - FLastClickPos.X) > 8 then Include(Result, sdRight); if (Y - FLastClickPos.Y) < -8 then Include(Result, sdUp); if (Y - FLastClickPos.Y) > 8 then Include(Result, sdDown); end else begin if (X < Integer(FDefaultNodeHeight)) and (FEffectiveOffsetX <> 0) then Include(Result, sdLeft); if (ClientWidth + FEffectiveOffsetX < Integer(FRangeX)) and (X > ClientWidth - Integer(FDefaultNodeHeight)) then Include(Result, sdRight); //lclheader if (ClientHeight - FOffsetY < Integer(FRangeY)) and (Y > inherited GetClientRect.Bottom - Integer(FDefaultNodeHeight)) then Include(Result, sdDown); if hoVisible in FHeader.FOptions then Dec(Y, FHeader.Height); if (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then Include(Result, sdUp); //todo: probably the code below is bug due to poor timeGetTime implementation // Since scrolling during dragging is not handled via the timer we do a check here whether the auto // scroll timeout already has elapsed or not. if (Result <> []) and ((Assigned(FDragManager) and VTVDragManager.IsDropTarget) or (FindDragTarget(Point(X, Y), False) = Self)) then begin if FDragScrollStart = 0 then FDragScrollStart := timeGetTime; // Reset any scroll direction to avoid scroll in the case the user is dragging and the auto scroll time has not // yet elapsed. if ((timeGetTime - FDragScrollStart) < FAutoScrollDelay) then Result := []; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAdvancedHeaderDraw(var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); begin if Assigned(FOnAdvancedHeaderDraw) then FOnAdvancedHeaderDraw(FHeader, PaintInfo, Elements); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect); begin if Assigned(FOnAfterCellPaint) then FOnAfterCellPaint(Self, Canvas, Node, Column, CellRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); begin if Assigned(FOnAfterItemErase) then FOnAfterItemErase(Self, Canvas, Node, ItemRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); begin if Assigned(FOnAfterItemPaint) then FOnAfterItemPaint(Self, Canvas, Node, ItemRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterPaint(Canvas: TCanvas); begin if Assigned(FOnAfterPaint) then FOnAfterPaint(Self, Canvas); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAutoScroll(X, Y: Integer); begin FScrollDirections := DetermineScrollDirections(X, Y); if FStates * [tsWheelPanning, tsWheelScrolling] = [] then begin if FScrollDirections = [] then begin if ((FStates * [tsScrollPending, tsScrolling]) <> []) then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; end else begin // start auto scroll if not yet done if (FStates * [tsScrollPending, tsScrolling]) = [] then begin DoStateChange([tsScrollPending]); SetTimer(Handle, ScrollTimer, FAutoScrollDelay, nil); end; end; end; end; procedure TBaseVirtualTree.DoAutoSize; begin //The default DoAutoSize makes the editors be placed wrongly when scrolling end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoBeforeDrag(Node: PVirtualNode; Column: TColumnIndex): Boolean; begin Result := False; if Assigned(FOnDragAllowed) then FOnDragAllowed(Self, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforeCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); {$ifdef LCLWin32} var UpdateRect: TRect; {$endif} begin //todo: implement under non win32 if Assigned(FOnBeforeCellPaint) then begin {$ifdef LCLWin32} if CellPaintMode = cpmGetContentMargin then begin // Prevent drawing if we are only about to get the margin. As this also clears the update rect we need to save it. GetUpdateRect(Handle, UpdateRect, False); SetUpdateState(True); end; {$endif} FOnBeforeCellPaint(Self, Canvas, Node, Column, CellPaintMode, CellRect, ContentRect); {$ifdef LCLWin32} if CellPaintMode = cpmGetContentMargin then begin SetUpdateState(False); InvalidateRect(Handle, @UpdateRect, False); end; {$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforeItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction); begin if Assigned(FOnBeforeItemErase) then FOnBeforeItemErase(Self, Canvas, Node, ItemRect, Color, EraseAction); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoBeforeItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect): Boolean; begin // By default custom draw will not be used, so the tree handles drawing the node. Result := False; if Assigned(FOnBeforeItemPaint) then FOnBeforeItemPaint(Self, Canvas, Node, ItemRect, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforePaint(Canvas: TCanvas); begin if Assigned(FOnBeforePaint) then FOnBeforePaint(Self, Canvas); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCancelEdit: Boolean; // Called when the current edit action or a pending edit must be cancelled. begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); Result := (tsEditing in FStates) and FEditLink.CancelEdit; if Result then begin DoStateChange([], [tsEditing]); if Assigned(FOnEditCancelled) then FOnEditCancelled(Self, FEditColumn); FEditLink := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCanEdit(Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin if Assigned(FOnEditing) then FOnEditing(Self, Node, Column, Allowed); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoChange(Node: PVirtualNode); begin KillTimer(Handle, ChangeTimer); if Assigned(FOnChange) then FOnChange(Self, Node); // This is a good place to reset the cached node. This is the same as the node passed in here. // This is necessary to allow descendants to override this method and get the node then. DoStateChange([], [tsChangePending]); FLastChangedNode := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCheckClick(Node: PVirtualNode; NewCheckState: TCheckState); begin if ChangeCheckState(Node, NewCheckState) then DoChecked(Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoChecked(Node: PVirtualNode); begin if Assigned(FOnChecked) then FOnChecked(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoChecking(Node: PVirtualNode; var NewCheckState: TCheckState): Boolean; // Determines if a node is allowed to change its check state to NewCheckState. begin if toReadOnly in FOptions.FMiscOptions then Result := False else begin Result := True; if Assigned(FOnChecking) then FOnChecking(Self, Node, NewCheckState, Result); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCollapsed(Node: PVirtualNode); begin if Assigned(FOnCollapsed) then FOnCollapsed(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCollapsing(Node: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnCollapsing) then FOnCollapsing(Self, Node, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnClick(Column: TColumnIndex; Shift: TShiftState); begin if Assigned(FOnColumnClick) then FOnColumnClick(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnDblClick(Column: TColumnIndex; Shift: TShiftState); begin if Assigned(FOnColumnDblClick) then FOnColumnDblClick(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnResize(Column: TColumnIndex); var R: TRect; Run: PVirtualNode; begin if not (csLoading in ComponentState) and HandleAllocated then begin // Reset all vsHeightMeasured flags if we are in multiline mode. Run := GetFirstInitialized; while Assigned(Run) do begin if vsMultiline in Run.States then Exclude(Run.States, vsHeightMeasured); Run := GetNextInitialized(Run); end; UpdateHorizontalScrollBar(True); if Column > NoColumn then begin // Invalidate client area from the current column all to the right (or left in RTL mode). R := ClientRect; //lclheader if hoVisible in FHeader.FOptions then Inc(R.Bottom, FHeader.Height); if not (toAutoSpanColumns in FOptions.FAutoOptions) then if UseRightToLeftAlignment then R.Right := FHeader.Columns[Column].Left + FHeader.Columns[Column].Width + ComputeRTLOffset else R.Left := FHeader.Columns[Column].Left; InvalidateRect(Handle, @R, False); FHeader.Invalidate(FHeader.Columns[Column], True); end; if [hsColumnWidthTracking, hsResizing] * FHeader.States = [hsColumnWidthTracking] then UpdateWindow(Handle); if not (tsUpdating in FStates) then UpdateDesigner; // design time only if Assigned(FOnColumnResize) and not (hsResizing in FHeader.States) then FOnColumnResize(FHeader, Column); // If the tree is currently in edit state then notify edit link. if tsEditing in FStates then UpdateEditBounds; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCompare(Node1, Node2: PVirtualNode; Column: TColumnIndex): Integer; begin Result := 0; if Assigned(FOnCompareNodes) then FOnCompareNodes(Self, Node1, Node2, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateDataObject: IDataObject; begin Result := nil; if Assigned(FOnCreateDataObject) then FOnCreateDataObject(Self, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateDragManager: IVTDragManager; begin Result := nil; if Assigned(FOnCreateDragManager) then FOnCreateDragManager(Self, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; begin Result := nil; if Assigned(FOnCreateEditor) then begin FOnCreateEditor(Self, Node, Column, Result); if Result = nil then ShowError(SEditLinkIsNil, hcTFEditLinkIsNil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragging(P: TPoint); // Initiates finally the drag'n drop operation and returns after DD is finished. //--------------- local function -------------------------------------------- function GetDragOperations: LongWord; begin if FDragOperations = [] then Result := DROPEFFECT_COPY or DROPEFFECT_MOVE or DROPEFFECT_LINK else begin Result := 0; if doCopy in FDragOperations then Result := Result or DROPEFFECT_COPY; if doLink in FDragOperations then Result := Result or DROPEFFECT_LINK; if doMove in FDragOperations then Result := Result or DROPEFFECT_MOVE; end; end; //--------------- end local function ---------------------------------------- var DragEffect, AllowedEffects: LongWord; I: Integer; DragObject: TDragObject; DataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoDragging');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcDrag],'Stack');{$endif} DataObject := nil; // Dragging is dragging, nothing else. DoCancelEdit; if Assigned(FCurrentHotNode) then begin InvalidateNode(FCurrentHotNode); FCurrentHotNode := nil; end; // Select the focused node if not already done. if Assigned(FFocusedNode) and not (vsSelected in FFocusedNode.States) then begin InternalAddToSelection(FFocusedNode, False); InvalidateNode(FFocusedNode); end; UpdateWindow(Handle); // Keep a list of all currently selected nodes as this list might change, // but we have probably to delete currently selected nodes. FDragSelection := GetSortedSelection(True); try DoStateChange([tsOLEDragging], [tsOLEDragPending, tsClearPending]); // An application might create a drag object like used during VCL dd. This is not required for OLE dd but // required as parameter. DragObject := nil; DoStartDrag(DragObject); DragObject.Free; DataObject := VTVDragManager.DataObject; PrepareDragImage(P, DataObject); FLastDropMode := dmOnNode; // Don't forget to initialize the result. It might never be touched. DragEffect := DROPEFFECT_NONE; AllowedEffects := GetDragOperations; try DragAndDrop(AllowedEffects, DataObject, DragEffect); VTVDragManager.ForceDragLeave; finally GetCursorPos(P); P := ScreenToClient(P); DoEndDrag(Self, P.X, P.Y); FDragImage.EndDrag; // Finish the operation. if (DragEffect = DROPEFFECT_MOVE) and (toAutoDeleteMovedNodes in TreeOptions.AutoOptions) then begin // The operation was a move so delete the previously selected nodes. BeginUpdate; try // The list of selected nodes was retrieved in resolved state. That means there can never be a node // in the list whose parent (or its parent etc.) is also selected. for I := 0 to High(FDragSelection) do DeleteNode(FDragSelection[I]); finally EndUpdate; end; end; DoStateChange([], [tsOLEDragging]); end; finally FDragSelection := nil; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoDragging');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragExpand; var SourceTree: TBaseVirtualTree; begin KillTimer(Handle, ExpandTimer); if Assigned(FDropTargetNode) and (vsHasChildren in FDropTargetNode.States) and not (vsExpanded in FDropTargetNode.States) then begin if Assigned(FDragManager) then SourceTree := TBaseVirtualTree(VTVDragManager.DragSource) else SourceTree := nil; if not VTVDragManager.DropTargetHelperSupported and Assigned(SourceTree) then SourceTree.FDragImage.HideDragImage; ToggleNode(FDropTargetNode); UpdateWindow(Handle); if not VTVDragManager.DropTargetHelperSupported and Assigned(SourceTree) then SourceTree.FDragImage.ShowDragImage; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoDragOver(Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord): Boolean; begin Result := False; if Assigned(FOnDragOver) then FOnDragOver(Self, Source, Shift, State, Pt, Mode, Effect, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragDrop(Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); begin if Assigned(FOnDragDrop) then FOnDragDrop(Self, Source, {DataObject, }Formats, Shift, Pt, Effect, Mode); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoEdit; begin Application.CancelHint; KillTimer(Handle, ScrollTimer); KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); if Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) and not (toReadOnly in FOptions.FMiscOptions) and (FEditLink = nil) then begin FEditLink := DoCreateEditor(FFocusedNode, FEditColumn); if Assigned(FEditLink) then begin DoStateChange([tsEditing], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection, tsOLEDragPending, tsOLEDragging, tsClearPending, tsScrollPending, tsScrolling, tsMouseCheckPending]); ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollOnEdit in FOptions.AutoOptions)); if FEditLink.PrepareEdit(Self, FFocusedNode, FEditColumn) then begin UpdateEditBounds; // Node needs repaint because the selection rectangle and static text must disappear. InvalidateNode(FFocusedNode); if not FEditLink.BeginEdit then DoStateChange([], [tsEditing]); end else DoStateChange([], [tsEditing]); if not (tsEditing in FStates) then FEditLink := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoEndDrag(Target: TObject; X, Y: Integer); // Does some housekeeping for VCL drag'n drop; begin inherited; DragFinished; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoEndEdit: Boolean; begin KillTimer(Handle, EditTimer); Result := (tsEditing in FStates) and FEditLink.EndEdit; if Result then begin DoStateChange([], [tsEditing]); FEditLink := nil; if Assigned(FOnEdited) then FOnEdited(Self, FFocusedNode, FEditColumn); end; DoStateChange([], [tsEditPending]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoExpanded(Node: PVirtualNode); begin if Assigned(FOnExpanded) then FOnExpanded(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoExpanding(Node: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnExpanding) then FOnExpanding(Self, Node, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFocusChange(Node: PVirtualNode; Column: TColumnIndex); begin if Assigned(FOnFocusChanged) then FOnFocusChanged(Self, Node, Column); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_NAMECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_VALUECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_SELECTION, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_FOCUS, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoFocusChanging(OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex): Boolean; begin Result := (OldColumn = NewColumn) or FHeader.AllowFocus(NewColumn); if Assigned(FOnFocusChanging) then FOnFocusChanging(Self, OldNode, NewNode, OldColumn, NewColumn, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFocusNode(Node: PVirtualNode; Ask: Boolean); begin if not (tsEditing in FStates) or EndEditNode then begin if Node = FRoot then Node := nil; if (FFocusedNode <> Node) and (not Ask or DoFocusChanging(FFocusedNode, Node, FFocusedColumn, FFocusedColumn)) then begin if Assigned(FFocusedNode) then begin // Do automatic collapsing of last focused node if enabled. This is however only done if // old and new focused node have a common parent node. if (toAutoExpand in FOptions.FAutoOptions) and Assigned(Node) and (Node.Parent = FFocusedNode.Parent) and (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode) else InvalidateNode(FFocusedNode); end; FFocusedNode := Node; end; // Have to scroll the node into view, even it is the same node as before. if Assigned(FFocusedNode) then begin // Make sure a valid column is set if columns are used and no column has currently the focus. if FHeader.UseColumns and (not FHeader.FColumns.IsValidColumn(FFocusedColumn)) then FFocusedColumn := FHeader.MainColumn; // Do automatic expansion of the newly focused node if enabled. if (toAutoExpand in FOptions.FAutoOptions) and not (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); InvalidateNode(FFocusedNode); if (FUpdateCount = 0) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then ScrollIntoView(FFocusedNode, (toCenterScrollIntoView in FOptions.SelectionOptions) and (MouseButtonDown * FStates = []), not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); end; // Reset range anchor if necessary. if FSelectionCount = 0 then ResetRangeAnchor; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFreeNode(Node: PVirtualNode); begin if Node = FLastChangedNode then FLastChangedNode := nil; if Node = FCurrentHotNode then FCurrentHotNode := nil; if Node = FDropTargetNode then FDropTargetNode := nil; if Assigned(FOnFreeNode) and ([vsInitialized, vsInitialUserData] * Node.States <> []) then FOnFreeNode(Self, Node); FreeMem(Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; // Determines the margins of the content rectangle caused by DoBeforeCellPaint. // Note that shrinking the content rectangle results in positive margins whereas enlarging the content rectangle results // in negative margins. var CellRect, ContentRect: TRect; begin Result := Point(0, 0); if Assigned(FOnBeforeCellPaint) then // Otherwise DoBeforeCellPaint has no effect. begin if Canvas = nil then Canvas := Self.Canvas; // Determine then node's cell rectangle and content rectangle before calling DoBeforeCellPaint. CellRect := GetDisplayRect(Node, Column, True); ContentRect := CellRect; DoBeforeCellPaint(Canvas, Node, Column, cpmGetContentMargin, CellRect, ContentRect); // Calculate the changes caused by DoBeforeCellPaint. case CellContentMarginType of ccmtAllSides: // Calculate the width difference and high difference. Result := Point((CellRect.Right - CellRect.Left) - (ContentRect.Right - ContentRect.Left), (CellRect.Bottom - CellRect.Top) - (ContentRect.Bottom - ContentRect.Top)); ccmtTopLeftOnly: // Calculate the left margin and top margin only. Result := Point(ContentRect.Left - CellRect.Left, ContentRect.Top - CellRect.Top); ccmtBottomRightOnly: // Calculate the right margin and bottom margin only. Result := Point(CellRect.Right - ContentRect.Right, CellRect.Bottom - ContentRect.Bottom); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetCursor(var Cursor: TCursor); begin if Assigned(FOnGetCursor) then FOnGetCursor(Self, Cursor); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetHeaderCursor(var Cursor: HCURSOR); begin if Assigned(FOnGetHeaderCursor) then FOnGetHeaderCursor(FHeader, Cursor); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetImageIndex(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer): TCustomImageList; // Queries the application/descendant about certain image properties for a node. // Returns a custom image list if given by the callee, otherwise nil. begin Result := nil; // First try the enhanced event to allow for custom image lists. if Assigned(FOnGetImageEx) then FOnGetImageEx(Self, Node, Kind, Column, Ghosted, Index, Result) else if Assigned(FOnGetImage) then FOnGetImage(Self, Node, Kind, Column, Ghosted, Index); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String); // Queries the application/descendant about alternative image text for a node. begin if Assigned(FOnGetImageText) then FOnGetImageText(Self, Node, Kind, Column, ImageText); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetLineStyle(var Bits: Pointer); begin if Assigned(FOnGetLineStyle) then FOnGetLineStyle(Self, Bits); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := Hint; LineBreakStyle := hlbDefault; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := Hint; LineBreakStyle := hlbDefault; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; begin Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint): TPopupMenu; // Queries the application whether there is a node specific popup menu. var Run: PVirtualNode; AskParent: Boolean; begin Result := nil; if Assigned(FOnGetPopupMenu) then begin Run := Node; if Assigned(Run) then begin AskParent := True; repeat FOnGetPopupMenu(Self, Run, Column, Position, AskParent, Result); Run := Run.Parent; until (Run = FRoot) or Assigned(Result) or not AskParent; end else FOnGetPopupMenu(Self, nil, -1, Position, AskParent, Result); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetUserClipboardFormats(var Formats: TFormatEtcArray); begin if Assigned(FOnGetUserClipboardFormats) then FOnGetUserClipboardFormats(Self, Formats); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderClick) then FOnHeaderClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDblClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderDblClick) then FOnHeaderDblClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderImageClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderImageClick) then FOnHeaderImageClick(FHeader, Column, Button, Shift, X, Y) else if Assigned(FOnHeaderClick) then FOnHeaderClick(FHeader, Column, Button, Shift, X, Y) end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderCheckBoxClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderCheckBoxClick) then FOnHeaderCheckBoxClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDragged(Column: TColumnIndex; OldPosition: TColumnPosition); begin if Assigned(FOnHeaderDragged) then FOnHeaderDragged(FHeader, Column, OldPosition); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDraggedOut(Column: TColumnIndex; const DropPosition: TPoint); begin if Assigned(FOnHeaderDraggedOut) then FOnHeaderDraggedOut(FHeader, Column, DropPosition); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoHeaderDragging(Column: TColumnIndex): Boolean; begin Result := True; if Assigned(FOnHeaderDragging) then FOnHeaderDragging(FHeader, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDraw(Canvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode); begin if Assigned(FOnHeaderDraw) then FOnHeaderDraw(FHeader, Canvas, Column, R, Hover, Pressed, DropMark); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDrawQueryElements(var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); begin if Assigned(FOnHeaderDrawQueryElements) then FOnHeaderDrawQueryElements(FHeader, PaintInfo, Elements); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseDown) then FOnHeaderMouseDown(FHeader, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseMove(Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseMove) then FOnHeaderMouseMove(FHeader, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseUp) then FOnHeaderMouseUp(FHeader, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHotChange(Old, New: PVirtualNode); begin if Assigned(FOnHotChange) then FOnHotChange(Self, Old, New); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; begin Result := 0; if Assigned(FOnIncrementalSearch) then FOnIncrementalSearch(Self, Node, Text, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoInitChildren(Node: PVirtualNode; var ChildCount: Cardinal); begin if Assigned(FOnInitChildren) then FOnInitChildren(Self, Node, ChildCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates); begin if Assigned(FOnInitNode) then FOnInitNode(Self, Parent, Node, InitStates); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; begin Result := True; if Assigned(FOnKeyAction) then FOnKeyAction(Self, CharCode, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoLoadUserData(Node: PVirtualNode; Stream: TStream); begin if Assigned(FOnLoadNode) then if Node = FRoot then FOnLoadNode(Self, nil, Stream) else FOnLoadNode(Self, Node, Stream); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoMeasureItem(TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); begin if Assigned(FOnMeasureItem) then FOnMeasureItem(Self, TargetCanvas, Node, NodeHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoNodeCopied(Node: PVirtualNode); begin if Assigned(FOnNodeCopied) then FOnNodeCopied(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeCopying(Node, NewParent: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnNodeCopying) then FOnNodeCopying(Self, Node, NewParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeHeightDblClickResize(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint): Boolean; begin Result := True; if Assigned(FOnNodeHeightDblClickResize) then FOnNodeHeightDblClickResize(Self, Node, Column, Shift, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeHeightTracking(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; begin Result := True; if Assigned(FOnNodeHeightTracking) then FOnNodeHeightTracking(Self, Node, Column, Shift, TrackPoint, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoNodeMoved(Node: PVirtualNode); begin if Assigned(FOnNodeMoved) then FOnNodeMoved(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeMoving(Node, NewParent: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnNodeMoving) then FOnNodeMoving(Self, Node, NewParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoPaintBackground(Canvas: TCanvas; const R: TRect): Boolean; begin Result := False; if Assigned(FOnPaintBackground) then FOnPaintBackground(Self, Canvas, R, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPaintDropMark(Canvas: TCanvas; Node: PVirtualNode; const R: TRect); // draws the drop mark into the given rectangle // Note: Changed properties of the given canvas should be reset to their previous values. var SaveBrushColor: TColor; SavePenStyle: TPenStyle; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoPaintDropMark');{$endif} if FLastDropMode in [dmAbove, dmBelow] then with Canvas do begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'DropMode in [dmAbove,dmBelow]');{$endif} SavePenStyle := Pen.Style; Pen.Style := psClear; SaveBrushColor := Brush.Color; Brush.Color := FColors.DropMarkColor; {$ifdef DEBUG_VTV}Logger.SendColor([lcDrag],'Brush.Color',Brush.Color);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'R',R);{$endif} if FLastDropMode = dmAbove then begin Polygon([Point(R.Left + 2, R.Top), Point(R.Right - 2, R.Top), Point(R.Right - 2, R.Top + 6), Point(R.Right - 6, R.Top + 2), Point(R.Left + 6 , R.Top + 2), Point(R.Left + 2, R.Top + 6) ]); end else Polygon([Point(R.Left + 2, R.Bottom - 1), Point(R.Right - 2, R.Bottom - 1), Point(R.Right - 2, R.Bottom - 8), Point(R.Right - 7, R.Bottom - 3), Point(R.Left + 7 , R.Bottom - 3), Point(R.Left + 2, R.Bottom - 8) ]); Brush.Color := SaveBrushColor; Pen.Style := SavePenStyle; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoPaintDropMark');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPaintNode(var PaintInfo: TVTPaintInfo); begin end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint); // Support for node dependent popup menus. var Menu: TPopupMenu; begin Menu := DoGetPopupMenu(Node, Column, Position); if Assigned(Menu) then begin DoStateChange([tsPopupMenuShown]); KillTimer(Handle, EditTimer); Menu.PopupComponent := Self; with ClientToScreen(Position) do Menu.Popup(X, Y); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoRenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HRESULT; begin Result := E_FAIL; if Assigned(FOnRenderOLEData) then FOnRenderOLEData(Self, FormatEtcIn, Medium, ForClipboard, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoReset(Node: PVirtualNode); begin if Assigned(FOnResetNode) then FOnResetNode(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoSaveUserData(Node: PVirtualNode; Stream: TStream); begin if Assigned(FOnSaveNode) then if Node = FRoot then FOnSaveNode(Self, nil, Stream) else FOnSaveNode(Self, Node, Stream); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoScroll(DeltaX, DeltaY: Integer); begin if Assigned(FOnScroll) then FOnScroll(Self, DeltaX, DeltaY); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoSetOffsetXY(Value: TPoint; Options: TScrollUpdateOptions; ClipRect: PRect = nil): Boolean; // Actual offset setter used to scroll the client area, update scroll bars and invalidating the header (all optional). // Returns True if the offset really changed otherwise False is returned. var DeltaX: Integer; DeltaY: Integer; DWPStructure: THandle;//HDWP; I: Integer; P: TPoint; R: TRect; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'DoSetOffsetXY');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'Value',Value);{$endif} //{$ifdef DEBUG_VTV}Logger.SendCallStack([lcScroll],'CallStack');{$endif} // Range check, order is important here. if Value.X < (ClientWidth - Integer(FRangeX)) then Value.X := ClientWidth - Integer(FRangeX); if Value.X > 0 then Value.X := 0; DeltaX := Value.X - FOffsetX; if UseRightToLeftAlignment then DeltaX := -DeltaX; if Value.Y < (ClientHeight - Integer(FRangeY)) then Value.Y := ClientHeight - Integer(FRangeY); if Value.Y > 0 then Value.Y := 0; DeltaY := Value.Y - FOffsetY; {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'FOffsetX: %d FOffsetY: %d',[FOffsetX,FOffsetY]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'DeltaX: %d DeltaY: %d',[DeltaX,DeltaY]);{$endif} Result := (DeltaX <> 0) or (DeltaY <> 0); if Result then begin FOffsetX := Value.X; FOffsetY := Value.Y; Application.CancelHint; if FUpdateCount = 0 then begin // The drag image from VCL controls need special consideration. {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(False); {$endif} if (suoScrollClientArea in Options) and not (tsToggling in FStates) then begin // Have to invalidate the entire window if there's a background. if (toShowBackground in FOptions.FPaintOptions) and (FBackground.Graphic is TBitmap) then begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} // Since we don't use ScrollWindow here we have to move all client windows ourselves. DWPStructure := BeginDeferWindowPos(ControlCount); for I := 0 to ControlCount - 1 do if Controls[I] is TWinControl then begin with Controls[I] as TWinControl do DWPStructure := DeferWindowPos(DWPStructure, Handle, 0, Left + DeltaX, Top + DeltaY, 0, 0, SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOSIZE); if DWPStructure = 0 then Break; end; if DWPStructure <> 0 then EndDeferWindowPos(DWPStructure); InvalidateRect(Handle, nil, False); {$endif} end else begin if (DeltaX <> 0) and (Header.Columns.GetVisibleFixedWidth > 0) then begin // When fixed columns exists we have to scroll separately horizontally and vertically. // Horizontally is scroll only the client area not occupied by fixed columns and // vertically entire client area (or clipping area if one exists). R := ClientRect; R.Left := Header.Columns.GetVisibleFixedWidth; //lclheader if hoVisible in FHeader.FOptions then begin Inc(R.Top,FHeader.Height); Inc(R.Bottom,FHeader.Height); end; //scrollwindow implementation under gtk is broken {$ifdef Gtk} InvalidateRect(Handle, nil, True); {$else} ScrollWindow(Handle, DeltaX, 0, @R, @R); if DeltaY <> 0 then ScrollWindow(Handle, 0, DeltaY, @R, @R); {$endif} end else begin //lclheader if ClipRect <> nil then begin {$ifdef DEBUG_VTV}Logger.SendWarning([lcWarning], 'DoSetOffsetXY called with a non nil ClipRect');{$endif} R := ClipRect^; end else R := ClientRect; if hoVisible in FHeader.FOptions then begin Inc(R.Top, FHeader.Height); Inc(R.Bottom, FHeader.Height); end; {$ifdef DEBUG_VTV}Logger.Send([lcScroll], 'Rect to Scroll', R);{$endif} //todo: temporary hack to avoid some drawing problems. //Will be removed when scrollwindowex is properly implemented in all widgets {$ifdef LCLQt} ScrollWindow(Handle, DeltaX, DeltaY, @R, @R); {$else} {$ifdef Gtk} InvalidateRect(Handle, nil, True); {$else} ScrollWindowEx(Handle, DeltaX, DeltaY, @R, @R,0, nil, SW_INVALIDATE or SW_SCROLLCHILDREN); {$endif} {$endif} end; end; end; if suoUpdateNCArea in Options then begin if DeltaX <> 0 then begin if (suoRepaintHeader in Options) and (hoVisible in FHeader.FOptions) then FHeader.Invalidate(nil); if not (tsSizing in FStates) and (FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth]) then UpdateHorizontalScrollBar(suoRepaintScrollbars in Options); end; if (DeltaY <> 0) and ([tsThumbTracking, tsSizing] * FStates = []) then begin UpdateVerticalScrollBar(suoRepaintScrollbars in Options); if not (FHeader.UseColumns or IsMouseSelecting) and (FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth]) then UpdateHorizontalScrollBar(suoRepaintScrollbars in Options); end; end; {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(True); {$endif} end; // Finally update "hot" node if hot tracking is activated GetCursorPos(P); P := ScreenToClient(P); if PtInRect(ClientRect, P) then HandleHotTrack(P.X, P.Y); DoScroll(DeltaX, DeltaY); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'DoSetOffsetXY');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoShowScrollbar(Bar: Integer; Show: Boolean); begin {$ifdef UseFlatScrollbars} FlatSB_ShowScrollBar(Handle, Bar, Show); {$else} ShowScrollBar(Handle, Bar, Show); {$endif UseFlatScrollbars}; if Assigned(FOnShowScrollbar) then FOnShowScrollbar(Self, Bar, Show); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStartDrag(var DragObject: TDragObject); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoStartDrag');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcDrag],'Stack');{$endif} inherited; // Check if the application created an own drag object. This is needed to pass the correct source in // OnDragOver and OnDragDrop. if Assigned(DragObject) then DoStateChange([tsUserDragObject]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoStartDrag');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStateChange(Enter: TVirtualTreeStates; Leave: TVirtualTreeStates = []); var ActualEnter, ActualLeave: TVirtualTreeStates; begin if Assigned(FOnStateChange) then begin ActualEnter := Enter - FStates; ActualLeave := FStates * Leave; if (ActualEnter + ActualLeave) <> [] then FOnStateChange(Self, Enter, Leave); end; FStates := FStates + Enter - Leave; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStructureChange(Node: PVirtualNode; Reason: TChangeReason); begin if HandleAllocated then KillTimer(Handle, StructureChangeTimer); if Assigned(FOnStructureChange) then FOnStructureChange(Self, Node, Reason); // This is a good place to reset the cached node and reason. These are the same as the values passed in here. // This is necessary to allow descendants to override this method and get them. DoStateChange([], [tsStructureChangePending]); FLastStructureChangeNode := nil; FLastStructureChangeReason := crIgnore; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoTimerScroll; var P, ClientP: TPoint; InRect, Panning: Boolean; R, ClipRect: TRect; DeltaX, DeltaY: Integer; begin GetCursorPos(P); //lclheader R := inherited GetClientRect; ClipRect := R; {$ifndef INCOMPLETE_WINAPI} MapWindowPoints(Handle, 0, R, 2); {$endif} InRect := PtInRect(R, P); ClientP := ScreenToClient(P); Panning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; if IsMouseSelecting or InRect or Panning or CanScroll(ClientP) then begin DeltaX := 0; DeltaY := 0; if sdUp in FScrollDirections then begin if Panning then DeltaY := FLastClickPos.Y - ClientP.Y - 8 else if InRect then DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight) else DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight) * Abs(R.Top - P.Y); if FOffsetY = 0 then Exclude(FScrollDirections, sdUp); end; if sdDown in FScrollDirections then begin if Panning then DeltaY := FLastClickPos.Y - ClientP.Y + 8 else if InRect then DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight) else DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight) * Abs(P.Y - R.Bottom); if (ClientHeight - FOffsetY) = Integer(FRangeY) then Exclude(FScrollDirections, sdDown); end; if sdLeft in FScrollDirections then begin if Panning then DeltaX := FLastClickPos.X - ClientP.X - 8 else if InRect then DeltaX := FScrollBarOptions.FIncrementX else DeltaX := FScrollBarOptions.FIncrementX * Abs(R.Left - P.X); if FEffectiveOffsetX = 0 then Exclude(FScrollDirections, sdleft); end; if sdRight in FScrollDirections then begin if Panning then DeltaX := FLastClickPos.X - ClientP.X + 8 else if InRect then DeltaX := -FScrollBarOptions.FIncrementX else DeltaX := -FScrollBarOptions.FIncrementX * Abs(P.X - R.Right); if (ClientWidth + FEffectiveOffsetX) = Integer(FRangeX) then Exclude(FScrollDirections, sdRight); end; if UseRightToLeftAlignment then DeltaX := - DeltaX; if IsMouseSelecting then begin // In order to avoid scrolling the area which needs a repaint due to the changed selection rectangle // we limit the scroll area explicitely. OffsetRect(ClipRect, DeltaX, DeltaY); DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), DefaultScrollUpdateFlags, @ClipRect); // When selecting with the mouse then either update only the parts of the window which have been uncovered // by the scroll operation if no change in the selection happend or invalidate and redraw the entire // client area otherwise (to avoid the time consuming task of determining the display rectangles of every // changed node). if CalculateSelectionRect(ClientP.X, ClientP.Y) and HandleDrawSelection(ClientP.X, ClientP.Y) then InvalidateRect(Handle, nil, False) else begin // The selection did not change so invalidate only the part of the window which really needs an update. // 1) Invalidate the parts uncovered by the scroll operation. Add another offset range, we have to // scroll only one stripe but have to update two. OffsetRect(ClipRect, DeltaX, DeltaY); SubtractRect(ClipRect, ClientRect, ClipRect); InvalidateRect(Handle, @ClipRect, False); // 2) Invalidate the selection rectangles. UnionRect(ClipRect, OrderRect(FNewSelRect), OrderRect(FLastSelRect)); OffsetRect(ClipRect, FOffsetX, FOffsetY); InvalidateRect(Handle, @ClipRect, False); end; end else begin // Scroll only if there is no drag'n drop in progress. Drag'n drop scrolling is handled in DragOver. if ((FDragManager = nil) or not VTVDragManager.IsDropTarget) and ((DeltaX <> 0) or (DeltaY <> 0)) then DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), DefaultScrollUpdateFlags, nil); end; UpdateWindow(Handle); if (FScrollDirections = []) and ([tsWheelPanning, tsWheelScrolling] * FStates = []) then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoUpdating(State: TVTUpdateState); begin if Assigned(FOnUpdating) then FOnUpdating(Self, State); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoValidateCache: Boolean; // This method fills the cache, which is used to speed up searching for nodes. // The strategy is simple: Take the current number of visible nodes and distribute evenly a number of marks // (which are stored in FPositionCache) so that iterating through the tree doesn't cost too much time. // If there are less than 'CacheThreshold' nodes in the tree then the cache remains empty. // Result is True if the cache was filled without interruption, otherwise False. // Note: You can adjust the maximum number of nodes between two cache entries by changing CacheThreshold. var EntryCount, CurrentTop, Index: Cardinal; CurrentNode, Temp: PVirtualNode; begin EntryCount := 0; if not (tsStopValidation in FStates) then begin if FStartIndex = 0 then FPositionCache := nil; if FVisibleCount > CacheThreshold then begin EntryCount := CalculateCacheEntryCount; SetLength(FPositionCache, EntryCount); if FStartIndex > EntryCount then FStartIndex := EntryCount; // Optimize validation by starting with FStartIndex if set. if (FStartIndex > 0) and Assigned(FPositionCache[FStartIndex - 1].Node) then begin // Index is the current entry in FPositionCache. Index := FStartIndex - 1; // Running term for absolute top value. CurrentTop := FPositionCache[Index].AbsoluteTop; // Running node pointer. CurrentNode := FPositionCache[Index].Node; end else begin // Index is the current entry in FPositionCache. Index := 0; // Running term for absolute top value. CurrentTop := 0; // Running node pointer. CurrentNode := GetFirstVisibleNoInit(nil, True); end; // EntryCount serves as counter for processed nodes here. This value can always start at 0 as // the validation either starts also at index 0 or an index which is always a multiple of CacheThreshold // and EntryCount is only used with modulo CacheThreshold. EntryCount := 0; if Assigned(CurrentNode) then begin while not (tsStopValidation in FStates) do begin if (EntryCount mod CacheThreshold) = 0 then begin // New cache entry to set up. with FPositionCache[Index] do begin Node := CurrentNode; AbsoluteTop := CurrentTop; end; Inc(Index); end; Inc(CurrentTop, NodeHeight[CurrentNode]); // Advance to next visible node. Temp := GetNextVisibleNoInit(CurrentNode, True); // If there is no further node or the cache is full then stop the loop. if (Temp = nil) or (Integer(Index) = Length(FPositionCache)) then Break; CurrentNode := Temp; Inc(EntryCount); end; end; // Finalize the position cache so no nil entry remains there. if not (tsStopValidation in FStates) and (Integer(Index) <= High(FPositionCache)) then begin SetLength(FPositionCache, Index + 1); with FPositionCache[Index] do begin Node := CurrentNode; AbsoluteTop := CurrentTop; end; end; end; end; Result := (EntryCount > 0) and not (tsStopValidation in FStates); // In variable node height mode it might have happend that some or all of the nodes have been adjusted in their // height. During validation updates of the scrollbars is disabled so let's do this here. if Result and (toVariableNodeHeight in FOptions.FMiscOptions) then UpdateScrollbars(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragAndDrop(AllowedEffects: LongWord; DataObject: IDataObject; DragEffect: LongWord); begin {$ifdef Windows} ActiveX.DoDragDrop(DataObject, VTVDragManager as IDropSource, AllowedEffects, @DragEffect); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragCanceled; // Does some housekeeping for VCL drag'n drop; begin inherited; DragFinished; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragDrop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; var Shift: TShiftState; EnumFormat: IEnumFormatEtc; Fetched: LongWord; OLEFormat: TFormatEtc; Formats: TFormatArray; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragDrop');{$endif} KillTimer(Handle, ExpandTimer); KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); Formats := nil; // Ask explicitly again whether the action is allowed. Otherwise we may accept a drop which is intentionally not // allowed but cannot be prevented by the application because when the tree was scrolling while dropping // no DragOver event is created by the OLE subsystem. Result := DragOver(VTVDragManager.DragSource, KeyState, dsDragMove, Pt, Effect); try if (Result <> NOERROR) or ((Effect and not DROPEFFECT_SCROLL) = DROPEFFECT_NONE) then Result := E_FAIL else begin try Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); Pt := ScreenToClient(Pt); // Determine which formats we can get and pass them along with the data object to the drop handler. Result := DataObject.EnumFormatEtc(DATADIR_GET, EnumFormat); if Failed(Result) then Abort; Result := EnumFormat.Reset; if Failed(Result) then Abort; // create a list of available formats while EnumFormat.Next(1, OLEFormat, @Fetched) = S_OK do begin SetLength(Formats, Length(Formats) + 1); Formats[High(Formats)] := OLEFormat.cfFormat; end; DoDragDrop(VTVDragManager.DragSource, DataObject, Formats, Shift, Pt, Effect, FLastDropMode); except // An unhandled exception here leaks memory. Application.HandleException(Self); Result := E_UNEXPECTED; end; end; finally if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragDrop');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragEnter(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; // callback routine for the drop target interface var Shift: TShiftState; Accept: Boolean; R: TRect; HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragEnter');{$endif} try // Determine acceptance of drag operation and reset scroll start time. FDragScrollStart := 0; Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); Pt := ScreenToClient(Pt); Effect := SuggestDropEffect(VTVDragManager.DragSource, Shift, Pt, Effect); Accept := DoDragOver(VTVDragManager.DragSource, Shift, dsDragEnter, Pt, FLastDropMode, Effect); if not Accept then Effect := DROPEFFECT_NONE else begin // Set initial drop target node and drop mode. GetHitTestInfoAt(Pt.X, Pt.Y, True, HitInfo); if Assigned(HitInfo.HitNode) then begin FDropTargetNode := HitInfo.HitNode; R := GetDisplayRect(HitInfo.HitNode, FHeader.MainColumn, False); if hiOnItemLabel in HitInfo.HitPositions then FLastDropMode := dmOnNode else if ((R.Top + R.Bottom) div 2) > Pt.Y then FLastDropMode := dmAbove else FLastDropMode := dmBelow; end else FLastDropMode := dmNowhere; end; // If the drag source is a virtual tree then we know how to control the drag image // and can show it even if the source is not the target tree. // This is only necessary if we cannot use the drag image helper interfaces. if not VTVDragManager.DropTargetHelperSupported and Assigned(VTVDragManager.DragSource) then TBaseVirtualTree(VTVDragManager.DragSource).FDragImage.ShowDragImage; Result := NOERROR; except Result := E_UNEXPECTED; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragEnter');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragFinished; // Called by DragCancelled or EndDrag to make up for the still missing mouse button up messages. // These are important for such important things like popup menus. var P: TPoint; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragFinished');{$endif} DoStateChange([], [tsVCLDragPending, tsVCLDragging, tsUserDragObject]); GetCursorPos(P); P := ScreenToClient(P); if tsRightButtonDown in FStates then Perform(LM_RBUTTONUP, 0, Longint(PointToSmallPoint(P))) else if tsMiddleButtonDown in FStates then Perform(LM_MBUTTONUP, 0, Longint(PointToSmallPoint(P))) else Perform(LM_LBUTTONUP, 0, Longint(PointToSmallPoint(P))); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragFinished');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragLeave; var Effect: LongWord; begin KillTimer(Handle, ExpandTimer); if not VTVDragManager.DropTargetHelperSupported and Assigned(VTVDragManager.DragSource) then TBaseVirtualTree(VTVDragManager.DragSource).FDragImage.HideDragImage; if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; UpdateWindow(Handle); Effect := 0; DoDragOver(nil, [], dsDragLeave, Point(0, 0), FLastDropMode, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragOver(Source: TObject; KeyState: LongWord; DragState: TDragState; Pt: TPoint; var Effect: LongWord): HResult; // callback routine for the drop target interface var Shift: TShiftState; Accept, DragImageWillMove, WindowScrolled: Boolean; OldR, R: TRect; NewDropMode: TDropMode; HitInfo: THitInfo; ImageHit: Boolean; LabelHit: Boolean; DragPos: TPoint; Tree: TBaseVirtualTree; LastNode: PVirtualNode; DeltaX, DeltaY: Integer; ScrollOptions: TScrollUpdateOptions; begin //{$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragOver');{$endif} //todo: the check to FDragManager disable drag images in non windows. //This should be reviewed as soon as drag image is implemented in non windows if Assigned(FDragManager) and not VTVDragManager.DropTargetHelperSupported and (Source is TBaseVirtualTree) then begin Tree := Source as TBaseVirtualTree; ScrollOptions := [suoUpdateNCArea]; end else begin Tree := nil; ScrollOptions := DefaultScrollUpdateFlags; end; try DragPos := Pt; Pt := ScreenToClient(Pt); //{$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Pt',Pt);{$endif} // Check if we have to scroll the client area. FScrollDirections := DetermineScrollDirections(Pt.X, Pt.Y); DeltaX := 0; DeltaY := 0; if FScrollDirections <> [] then begin // Determine amount to scroll. if sdUp in FScrollDirections then begin DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight); if FOffsetY = 0 then Exclude(FScrollDirections, sdUp); end; if sdDown in FScrollDirections then begin DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight); if (ClientHeight - FOffsetY) = Integer(FRangeY) then Exclude(FScrollDirections, sdDown); end; if sdLeft in FScrollDirections then begin DeltaX := FScrollBarOptions.FIncrementX; if FEffectiveOffsetX = 0 then Exclude(FScrollDirections, sdleft); end; if sdRight in FScrollDirections then begin DeltaX := -FScrollBarOptions.FIncrementX; if (ClientWidth + FEffectiveOffsetX) = Integer(FRangeX) then Exclude(FScrollDirections, sdRight); end; WindowScrolled := DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), ScrollOptions, nil); end else WindowScrolled := False; // Determine acceptance of drag operation as well as drag target. Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); GetHitTestInfoAt(Pt.X, Pt.Y, True, HitInfo); ImageHit := HitInfo.HitPositions * [hiOnNormalIcon, hiOnStateIcon] <> []; LabelHit := hiOnItemLabel in HitInfo.HitPositions; // In report mode only direct hits of the node captions/images in the main column are accepted as hits. if (toReportMode in FOptions.FMiscOptions) and not ((LabelHit or ImageHit) and (HitInfo.HitColumn = FHeader.MainColumn)) then HitInfo.HitNode := nil; if Assigned(HitInfo.HitNode) then begin R := GetDisplayRect(HitInfo.HitNode, NoColumn, False); if LabelHit or ImageHit or not (toShowDropmark in FOptions.FPaintOptions) then NewDropMode := dmOnNode else if ((R.Top + R.Bottom) div 2) > Pt.Y then NewDropMode := dmAbove else NewDropMode := dmBelow; end else begin NewDropMode := dmNowhere; R := Rect(0, 0, 0, 0); end; if Assigned(Tree) then DragImageWillMove := Tree.FDragImage.WillMove(DragPos) else DragImageWillMove := False; if (HitInfo.HitNode <> FDropTargetNode) or (FLastDropMode <> NewDropMode) then begin // Something in the tree will change. This requires to update the screen and/or the drag image. FLastDropMode := NewDropMode; if HitInfo.HitNode <> FDropTargetNode then begin KillTimer(Handle, ExpandTimer); // The last target node is needed for the rectangle determination but must already be set for // the recapture call, hence it must be stored somewhere. LastNode := FDropTargetNode; FDropTargetNode := HitInfo.HitNode; // In order to show a selection rectangle a column must be focused. if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; if Assigned(LastNode) and Assigned(FDropTargetNode) then begin // Optimize the case that the selection moved between two nodes. OldR := GetDisplayRect(LastNode, NoColumn, False); UnionRect(R, R, OldR); if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, True, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end else begin if Assigned(LastNode) then begin // Repaint last target node. OldR := GetDisplayRect(LastNode, NoColumn, False); if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, OldR, False, not DragImageWillMove); end else InvalidateRect(Handle, @OldR, False); end else begin if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end; end; // Start auto expand timer if necessary. if (toAutoDropExpand in FOptions.FAutoOptions) and Assigned(FDropTargetNode) and (vsHasChildren in FDropTargetNode.States) then SetTimer(Handle, ExpandTimer, FAutoExpandDelay, nil); end else begin // Only the drop mark position changed so invalidate the current drop target node. if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end; end else begin // No change in the current drop target or drop mode. This might still mean horizontal or vertical scrolling. if Assigned(Tree) and ((DeltaX <> 0) or (DeltaY <> 0)) then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove); end; Update; if Assigned(Tree) and DragImageWillMove then Tree.FDragImage.DragTo(DragPos, False); Effect := SuggestDropEffect(Source, Shift, Pt, Effect); Accept := DoDragOver(Source, Shift, DragState, Pt, FLastDropMode, Effect); if not Accept then Effect := DROPEFFECT_NONE; if WindowScrolled then Effect := Effect or LongWord(DROPEFFECT_SCROLL); Result := NOERROR; except Result := E_UNEXPECTED; end; //{$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragOver');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawDottedHLine(const PaintInfo: TVTPaintInfo; Left, Right, Top: Integer); // Draws a horizontal line with alternating pixels (this style is not supported for pens under Win9x). var R: TRect; begin with PaintInfo, Canvas do begin Brush.Color := Self.Brush.Color; R := Rect(Min(Left, Right), Top, Max(Left, Right) + 1, Top + 1); LCLIntf.FillRect(Handle, R, FDottedBrush); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawDottedVLine(const PaintInfo: TVTPaintInfo; Top, Bottom, Left: Integer); // Draws a vertical line with alternating pixels (this style is not supported for pens under Win9x). var R: TRect; begin with PaintInfo, Canvas do begin Brush.Color := Self.Brush.Color; R := Rect(Left, Min(Top, Bottom), Left + 1, Max(Top, Bottom) + 1); LCLIntf.FillRect(Handle, R, FDottedBrush); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndOperation; // Called to indicate that a long-running operation has finished. begin Assert(FOperationCount > 0, 'EndOperation must not be called when no operation in progress.'); Dec(FOperationCount); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindNodeInSelection(P: PVirtualNode; out Index: Integer; LowBound, HighBound: Integer): Boolean; // Search routine to find a specific node in the selection array. // LowBound and HighBound determine the range in which to search the node. // Either value can be -1 to denote the maximum range otherwise LowBound must be less or equal HighBound. var L, H, I, C: PtrInt; begin Result := False; L := 0; if LowBound >= 0 then L := LowBound; H := FSelectionCount - 1; if HighBound >= 0 then H := HighBound; while L <= H do begin I := (L + H) shr 1; C := PtrInt(FSelection[I]) - PtrInt(P); if C < 0 then L := I + 1 else begin H := I - 1; if C = 0 then begin Result := True; L := I; end; end; end; Index := L; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FinishChunkHeader(Stream: TStream; StartPos, EndPos: Integer); // used while streaming out a node to finally write out the size of the chunk var Size: Integer; begin // seek back to the second entry in the chunk header Stream.Position := StartPos + SizeOf(Integer); // determine size of chunk without the chunk header Size := EndPos - StartPos - SizeOf(TChunkHeader); // write the size... Stream.Write(Size, SizeOf(Size)); // ... and seek to the last endposition Stream.Position := EndPos; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FontChanged(AFont: TObject); // Little helper function for font changes (as they are not tracked in TBitmap/TCanvas.OnChange). begin FFontChanged := True; FOldFontChange(AFont); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetBorderDimensions: TSize; // Returns the overall width of the current window border, depending on border styles. // Note: these numbers represent the system's standards not special properties, which can be set for TWinControl // (e.g. bevels, border width). var Styles: Integer; begin Result.cx := 0; Result.cy := 0; Styles := GetWindowLong(Handle, GWL_STYLE); if (Styles and WS_BORDER) <> 0 then begin Dec(Result.cx); Dec(Result.cy); end; if (Styles and WS_THICKFRAME) <> 0 then begin Dec(Result.cx, GetSystemMetrics(SM_CXFIXEDFRAME)); Dec(Result.cy, GetSystemMetrics(SM_CYFIXEDFRAME)); end; Styles := GetWindowLong(Handle, GWL_EXSTYLE); if (Styles and WS_EX_CLIENTEDGE) <> 0 then begin Dec(Result.cx, GetSystemMetrics(SM_CXEDGE)); Dec(Result.cy, GetSystemMetrics(SM_CYEDGE)); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer; // Determines the index into the check image list for the given node depending on the check type // and enabled state. const // Four dimensional array consisting of image indices for the check type, the check state, the enabled state and the // hot state. CheckStateToCheckImage: array[ctCheckBox..ctButton, csUncheckedNormal..csMixedPressed, Boolean, Boolean] of Integer = ( // ctCheckBox, ctTriStateCheckBox ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckCheckUncheckedDisabled, ckCheckUncheckedDisabled), (ckCheckUncheckedNormal, ckCheckUncheckedHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckCheckUncheckedDisabled, ckCheckUncheckedDisabled), (ckCheckUncheckedPressed, ckCheckUncheckedPressed)), // csCheckedNormal ((ckCheckCheckedDisabled, ckCheckCheckedDisabled), (ckCheckCheckedNormal, ckCheckCheckedHot)), // csCheckedPressed ((ckCheckCheckedDisabled, ckCheckCheckedDisabled), (ckCheckCheckedPressed, ckCheckCheckedPressed)), // csMixedNormal ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ), // ctRadioButton ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckRadioUncheckedDisabled, ckRadioUncheckedDisabled), (ckRadioUncheckedNormal, ckRadioUncheckedHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckRadioUncheckedDisabled, ckRadioUncheckedDisabled), (ckRadioUncheckedPressed, ckRadioUncheckedPressed)), // csCheckedNormal ((ckRadioCheckedDisabled, ckRadioCheckedDisabled), (ckRadioCheckedNormal, ckRadioCheckedHot)), // csCheckedPressed ((ckRadioCheckedDisabled, ckRadioCheckedDisabled), (ckRadioCheckedPressed, ckRadioCheckedPressed)), // csMixedNormal (should never appear with ctRadioButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed (should never appear with ctRadioButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ), // ctButton ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckButtonDisabled, ckButtonDisabled), (ckButtonNormal, ckButtonHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckButtonDisabled, ckButtonDisabled), (ckButtonPressed, ckButtonPressed)), // csCheckedNormal ((ckButtonDisabled, ckButtonDisabled), (ckButtonNormal, ckButtonHot)), // csCheckedPressed ((ckButtonDisabled, ckButtonDisabled), (ckButtonPressed, ckButtonPressed)), // csMixedNormal (should never appear with ctButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed (should never appear with ctButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ) ); var AType: TCheckType; begin if not Assigned(Node) then Result := CheckStateToCheckImage[ImgCheckType, ImgCheckState, ImgEnabled, False] else if Node.CheckType = ctNone then Result := -1 else begin AType := Node.CheckType; if AType = ctTriStateCheckBox then AType := ctCheckBox; Result := CheckStateToCheckImage[AType, Node.CheckState, not (vsDisabled in Node.States) and Enabled, Node = FCurrentHotNode]; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CheckImageListNeeded; begin if FCheckImages <> nil then Exit; if FCheckImageKind = ckCustom then FCheckImages := FCustomCheckImages else begin FCheckImages := TBitmap.Create; FCheckImages.Transparent := True; FCheckImages.LoadFromLazarusResource(CheckImagesStrings[FCheckImageKind]); end; end; function TBaseVirtualTree.GetClientRect: TRect; begin Result := inherited; //lclheader if HandleAllocated and (hoVisible in FHeader.FOptions) then Dec(Result.Bottom, FHeader.Height); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetColumnClass: TVirtualTreeColumnClass; begin Result := TVirtualTreeColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHeaderClass: TVTHeaderClass; begin Result := TVTHeader; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHintWindowClass: THintWindowClass; // Returns the default hint window class used for the tree. Descendants can override it to use their own classes. begin Result := TVirtualTreeHintWindow; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetImageIndex(var Info: TVTPaintInfo; Kind: TVTImageKind; InfoIndex: TVTImageInfoIndex; DefaultImages: TCustomImageList); // Retrieves the image index and an eventual customized image list for drawing. var CustomImages: TCustomImageList; begin with Info do begin ImageInfo[InfoIndex].Index := -1; ImageInfo[InfoIndex].Ghosted := False; CustomImages := DoGetImageIndex(Node, Kind, Column, ImageInfo[InfoIndex].Ghosted, ImageInfo[InfoIndex].Index); if Assigned(CustomImages) then ImageInfo[InfoIndex].Images := CustomImages else ImageInfo[InfoIndex].Images := DefaultImages; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMaxRightExtend: Cardinal; // Determines the maximum with of the currently visible part of the tree, depending on the length // of the node texts. This method is used for determining the horizontal scroll range if no columns are used. var Node, NextNode: PVirtualNode; TopPosition: Integer; NodeLeft, CurrentWidth: Integer; WithCheck: Boolean; CheckOffset: Integer; begin Node := InternalGetNodeAt(0, 0, True, TopPosition); Result := 0; if toShowRoot in FOptions.FPaintOptions then NodeLeft := (GetNodeLevel(Node) + 1) * FIndent else NodeLeft := GetNodeLevel(Node) * FIndent; if Assigned(FStateImages) then Inc(NodeLeft, FStateImages.Width + 2); if Assigned(FImages) then Inc(NodeLeft, FImages.Width + 2); WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; while Assigned(Node) do begin if not (vsInitialized in Node.States) then InitNode(Node); if WithCheck and (Node.CheckType <> ctNone) then Inc(NodeLeft, CheckOffset); CurrentWidth := DoGetNodeWidth(Node, NoColumn); if Integer(Result) < (NodeLeft + CurrentWidth) then Result := NodeLeft + CurrentWidth; Inc(TopPosition, NodeHeight[Node]); //lclheader: Height -> ClientHeight if TopPosition > ClientHeight then Break; if WithCheck and (Node.CheckType <> ctNone) then Dec(NodeLeft, CheckOffset); // Get next visible node and update left node position. NextNode := GetNextVisible(Node, True); if NextNode = nil then Break; Inc(NodeLeft, CountLevelDifference(Node, NextNode) * Integer(FIndent)); Node := NextNode; end; Inc(Result, FMargin); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetNativeClipboardFormats(var Formats: TFormatEtcArray); // Returns the supported clipboard formats of the tree. begin InternalClipboardFormats.EnumerateFormats(TVirtualTreeClass(ClassType), Formats, FClipboardFormats); // Ask application/descendants for self defined formats. DoGetUserClipboardFormats(Formats); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOperationCanceled; begin Result := FOperationCanceled and (FOperationCount > 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOptionsClass: TTreeOptionsClass; begin Result := TCustomVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- {$i olemethods.inc} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleHotTrack(X, Y: Integer); // Updates the current "hot" node. var HitInfo: THitInfo; CheckPositions: THitPositions; ButtonIsHit, DoInvalidate: Boolean; begin DoInvalidate := False; // Get information about the hit. GetHitTestInfoAt(X, Y, True, HitInfo); // Only make the new node being "hot" if its label is hit or full row selection is enabled. CheckPositions := [hiOnItemLabel, hiOnItemCheckbox]; // If running under Windows Vista using the explorer theme hitting the buttons makes the node hot, too. if (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then Include(CheckPositions, hiOnItemButtonExact); if (CheckPositions * HitInfo.HitPositions = []) and not (toFullRowSelect in FOptions.FSelectionOptions) then HitInfo.HitNode := nil; if (HitInfo.HitNode <> FCurrentHotNode) or (HitInfo.HitColumn <> FCurrentHotColumn) then begin DoInvalidate := (toHotTrack in FOptions.PaintOptions) or (toCheckSupport in FOptions.FMiscOptions); DoHotChange(FCurrentHotNode, HitInfo.HitNode); if Assigned(FCurrentHotNode) and DoInvalidate then InvalidateNode(FCurrentHotNode); FCurrentHotNode := HitInfo.HitNode; FCurrentHotColumn := HitInfo.HitColumn; end; ButtonIsHit := (hiOnItemButtonExact in HitInfo.HitPositions) and (toHotTrack in FOptions.FPaintOptions); if Assigned(FCurrentHotNode) and ((FHotNodeButtonHit <> ButtonIsHit) or DoInvalidate) then begin FHotNodeButtonHit := ButtonIsHit and (toHotTrack in FOptions.FPaintOptions); InvalidateNode(FCurrentHotNode); end else if not Assigned(FCurrentHotNode) then FHotNodeButtonHit := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleIncrementalSearch(CharCode: Word); var Run, Stop: PVirtualNode; GetNextNode: TGetNextNodeProc; NewSearchText: String; SingleLetter, PreviousSearch: Boolean; // True if VK_BACK was sent. SearchDirection: TVTSearchDirection; //--------------- local functions ------------------------------------------- procedure SetupNavigation; // If the search buffer is empty then we start searching with the next node after the last one, otherwise // we continue with the last one. Node navigation function is set up too here, to avoid frequent checks. var FindNextNode: Boolean; begin FindNextNode := (Length(FSearchBuffer) = 0) or (Run = nil) or SingleLetter or PreviousSearch; case FIncrementalSearch of isVisibleOnly: if SearchDirection = sdForward then begin GetNextNode := GetNextVisible; if FindNextNode then begin if Run = nil then Run := GetFirstVisible(nil, True) else begin Run := GetNextVisible(Run, True); // Do wrap around. if Run = nil then Run := GetFirstVisible(nil, True); end; end; end else begin GetNextNode := GetPreviousVisible; if FindNextNode then begin if Run = nil then Run := GetLastVisible(nil, True) else begin Run := GetPreviousVisible(Run, True); // Do wrap around. if Run = nil then Run := GetLastVisible(nil, True); end; end; end; isInitializedOnly: if SearchDirection = sdForward then begin GetNextNode := GetNextNoInit; if FindNextNode then begin if Run = nil then Run := GetFirstNoInit else begin Run := GetNextNoInit(Run); // Do wrap around. if Run = nil then Run := GetFirstNoInit; end; end; end else begin GetNextNode := GetPreviousNoInit; if FindNextNode then begin if Run = nil then Run := GetLastNoInit else begin Run := GetPreviousNoInit(Run); // Do wrap around. if Run = nil then Run := GetLastNoInit; end; end; end; else // isAll if SearchDirection = sdForward then begin GetNextNode := GetNext; if FindNextNode then begin if Run = nil then Run := GetFirst else begin Run := GetNext(Run); // Do wrap around. if Run = nil then Run := GetFirst; end; end; end else begin GetNextNode := GetPrevious; if FindNextNode then begin if Run = nil then Run := GetLast else begin Run := GetPrevious(Run); // Do wrap around. if Run = nil then Run := GetLast; end; end; end; end; end; //--------------------------------------------------------------------------- //todo: reimplement {$ifndef INCOMPLETE_WINAPI} function CodePageFromLocale(Language: DWord): Integer; // Determines the code page for a given locale. // Unfortunately there is no easier way than this, currently. var Buf: array[0..6] of Char; begin GetLocaleInfo(Language, LOCALE_IDEFAULTANSICODEPAGE, Buf, 6); Result := StrToIntDef(Buf, GetACP); end; //--------------------------------------------------------------------------- function KeyUnicode(C: Char): WideChar; // Converts the given character into its corresponding Unicode character // depending on the active keyboard layout. begin MultiByteToWideChar(CodePageFromLocale(GetKeyboardLayout(0) and $FFFF), MB_USEGLYPHCHARS, @C, 1, @Result, 1); end; {$endif} //--------------- end local functions --------------------------------------- var FoundMatch: Boolean; NewChar: WideChar; begin //todo: handle correctly unicode char after WideString -> String conversion KillTimer(Handle, SearchTimer); if FIncrementalSearch <> isNone then begin if CharCode <> 0 then begin DoStateChange([tsIncrementalSearching]); // Convert the given virtual key code into a Unicode character based on the current locale. //todo: reimplement {$ifndef INCOMPLETE_WINAPI} NewChar := KeyUnicode(Char(CharCode)); {$else} NewChar := Char(CharCode); {$endif} PreviousSearch := NewChar = WideChar(VK_BACK); // We cannot do a search with an empty search buffer. if not PreviousSearch or (FSearchBuffer <> '') then begin // Determine which method to use to advance nodes and the start node to search from. case FSearchStart of ssAlwaysStartOver: Run := nil; ssFocusedNode: Run := FFocusedNode; else // ssLastHit Run := FLastSearchNode; end; // Make sure the start node corresponds to the search criterion. if Assigned(Run) then begin case FIncrementalSearch of isInitializedOnly: if not (vsInitialized in Run.States) then Run := nil; isVisibleOnly: if not FullyVisible[Run] then Run := nil; end; end; Stop := Run; // VK_BACK temporarily changes search direction to opposite mode. if PreviousSearch then begin if SearchDirection = sdBackward then SearchDirection := sdForward else SearchDirection := sdBackward end else SearchDirection := FSearchDirection; // The "single letter mode" is used to advance quickly from node to node when pressing the same key several times. SingleLetter := (Length(FSearchBuffer) = 1) and not PreviousSearch and (FSearchBuffer[1] = NewChar); // However if the current hit (if there is one) would fit also with a repeated character then // don't use single letter mode. if SingleLetter and (DoIncrementalSearch(Run, FSearchBuffer + NewChar) = 0) then SingleLetter := False; SetupNavigation; FoundMatch := False; if Assigned(Run) then begin if SingleLetter then NewSearchText := FSearchBuffer else if PreviousSearch then begin SetLength(FSearchBuffer, Length(FSearchBuffer) - 1); NewSearchText := FSearchBuffer; end else NewSearchText := FSearchBuffer + NewChar; repeat if DoIncrementalSearch(Run, NewSearchText) = 0 then begin FoundMatch := True; Break; end; // Advance to next node if we have not found a match. Run := GetNextNode(Run); // Do wrap around start or end of tree. if (Run <> Stop) and (Run = nil) then SetupNavigation; until Run = Stop; end; if FoundMatch then begin ClearSelection; FSearchBuffer := NewSearchText; FLastSearchNode := Run; FocusedNode := Run; Selected[Run] := True; FLastSearchNode := Run; end else // Play an acoustic signal if nothing could be found but don't beep if only the currently // focused node matches. if Assigned(Run) and (DoIncrementalSearch(Run, NewSearchText) <> 0) then Beep; end; end; // Restart search timeout interval. SetTimer(Handle, SearchTimer, FSearchTimeout, nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseDblClick(var Message: TLMMouse; const HitInfo: THitInfo); var NewCheckState: TCheckState; Node: PVirtualNode; MayEdit: Boolean; begin MayEdit := not (tsEditing in FStates) and (toEditOnDblClick in FOptions.FMiscOptions); if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin if HitInfo.HitColumn = FHeader.FColumns.FClickIndex then DoColumnDblClick(HitInfo.HitColumn, KeysToShiftState(Message.Keys)); Node := nil; if (hiOnItem in HitInfo.HitPositions) and (hitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].FOptions) then begin if hiUpperSplitter in HitInfo.HitPositions then Node := GetPreviousVisible(HitInfo.HitNode, True) else if hiLowerSplitter in HitInfo.HitPositions then Node := HitInfo.HitNode end; if Assigned(Node) and (Node <> FRoot) and (toNodeHeightDblClickResize in FOptions.FMiscOptions) then begin if DoNodeHeightDblClickResize(Node, HitInfo.HitColumn, KeysToShiftState(Message.Keys), Point(Message.XPos, Message.YPos)) then begin SetNodeHeight(Node, FDefaultNodeHeight); UpdateWindow(Handle); MayEdit := False; end; end else if hiOnItemCheckBox in HitInfo.HitPositions then begin if (FStates * [tsMouseCheckPending, tsKeyCheckPending] = []) and not (vsDisabled in HitInfo.HitNode.States) then begin with HitInfo.HitNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(HitInfo.HitNode, NewCheckState) then begin DoStateChange([tsMouseCheckPending]); FCheckNode := HitInfo.HitNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; InvalidateNode(HitInfo.HitNode); MayEdit := False; end; end; end else begin if hiOnItemButton in HitInfo.HitPositions then begin ToggleNode(HitInfo.HitNode); MayEdit := False; end else begin if toToggleOnDblClick in FOptions.FMiscOptions then begin if ((([hiOnItemButton, hiOnItemLabel, hiOnNormalIcon, hiOnStateIcon] * HitInfo.HitPositions) <> []) or ((toFullRowSelect in FOptions.FSelectionOptions) and Assigned(HitInfo.HitNode))) then begin ToggleNode(HitInfo.HitNode); MayEdit := False; end; end; end; end; end; if MayEdit and Assigned(FFocusedNode) and (FFocusedNode = HitInfo.HitNode) and (FFocusedColumn = HitInfo.HitColumn) and CanEdit(FFocusedNode, HitInfo.HitColumn) then begin DoStateChange([tsEditPending]); FEditColumn := FFocusedcolumn; SetTimer(Handle, EditTimer, FEditDelay, nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseDown(var Message: TLMMouse; var HitInfo: THitInfo); // centralized mouse button down handling var LastFocused: PVirtualNode; Column: TColumnIndex; ShiftState: TShiftState; // helper variables to shorten boolean equations/expressions AutoDrag, // automatic (or allowed) drag start IsHit, // the node's caption or images are hit IsCellHit, // for grid extension or full row select (but not check box, button) IsAnyHit, // either IsHit or IsCellHit IsHeightTracking, // height tracking MultiSelect, // multiselection is enabled ShiftEmpty, // ShiftState = [] NodeSelected: Boolean; // the new node (if any) is selected NewColumn: Boolean; // column changed NewNode: Boolean; // Node changed. NeedChange: Boolean; // change event is required for selection change CanClear: Boolean; NewCheckState: TCheckState; AltPressed: Boolean; // Pressing the Alt key enables special processing for selection. FullRowDrag: Boolean; // Start dragging anywhere within a node's bound. NodeRect: TRect; FocusCanChange: Boolean; begin if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin StopWheelPanning; Exit; end; if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin // Focus change. Don't use the SetFocus method as this does not work for MDI windows. if not Focused and CanFocus then begin LCLIntf.SetFocus(Handle); // Repeat the hit test as an OnExit event might got triggered that could modify the tree. GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); end; // Keep clicked column in case the application needs it. FHeader.FColumns.FClickIndex := HitInfo.HitColumn; // Change column only if we have hit the node label. if (hiOnItemLabel in HitInfo.HitPositions) or (toFullRowSelect in FOptions.FSelectionOptions) or (toGridExtensions in FOptions.FMiscOptions) then begin NewColumn := FFocusedColumn <> HitInfo.HitColumn; if toExtendedFocus in FOptions.FSelectionOptions then Column := HitInfo.HitColumn else Column := FHeader.MainColumn; end else begin NewColumn := False; Column := FFocusedColumn; end; if NewColumn and (not FHeader.AllowFocus(Column)) then begin NewColumn := False; Column := FFocusedColumn; end; NewNode := FFocusedNode <> HitInfo.HitNode; // Translate keys and filter out shift and control key. ShiftState := KeysToShiftState(Message.Keys) * [ssShift, ssCtrlOS, ssAlt]; if ssAlt in ShiftState then begin AltPressed := True; // Remove the Alt key from the shift state. It is not meaningful there. Exclude(ShiftState, ssAlt); end else AltPressed := False; // Various combinations determine what states the tree enters now. // We initialize shorthand variables to avoid the following expressions getting too large // and to avoid repeative expensive checks. IsHit := not AltPressed and not (toSimpleDrawSelection in FOptions.FSelectionOptions) and ((hiOnItemLabel in HitInfo.HitPositions) or (hiOnNormalIcon in HitInfo.HitPositions)); IsCellHit := not AltPressed and not IsHit and Assigned(HitInfo.HitNode) and ([hiOnItemButton, hiOnItemCheckBox] * HitInfo.HitPositions = []) and ((toFullRowSelect in FOptions.FSelectionOptions) or ((toGridExtensions in FOptions.FMiscOptions) and (HitInfo.HitColumn > NoColumn))); IsAnyHit := IsHit or IsCellHit; MultiSelect := toMultiSelect in FOptions.FSelectionOptions; ShiftEmpty := ShiftState = []; NodeSelected := IsAnyHit and (vsSelected in HitInfo.HitNode.States); FullRowDrag := toFullRowDrag in FOptions.FMiscOptions; IsHeightTracking := (Message.Msg = LM_LBUTTONDOWN) and (toNodeHeightResize in FOptions.FMiscOptions) and (hiOnItem in HitInfo.HitPositions) and ([hiUpperSplitter, hiLowerSplitter] * HitInfo.HitPositions <> []) and ((HitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].Options)); // Dragging might be started in the inherited handler manually (which is discouraged for stability reasons) // the test for manual mode is done below (after the focused node is set). AutoDrag := ((DragMode = dmAutomatic) or Dragging) and (not IsCellHit or FullRowDrag); // Query the application to learn if dragging may start now (if set to dmManual). if Assigned(HitInfo.HitNode) and not AutoDrag and (DragMode = dmManual) then AutoDrag := DoBeforeDrag(HitInfo.HitNode, Column) and (not IsCellHit or FullRowDrag); // handle node height tracking if IsHeightTracking then begin if hiUpperSplitter in HitInfo.HitPositions then FHeightTrackNode := GetPreviousVisible(HitInfo.HitNode, True) else FHeightTrackNode := HitInfo.HitNode; if Assigned(FHeightTrackNode) and (FHeightTrackNode <> FRoot) then begin FHeightTrackColumn := HitInfo.HitColumn; NodeRect := GetDisplayRect(FHeightTrackNode, FHeightTrackColumn, False); FHeightTrackPoint := Point(NodeRect.Left, NodeRect.Top); DoStateChange([tsNodeHeightTrackPending]); Exit; end; end; // handle button clicks if (hiOnItemButton in HitInfo.HitPositions) and (vsHasChildren in HitInfo.HitNode.States) then begin ToggleNode(HitInfo.HitNode); Exit; end; // check event if hiOnItemCheckBox in HitInfo.HitPositions then begin if (FStates * [tsMouseCheckPending, tsKeyCheckPending] = []) and not (vsDisabled in HitInfo.HitNode.States) then begin with HitInfo.HitNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(HitInfo.HitNode, NewCheckState) then begin DoStateChange([tsMouseCheckPending]); FCheckNode := HitInfo.HitNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; InvalidateNode(HitInfo.HitNode); end; end; Exit; end; // Keep this node's level in case we need it for constraint selection. if (FRoot.ChildCount > 0) and ShiftEmpty or (FSelectionCount = 0) then if Assigned(HitInfo.HitNode) then FLastSelectionLevel := GetNodeLevel(HitInfo.HitNode) else FLastSelectionLevel := GetNodeLevel(GetLastVisibleNoInit(nil, True)); // pending clearance if MultiSelect and ShiftEmpty and not (hiOnItemCheckbox in HitInfo.HitPositions) and IsAnyHit and AutoDrag and NodeSelected and not FSelectionLocked then DoStateChange([tsClearPending]); // immediate clearance // Determine for the right mouse button if there is a popup menu. In this case and if drag'n drop is pending // the current selection has to stay as it is. with HitInfo, Message do CanClear := not AutoDrag and (not (tsRightButtonDown in FStates) or not HasPopupMenu(HitNode, HitColumn, Point(XPos, YPos))); //lcl FocusCanChange := DoFocusChanging(FFocusedNode, HitInfo.HitNode, FFocusedColumn, Column); if not FSelectionLocked and FocusCanChange and ((not (IsAnyHit or FullRowDrag) and MultiSelect and ShiftEmpty) or (IsAnyHit and (not NodeSelected or (NodeSelected and CanClear)) and (ShiftEmpty or not MultiSelect))) then begin Assert(not (tsClearPending in FStates), 'Pending and direct clearance are mutual exclusive!'); // If the currently hit node was already selected then we have to reselect it again after clearing the current // selection, but without a change event if it is the only selected node. // The same applies if the Alt key is pressed, which allows to start drawing the selection rectangle also // on node captions and images. Here the previous selection state does not matter, though. if NodeSelected or (AltPressed and Assigned(HitInfo.HitNode) and (HitInfo.HitColumn = FHeader.MainColumn)) then begin NeedChange := FSelectionCount > 1; InternalClearSelection; InternalAddToSelection(HitInfo.HitNode, True); if NeedChange then begin Invalidate; Change(nil); end; end else ClearSelection; end; // pending node edit if Focused and ((hiOnItemLabel in HitInfo.HitPositions) or ((toGridExtensions in FOptions.FMiscOptions) and (hiOnItem in HitInfo.HitPositions))) and NodeSelected and not NewColumn and ShiftEmpty then DoStateChange([tsEditPending]); // User starts a selection with a selection rectangle. if not (toDisableDrawSelection in FOptions.FSelectionOptions) and not (IsHit or FullRowDrag) and MultiSelect then begin SetCapture(Handle); DoStateChange([tsDrawSelPending]); FDrawSelShiftState := ShiftState; FNewSelRect := Rect(Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY, Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY); //lclheader if hoVisible in FHeader.Options then OffsetRect(FNewSelRect, 0, -FHeader.Height); {$ifdef DEBUG_VTV}Logger.Send([lcSelection],'FNewSelRect', FNewSelRect);{$endif} FLastSelRect := Rect(0, 0, 0, 0); if not IsCellHit then Exit; end; // Keep current mouse position. FLastClickPos := Point(Message.XPos, Message.YPos); // Handle selection and node focus change. if IsAnyHit and FocusCanChange then begin if NewColumn then begin InvalidateColumn(FFocusedColumn); InvalidateColumn(Column); FFocusedColumn := Column; end; if DragKind = dkDock then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; // Get the currently focused node to make multiple multi-selection blocks possible. LastFocused := FFocusedNode; if NewNode then DoFocusNode(HitInfo.HitNode, False); if MultiSelect and not ShiftEmpty then HandleClickSelection(LastFocused, HitInfo.HitNode, ShiftState, AutoDrag) else begin if ShiftEmpty then FRangeAnchor := HitInfo.HitNode; // If the hit node is not yet selected then do it now. if not NodeSelected then AddToSelection(HitInfo.HitNode); end; if NewNode or NewColumn then begin ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; // Drag'n drop initiation // If we lost focus in the interim the button states would be cleared in WM_KILLFOCUS. if AutoDrag and IsAnyHit and (FStates * [tsLeftButtonDown, tsRightButtonDown, tsMiddleButtonDown] <> []) then BeginDrag(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseUp(Keys: PtrUInt; const HitInfo: THitInfo); // Counterpart to the mouse down handler. var ReselectFocusedNode: Boolean; begin ReleaseCapture; if not (tsVCLDragPending in FStates) then begin // reset pending or persistent states if IsMouseSelecting then begin DoStateChange([], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection]); Invalidate; end; if tsClearPending in FStates then begin ReselectFocusedNode := Assigned(FFocusedNode) and (vsSelected in FFocusedNode.States); ClearSelection; if ReselectFocusedNode then AddToSelection(FFocusedNode); end; if (tsToggleFocusedSelection in FStates) and (HitInfo.HitNode = FFocusedNode) then begin if vsSelected in HitInfo.HitNode.States then RemoveFromSelection(HitInfo.HitNode) else AddToSelection(HitInfo.HitNode); InvalidateNode(HitInfo.HitNode); end; DoStateChange([], [tsOLEDragPending, tsOLEDragging, tsClearPending, tsDrawSelPending, tsToggleFocusedSelection, tsScrollPending, tsScrolling]); KillTimer(Handle, ScrollTimer); if tsMouseCheckPending in FStates then begin DoStateChange([], [tsMouseCheckPending]); // Is the mouse still over the same node? if (HitInfo.HitNode = FCheckNode) and (hiOnItem in HitInfo.HitPositions) then DoCheckClick(FCheckNode, FPendingCheckState) else FCheckNode.CheckState := UnpressedState[FCheckNode.CheckState]; InvalidateNode(FCheckNode); FCheckNode := nil; end; if (FHeader.FColumns.FClickIndex > NoColumn) and (FHeader.FColumns.FClickIndex = HitInfo.HitColumn) then DoColumnClick(HitInfo.HitColumn, KeysToShiftState(Keys)); // handle a pending edit event if tsEditPending in FStates then begin // Is the mouse still over the same node? if (HitInfo.HitNode = FFocusedNode) and (hiOnItem in HitInfo.HitPositions) and CanEdit(FFocusedNode, HitInfo.HitColumn) and (toEditOnClick in FOptions.FMiscOptions) then begin FEditColumn := FFocusedColumn; SetTimer(Handle, EditTimer, FEditDelay, nil); end else DoStateChange([], [tsEditPending]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasImage(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): Boolean; // Determines whether the given node has got an image of the given kind in the given column. // Returns True if so, otherwise False. var Ghosted: Boolean; Index: Integer; begin Index := -1; Ghosted := False; DoGetImageIndex(Node, Kind, Column, Ghosted, Index); Result := Index > -1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Pos: TPoint): Boolean; // Determines whether the tree got a popup menu, either in its PopupMenu property, via the OnGetPopupMenu event or // through inheritance. The latter case must be checked by the descendant which must override this method. begin Result := Assigned(PopupMenu) or Assigned(DoGetPopupMenu(Node, Column, Pos)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitChildren(Node: PVirtualNode); // Initiates the initialization of the child number of the given node. var Count: Cardinal; begin if Assigned(Node) and (Node <> FRoot) and (vsHasChildren in Node.States) then begin Count := Node.ChildCount; DoInitChildren(Node, Count); if Count = 0 then begin // Remove any child node which is already there. DeleteChildren(Node); Exclude(Node.States, vsHasChildren); end else SetChildCount(Node, Count); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitNode(Node: PVirtualNode); // Initiates the initialization of the given node to allow the application to load needed data for it. var InitStates: TVirtualNodeInitStates; begin with Node^ do begin Include(States, vsInitialized); InitStates := []; if Parent = FRoot then DoInitNode(nil, Node, InitStates) else DoInitNode(Parent, Node, InitStates); if ivsDisabled in InitStates then Include(States, vsDisabled); if ivsHasChildren in InitStates then Include(States, vsHasChildren); if ivsSelected in InitStates then begin FSingletonNodeArray[0] := Node; InternalAddToSelection(FSingletonNodeArray, 1, False); end; if ivsMultiline in InitStates then Include(States, vsMultiline); // Expanded may already be set (when called from ReinitNode) or be set in DoInitNode, allow both. if (vsExpanded in Node.States) xor (ivsExpanded in InitStates) then begin // Expand node if not yet done (this will automatically initialize child nodes). if ivsExpanded in InitStates then ToggleNode(Node) else // If the node already was expanded then explicitly trigger child initialization. if vsHasChildren in Node.States then InitChildren(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalAddFromStream(Stream: TStream; Version: Integer; Node: PVirtualNode); // Loads all details for Node (including its children) from the given stream. // Because the new nodes might be selected this method also fixes the selection array. var Stop: PVirtualNode; Index: Integer; LastTotalHeight: Cardinal; WasFullyVisible: Boolean; begin Assert(Node <> FRoot, 'The root node cannot be loaded from stream.'); // Keep the current total height value of Node as it has already been applied // but might change in the load and fixup code. We have to adjust that afterwards. LastTotalHeight := Node.TotalHeight; WasFullyVisible := FullyVisible[Node]; // Read in the new nodes. ReadNode(Stream, Version, Node); // One time update of node-internal states and the global visibility counter. // This is located here to ease and speed up the loading process. FixupTotalCount(Node); AdjustTotalCount(Node.Parent, Node.TotalCount - 1, True); // -1 because Node itself was already set. FixupTotalHeight(Node); AdjustTotalHeight(Node.Parent, Node.TotalHeight - LastTotalHeight, True); // New nodes are always visible, so the visible node count has been increased already. // If Node is now invisible we have to take back this increment and don't need to add any visible child node. if not FullyVisible[Node] then begin if WasFullyVisible then Dec(FVisibleCount); end else // It can never happen that the node is now fully visible but was not before as this would require // that the visibility state of one of its parents has changed, which cannot happen during loading. Inc(FVisibleCount, CountVisibleChildren(Node)); // Fix selection array. ClearTempCache; if Node = FRoot then Stop := nil else Stop := Node.NextSibling; if toMultiSelect in FOptions.FSelectionOptions then begin // Add all nodes which were selected before to the current selection (unless they are already there). while Node <> Stop do begin if (vsSelected in Node.States) and not FindNodeInSelection(Node, Index, 0, High(FSelection)) then InternalCacheNode(Node); Node := GetNextNoInit(Node); end; if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount, True); ClearTempCache; end else // No further selected nodes allowed so delete the corresponding flag in all new nodes. while Node <> Stop do begin Exclude(Node.States, vsSelected); Node := GetNextNoInit(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalAddToSelection(Node: PVirtualNode; ForceInsert: Boolean): Boolean; begin Assert(Assigned(Node), 'Node must not be nil!'); FSingletonNodeArray[0] := Node; Result := InternalAddToSelection(FSingletonNodeArray, 1, ForceInsert); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalAddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean): Boolean; // Internal version of method AddToSelection which does not trigger OnChange events var I, J: Integer; CurrentEnd: Integer; Constrained, SiblingConstrained: Boolean; begin // The idea behind this code is to use a kind of reverse merge sort. QuickSort is quite fast // and would do the job here too but has a serious problem with already sorted lists like FSelection. // 1) Remove already selected items, mark all other as being selected. if ForceInsert then begin for I := 0 to NewLength - 1 do Include(NewItems[I].States, vsSelected); end else begin Constrained := toLevelSelectConstraint in FOptions.FSelectionOptions; if Constrained and (FLastSelectionLevel = -1) then FLastSelectionLevel := GetNodeLevel(NewItems[0]); SiblingConstrained := toSiblingSelectConstraint in FOptions.FSelectionOptions; if SiblingConstrained and (FRangeAnchor = nil) then FRangeAnchor := NewItems[0]; for I := 0 to NewLength - 1 do if ([vsSelected, vsDisabled] * NewItems[I].States <> []) or (Constrained and (Cardinal(FLastSelectionLevel) <> GetNodeLevel(NewItems[I]))) or (SiblingConstrained and (FRangeAnchor.Parent <> NewItems[I].Parent)) then Inc(PtrUInt(NewItems[I])) else Include(NewItems[I].States, vsSelected); end; I := PackArray(NewItems, NewLength); if I > -1 then NewLength := I; Result := NewLength > 0; if Result then begin // 2) Sort the new item list so we can easily traverse it. if NewLength > 1 then QuickSort(NewItems, 0, NewLength - 1); // 3) Make room in FSelection for the new items. if FSelectionCount + NewLength >= Length(FSelection) then SetLength(FSelection, FSelectionCount + NewLength); // 4) Merge in new items J := NewLength - 1; CurrentEnd := FSelectionCount - 1; while J >= 0 do begin // First insert all new entries which are greater than the greatest entry in the old list. // If the current end marker is < 0 then there's nothing more to move in the selection // array and only the remaining new items must be inserted. if CurrentEnd >= 0 then begin while (J >= 0) and (NewItems[J] > FSelection[CurrentEnd]) do begin FSelection[CurrentEnd + J + 1] := NewItems[J]; Dec(J); end; // early out if nothing more needs to be copied if J < 0 then Break; end else begin // insert remaining new entries at position 0 Move(NewItems[0], FSelection[0], (J + 1) * SizeOf(Pointer)); // nothing more to do so exit main loop Break; end; // find the last entry in the remaining selection list which is smaller then the largest // entry in the remaining new items list FindNodeInSelection(NewItems[J], I, 0, CurrentEnd); Dec(I); // move all entries which are greater than the greatest entry in the new items list up // so the remaining gap travels down to where new items must be inserted Move(FSelection[I + 1], FSelection[I + J + 2], (CurrentEnd - I) * SizeOf(Pointer)); CurrentEnd := I; end; Inc(FSelectionCount, NewLength); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalCacheNode(Node: PVirtualNode); // Adds the given node to the temporary node cache (used when collecting possibly large amounts of nodes). var Len: Cardinal; begin Len := Length(FTempNodeCache); if FTempNodeCount = Len then begin if Len < 100 then Len := 100 else Len := Len + Len div 10; SetLength(FTempNodeCache, Len); end; FTempNodeCache[FTempNodeCount] := Node; Inc(FTempNodeCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalClearSelection; var Count: Integer; begin // It is possible that there are invalid node references in the selection array // if the tree update is locked and changes in the structure were made. // Handle this potentially dangerous situation by packing the selection array explicitely. if FUpdateCount > 0 then begin Count := PackArray(FSelection, FSelectionCount); if Count > -1 then begin FSelectionCount := Count; SetLength(FSelection, FSelectionCount); end; end; while FSelectionCount > 0 do begin Dec(FSelectionCount); Exclude(FSelection[FSelectionCount].States, vsSelected); end; ResetRangeAnchor; FSelection := nil; DoStateChange([], [tsClearPending]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalConnectNode(Node, Destination: PVirtualNode; Target: TBaseVirtualTree; Mode: TVTNodeAttachMode); // Connects Node with Destination depending on Mode. // No error checking takes place. Node as well as Destination must be valid. Node must never be a root node and // Destination must not be a root node if Mode is amInsertBefore or amInsertAfter. var Run: PVirtualNode; begin // Keep in mind that the destination node might belong to another tree. with Target do begin case Mode of amInsertBefore: begin Node.PrevSibling := Destination.PrevSibling; Destination.PrevSibling := Node; Node.NextSibling := Destination; Node.Parent := Destination.Parent; Node.Index := Destination.Index; if Node.PrevSibling = nil then Node.Parent.FirstChild := Node else Node.PrevSibling.NextSibling := Node; // reindex all following nodes Run := Destination; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.Parent.ChildCount); Include(Destination.Parent.States, vsHasChildren); AdjustTotalCount(Destination.Parent, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination.Parent, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amInsertAfter: begin Node.NextSibling := Destination.NextSibling; Destination.NextSibling := Node; Node.PrevSibling := Destination; Node.Parent := Destination.Parent; if Node.NextSibling = nil then Node.Parent.LastChild := Node else Node.NextSibling.PrevSibling := Node; Node.Index := Destination.Index; // reindex all following nodes Run := Node; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.Parent.ChildCount); Include(Destination.Parent.States, vsHasChildren); AdjustTotalCount(Destination.Parent, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination.Parent, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amAddChildFirst: begin if Assigned(Destination.FirstChild) then begin // If there's a first child then there must also be a last child. Destination.FirstChild.PrevSibling := Node; Node.NextSibling := Destination.FirstChild; Destination.FirstChild := Node; end else begin // First child node at this location. Destination.FirstChild := Node; Destination.LastChild := Node; Node.NextSibling := nil; end; Node.PrevSibling := nil; Node.Parent := Destination; Node.Index := 0; // reindex all following nodes Run := Node.NextSibling; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.ChildCount); Include(Destination.States, vsHasChildren); AdjustTotalCount(Destination, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amAddChildLast: begin if Assigned(Destination.LastChild) then begin // If there's a last child then there must also be a first child. Destination.LastChild.NextSibling := Node; Node.PrevSibling := Destination.LastChild; Destination.LastChild := Node; end else begin // first child node at this location Destination.FirstChild := Node; Destination.LastChild := Node; Node.PrevSibling := nil; end; Node.NextSibling := nil; Node.Parent := Destination; if Assigned(Node.PrevSibling) then Node.Index := Node.PrevSibling.Index + 1 else Node.Index := 0; Inc(Destination.ChildCount); Include(Destination.States, vsHasChildren); AdjustTotalCount(Destination, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; else // amNoWhere: do nothing end; // Remove temporary states. Node.States := Node.States - [vsChecking, vsCutOrCopy, vsDeleting, vsClearing]; // Update the hidden children flag of the parent. if (Mode <> amNoWhere) and (Node.Parent <> FRoot) then begin // If we have added a visible node then simply remove the all-children-hidden flag. if vsVisible in Node.States then Exclude(Node.Parent.States, vsAllChildrenHidden) else // If we have added an invisible node and this is the only child node then // make sure the all-children-hidden flag is in a determined state. // If there were child nodes before then no action is needed. if Node.Parent.ChildCount = 1 then Include(Node.Parent.States, vsAllChildrenHidden); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalData(Node: PVirtualNode): Pointer; begin Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalDisconnectNode(Node: PVirtualNode; KeepFocus: Boolean; Reindex: Boolean = True); // Disconnects the given node from its parent and siblings. The node's pointer are not reset so they can still be used // after return from this method (probably a very short time only!). // If KeepFocus is True then the focused node is not reset. This is useful if the given node is reconnected to the tree // immediately after return of this method and should stay being the focused node if it was it before. // Note: Node must not be nil or the root node. var Parent, Run: PVirtualNode; Index: Integer; AdjustHeight: Boolean; begin Assert(Assigned(Node) and (Node <> FRoot), 'Node must neither be nil nor the root node.'); if (Node = FFocusedNode) and not KeepFocus then begin DoFocusNode(nil, False); DoFocusChange(FFocusedNode, FFocusedColumn); end; if Node = FRangeAnchor then ResetRangeAnchor; // Update the hidden children flag of the parent. if (Node.Parent <> FRoot) and not (vsClearing in Node.Parent.States) then if FUpdateCount = 0 then DetermineHiddenChildrenFlag(Node.Parent) else Include(FStates, tsUpdateHiddenChildrenNeeded); if not (vsDeleting in Node.States) then begin // Some states are only temporary so take them out. Node.States := Node.States - [vsChecking]; Parent := Node.Parent; Dec(Parent.ChildCount); AdjustHeight := Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible]; if Parent.ChildCount = 0 then begin Parent.States := Parent.States - [vsAllChildrenHidden, vsHasChildren]; if (Parent <> FRoot) and (vsExpanded in Parent.States) then Exclude(Parent.States, vsExpanded); end; AdjustTotalCount(Parent, -Integer(Node.TotalCount), True); if AdjustHeight then AdjustTotalHeight(Parent, -Integer(Node.TotalHeight), True); if FullyVisible[Node] then Dec(FVisibleCount, CountVisibleChildren(Node) + 1); if Assigned(Node.PrevSibling) then Node.PrevSibling.NextSibling := Node.NextSibling else Parent.FirstChild := Node.NextSibling; if Assigned(Node.NextSibling) then begin Node.NextSibling.PrevSibling := Node.PrevSibling; // Reindex all following nodes. if Reindex then begin Run := Node.NextSibling; Index := Node.Index; while Assigned(Run) do begin Run.Index := Index; Inc(Index); Run := Run.NextSibling; end; end; end else Parent.LastChild := Node.PrevSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalGetNodeAt(X, Y: Integer): PVirtualNode; var Dummy: Integer; begin Result := InternalGetNodeAt(X, Y, True, Dummy); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalGetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; //lclheader this is the original version of GetNodeAt used internally since expects coordinates // relative to the image tree. In LCL the image tree and control coordinates are different // when header is visible // This method returns the node that occupies the specified point, or nil if there's none. // If Relative is True then X and Y are given in client coordinates otherwise they are considered as being // absolute values into the virtual tree image (regardless of the current offsets in the tree window). // NodeTop gets the absolute or relative top position of the node returned or is untouched if no node // could be found. var AbsolutePos, CurrentPos: Cardinal; begin if Y < 0 then Exit(nil); AbsolutePos := Y; if Relative then Inc(AbsolutePos, -FOffsetY); // CurrentPos tracks a running term of the current position to test for. // It corresponds always to the top position of the currently considered node. CurrentPos := 0; // If the cache is available then use it. if tsUseCache in FStates then Result := FindInPositionCache(AbsolutePos, CurrentPos) else Result := GetFirstVisibleNoInit(nil, True); // Determine node, of which position and height corresponds to the scroll position most closely. while Assigned(Result) and (Result <> FRoot) do begin if AbsolutePos < (CurrentPos + NodeHeight[Result]) then Break; Inc(CurrentPos, NodeHeight[Result]); Result := GetNextVisibleNoInit(Result, True); end; if Result = FRoot then Result := nil; // Since the given vertical position is likely not the same as the top position // of the found node this top position is returned. if Assigned(Result) then begin NodeTop := CurrentPos; if Relative then Inc(NodeTop, FOffsetY); //{$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'GetNodeAt Result: ',Result^.Index);{$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalRemoveFromSelection(Node: PVirtualNode); // Special version to mark a node to be no longer in the current selection. PackArray must // be used to remove finally those entries. var Index: Integer; begin // Because pointers are always DWORD aligned we can simply increment all those // which we want to have removed (see also PackArray) and still have the // order in the list preserved. if FindNodeInSelection(Node, Index, -1, -1) then begin Exclude(Node.States, vsSelected); Inc(PtrUInt(FSelection[Index])); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateCache; // Marks the cache as invalid. begin DoStateChange([tsValidationNeeded], [tsUseCache]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MarkCutCopyNodes; // Sets the vsCutOrCopy style in every currently selected but not disabled node to indicate it is // now part of a clipboard operation. var Nodes: TNodeArray; I: Integer; begin Nodes := nil; if FSelectionCount > 0 then begin // need the current selection sorted to exclude selected nodes which are children, grandchildren etc. of // already selected nodes Nodes := GetSortedSelection(False); for I := 0 to High(Nodes) do with Nodes[I]^ do if not (vsDisabled in States) then Include(States, vsCutOrCopy); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Loaded; var LastRootCount: Cardinal; IsReadOnly: Boolean; begin inherited; // If a root node count has been set during load of the tree then update its child structure now // as this hasn't been done yet in this case. if (tsNeedRootCountUpdate in FStates) and (FRoot.ChildCount > 0) then begin DoStateChange([], [tsNeedRootCountUpdate]); IsReadOnly := toReadOnly in FOptions.FMiscOptions; Exclude(FOptions.FMiscOptions, toReadOnly); LastRootCount := FRoot.ChildCount; FRoot.ChildCount := 0; BeginUpdate; SetChildCount(FRoot, LastRootCount); EndUpdate; if IsReadOnly then Include(FOptions.FMiscOptions, toReadOnly); end; // Prevent the object inspector at design time from marking the header as being modified // when auto resize is enabled. Updating; try FHeader.UpdateMainColumn; FHeader.FColumns.FixPositions; if toAutoBidiColumnOrdering in FOptions.FAutoOptions then FHeader.FColumns.ReorderColumns(UseRightToLeftAlignment); FHeader.RecalculateHeader; //lclheader //AdjustAutoSize is called inside CreateWnd. Don't call here //Keep the commented code until we get sure of not being necessary //if hoAutoResize in FHeader.FOptions then // FHeader.FColumns.AdjustAutoSize(InvalidColumn, True); finally Updated; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MainColumnChanged; begin DoCancelEdit; {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_NAMECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MouseMove(Shift: TShiftState; X, Y: Integer); var R: TRect; NewCursor: TCursor; HitInfo: THitInfo; P: TPoint; Node: PVirtualNode; begin // lcl: Adjust cursor if ([tsWheelPanning, tsWheelScrolling] * FStates = []) then begin // Apply own cursors only if there is no global cursor set. if Screen.Cursor = crDefault then begin NewCursor := crDefault; if (toNodeHeightResize in FOptions.FMiscOptions) then begin GetCursorPos(P); P := ScreenToClient(P); GetHitTestInfoAt(P.X, P.Y, True, HitInfo); if (hiOnItem in HitInfo.HitPositions) and ([hiUpperSplitter, hiLowerSplitter] * HitInfo.HitPositions <> []) and ((hitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].FOptions)) then begin if hiUpperSplitter in HitInfo.HitPositions then Node := GetPreviousVisible(HitInfo.HitNode, True) else Node := HitInfo.HitNode; if Assigned(Node) and (Node <> FRoot) then NewCursor := crVertSplit; end; end; if (NewCursor = crDefault) and (toHotTrack in FOptions.PaintOptions) and Assigned(FCurrentHotNode) then NewCursor := FHotCursor; DoGetCursor(NewCursor); Cursor := NewCursor; end; end; if tsNodeHeightTrackPending in FStates then begin // Remove hint if shown currently. Application.CancelHint; // Stop wheel panning if active. StopWheelPanning; // Stop timers KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([tsNodeHeightTracking], [tsScrollPending, tsScrolling, tsEditPending, tsOLEDragPending, tsVCLDragPending, tsIncrementalSearching, tsNodeHeightTrackPending]); end; if tsDrawSelPending in FStates then begin // Remove current selection in case the user clicked somewhere in the window (but not a node) // and moved the mouse. if CalculateSelectionRect(X, Y) then begin //lclheader R := FNewSelRect; if hoVisible in FHeader.Options then OffsetRect(R, 0, FHeader.Height); InvalidateRect(Handle, @R, False); UpdateWindow(Handle); if (Abs(FNewSelRect.Right - FNewSelRect.Left) > DragManager.DragThreshold) or (Abs(FNewSelRect.Bottom - FNewSelRect.Top) > DragManager.DragThreshold) then begin if tsClearPending in FStates then begin DoStateChange([], [tsClearPending]); ClearSelection; end; DoStateChange([tsDrawSelecting], [tsDrawSelPending]); // Reset to main column for multiselection. FocusedColumn := FHeader.MainColumn; // The current rectangle may already include some node captions. Handle this. if HandleDrawSelection(X, Y) then InvalidateRect(Handle, nil, False); end; end; end else begin if tsNodeHeightTracking in FStates then begin // Handle height tracking. if DoNodeHeightTracking(FHeightTrackNode, FHeightTrackColumn, FHeader.GetShiftState, FHeightTrackPoint, Point(X, Y)) then begin // Avoid negative (or zero) node heights. if FHeightTrackPoint.Y >= Y then Y := FHeightTrackPoint.Y + 1; SetNodeHeight(FHeightTrackNode, Y - FHeightTrackPoint.Y); UpdateWindow(Handle); Exit; end; end; // If both wheel panning and auto scrolling are pending then the user moved the mouse while holding down the // middle mouse button. This means panning is being used, hence remove the wheel scroll flag. if [tsWheelPanning, tsWheelScrolling] * FStates = [tsWheelPanning, tsWheelScrolling] then begin if ((Abs(FLastClickPos.X - X) >= DragManager.DragThreshold) or (Abs(FLastClickPos.Y - Y) >= DragManager.DragThreshold)) then DoStateChange([], [tsWheelScrolling]); end; // Really start dragging if the mouse has been moved more than the threshold. if (tsOLEDragPending in FStates) and ((Abs(FLastClickPos.X - X) >= FDragThreshold) or (Abs(FLastClickPos.Y - Y) >= FDragThreshold)) then DoDragging(FLastClickPos) else begin if CanAutoScroll then DoAutoScroll(X, Y); if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then AdjustPanningCursor(X, Y); if not IsMouseSelecting then begin HandleHotTrack(X, Y); inherited MouseMove(Shift, X, Y); end else begin // Handle draw selection if required, but don't do the work twice if the // auto scrolling code already cares about the selection. if not (tsScrolling in FStates) and CalculateSelectionRect(X, Y) then begin // If something in the selection changed then invalidate the entire // tree instead trying to figure out the display rects of all changed nodes. if HandleDrawSelection(X, Y) then InvalidateRect(Handle, nil, False) else begin UnionRect(R, OrderRect(FNewSelRect), OrderRect(FLastSelRect)); OffsetRect(R, -FEffectiveOffsetX, FOffsetY); if hoVisible in FHeader.Options then OffsetRect(R, 0, FHeader.Height); InvalidateRect(Handle, @R, False); end; UpdateWindow(Handle); end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Notification(AComponent: TComponent; Operation: TOperation); begin if (AComponent <> Self) and (Operation = opRemove) then begin // Check for components linked to the tree. if AComponent = FImages then begin Images := nil; if not (csDestroying in ComponentState) then Invalidate; end else if AComponent = FStateImages then begin StateImages := nil; if not (csDestroying in ComponentState) then Invalidate; end else if AComponent = PopupMenu then PopupMenu := nil else // Check for components linked to the header. if AComponent = FHeader.FImages then FHeader.Images := nil else if AComponent = FHeader.PopupMenu then FHeader.PopupMenu := nil; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNCFunctions} procedure TBaseVirtualTree.OriginalWMNCPaint(DC: HDC); // Unfortunately, the painting for the non-client area in TControl is not always correct and does also not consider // existing clipping regions, so it has been modified here to take this into account. const InnerStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENINNER, BDR_RAISEDINNER, 0); OuterStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENOUTER, BDR_RAISEDOUTER, 0); EdgeStyles: array[TBevelKind] of Integer = (0, 0, BF_SOFT, BF_FLAT); Ctl3DStyles: array[Boolean] of Integer = (BF_MONO, 0); var RC, RW: TRect; EdgeSize: Integer; Size: TSize; begin if (BevelKind <> bkNone) or (BorderWidth > 0) then begin RC := Rect(0, 0, Width, Height); Size := GetBorderDimensions; InflateRect(RC, Size.cx, Size.cy); RW := RC; if BevelKind <> bkNone then begin DrawEdge(DC, RC, InnerStyles[BevelInner] or OuterStyles[BevelOuter], Byte(BevelEdges) or EdgeStyles[BevelKind] or Ctl3DStyles[Ctl3D]); EdgeSize := 0; if BevelInner <> bvNone then Inc(EdgeSize, BevelWidth); if BevelOuter <> bvNone then Inc(EdgeSize, BevelWidth); with RC do begin if beLeft in BevelEdges then Inc(Left, EdgeSize); if beTop in BevelEdges then Inc(Top, EdgeSize); if beRight in BevelEdges then Dec(Right, EdgeSize); if beBottom in BevelEdges then Dec(Bottom, EdgeSize); end; end; // Repaint only the part in the original clipping region and not yet drawn parts. IntersectClipRect(DC, RC.Left, RC.Top, RC.Right, RC.Bottom); // Determine inner rectangle to exclude (RC corresponds then to the client area). InflateRect(RC, -BorderWidth, -BorderWidth); // Remove the inner rectangle. ExcludeClipRect(DC, RC.Left, RC.Top, RC.Right, RC.Bottom); // Erase parts not drawn. Brush.Color := FColors.BorderColor; Windows.FillRect(DC, RW, Brush.Handle); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Paint; // Window paint routine. Used when the tree window needs to be updated. var Window: TRect; Target: TPoint; Temp: Integer; Options: TVTInternalPaintOptions; RTLOffset: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaint],'Paint');{$endif} Options := [poBackground, poColumnColor, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]; if UseRightToLeftAlignment and FHeader.UseColumns then RTLOffset := ComputeRTLOffset(True) else RTLOffset := 0; // The update rect has already been filled in WMPaint, as it is the window's update rect, which gets // reset when BeginPaint is called (in the ancestor). // The difference to the DC's clipbox is that it is also valid with internal paint operations used // e.g. by the Explorer while dragging, but show window content while dragging is disabled. if not IsRectEmpty(FUpdateRect) then begin Temp := Header.Columns.GetVisibleFixedWidth; if Temp = 0 then begin Window := FUpdateRect; {$ifdef DEBUG_VTV}Logger.Send([lcHeaderOffset], 'FUpdateRect', FUpdateRect);{$endif} Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then begin if Target.Y < FHeader.Height then begin Window.Top := 0; Target.Y := FHeader.Height; end else begin Dec(Window.Top, FHeader.Height); end; Dec(Window.Bottom, FHeader.Height); if RectVisible(Canvas.Handle, FHeaderRect) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'RectVisible = True');{$endif} FHeader.FColumns.PaintHeader(Canvas.Handle, FHeaderRect, -FEffectiveOffsetX); end; with FHeaderRect do ExcludeClipRect(Canvas.Handle, Left, Top, Right, Bottom); end; // The clipping rectangle is given in client coordinates of the window. We have to convert it into // a sliding window of the tree image. {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);{$endif} OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY); //{$ifdef DEBUG_VTV}Logger.Active:=Logger.CalledBy('DoDragging');{$endif} PaintTree(Canvas, Window, Target, Options); //{$ifdef DEBUG_VTV}Logger.Active:=True;{$endif} end else begin {$ifdef DEBUG_VTV}Logger.Send([lcPaint],'VisibleFixedWidth > 0');{$endif} // First part, fixed columns Window := ClientRect; Window.Right := Temp; Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then begin //Target is always (0,0) due to call to ClientRect, so no need set Top to 0 //also no need to decrease bottom because ClientRect already computes header Inc(Target.Y, FHeader.Height); if RectVisible(Canvas.Handle, FHeaderRect) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader], 'RectVisible = True');{$endif} FHeader.FColumns.PaintHeader(Canvas.Handle, FHeaderRect, -FEffectiveOffsetX); end; with FHeaderRect do ExcludeClipRect(Canvas.Handle,Left,Top,Right,Bottom); end; OffsetRect(Window, -RTLOffset, -FOffsetY); PaintTree(Canvas, Window, Target, Options); // Second part, other columns Window := GetClientRect; if Temp > Window.Right then begin {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'Paint');{$endif} Exit; end; Window.Left := Temp; Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then Inc(Target.Y, FHeader.Height); {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);{$endif} OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY); PaintTree(Canvas, Window, Target, Options); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'Paint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintCheckImage(const PaintInfo: TVTPaintInfo); procedure DrawCheckButton(Canvas: TCanvas; Index: Integer; const R: TRect; Flat: Boolean); var ButtonState: Cardinal; ButtonType: Cardinal; begin if Index < 8 then ButtonType := DFCS_BUTTONRADIO else ButtonType := DFCS_BUTTONCHECK; if Index >= 16 then ButtonType := ButtonType or DFCS_BUTTON3STATE; case Index mod 4 of 0: ButtonState := 0; 1: ButtonState := DFCS_HOT; 2: ButtonState := DFCS_PUSHED; else ButtonState := DFCS_INACTIVE; end; if Index in [4..7, 12..19] then ButtonState := ButtonState or DFCS_CHECKED; if Flat then ButtonState := ButtonState or DFCS_FLAT; DrawFrameControl(Canvas.Handle, R, DFC_BUTTON, ButtonType or ButtonState); end; var R: TRect; {$ifdef ThemeSupport} Details: TThemedElementDetails; {$endif} UseThemes: Boolean; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcCheck],'PaintCheckImage');{$endif} with PaintInfo, ImageInfo[iiCheck] do begin {$ifdef ThemeSupport} UseThemes := (tsUseThemes in FStates) and (FCheckImageKind = ckSystemDefault); {$else} UseThemes := False; {$endif} if UseThemes or ((FCheckImageKind in [ckSystemFlat, ckSystemDefault]) and not (Index in [21..24])) then begin {$ifdef ThemeSupport} if UseThemes then begin R := Rect(XPos - 1, YPos, XPos + 16, YPos + 16); Details.Element := teButton; case Index of 0..8: // radio buttons begin Details.Part := BP_RADIOBUTTON; Details.State := Index; end; 9..20: // check boxes begin Details.Part := BP_CHECKBOX; Details.State := Index - 8; end; 21..24: // buttons begin Details.Part := BP_PUSHBUTTON; Details.State := Index - 20; end; else Details.Part := 0; Details.State := 0; end; ThemeServices.DrawElement(Canvas.Handle, Details, R); {$ifdef USE_DELPHICOMPAT} if Index in [21..24] then with UtilityImages do DirectMaskBlt(PaintInfo.Canvas.Handle, XPos - 1, YPos, Height, Height, Canvas.Handle, 4 * Height, 0, MaskHandle); {$else} if Index in [21..24] then with UtilityImages do StretchMaskBlt(PaintInfo.Canvas.Handle, XPos - 1, YPos, Height, Height, Canvas.Handle, 4 * Height, 0, Height, Height, MaskHandle, 4 * Height, 0, SRCCOPY); {$endif} end else {$endif} begin R := Rect(XPos + 1, YPos + 1, XPos + 14, YPos + 14); DrawCheckButton(Canvas, Index - 1, R, FCheckImageKind = ckSystemFlat); end; end else with FCheckImages do begin {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(PaintInfo.Canvas.Handle, XPos, YPos, Height, Height, Canvas.Handle, Index * Height, 0, MaskHandle); {$else} StretchMaskBlt(PaintInfo.Canvas.Handle, XPos, YPos, Height, Height, Canvas.Handle, Index * Height, 0, Height, Height, MaskHandle, Index * Height, 0, SRCCOPY); {$endif} end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcCheck],'PaintCheckImage');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintImage(var PaintInfo: TVTPaintInfo; ImageInfoIndex: TVTImageInfoIndex; DoOverlay: Boolean); var CutNode: Boolean; PaintFocused: Boolean; DrawEffect: TGraphicsDrawEffect; begin with PaintInfo do begin CutNode := (vsCutOrCopy in Node.States) and (tsCutPending in FStates); PaintFocused := Focused or (toGhostedIfUnfocused in FOptions.FPaintOptions); // Since the overlay image must be specified together with the image to draw // it is meaningfull to retrieve it in advance. if DoOverlay then GetImageIndex(PaintInfo, ikOverlay, iiOverlay, Images) else PaintInfo.ImageInfo[iiOverlay].Index := -1; with ImageInfo[ImageInfoIndex] do begin if (vsSelected in Node.States) and not (Ghosted or CutNode) then begin if PaintFocused or (toPopupMode in FOptions.FPaintOptions) then Images.BlendColor := FColors.FocusedSelectionColor else Images.BlendColor := FColors.UnfocusedSelectionColor; end else Images.BlendColor := Color; if (vsDisabled in Node.States) or not Enabled then DrawEffect := gdeDisabled else // Blend image if enabled and the tree has the focus (or ghosted images must be drawn also if unfocused) ... if (toUseBlendedImages in FOptions.FPaintOptions) and PaintFocused // ... and the image is ghosted... and (Ghosted or // ... or it is not the check image and the node is selected (but selection is not for the entire row)... ((vsSelected in Node.States) and not (toFullRowSelect in FOptions.FSelectionOptions) and not (toGridExtensions in FOptions.FMiscOptions)) or // ... or the node must be shown in cut mode. CutNode) then DrawEffect := gdeShadowed else DrawEffect := gdeNormal; if (vsSelected in Node.States) and not Ghosted then Images.BlendColor := clDefault; Images.Draw(Canvas, XPos, YPos, Index, DrawEffect); // Now, draw the overlay. // Delphi version has the ability to use the built in overlay indices of windows system image lists // Since this is system dependent the LCL version will support only custom overlays // Note: XPos and YPos are those of the normal images. if PaintInfo.ImageInfo[iiOverlay].Index >= 0 then ImageInfo[iiOverlay].Images.Draw(Canvas, XPos, YPos, ImageInfo[iiOverlay].Index); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintNodeButton(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const R: TRect; ButtonX, ButtonY: Integer; BidiMode: TBiDiMode); var Bitmap: TBitmap; XPos: Integer; IsHot: Boolean; begin IsHot := (toHotTrack in FOptions.FPaintOptions) and (FCurrentHotNode = Node) and FHotNodeButtonHit; if vsExpanded in Node.States then begin if IsHot then Bitmap := FHotMinusBM else Bitmap := FMinusBM; end else begin if IsHot then Bitmap := FHotPlusBM else Bitmap := FPlusBM; end; // Draw the node's plus/minus button according to the directionality. if BidiMode = bdLeftToRight then XPos := R.Left + ButtonX else XPos := R.Right - ButtonX - Bitmap.Width; // Need to draw this masked. Canvas.Draw(XPos, R.Top + ButtonY, Bitmap); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintTreeLines(const PaintInfo: TVTPaintInfo; VAlignment, IndentSize: Integer; LineImage: TLineImage); var I: Integer; XPos, Offset: Integer; NewStyles: TLineImage; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintTreeLines');{$endif} NewStyles := nil; with PaintInfo do begin if BidiMode = bdLeftToRight then begin XPos := CellRect.Left; Offset := FIndent; end else begin Offset := -Integer(FIndent); XPos := CellRect.Right + Offset; end; case FLineMode of lmBands: if poGridLines in PaintInfo.PaintOptions then begin // Convert the line images in correct bands. SetLength(NewStyles, Length(LineImage)); for I := IndentSize - 1 downto 0 do begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FLineMode = lmBands');{$endif} if (vsExpanded in Node.States) and not (vsAllChildrenHidden in Node.States) then NewStyles[I] := ltLeft else case LineImage[I] of ltRight, ltBottomRight, ltTopDownRight, ltTopRight: NewStyles[I] := ltLeftBottom; ltNone: // Have to take over the image to the right of this one. A no line entry can never appear as // last entry so I don't need an end check here. if LineImage[I + 1] in [ltNone, ltTopRight] then NewStyles[I] := NewStyles[I + 1] else NewStyles[I] := ltLeft; ltTopDown: // Have to check the image to the right of this one. A top down line can never appear as // last entry so I don't need an end check here. if LineImage[I + 1] in [ltNone, ltTopRight] then NewStyles[I] := NewStyles[I + 1] else NewStyles[I] := ltLeft; end; end; PaintInfo.Canvas.Font.Color := FColors.GridLineColor; for I := 0 to IndentSize - 1 do begin DrawLineImage(PaintInfo, XPos, CellRect.Top, NodeHeight[Node] - 1, VAlignment, NewStyles[I], BidiMode <> bdLeftToRight); Inc(XPos, Offset); end; end; else // lmNormal {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FLineMode = lmNormal');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} PaintInfo.Canvas.Font.Color := FColors.TreeLineColor; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Font.Color);{$endif} for I := 0 to IndentSize - 1 do begin DrawLineImage(PaintInfo, XPos, CellRect.Top, NodeHeight[Node], VAlignment, LineImage[I], BidiMode <> bdLeftToRight); Inc(XPos, Offset); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintTreeLines');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintSelectionRectangle(Target: TCanvas; WindowOrgX: Integer; const SelectionRect: TRect; TargetRect: TRect); // Helper routine to draw a selection rectangle in the mode determined by DrawSelectionMode. var BlendRect: TRect; TextColorBackup, BackColorBackup: COLORREF; // used to restore forground and background colors when drawing a selection rectangle begin {$ifdef DEBUG_VTV}Logger.Send([lcSelection], 'SelectionRect at PaintSelection', SelectionRect);{$endif} if ((FDrawSelectionMode = smDottedRectangle) and not (tsUseThemes in FStates)) or not MMXAvailable then begin // Classical selection rectangle using dotted borderlines. TextColorBackup := GetTextColor(Target.Handle); SetTextColor(Target.Handle, $FFFFFF); BackColorBackup := GetBkColor(Target.Handle); SetBkColor(Target.Handle, 0); Target.DrawFocusRect(SelectionRect); SetTextColor(Target.Handle, TextColorBackup); SetBkColor(Target.Handle, BackColorBackup); end else begin // Modern alpha blended style. OffsetRect(TargetRect, WindowOrgX, 0); if IntersectRect(BlendRect, OrderRect(SelectionRect), TargetRect) then begin OffsetRect(BlendRect, -WindowOrgX, 0); AlphaBlend(0, Target.Handle, BlendRect, Point(0, 0), bmConstantAlphaAndColor, FSelectionBlendFactor, ColorToRGB(FColors.SelectionRectangleBlendColor)); Target.Brush.Color := FColors.SelectionRectangleBorderColor; Target.FrameRect(SelectionRect); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareCell(var PaintInfo: TVTPaintInfo; WindowOrgX, MaxWidth: Integer); // This method is called immediately before a cell's content is drawn und is responsible to paint selection colors etc. var TextColorBackup, BackColorBackup: COLORREF; FocusRect, InnerRect: TRect; {$ifdef ThemeSupport} RowRect: TRect; //Theme: HTHEME; {$endif ThemeSupport} //--------------- local functions ------------------------------------------- procedure AlphaBlendSelection(Color: TColor); var R: TRect; begin // Take into account any window offset and size limitations in the target bitmap, as this is only as large // as necessary and might not cover the whole node. For normal painting this does not matter (because of // clipping) but for the MMX code there is no such check and it will crash badly when bitmap boundaries are // crossed. R := InnerRect; OffsetRect(R, -WindowOrgX, 0); if R.Left < 0 then R.Left := 0; if R.Right > MaxWidth then R.Right := MaxWidth; AlphaBlend(0, PaintInfo.Canvas.Handle, R, Point(0, 0), bmConstantAlphaAndColor, FSelectionBlendFactor, ColorToRGB(Color)); end; //--------------------------------------------------------------------------- {$ifdef ThemeSupport} //todo { procedure DrawBackground(State: Integer); begin with PaintInfo do if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, State, RowRect, @CellRect) else DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, State, InnerRect, nil); end; } {$endif ThemeSupport} //--------------- end local functions --------------------------------------- begin {$ifdef ThemeSupport} //todo { if IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) then begin RowRect := Rect(0, PaintInfo.CellRect.Top, FRangeX, PaintInfo.CellRect.Bottom); if toShowVertGridLines in FOptions.PaintOptions then Dec(RowRect.Right); Theme := OpenThemeData(Handle, 'TREEVIEW'); end else Theme := 0; } {$endif ThemeSupport} with PaintInfo, Canvas do begin // Fill cell background if its color differs from tree background. with FHeader.FColumns do if poColumnColor in PaintOptions then begin Brush.Color := Items[Column].Color; FillRect(CellRect); end; // Let the application customize the cell background and the content rectangle. DoBeforeCellPaint(Canvas, Node, Column, cpmPaint, CellRect, ContentRect); InnerRect := ContentRect; // The selection rectangle depends on alignment. if not (toGridExtensions in FOptions.FMiscOptions) then begin case Alignment of taLeftJustify: with InnerRect do if Left + NodeWidth < Right then Right := Left + NodeWidth; taCenter: with InnerRect do if (Right - Left) > NodeWidth then begin Left := (Left + Right - NodeWidth) div 2; Right := Left + NodeWidth; end; taRightJustify: with InnerRect do if (Right - Left) > NodeWidth then Left := Right - NodeWidth; end; end; if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin // Fill the selection rectangle. if poDrawSelection in PaintOptions then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States) then begin Brush.Color := FColors.DropTargetColor; Pen.Color := FColors.DropTargetBorderColor; if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then InnerRect := CellRect; if not IsRectEmpty(InnerRect) then if MMXAvailable and (toUseBlendedSelection in FOptions.PaintOptions) then AlphaBlendSelection(Brush.Color) else with InnerRect do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end else begin //lcl: Is not necessary to set the style here //Brush.Style := bsClear; end; end else if vsSelected in Node.States then begin if Focused or (toPopupMode in FOptions.FPaintOptions) then begin Brush.Color := FColors.FocusedSelectionColor; Pen.Color := FColors.FocusedSelectionBorderColor; end else begin Brush.Color := FColors.UnfocusedSelectionColor; Pen.Color := FColors.UnfocusedSelectionBorderColor; end; if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then InnerRect := CellRect; if not IsRectEmpty(InnerRect) then {$ifdef ThemeSupport} //todo { if Theme <> 0 then begin // If the node is also hot, its background will be drawn later. if not (toHotTrack in FOptions.FPaintOptions) or (Node <> FCurrentHotNode) or ((Column <> FCurrentHotColumn) and not (toFullRowSelect in FOptions.FSelectionOptions)) then DrawBackground(IfThen(Self.Focused, TREIS_SELECTED, TREIS_SELECTEDNOTFOCUS)); end else } {$endif ThemeSupport} if MMXAvailable and (toUseBlendedSelection in FOptions.PaintOptions) then AlphaBlendSelection(Brush.Color) else with InnerRect do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end; end; end; {$ifdef ThemeSupport} //todo { if (Theme <> 0) and (toHotTrack in FOptions.FPaintOptions) and (Node = FCurrentHotNode) and ((Column = FCurrentHotColumn) or (toFullRowSelect in FOptions.FSelectionOptions)) then DrawBackground(IfThen((vsSelected in Node.States) and not (toAlwaysHideSelection in FOptions.FPaintOptions), TREIS_HOTSELECTED, TREIS_HOT)); } {$endif ThemeSupport} if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin // draw focus rect if (poDrawFocusRect in PaintOptions) and (Focused or (toPopupMode in FOptions.FPaintOptions)) and (FFocusedNode = Node) and ( (Column = FFocusedColumn) {$ifdef ThemeSupport} //todo { or (not (toExtendedFocus in FOptions.FSelectionOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (Theme <> 0) ) } {$endif ThemeSupport} ) then begin TextColorBackup := GetTextColor(Handle); SetTextColor(Handle, $FFFFFF); BackColorBackup := GetBkColor(Handle); SetBkColor(Handle, 0); {$ifdef ThemeSupport} //todo { if not (toExtendedFocus in FOptions.FSelectionOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (Theme <> 0) then FocusRect := RowRect else } {$endif ThemeSupport} if toGridExtensions in FOptions.FMiscOptions then FocusRect := CellRect else FocusRect := InnerRect; {$ifdef ThemeSupport} //todo { if Theme <> 0 then InflateRect(FocusRect, -1, -1); } {$endif ThemeSupport} LCLIntf.DrawFocusRect(Handle, FocusRect); SetTextColor(Handle, TextColorBackup); SetBkColor(Handle, BackColorBackup); end; end; end; {$ifdef ThemeSupport} //todo { if Theme <> 0 then CloseThemeData(Theme); } {$endif ThemeSupport} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; // Called while loading a tree structure, Node is already valid (allocated) at this point. // The function handles the base and user chunks, any other chunk is marked as being unknown (result becomes False) // and skipped. descendants may handle them by overriding this method. // Returns True if the chunk could be handled, otherwise False. var ChunkBody: TBaseChunkBody; Run: PVirtualNode; LastPosition: Integer; begin case ChunkType of BaseChunk: begin // Load base chunk's body (chunk header has already been consumed). Stream.Read(ChunkBody, SizeOf(ChunkBody)); with Node^ do begin // Set states first, in case the node is invisible. States := ChunkBody.States; NodeHeight := ChunkBody.NodeHeight; TotalHeight := NodeHeight; Align := ChunkBody.Align; CheckState := ChunkBody.CheckState; CheckType := ChunkBody.CheckType; ChildCount := ChunkBody.ChildCount; // Create and read child nodes. while ChunkBody.ChildCount > 0 do begin Run := MakeNewNode; Run.PrevSibling := Node.LastChild; if Assigned(Run.PrevSibling) then Run.Index := Run.PrevSibling.Index + 1; if Assigned(Node.LastChild) then Node.LastChild.NextSibling := Run else Node.FirstChild := Run; Node.LastChild := Run; Run.Parent := Node; ReadNode(Stream, Version, Run); Dec(ChunkBody.ChildCount); end; end; Result := True; end; UserChunk: if ChunkSize > 0 then begin // need to know whether the data was read LastPosition := Stream.Position; DoLoadUserData(Node, Stream); // compare stream position to learn whether the data was read Result := Stream.Position > LastPosition; // Improve stability by advancing the stream to the chunk's real end if // the application did not read what has been written. if not Result or (Stream.Position <> (LastPosition + ChunkSize)) then Stream.Position := LastPosition + ChunkSize; end else Result := True; else // unknown chunk, skip it Stream.Position := Stream.Position + ChunkSize; Result := False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReadNode(Stream: TStream; Version: Integer; Node: PVirtualNode); // Reads the anchor chunk of each node and initiates reading the sub chunks for this node var Header: TChunkHeader; EndPosition: Integer; begin with Stream do begin // Read anchor chunk of the node. Stream.Read(Header, SizeOf(Header)); if Header.ChunkType = NodeChunk then begin EndPosition := Stream.Position + Header.ChunkSize; // Read all subchunks until the indicated chunk end position is reached in the stream. while Position < EndPosition do begin // Read new chunk header. Stream.Read(Header, SizeOf(Header)); ReadChunk(Stream, Version, Node, Header.ChunkType, Header.ChunkSize); end; // If the last chunk does not end at the given end position then there is something wrong. if Position <> EndPosition then ShowError(SCorruptStream2, hcTFCorruptStream2); end else ShowError(SCorruptStream1, hcTFCorruptStream1); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RedirectFontChangeEvent(Canvas: TCanvas); begin if @Canvas.Font.OnChange <> @FOldFontChange then begin FOldFontChange := Canvas.Font.OnChange; Canvas.Font.OnChange := FontChanged; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RemoveFromSelection(Node: PVirtualNode); var Index: Integer; begin if not FSelectionLocked then begin Assert(Assigned(Node), 'Node must not be nil!'); if vsSelected in Node.States then begin Exclude(Node.States, vsSelected); if FindNodeInSelection(Node, Index, -1, -1) and (Index < FSelectionCount - 1) then Move(FSelection[Index + 1], FSelection[Index], (FSelectionCount - Index - 1) * 4); if FSelectionCount > 0 then Dec(FSelectionCount); SetLength(FSelection, FSelectionCount); if FSelectionCount = 0 then ResetRangeAnchor; Change(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ResetRangeAnchor; // Called when there is no selected node anymore and the selection range anchor needs a new value. begin FRangeAnchor := FFocusedNode; FLastSelectionLevel := -1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RestoreFontChangeEvent(Canvas: TCanvas); begin Canvas.Font.OnChange := FOldFontChange; FOldFontChange := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SelectNodes(StartNode, EndNode: PVirtualNode; AddOnly: Boolean); // Selects a range of nodes and unselects all other eventually selected nodes which are not in this range if // AddOnly is False. // EndNode must be visible while StartNode does not necessarily as in the case where the last focused node is the start // node but it is a child of a node which has been collapsed previously. In this case the first visible parent node // is used as start node. StartNode can be nil in which case the very first node in the tree is used. var NodeFrom, NodeTo, LastAnchor: PVirtualNode; Index: Integer; begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if not FSelectionLocked then begin ClearTempCache; if StartNode = nil then StartNode := GetFirstVisibleNoInit(nil, True) else if not FullyVisible[StartNode] then begin StartNode := GetPreviousVisible(StartNode, True); if StartNode = nil then StartNode := GetFirstVisibleNoInit(nil, True) end; if CompareNodePositions(StartNode, EndNode, True) < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; // The range anchor will be reset by the following call. LastAnchor := FRangeAnchor; if not AddOnly then InternalClearSelection; while NodeFrom <> NodeTo do begin InternalCacheNode(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // select last node too InternalCacheNode(NodeFrom); // now add them all in "one" step AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; if Assigned(LastAnchor) and FindNodeInSelection(LastAnchor, Index, -1, -1) then FRangeAnchor := LastAnchor; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedNodeAndColumn(Node: PVirtualNode; Column: TColumnIndex); var OldColumn: TColumnIndex; WasDifferent: Boolean; begin if not FHeader.AllowFocus(Column) then Column := FFocusedColumn; WasDifferent := (Node <> FFocusedNode) or (Column <> FFocusedColumn); OldColumn := FFocusedColumn; FFocusedColumn := Column; DoFocusNode(Node, True); // Check if the change was accepted. if FFocusedNode = Node then begin CancelEditNode; if WasDifferent then DoFocusChange(FFocusedNode, FFocusedColumn); end else // If the user did not accept the new cell to focus then set also the focused column back // to its original state. FFocusedColumn := OldColumn; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SkipNode(Stream: TStream); // Skips the data for the next node in the given stream (including the child nodes). var Header: TChunkHeader; begin with Stream do begin // read achor chunk of the node Stream.Read(Header, SizeOf(Header)); if Header.ChunkType = NodeChunk then Stream.Position := Stream.Position + Header.ChunkSize else ShowError(SCorruptStream1, hcTFCorruptStream1); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StartWheelPanning(const Position: TPoint); // Called when wheel panning should start. A little helper window is created to indicate the reference position, // which determines in which direction and how far wheel panning/scrolling will happen. //--------------- local function -------------------------------------------- function CreateClipRegion: HRGN; // In order to avoid doing all the transparent drawing ourselves we use a // window region for the wheel window. // Since we only work on a very small image (32x32 pixels) this is acceptable. var Start, X, Y, ImageHeight, ImageWidth: Integer; Temp: HRGN; begin Assert(not FPanningWindow.Image.Empty, 'Invalid wheel panning image.'); ImageWidth := FPanningWindow.Image.Width; ImageHeight := FPanningWindow.Image.Height; // Create an initial region on which we operate. Result := CreateRectRgn(0, 0, 0, 0); with FPanningWindow.Image.Canvas do begin for Y := 0 to ImageHeight - 1 do begin Start := -1; for X := 0 to ImageWidth - 1 do begin // Start a new span if we found a non-transparent pixel and no span is currently started. if (Start = -1) and (Pixels[X, Y] <> clFuchsia) then Start := X else if (Start > -1) and (Pixels[X, Y] = clFuchsia) then begin // A non-transparent span is finished. Add it to the result region. Temp := CreateRectRgn(Start, Y, X, Y + 1); CombineRgn(Result, Result, Temp, RGN_OR); DeleteObject(Temp); Start := -1; end; end; // If there is an open span then add this also to the result region. if Start > -1 then begin Temp := CreateRectRgn(Start, Y, ImageWidth, Y + 1); CombineRgn(Result, Result, Temp, RGN_OR); DeleteObject(Temp); end; end; end; // The resulting region is used as window region so we must not delete it. // Windows will own it after the assignment below. end; //--------------- end local function ---------------------------------------- var ImageName: string; begin // Set both panning and scrolling flag. One will be removed shortly depending on whether the middle mouse button is // released before the mouse is moved or vice versa. The first case is referred to as wheel scrolling while the // latter is called wheel panning. KillTimer(Handle, ScrollTimer); DoStateChange([tsWheelPanning, tsWheelScrolling]); if FPanningWindow = nil then begin FPanningWindow := TVirtualPanningWindow.Create; LoadPanningCursors; end; FPanningWindow.Start(Handle, ClientToScreen(Position)); if Integer(FRangeX) > ClientWidth then begin if Integer(FRangeY) > ClientHeight then ImageName := 'VT_MOVEALL_BMP' else ImageName := 'VT_MOVEEW_BMP' end else ImageName := 'VT_MOVENS_BMP'; FPanningWindow.Image.LoadFromLazarusResource(ImageName); FPanningWindow.Show(CreateClipRegion); // Setup the panscroll timer and capture all mouse input. SetFocus; SetCapture(Handle); AdjustPanningCursor(Position.X, Position.Y); SetTimer(Handle, ScrollTimer, 20, nil); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StopWheelPanning; // Stops panning if currently active and destroys the helper window. begin if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin // Release the mouse capture and stop the panscroll timer. KillTimer(Handle, ScrollTimer); ReleaseCapture; DoStateChange([], [tsWheelPanning, tsWheelScrolling]); FPanningWindow.Stop; {$ifndef Windows} Cursor := crDefault; {$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StructureChange(Node: PVirtualNode; Reason: TChangeReason); begin AdviseChangeEvent(True, Node, Reason); if FUpdateCount = 0 then begin if (FChangeDelay > 0) and not (tsSynchMode in FStates) then SetTimer(Handle, StructureChangeTimer, FChangeDelay, nil) else DoStructureChange(Node, Reason); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.SuggestDropEffect(Source: TObject; Shift: TShiftState; const Pt: TPoint; AllowedEffects: LongWord): LongWord; // determines the drop action to take if the drag'n drop operation ends on this tree // Note: Source can be any Delphi object not just a virtual tree begin Result := AllowedEffects; // prefer MOVE if source and target are the same control, otherwise whatever is allowed as initial value if Assigned(Source) and (Source = Self) then if (AllowedEffects and DROPEFFECT_MOVE) <> 0 then Result := DROPEFFECT_MOVE else // no change else // drag between different applicatons if (AllowedEffects and DROPEFFECT_COPY) <> 0 then Result := DROPEFFECT_COPY; // consider modifier keys and what is allowed at the moment, if none of the following conditions apply then // the initial value just set is used if ssCtrlOS in Shift then begin // copy or link if ssShift in Shift then begin // link if (AllowedEffects and DROPEFFECT_LINK) <> 0 then Result := DROPEFFECT_LINK; end else begin // copy if (AllowedEffects and DROPEFFECT_COPY) <> 0 then Result := DROPEFFECT_COPY; end; end else begin // move, link or default if ssShift in Shift then begin // move if (AllowedEffects and DROPEFFECT_MOVE) <> 0 then Result := DROPEFFECT_MOVE; end else begin // link or default if ssAlt in Shift then begin // link if (AllowedEffects and DROPEFFECT_LINK) <> 0 then Result := DROPEFFECT_LINK; end; // else default end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ToggleSelection(StartNode, EndNode: PVirtualNode); // Switchs the selection state of a range of nodes. // Note: This method is specifically designed to help selecting ranges with the keyboard and considers therefore // the range anchor. var NodeFrom, NodeTo: PVirtualNode; NewSize: Integer; Position: Integer; begin if not FSelectionLocked then begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if StartNode = nil then StartNode := FRoot.FirstChild else if not FullyVisible[StartNode] then StartNode := GetPreviousVisible(StartNode, True); Position := CompareNodePositions(StartNode, EndNode); // nothing to do if start and end node are the same if Position <> 0 then begin if Position < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; ClearTempCache; // 1) toggle the start node if it is before the range anchor if CompareNodePositions(NodeFrom, FRangeAnchor) < 0 then if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); // 2) toggle all nodes within the range NodeFrom := GetNextVisible(NodeFrom, True); while NodeFrom <> NodeTo do begin if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // 3) toggle end node if it is after the range anchor if CompareNodePositions(NodeFrom, FRangeAnchor) > 0 then if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); // Do some housekeeping if there was a change. NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; // If the range went over the anchor then we need to reselect it. if not (vsSelected in FRangeAnchor.States) then InternalCacheNode(FRangeAnchor); if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UnselectNodes(StartNode, EndNode: PVirtualNode); // Deselects a range of nodes. // EndNode must be visible while StartNode must not as in the case where the last focused node is the start node // but it is a child of a node which has been collapsed previously. In this case the first visible parent node // is used as start node. StartNode can be nil in which case the very first node in the tree is used. var NodeFrom, NodeTo: PVirtualNode; NewSize: Integer; begin if not FSelectionLocked then begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if StartNode = nil then StartNode := FRoot.FirstChild else if not FullyVisible[StartNode] then begin StartNode := GetPreviousVisible(StartNode, True); if StartNode = nil then StartNode := FRoot.FirstChild end; if CompareNodePositions(StartNode, EndNode) < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; while NodeFrom <> NodeTo do begin InternalRemoveFromSelection(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // Deselect last node too. InternalRemoveFromSelection(NodeFrom); // Do some housekeeping. NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateCheckImageList; begin if FCheckImages <> FCustomCheckImages then FCheckImages.Free; FCheckImages := nil; CheckImageListNeeded; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateColumnCheckState(Col: TVirtualTreeColumn); begin Col.CheckState := DetermineNextCheckState(Col.CheckType, Col.CheckState); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateDesigner; var ParentForm: TCustomForm; begin if (csDesigning in ComponentState) and not (csUpdating in ComponentState) then begin ParentForm := GetParentForm(Self); if Assigned(ParentForm) and Assigned(ParentForm.Designer) then ParentForm.Designer.Modified; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateHeaderRect; // Calculates the rectangle the header occupies in non-client area. // These coordinates are in window rectangle. var OffsetX, OffsetY: Integer; //EdgeSize: Integer; Size: TSize; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintHeader],'UpdateHeaderRect');{$endif} FHeaderRect := Rect(0, 0, Width, Height); // Consider borders... Size := GetBorderDimensions; //lclheader //Adjust rect size Inc(FHeaderRect.Right,Size.cx*2); // ... and bevels. OffsetX := BorderWidth; OffsetY := BorderWidth; //todo_lcl { if BevelKind <> bkNone then begin EdgeSize := 0; if BevelInner <> bvNone then Inc(EdgeSize, BevelWidth); if BevelOuter <> bvNone then Inc(EdgeSize, BevelWidth); if beLeft in BevelEdges then Inc(OffsetX, EdgeSize); if beTop in BevelEdges then Inc(OffsetY, EdgeSize); end; } InflateRect(FHeaderRect, -OffsetX, -OffsetY); if hoVisible in FHeader.FOptions then begin if FHeaderRect.Left <= FHeaderRect.Right then FHeaderRect.Bottom := FHeaderRect.Top + Integer(FHeader.FHeight) else FHeaderRect := Rect(0, 0, 0, 0); end else FHeaderRect.Bottom := FHeaderRect.Top; {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'FHeaderRect',FHeaderRect);{$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintHeader],'UpdateHeaderRect');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateEditBounds; // Used to update the bounds of the current node editor if editing is currently active. var R: TRect; Dummy: Integer; CurrentAlignment: TAlignment; CurrentBidiMode: TBidiMode; begin if tsEditing in FStates then begin if vsMultiline in FFocusedNode.States then R := GetDisplayRect(FFocusedNode, FEditColumn, True, False) else R := GetDisplayRect(FFocusedNode, FEditColumn, True, True); if (toGridExtensions in FOptions.FMiscOptions) then begin // Adjust edit bounds depending on alignment and bidi mode. if FEditColumn <= NoColumn then begin CurrentAlignment := Alignment; CurrentBidiMode := BiDiMode; end else begin CurrentAlignment := FHeader.Columns[FEditColumn].FAlignment; CurrentBidiMode := FHeader.Columns[FEditColumn].FBidiMode; end; // Consider bidi mode here. In RTL context does left alignment actually mean right alignment and vice versa. if CurrentBidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(CurrentAlignment); if CurrentAlignment = taLeftJustify then FHeader.Columns.GetColumnBounds(FEditColumn, Dummy, R.Right) else FHeader.Columns.GetColumnBounds(FEditColumn, R.Left, Dummy); end; if toShowHorzGridLines in TreeOptions.PaintOptions then Dec(R.Bottom); FEditLink.SetBounds(R); end; end; //---------------------------------------------------------------------------------------------------------------------- const ScrollMasks: array[Boolean] of Cardinal = (0, SIF_DISABLENOSCROLL); const // Region identifiers for GetRandomRgn { CLIPRGN = 1; METARGN = 2; APIRGN = 3; } SYSRGN = 4; procedure TBaseVirtualTree.UpdateWindowAndDragImage(const Tree: TBaseVirtualTree; TreeRect: TRect; UpdateNCArea, ReshowDragImage: Boolean); // Method to repaint part of the window area which is not covered by the drag image and to initiate a recapture // of the drag image. // Note: This method must only be called during a drag operation and the tree passed in is the one managing the current // drag image (so it is the actual drag source). {$ifndef INCOMPLETE_WINAPI} var DragRegion, // the region representing the drag image UpdateRegion, // the unclipped region within the tree to be updated NCRegion: HRGN; // the region representing the non-client area of the tree DragRect, NCRect: TRect; RedrawFlags: Cardinal; VisibleTreeRegion: HRGN; DC: HDC; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} if IntersectRect(TreeRect, TreeRect, ClientRect) then begin // Retrieve the visible region of the window. This is important to avoid overpainting parts of other windows // which overlap this one. VisibleTreeRegion := CreateRectRgn(0, 0, 1, 1); DC := GetDCEx(Handle, 0, DCX_CACHE or DCX_WINDOW or DCX_CLIPSIBLINGS or DCX_CLIPCHILDREN); GetRandomRgn(DC, VisibleTreeRegion, SYSRGN); ReleaseDC(Handle, DC); // In Win9x the returned visible region is given in client coordinates. We need it in screen coordinates, though. if not IsWinNT then with ClientToScreen(Point(0, 0)) do OffsetRgn(VisibleTreeRegion, X, Y); // The drag image will figure out itself what part of the rectangle can be recaptured. // Recapturing is not done by taking a snapshot of the screen, but by letting the tree draw itself // into the back bitmap of the drag image. So the order here is unimportant. Tree.FDragImage.RecaptureBackground(Self, TreeRect, VisibleTreeRegion, UpdateNCArea, ReshowDragImage); // Calculate the screen area not covered by the drag image and which needs an update. DragRect := Tree.FDragImage.GetDragImageRect; MapWindowPoints(0, Handle, DragRect, 2); DragRegion := CreateRectRgnIndirect(DragRect); // Start with non-client area if requested. if UpdateNCArea then begin // Compute the part of the non-client area which must be updated. // Determine the outer rectangle of the entire tree window. GetWindowRect(Handle, NCRect); // Express the tree window rectangle in client coordinates (because RedrawWindow wants them so). MapWindowPoints(0, Handle, NCRect, 2); NCRegion := CreateRectRgnIndirect(NCRect); // Determine client rect in screen coordinates and create another region for it. UpdateRegion := CreateRectRgnIndirect(ClientRect); // Create a region which only contains the NC part by subtracting out the client area. CombineRgn(NCRegion, NCRegion, UpdateRegion, RGN_DIFF); // Subtract also out what is hidden by the drag image. CombineRgn(NCRegion, NCRegion, DragRegion, RGN_DIFF); RedrawWindow(Handle, nil, NCRegion, RDW_FRAME or RDW_NOERASE or RDW_NOCHILDREN or RDW_INVALIDATE or RDW_VALIDATE or RDW_UPDATENOW); DeleteObject(NCRegion); DeleteObject(UpdateRegion); end; UpdateRegion := CreateRectRgnIndirect(TreeRect); RedrawFlags := RDW_INVALIDATE or RDW_VALIDATE or RDW_UPDATENOW or RDW_NOERASE or RDW_NOCHILDREN; // Remove the part of the update region which is covered by the drag image. CombineRgn(UpdateRegion, UpdateRegion, DragRegion, RGN_DIFF); RedrawWindow(Handle, nil, UpdateRegion, RedrawFlags); DeleteObject(UpdateRegion); DeleteObject(DragRegion); DeleteObject(VisibleTreeRegion); end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateCache; // Starts cache validation if not already done by adding this instance to the worker thread's waiter list // (if not already there) and signalling the thread it can start validating. begin // Wait for thread to stop validation if it is currently validating this tree's cache. InterruptValidation; FStartIndex := 0; {$ifdef EnableThreadSupport} if tsValidationNeeded in FStates then begin // Tell the thread this tree needs actually something to do. WorkerThread.AddTree(Self); WorkEvent.SetEvent; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateNodeDataSize(var Size: Integer); begin Size := 0; if Assigned(FOnGetNodeDataSize) then FOnGetNodeDataSize(Self, Size); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WndProc(var Message: TLMessage); var Handled: Boolean; begin Handled := False; // Try the header whether it needs to take this message. if Assigned(FHeader) and (FHeader.FStates <> []) then Handled := FHeader.HandleMessage(Message); if not Handled then begin // For auto drag mode, let tree handle itself, instead of TControl. if not (csDesigning in ComponentState) and ((Message.Msg = LM_LBUTTONDOWN) or (Message.Msg = LM_LBUTTONDBLCLK)) then begin Handled := (DragMode = dmAutomatic) and (DragKind = dkDrag); if Handled then begin if not IsControlMouseMsg(TLMMouse(Message)) then begin //lclheader //let the header handle the message here //otherwise no header click event will be fired FHeader.HandleMessage(Message); ControlState := ControlState + [csLButtonDown]; Dispatch(Message); // overrides TControl's BeginDrag end; end; end; if not Handled and Assigned(FHeader) then Handled := FHeader.HandleMessage(Message); if not Handled then inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WriteChunks(Stream: TStream; Node: PVirtualNode); // Writes the core chunks for Node into the stream. // Note: descendants can optionally override this method to add other node specific chunks. // Keep in mind that this method is also called for the root node. Using this fact in descendants you can // create a kind of "global" chunks not directly bound to a specific node. var Header: TChunkHeader; LastPosition, ChunkSize: Integer; Chunk: TBaseChunk; Run: PVirtualNode; begin with Stream do begin // 1. The base chunk... LastPosition := Position; Chunk.Header.ChunkType := BaseChunk; with Node^, Chunk do begin Body.ChildCount := ChildCount; Body.NodeHeight := NodeHeight; // Some states are only temporary so take them out as they make no sense at the new location. Body.States := States - [vsChecking, vsCutOrCopy, vsDeleting, vsInitialUserData, vsHeightMeasured]; Body.Align := Align; Body.CheckState := CheckState; Body.CheckType := CheckType; Body.Reserved := 0; end; // write the base chunk Write(Chunk, SizeOf(Chunk)); // 2. ... directly followed by the child node chunks (actually they are child chunks of // the base chunk) if vsInitialized in Node.States then begin Run := Node.FirstChild; while Assigned(Run) do begin WriteNode(Stream, Run); Run := Run.NextSibling; end; end; FinishChunkHeader(Stream, LastPosition, Position); // 3. write user data LastPosition := Position; Header.ChunkType := UserChunk; Write(Header, SizeOf(Header)); DoSaveUserData(Node, Stream); // check if the application actually wrote data ChunkSize := Position - LastPosition - SizeOf(TChunkHeader); // seek back to start of chunk if nothing has been written if ChunkSize = 0 then begin Position := LastPosition; Size := Size - SizeOf(Header); end else FinishChunkHeader(Stream, LastPosition, Position); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WriteNode(Stream: TStream; Node: PVirtualNode); // Writes the "cover" chunk for Node to Stream and initiates writing child nodes and chunks. var LastPosition: Integer; Header: TChunkHeader; begin // Initialize the node first if necessary and wanted. if toInitOnSave in FOptions.FMiscOptions then begin if not (vsInitialized in Node.States) then InitNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); end; with Stream do begin LastPosition := Position; // Emit the anchor chunk. Header.ChunkType := NodeChunk; Write(Header, SizeOf(Header)); // Write other chunks to stream taking their size into this chunk's size. WriteChunks(Stream, Node); // Update chunk size. FinishChunkHeader(Stream, LastPosition, Position); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AbsoluteIndex(Node: PVirtualNode): Cardinal; begin Result := 0; while Assigned(Node) and (Node <> FRoot) do begin if not (vsInitialized in Node.States) then InitNode(Node); if Assigned(Node.PrevSibling) then begin // if there's a previous sibling then add its total count to the result Node := Node.PrevSibling; Inc(Result, Node.TotalCount); end else begin Node := Node.Parent; if Node <> FRoot then Inc(Result); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode; // Adds a new node to the given parent node. This is simply done by increasing the child count of the // parent node. If Parent is nil then the new node is added as (last) top level node. // UserData can be used to set the first 4 bytes of the user data area to an initial value which can be used // in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet // "officially" initialized. // AddChild is a compatibility method and will implicitly validate the parent node. This is however // against the virtual paradigm and hence I dissuade from its usage. var NodeData: ^Pointer; begin if not (toReadOnly in FOptions.FMiscOptions) then begin CancelEditNode; if Parent = nil then Parent := FRoot; if not (vsInitialized in Parent.States) then InitNode(Parent); // Locally stop updates of the tree in order to avoid usage of the new node before it is correctly set up. // If the update count was 0 on enter then there will be a correct update at the end of this method. Inc(FUpdateCount); try SetChildCount(Parent, Parent.ChildCount + 1); // Update the hidden children flag of the parent. Nodes are added as being visible by default. Exclude(Parent.States, vsAllChildrenHidden); finally Dec(FUpdateCount); end; Result := Parent.LastChild; // Check if there is initial user data and there is also enough user data space allocated. if Assigned(UserData) then if FNodeDataSize >= 4 then begin NodeData := Pointer(PByte(@Result.Data) + FTotalInternalDataSize); NodeData^ := UserData; Include(Result.States, vsInitialUserData); end else ShowError(SCannotSetUserData, hcTFCannotSetUserData); InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; if tsStructureChangePending in FStates then begin if Parent = FRoot then StructureChange(nil, crChildAdded) else StructureChange(Parent, crChildAdded); end; if (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then Sort(Parent, FHeader.FSortColumn, FHeader.FSortDirection, True); InvalidateToBottom(Parent); //lcl //Calling UpdateHorizontalScrollBar without a header leads to a //wrong NodeWidth because the node is not initialized at this time. //As result the horizontal scrollbar is not correctly //sized and the node can not be selected by a click. if HandleAllocated then UpdateVerticalScrollBar(True) end; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddFromStream(Stream: TStream; TargetNode: PVirtualNode); // loads nodes from the given stream and adds them to TargetNode // the current content is not cleared before the load process starts (see also LoadFromStream) var ThisID: TMagicID; Version, Count: Cardinal; Node: PVirtualNode; begin if not (toReadOnly in FOptions.FMiscOptions) then begin // check first whether this is a stream we can read Stream.ReadBuffer(ThisID, SizeOf(TMagicID)); if (ThisID[0] = MagicID[0]) and (ThisID[1] = MagicID[1]) and (ThisID[2] = MagicID[2]) and (ThisID[5] = MagicID[5]) then begin Version := Word(ThisID[3]); if Version <= VTTreeStreamVersion then begin BeginUpdate; try if Version < 2 then Count := MaxInt else Stream.ReadBuffer(Count, SizeOf(Count)); while (Stream.Position < Stream.Size) and (Count > 0) do begin Dec(Count); Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, amAddChildLast); InternalAddFromStream(Stream, Version, Node); end; if TargetNode = FRoot then DoNodeCopied(nil) else DoNodeCopied(TargetNode); finally EndUpdate; end; end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AfterConstruction; begin inherited; if FRoot = nil then InitRootNode; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Assign(Source: TPersistent); begin if (Source is TBaseVirtualTree) and not (toReadOnly in FOptions.FMiscOptions) then with Source as TBaseVirtualTree do begin Self.Align := Align; Self.Anchors := Anchors; Self.AutoScrollDelay := AutoScrollDelay; Self.AutoScrollInterval := AutoScrollInterval; Self.AutoSize := AutoSize; Self.Background := Background; //todo_lcl { Self.BevelEdges := BevelEdges; Self.BevelInner := BevelInner; Self.BevelKind := BevelKind; Self.BevelOuter := BevelOuter; Self.BevelWidth := BevelWidth; } Self.BiDiMode := BiDiMode; Self.BorderStyle := BorderStyle; Self.BorderWidth := BorderWidth; Self.ChangeDelay := ChangeDelay; Self.CheckImageKind := CheckImageKind; Self.Color := Color; Self.Colors.Assign(Colors); Self.Constraints.Assign(Constraints); Self.DefaultNodeHeight := DefaultNodeHeight; Self.DefaultPasteMode := DefaultPasteMode; Self.DragCursor := DragCursor; Self.DragImageKind := DragImageKind; Self.DragKind := DragKind; Self.DragMode := DragMode; Self.Enabled := Enabled; Self.Font := Font; Self.Header := Header; Self.HintMode := HintMode; Self.HotCursor := HotCursor; Self.Images := Images; //Self.ImeMode := ImeMode; //Self.ImeName := ImeName; Self.Indent := Indent; Self.Margin := Margin; Self.NodeAlignment := NodeAlignment; Self.NodeDataSize := NodeDataSize; Self.TreeOptions := TreeOptions; //Self.ParentBiDiMode := ParentBiDiMode; Self.ParentColor := ParentColor; Self.ParentFont := ParentFont; Self.ParentShowHint := ParentShowHint; Self.PopupMenu := PopupMenu; Self.RootNodeCount := RootNodeCount; Self.ScrollBarOptions := ScrollBarOptions; Self.ShowHint := ShowHint; Self.StateImages := StateImages; Self.TabOrder := TabOrder; Self.TabStop := TabStop; Self.Visible := Visible; Self.SelectionCurveRadius := SelectionCurveRadius; Self.SelectionBlendFactor := SelectionBlendFactor; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginDrag(Immediate: Boolean; Threshold: Integer); // Reintroduced method to allow to start OLE drag'n drop as well as VCL drag'n drop. begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'BeginDrag');{$endif} if FDragType = dtVCL then begin DoStateChange([tsVCLDragPending]); inherited; end else if (FStates * [tsOLEDragPending, tsOLEDragging]) = [] then begin // Drag start position has already been recorded in WMMouseDown. if Threshold < 0 then FDragThreshold := DragManager.DragThreshold else FDragThreshold := Threshold; if Immediate then DoDragging(FLastClickPos) else DoStateChange([tsOLEDragPending]); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'BeginDrag');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginSynch; // Starts the synchronous update mode (if not already active). begin if not (csDestroying in ComponentState) then begin if FSynchUpdateCount = 0 then begin DoUpdating(usBeginSynch); // Stop all timers... KillTimer(Handle, ChangeTimer); KillTimer(Handle, StructureChangeTimer); KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsEditPending, tsScrollPending, tsScrolling, tsIncrementalSearching]); // ...and trigger pending update states. if tsStructureChangePending in FStates then DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); if tsChangePending in FStates then DoChange(FLastChangedNode); end else DoUpdating(usSynch); end; Inc(FSynchUpdateCount); DoStateChange([tsSynchMode]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginUpdate; begin if not (csDestroying in ComponentState) then begin if FUpdateCount = 0 then begin DoUpdating(usBegin); SetUpdateState(True); end else DoUpdating(usUpdate); end; Inc(FUpdateCount); DoStateChange([tsUpdating]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CancelCutOrCopy; // Resets nodes which are marked as being cut. var Run: PVirtualNode; begin if ([tsCutPending, tsCopyPending] * FStates) <> [] then begin Run := FRoot.FirstChild; while Assigned(Run) do begin if vsCutOrCopy in Run.States then Exclude(Run.States, vsCutOrCopy); Run := GetNextNoInit(Run); end; end; DoStateChange([], [tsCutPending, tsCopyPending]); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CancelEditNode: Boolean; // Called by the application or the current edit link to cancel the edit action. begin if HandleAllocated and ([tsEditing, tsEditPending] * FStates <> []) then Result := DoCancelEdit else Result := True; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CancelOperation; // Called by the application to cancel a long-running operation. begin if FOperationCount > 0 then FOperationCanceled := True; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanEdit(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Returns True if the given node can be edited. begin Result := (toEditable in FOptions.FMiscOptions) and Enabled and not (toReadOnly in FOptions.FMiscOptions); DoCanEdit(Node, Column, Result); end; function TBaseVirtualTree.CanScroll(const ClientMousePos: TPoint): Boolean; // Determines whether auto scrolling can occur based on current mouse cursor position. begin Result := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Clear; begin if not (toReadOnly in FOptions.FMiscOptions) or (csDestroying in ComponentState) then begin BeginUpdate; try InterruptValidation; if IsEditing then CancelEditNode; if ClipboardStates * FStates <> [] then begin OleSetClipBoard(nil); DoStateChange([], ClipboardStates); end; ClearSelection; FFocusedNode := nil; FLastSelected := nil; FCurrentHotNode := nil; FDropTargetNode := nil; FLastChangedNode := nil; FRangeAnchor := nil; FCheckNode := nil; FLastVCLDragTarget := nil; FLastSearchNode := nil; DeleteChildren(FRoot, True); FOffsetX := 0; FOffsetY := 0; finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearChecked; var Node: PVirtualNode; begin Node := RootNode.FirstChild; while Assigned(Node) do begin if Node.CheckState <> csUncheckedNormal then CheckState[Node] := csUncheckedNormal; Node := GetNextNoInit(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearSelection; var Node: PVirtualNode; R: TRect; Counter: Integer; begin if not FSelectionLocked and (FSelectionCount > 0) and not (csDestroying in ComponentState) then begin if (FUpdateCount = 0) and HandleAllocated and (FVisibleCount > 0) then begin // Iterate through nodes currently visible in the client area and invalidate them. Node := TopNode; if Assigned(Node) then R := GetDisplayRect(Node, NoColumn, False); Counter := FSelectionCount; while Assigned(Node) do begin R.Bottom := R.Top + Integer(NodeHeight[Node]); if vsSelected in Node.States then begin InvalidateRect(Handle, @R, False); Dec(Counter); // Only try as many nodes as are selected. if Counter = 0 then Break; end; R.Top := R.Bottom; if R.Top > ClientHeight then Break; Node := GetNextVisibleNoInit(Node, True); end; end; InternalClearSelection; Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CopyTo(Source: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; // A simplified CopyTo method to allow to copy nodes to the root of another tree. begin Result := CopyTo(Source, Tree.FRoot, Mode, ChildrenOnly); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CopyTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; // Copies Source and all its child nodes to Target. // Mode is used to specify further where to add the new node actually (as sibling of Target or as child of Target). // Result is the newly created node to which source has been copied if ChildrenOnly is False or just contains Target // in the other case. // ChildrenOnly determines whether to copy also the source node or only its child nodes. var TargetTree: TBaseVirtualTree; Stream: TMemoryStream; begin Assert(TreeFromNode(Source) = Self, 'The source tree must contain the source node.'); Result := nil; if (Mode <> amNoWhere) and Assigned(Source) and (Source <> FRoot) then begin // Assume that an empty destination means the root in this (the source) tree. if Target = nil then begin TargetTree := Self; Target := FRoot; Mode := amAddChildFirst; end else TargetTree := TreeFromNode(Target); if not (toReadOnly in TargetTree.FOptions.FMiscOptions) then begin if Target = TargetTree.FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; Stream := TMemoryStream.Create; try // Write all nodes into a temprary stream depending on the ChildrenOnly flag. if not ChildrenOnly then WriteNode(Stream, Source) else begin Source := Source.FirstChild; while Assigned(Source) do begin WriteNode(Stream, Source); Source := Source.NextSibling; end; end; // Now load the serialized nodes into the target node (tree). TargetTree.BeginUpdate; try Stream.Position := 0; while Stream.Position < Stream.Size do begin Result := TargetTree.MakeNewNode; InternalConnectNode(Result, Target, TargetTree, Mode); TargetTree.InternalAddFromStream(Stream, VTTreeStreamVersion, Result); if not DoNodeCopying(Result, Target) then begin TargetTree.DeleteNode(Result); Result := nil; end else DoNodeCopied(Result); end; if ChildrenOnly then Result := Target; finally TargetTree.EndUpdate; end; finally Stream.Free; end; with TargetTree do begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; StructureChange(Source, crNodeCopied); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CopyToClipBoard; var DataObject: IDataObject; begin if FSelectionCount > 0 then begin DataObject := TVTDataObject.Create(Self, True) as IDataObject; if OleSetClipBoard(DataObject) = S_OK then begin MarkCutCopyNodes; DoStateChange([tsCopyPending]); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CutToClipBoard; var DataObject: IDataObject; begin if (FSelectionCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin DataObject := TVTDataObject.Create(Self, True) as IDataObject; if OleSetClipBoard(DataObject) = S_OK then begin MarkCutCopyNodes; DoStateChange([tsCutPending], [tsCopyPending]); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DefaultHandler(var AMessage); begin //used to avoid default handler of LM_MOUSEWHEEL end; procedure TBaseVirtualTree.DeleteChildren(Node: PVirtualNode; ResetHasChildren: Boolean = False); // Removes all children and their children from memory without changing the vsHasChildren style by default. var Run, Mark: PVirtualNode; LastTop, LastLeft, NewSize: Integer; ParentVisible: Boolean; begin if (Node.ChildCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin Assert(not (tsIterating in FStates), 'Deleting nodes during tree iteration leads to invalid pointers.'); // The code below uses some flags for speed improvements which may cause invalid pointers if updates of // the tree happen. Hence switch updates off until we have finished the operation. Inc(FUpdateCount); try InterruptValidation; LastLeft := -FEffectiveOffsetX; LastTop := FOffsetY; // Make a local copy of the visibility state of this node to speed up // adjusting the visible nodes count. ParentVisible := Node = FRoot; if not ParentVisible then ParentVisible := FullyVisible[Node] and (vsExpanded in Node.States); // Show that we are clearing the child list, to avoid registering structure change events. Include(Node.States, vsClearing); Run := Node.LastChild; while Assigned(Run) do begin if ParentVisible and (vsVisible in Run.States) then Dec(FVisibleCount); Include(Run.States, vsDeleting); Mark := Run; Run := Run.PrevSibling; // Important, to avoid exchange of invalid pointers while disconnecting the node. if Assigned(Run) then Run.NextSibling := nil; DeleteNode(Mark); end; Exclude(Node.States, vsClearing); if ResetHasChildren then Exclude(Node.States, vsHasChildren); if Node <> FRoot then Exclude(Node.States, vsExpanded); Node.ChildCount := 0; if (Node = FRoot) or (vsDeleting in Node.States) then begin Node.TotalHeight := FDefaultNodeHeight + NodeHeight[Node]; Node.TotalCount := 1; end else begin AdjustTotalHeight(Node, NodeHeight[Node]); AdjustTotalCount(Node, 1); end; Node.FirstChild := nil; Node.LastChild := nil; finally Dec(FUpdateCount); end; InvalidateCache; if FUpdateCount = 0 then begin NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; ValidateCache; UpdateScrollbars(True); // Invalidate entire tree if it scrolled e.g. to make the last node also the // bottom node in the treeview. if (LastLeft <> FOffsetX) or (LastTop <> FOffsetY) then Invalidate else InvalidateToBottom(Node); end; StructureChange(Node, crChildDeleted); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DeleteNode(Node: PVirtualNode; Reindex: Boolean = True); var LastTop, LastLeft: Integer; LastParent: PVirtualNode; WasInSynchMode: Boolean; ParentClearing: Boolean; begin if Assigned(Node) and (Node <> FRoot) and not (toReadOnly in FOptions.FMiscOptions) then begin Assert(not (tsIterating in FStates), 'Deleting nodes during tree iteration leads to invalid pointers.'); // Determine parent node for structure change notification. ParentClearing := vsClearing in Node.Parent.States; LastParent := Node.Parent; if not ParentClearing then begin if LastParent = FRoot then StructureChange(nil, crChildDeleted) else StructureChange(LastParent, crChildDeleted); end; LastLeft := -FEffectiveOffsetX; LastTop := FOffsetY; if vsSelected in Node.States then begin if FUpdateCount = 0 then begin // Go temporarily into sync mode to avoid a delayed change event for the node // when unselecting. WasInSynchMode := tsSynchMode in FStates; Include(FStates, tsSynchMode); RemoveFromSelection(Node); if not WasInSynchMode then Exclude(FStates, tsSynchMode); InvalidateToBottom(LastParent); end else InternalRemoveFromSelection(Node); end else InvalidateToBottom(LastParent); if tsHint in FStates then begin Application.CancelHint; DoStateChange([], [tsHint]); end; DeleteChildren(Node); InternalDisconnectNode(Node, False, Reindex); DoFreeNode(Node); if not ParentClearing then begin DetermineHiddenChildrenFlag(LastParent); InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollbars(True); // Invalidate entire tree if it scrolled e.g. to make the last node also the // bottom node in the treeview. if (LastLeft <> FOffsetX) or (LastTop <> FOffsetY) then Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DeleteSelectedNodes; // Deletes all currently selected nodes (including their child nodes). var Nodes: TNodeArray; I: Integer; LevelChange: Boolean; begin Nodes := nil; if (FSelectionCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; try Nodes := GetSortedSelection(True); for I := High(Nodes) downto 1 do begin LevelChange := Nodes[I].Parent <> Nodes[I - 1].Parent; DeleteNode(Nodes[I], LevelChange); end; DeleteNode(Nodes[0]); finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.Dragging: Boolean; begin // Check for both OLE drag'n drop as well as VCL drag'n drop. Result := ([tsOLEDragPending, tsOLEDragging] * FStates <> []) or inherited Dragging; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.EditNode(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Application triggered edit event for the given node. // Returns True if the tree started editing otherwise False. begin Assert(Assigned(Node), 'Node must not be nil.'); Assert((Column > InvalidColumn) and (Column < FHeader.Columns.Count), 'Column must be a valid column index (-1 if no header is shown).'); Result := tsEditing in FStates; // If the tree is already editing then we don't disrupt this. if not Result and not (toReadOnly in FOptions.FMiscOptions) then begin FocusedNode := Node; if Assigned(FFocusedNode) and (Node = FFocusedNode) and CanEdit(FFocusedNode, Column) then begin FEditColumn := Column; if not (vsInitialized in Node.States) then InitNode(Node); DoEdit; Result := tsEditing in FStates; end else Result := False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.EndEditNode: Boolean; // Called to finish a current edit action or stop the edit timer if an edit operation is pending. begin if [tsEditing, tsEditPending] * FStates <> [] then Result := DoEndEdit else Result := True; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndSynch; begin if FSynchUpdateCount > 0 then Dec(FSynchUpdateCount); if not (csDestroying in ComponentState) then begin if FSynchUpdateCount = 0 then begin DoStateChange([], [tsSynchMode]); DoUpdating(usEndSynch); end else DoUpdating(usSynch); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndUpdate; var NewSize: Integer; begin if FUpdateCount > 0 then Dec(FUpdateCount); if not (csDestroying in ComponentState) then begin if (FUpdateCount = 0) and (tsUpdating in FStates) then begin if tsUpdateHiddenChildrenNeeded in FStates then begin DetermineHiddenChildrenFlagAllNodes; Exclude(FStates, tsUpdateHiddenChildrenNeeded); end; DoStateChange([], [tsUpdating]); NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; InvalidateCache; ValidateCache; if HandleAllocated then UpdateScrollBars(False); if tsStructureChangePending in FStates then DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); try if tsChangePending in FStates then DoChange(FLastChangedNode); finally if toAutoSort in FOptions.FAutoOptions then SortTree(FHeader.FSortColumn, FHeader.FSortDirection, True); SetUpdateState(False); if HandleAllocated then Invalidate; UpdateDesigner; end; end; if FUpdateCount = 0 then DoUpdating(usEnd) else DoUpdating(usUpdate); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ExecuteAction(Action: TBasicAction): Boolean; // Some support for standard actions. begin Result := inherited ExecuteAction(Action); if not Result then begin Result := Action is TEditSelectAll; if Result then SelectAll(False) else begin Result := Action is TEditCopy; if Result then CopyToClipboard else if not (toReadOnly in FOptions.FMiscOptions) then begin Result := Action is TEditCut; if Result then CutToClipBoard else begin Result := Action is TEditPaste; if Result then PasteFromClipboard else begin Result := Action is TEditDelete; if Result then DeleteSelectedNodes end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FinishCutOrCopy; // Deletes nodes which are marked as being cutted. var Run, ToDelete: PVirtualNode; begin if tsCutPending in FStates then begin Run := FRoot.FirstChild; while Assigned(Run) do begin if vsCutOrCopy in Run.States then begin ToDelete := Run; Run := GetNextNoInit(Run); DeleteNode(ToDelete); end else Run := GetNextNoInit(Run); end; DoStateChange([], [tsCutPending]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FlushClipboard; // Used to render the data which is currently on the clipboard (finishes delayed rendering). begin if ClipboardStates * FStates <> [] then begin DoStateChange([tsClipboardFlushing]); OleFlushClipboard; CancelCutOrCopy; DoStateChange([], [tsClipboardFlushing]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FullCollapse(Node: PVirtualNode = nil); // This routine collapses all expanded nodes in the subtree given by Node or the whole tree if Node is FRoot or nil. // Only nodes which are expanded will be collapsed. This excludes uninitialized nodes but nodes marked as visible // will still be collapsed if they are expanded. var Stop: PVirtualNode; begin if FRoot.TotalCount > 1 then begin if Node = FRoot then Node := nil; DoStateChange([tsCollapsing]); BeginUpdate; try Stop := Node; Node := GetLastVisibleNoInit(Node, True); if Assigned(Node) then begin repeat if [vsHasChildren, vsExpanded] * Node.States = [vsHasChildren, vsExpanded] then ToggleNode(Node); Node := GetPreviousNoInit(Node); until Node = Stop; // Collapse the start node too. if Assigned(Node) and ([vsHasChildren, vsExpanded] * Node.States = [vsHasChildren, vsExpanded]) then ToggleNode(Node); end; finally EndUpdate; DoStateChange([], [tsCollapsing]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FullExpand(Node: PVirtualNode = nil); // This routine expands all collapsed nodes in the subtree given by Node or the whole tree if Node is FRoot or nil. // All nodes on the way down are initialized so this procedure might take a long time. // Since all nodes are validated, the tree cannot make use of optimatizations. Hence it is counter productive and you // should consider avoiding its use. var Stop: PVirtualNode; begin if FRoot.TotalCount > 1 then begin DoStateChange([tsExpanding]); BeginUpdate; try if Node = nil then begin Node := FRoot.FirstChild; Stop := nil; end else begin Stop := Node.NextSibling; if Stop = nil then begin Stop := Node; repeat Stop := Stop.Parent; until (Stop = FRoot) or Assigned(Stop.NextSibling); if Stop = FRoot then Stop := nil else Stop := Stop.NextSibling; end; end; // Initialize the start node. Others will be initialized in GetNext. if not (vsInitialized in Node.States) then InitNode(Node); repeat if not (vsExpanded in Node.States) then ToggleNode(Node); Node := GetNext(Node); until Node = Stop; finally EndUpdate; DoStateChange([], [tsExpanding]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifndef fpc} function TBaseVirtualTree.GetControlsAlignment: TAlignment; begin Result := FAlignment; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDisplayRect(Node: PVirtualNode; Column: TColumnIndex; TextOnly: Boolean; Unclipped: Boolean = False; ApplyCellContentMargin: Boolean = False): TRect; // Determines the client coordinates the given node covers, depending on scrolling, expand state etc. // If the given node cannot be found (because one of its parents is collapsed or it is invisible) then an empty // rectangle is returned. // If TextOnly is True then only the text bounds are returned, that is, the resulting rectangle's left and right border // are updated according to bidi mode, alignment and text width of the node. // If Unclipped is True (which only makes sense if also TextOnly is True) then the calculated text rectangle is // not clipped if the text does not entirely fit into the text space. This is special handling needed for hints. // If ApplyCellContentMargin is True (which only makes sense if also TextOnly is True) then the calculated text // rectangle respects the cell content margin. // If Column is -1 then the entire client width is used before determining the node's width otherwise the bounds of the // particular column are used. // Note: Column must be a valid column and is used independent of whether the header is visible or not. var Temp: PVirtualNode; Offset: Cardinal; Indent, TextWidth: Integer; MainColumnHit: Boolean; CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; MaxUnclippedHeight: Integer; TM: TTextMetric; ExtraVerticalMargin: Integer; begin //{$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintHeader],'GetDisplayRect');{$endif} Assert(Assigned(Node), 'Node must not be nil.'); Assert(Node <> FRoot, 'Node must not be the hidden root node.'); MainColumnHit := (Column + 1) in [0, FHeader.MainColumn + 1]; if not (vsInitialized in Node.States) then InitNode(Node); Result := Rect(0, 0, 0, 0); // Check whether the node is visible (determine indentation level btw.). Temp := Node; if not (vsVisible in Temp.States) then Exit; Indent := 0; while Temp <> FRoot do begin if not (vsVisible in Temp.States) or not (vsExpanded in Temp.Parent.States) then Exit; Temp := Temp.Parent; if MainColumnHit and (Temp <> FRoot) then Inc(Indent, FIndent); end; // Here we know the node is visible. Offset := 0; if tsUseCache in FStates then begin // If we can use the position cache then do a binary search to find a cached node which is as close as possible // to the current node. Iterate then through all following and visible nodes and sum up their heights. Temp := FindInPositionCache(Node, Offset); while Assigned(Temp) and (Temp <> Node) do begin Inc(Offset, NodeHeight[Temp]); Temp := GetNextVisibleNoInit(Temp, True); end; end else begin // If the cache is not available then go straight through all nodes up to the root and sum up their heights. Temp := Node; repeat Temp := GetPreviousVisibleNoInit(Temp, True); if Temp = nil then Break; Inc(Offset, NodeHeight[Temp]); until False; end; Result := Rect(0, Offset, Max(FRangeX, ClientWidth), Offset + NodeHeight[Node]); // Limit left and right bounds to the given column (if any) and move bounds according to current scroll state. if Column > NoColumn then begin FHeader.FColumns.GetColumnBounds(Column, Result.Left, Result.Right); // The right column border is not part of this cell. Dec(Result.Right); OffsetRect(Result, 0, FOffsetY); end else OffsetRect(Result, -FEffectiveOffsetX, FOffsetY); // Limit left and right bounds further if only the text area is required. if TextOnly then begin // Start with the offset of the text in the column and consider the indentation level too. Offset := FMargin + Indent; // If the text of a node is involved then we have to consider directionality and alignment too. if Column <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[Column].BidiMode; CurrentAlignment := FHeader.FColumns[Column].Alignment; end; if MainColumnHit then begin if toShowRoot in FOptions.FPaintOptions then Inc(Offset, FIndent); if (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (Node.CheckType <> ctNone) then Inc(Offset, FCheckImages.Height + 2); end; // Consider associated images. if Assigned(FStateImages) and HasImage(Node, ikState, Column) then Inc(Offset, FStateImages.Width + 2); if Assigned(FImages) and HasImage(Node, ikNormal, Column) then Inc(Offset, FImages.Width + 2); // Offset contains now the distance from the left or right border of the rectangle (depending on bidi mode). // Now consider the alignment too and calculate the final result. if CurrentBidiMode = bdLeftToRight then begin Inc(Result.Left, Offset); // Left-to-right reading does not need any special adjustment of the alignment. end else begin Dec(Result.Right, Offset); // Consider bidi mode here. In RTL context does left alignment actually mean right alignment and vice versa. ChangeBiDiModeAlignment(CurrentAlignment); end; TextWidth := DoGetNodeWidth(Node, Column); // Keep cell height before applying cell content margin in order to increase cell height if text does not fit // and Unclipped it true (see below). MaxUnclippedHeight := Result.Bottom - Result.Top; if ApplyCellContentMargin then DoBeforeCellPaint(Self.Canvas, Node, Column, cpmGetContentMargin, Result, Result); if Unclipped then begin // The caller requested the text coordinates unclipped. This means they must be calculated so as would // there be enough space, regardless of column bounds etc. // The layout still depends on the available space too, because this determines the position // of the unclipped text rectangle. if Result.Right - Result.Left < TextWidth - 1 then if CurrentBidiMode = bdLeftToRight then CurrentAlignment := taLeftJustify else CurrentAlignment := taRightJustify; // Increase cell height (up to MaxUnclippedHeight determined above) if text does not fit. GetTextMetrics(Self.Canvas.Handle, TM); ExtraVerticalMargin := Math.Min(TM.tmHeight, MaxUnclippedHeight) - (Result.Bottom - Result.Top); if ExtraVerticalMargin > 0 then InflateRect(Result, 0, (ExtraVerticalMargin + 1) div 2); case CurrentAlignment of taCenter: begin Result.Left := (Result.Left + Result.Right - TextWidth) div 2; Result.Right := Result.Left + TextWidth; end; taRightJustify: Result.Left := Result.Right - TextWidth; else // taLeftJustify Result.Right := Result.Left + TextWidth - 1; end; end else // Modify rectangle only if the text fits entirely into the given room. if Result.Right - Result.Left > TextWidth then case CurrentAlignment of taCenter: begin Result.Left := (Result.Left + Result.Right - TextWidth) div 2; Result.Right := Result.Left + TextWidth; end; taRightJustify: Result.Left := Result.Right - TextWidth; else // taLeftJustify Result.Right := Result.Left + TextWidth; end; end; //lclheader //todo: add a parameter to decide if the result must be returned as //a tree offset or a control offset if hoVisible in FHeader.FOptions then OffsetRect(Result, 0, FHeader.Height); //{$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'DisplayRect for Node '+IntToStr(Node^.Index),Result);{$endif} //{$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintHeader],'GetDisplayRect');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirst(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree while optionally considering toChildrenAbove. begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin if vsHasChildren in FRoot.States then begin Result := FRoot; // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); end; end else Result := nil; end else Result := nil; end else Result := FRoot.FirstChild; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstChecked(State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree with the given check state. begin Result := GetNextChecked(nil, State, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstChild(Node: PVirtualNode): PVirtualNode; // Returns the first child of the given node. The result node is initialized before exit. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.FirstChild else begin if not (vsInitialized in Node.States) then InitNode(Node); if vsHasChildren in Node.States then begin if Node.ChildCount = 0 then InitChildren(Node); Result := Node.FirstChild; end else Result := nil; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstCutCopy(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree which is currently marked for a clipboard operation. // See also GetNextCutCopy for comments on initialization. begin Result := GetNextCutCopy(nil, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstInitialized(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node which is already initialized. begin Result := GetFirstNoInit(ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then Result := GetNextInitialized(Result, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstLeaf: PVirtualNode; // Returns the first node in the tree which has currently no children. // The result is initialized if necessary. begin Result := GetNextLeaf(nil); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstLevel(NodeLevel: Cardinal): PVirtualNode; // Returns the first node in the tree on a specific level. // The result is initialized if necessary. begin Result := GetFirstNoInit(True); while Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) do Result := GetNextNoInit(Result, True); if Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) then // i.e. there is no node with the desired level in the tree Result := nil; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstNoInit(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree while optionally considering toChildrenAbove. // No initialization is performed. begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin if vsHasChildren in FRoot.States then begin Result := FRoot; // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin while Assigned(Result.FirstChild) do Result := Result.FirstChild; end else Result := nil; end else Result := nil; end else Result := FRoot.FirstChild; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstSelected(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the current selection while optionally considering toChildrenAbove. begin Result := GetNextSelected(nil, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the first visible node in the tree while optionally considering toChildrenAbove. // If necessary nodes are initialized on demand. begin Result := Node; if not Assigned(Result) then Result := FRoot; if vsHasChildren in Result.States then begin if Result.ChildCount = 0 then InitChildren(Result); // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin Result := GetFirstChild(Result); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Search the first visible sibling. while Assigned(Result.NextSibling) and not (vsVisible in Result.States) do begin Result := Result.NextSibling; // Init node on demand as this might change the visibility. if not (vsInitialized in Result.States) then InitNode(Result); end; // If there a no visible siblings take the parent. if not (vsVisible in Result.States) then begin Result := Result.Parent; if Result = FRoot then Result := nil; Break; end else begin if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); if (not Assigned(Result.FirstChild)) or (not (vsExpanded in Result.States)) then Break; end; Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); until False; end else begin // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; // The visible state can be removed during initialization so init the node first. if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end else Result := nil; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleChild(Node: PVirtualNode): PVirtualNode; // Returns the first visible child node of Node. If necessary nodes are initialized on demand. begin if Node = nil then Node := FRoot; Result := GetFirstChild(Node); if Assigned(Result) and not (vsVisible in Result.States) then Result := GetNextVisibleSibling(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; // Returns the first visible child node of Node. begin if Node = nil then Node := FRoot; Result := Node.FirstChild; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetNextVisibleSiblingNoInit(ResulT); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the first visible node in the tree or given subtree while optionally considering toChildrenAbove. // No initialization is performed. begin Result := Node; if not Assigned(Result) then Result := FRoot; if vsHasChildren in Result.States then begin // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin Result := Result.FirstChild; if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Search the first visible sibling. while Assigned(Result.NextSibling) and not (vsVisible in Result.States) do Result := Result.NextSibling; // If there a no visible siblings take the parent. if not (vsVisible in Result.States) then begin Result := Result.Parent; if Result = FRoot then Result := nil; Break; end else if (not Assigned(Result.FirstChild)) or (not (vsExpanded in Result.States))then Break; Result := Result.FirstChild; until False; end else begin // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end else Result := nil; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetHitTestInfoAt(X, Y: Integer; Relative: Boolean; var HitInfo: THitInfo); // Determines the node that occupies the specified point or nil if there's none. The parameter Relative determines // whether to consider X and Y as being client coordinates (if True) or as being absolute tree coordinates. // HitInfo is filled with flags describing the hit further. var ColLeft, ColRight: Integer; NodeTop: Integer; InitialColumn, NextColumn: TColumnIndex; CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; NodeRect: TRect; begin HitInfo.HitNode := nil; HitInfo.HitPositions := []; HitInfo.HitColumn := NoColumn; // Determine if point lies in the tree's client area. if X < 0 then Include(HitInfo.HitPositions, hiToLeft) else if X > Max(FRangeX, ClientWidth) then Include(HitInfo.HitPositions, hiToRight); //lclheader if Y < IfThen(hoVisible in FHeader.Options, FHeader.Height) then Include(HitInfo.HitPositions, hiAbove) else if Y > Max(FRangeY, inherited GetClientRect.Bottom) then Include(HitInfo.HitPositions, hiBelow); // If the point is in the tree area then check the nodes. if HitInfo.HitPositions = [] then begin // Convert position into absolute coordinate if necessary. if Relative then begin if X > Header.Columns.GetVisibleFixedWidth then Inc(X, FEffectiveOffsetX); //lclheader if hoVisible in FHeader.Options then Dec(Y, FHeader.Height); Dec(Y, FOffsetY); end; HitInfo.HitNode := InternalGetNodeAt(X, Y, False, NodeTop); if HitInfo.HitNode = nil then Include(HitInfo.HitPositions, hiNowhere) else begin // At this point we need some info about the node, so it must be initialized. if not (vsInitialized in HitInfo.HitNode.States) then InitNode(HitInfo.HitNode); if FHeader.UseColumns then begin HitInfo.HitColumn := FHeader.Columns.GetColumnAndBounds(Point(X, Y), ColLeft, ColRight, False); // If auto column spanning is enabled then look for the last non empty column. if toAutoSpanColumns in FOptions.FAutoOptions then begin InitialColumn := HitInfo.HitColumn; // Search to the left of the hit column for empty columns. while (HitInfo.HitColumn > NoColumn) and ColumnIsEmpty(HitInfo.HitNode, HitInfo.HitColumn) do begin NextColumn := FHeader.FColumns.GetPreviousVisibleColumn(HitInfo.HitColumn); if NextColumn = InvalidColumn then Break; HitInfo.HitColumn := NextColumn; Dec(ColLeft, FHeader.FColumns[NextColumn].Width); end; // Search to the right of the hit column for empty columns. repeat InitialColumn := FHeader.FColumns.GetNextVisibleColumn(InitialColumn); if (InitialColumn = InvalidColumn) or not ColumnIsEmpty(HitInfo.HitNode, InitialColumn) then Break; Inc(ColRight, FHeader.FColumns[InitialColumn].Width); until False; end; // Make the X position and the right border relative to the start of the column. Dec(X, ColLeft); Dec(ColRight, ColLeft); end else begin HitInfo.HitColumn := NoColumn; ColRight := Max(FRangeX, ClientWidth); end; ColLeft := 0; if HitInfo.HitColumn = InvalidColumn then Include(HitInfo.HitPositions, hiNowhere) else begin // From now on X is in "column" coordinates (relative to the left column border). HitInfo.HitPositions := [hiOnItem]; // Avoid getting the display rect if this is not necessary. if toNodeHeightResize in FOptions.FMiscOptions then begin NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, False); if Y <= (NodeRect.Top - FOffsetY + 1) then Include(HitInfo.HitPositions, hiUpperSplitter) else if Y >= (NodeRect.Bottom - FOffsetY - 3) then Include(HitInfo.HitPositions, hiLowerSplitter); end; if HitInfo.HitColumn <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[HitInfo.HitColumn].BidiMode; CurrentAlignment := FHeader.FColumns[HitInfo.HitColumn].Alignment; end; if CurrentBidiMode = bdLeftToRight then DetermineHitPositionLTR(HitInfo, X, ColRight, CurrentAlignment) else DetermineHitPositionRTL(HitInfo, X, ColRight, CurrentAlignment); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLast(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last node in the tree branch given by Node and initializes the nodes all the way down including the // result. toChildrenAbove is optionally considered. By using Node = nil the very last node in the tree is returned. var Next: PVirtualNode; begin Result := GetLastChild(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last child. If not keep the node from the last run. // Otherwise use the next last child. Next := GetLastChild(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastInitialized(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last initialized child node in the tree branch given by Node. begin Result := GetLastNoInit(Node, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then Result := GetPreviousInitialized(Result, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last node in the tree branch given by Node without initialization. var Next: PVirtualNode; begin Result := GetLastChildNoInit(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last child. If not keep the node from the last run. // Otherwise use the next last child. Next := GetLastChildNoInit(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastChild(Node: PVirtualNode): PVirtualNode; // Determines the last child of the given node and initializes it if there is one. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else begin if not (vsInitialized in Node.States) then InitNode(Node); if vsHasChildren in Node.States then begin if Node.ChildCount = 0 then InitChildren(Node); Result := Node.LastChild; end else Result := nil; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastChildNoInit(Node: PVirtualNode): PVirtualNode; // Determines the last child of the given node but does not initialize it. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else begin if vsHasChildren in Node.States then Result := Node.LastChild else Result := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the very last visible node in the tree while optionally considering toChildrenAbove. // The nodes are intialized all the way down including the result node. var Next: PVirtualNode; begin Result := GetLastVisibleChild(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last visible child. If not keep the node from the last run. // Otherwise use the next last visible child. Next := GetLastVisibleChild(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleChild(Node: PVirtualNode): PVirtualNode; // Determines the last visible child of the given node and initializes it if necessary. begin if (Node = nil) or (Node = FRoot) then Result := GetLastChild(FRoot) else if FullyVisible[Node] and (vsExpanded in Node.States) then Result := GetLastChild(Node) else Result := nil; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetPreviousVisibleSibling(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; // Determines the last visible child of the given node without initialization. begin if (Node = nil) or (Node = FRoot) then Result := GetLastChildNoInit(FRoot) else if FullyVisible[Node] and (vsExpanded in Node.States) then Result := GetLastChildNoInit(Node) else Result := nil; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetPreviousVisibleSiblingNoInit(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the very last visible node in the tree while optionally considering toChildrenAbove. // No initialization is performed. var Next: PVirtualNode; begin Result := GetLastVisibleChildNoInit(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last visible child. If not keep the node from the last run. // Otherwise use the next last visible child. Next := GetLastVisibleChildNoInit(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer; // This method determines the width of the largest node in the given column. // If UseSmartColumnWidth is True then only the visible nodes which are in view will be considered // Note: If UseSmartColumnWidth is False then every visible node in the tree will be initialized contradicting so // the virtual paradigm. var Run, LastNode, NextNode: PVirtualNode; NodeLeft, TextLeft, CurrentWidth: Integer; WithCheck, WithImages, WithStateImages: Boolean; CheckOffset, ImageOffset, StateImageOffset: Integer; begin if OperationCanceled then begin // Behave non-destructive. Result := FHeader.FColumns[Column].Width; Exit; end else Result := 0; BeginOperation; if Assigned(FOnBeforeGetMaxColumnWidth) then FOnBeforeGetMaxColumnWidth(FHeader, Column, UseSmartColumnWidth); // Don't check the event here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if Assigned(FCheckImages) then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; if UseSmartColumnWidth then // Get first visible node which is in view. Run := GetTopNode else Run := GetFirstVisible(nil, True); if Column = FHeader.MainColumn then begin if toFixedIndent in FOptions.FPaintOptions then NodeLeft := FIndent else begin if toShowRoot in FOptions.FPaintOptions then NodeLeft := Integer((GetNodeLevel(Run) + 1) * FIndent) else NodeLeft := Integer(GetNodeLevel(Run) * FIndent); end; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); end else begin NodeLeft := 0; WithCheck := False; end; // Consider node margin at the left of the nodes. Inc(NodeLeft, FMargin); // Decide where to stop. if UseSmartColumnWidth then LastNode := GetNextVisible(BottomNode) else LastNode := nil; while Assigned(Run) and not OperationCanceled do begin TextLeft := NodeLeft; if WithCheck and (Run.CheckType <> ctNone) then Inc(TextLeft, CheckOffset); if WithImages and HasImage(Run, ikNormal, Column) then Inc(TextLeft, ImageOffset); if WithStateImages and HasImage(Run, ikState, Column) then Inc(TextLeft, StateImageOffset); CurrentWidth := DoGetNodeWidth(Run, Column); Inc(CurrentWidth, DoGetCellContentMargin(Run, Column).X); if Result < (TextLeft + CurrentWidth) then Result := TextLeft + CurrentWidth; // Get next visible node and update left node position if needed. NextNode := GetNextVisible(Run, True); if NextNode = LastNode then Break; if (Column = Header.MainColumn) and not (toFixedIndent in FOptions.FPaintOptions) then Inc(NodeLeft, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; end; if toShowVertGridLines in FOptions.FPaintOptions then Inc(Result); if Assigned(FOnAfterGetMaxColumnWidth) then FOnAfterGetMaxColumnWidth(FHeader, Column, Result); EndOperation; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns next node in tree while optionally considering toChildrenAbove. The Result will be initialized if needed. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If this node has no siblings use the parent. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; end; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; // Has this node got children? Initialize them if necessary. if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); // Now take a look at the children. while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); end; end; end else begin // Has this node got children? if vsHasChildren in Result.States then begin // Yes, there are child nodes. Initialize them if necessary. if Result.ChildCount = 0 then InitChildren(Result); end; // if there is no child node try siblings if Assigned(Result.FirstChild) then Result := Result.FirstChild else begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and (Result.CheckState <> State) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in the tree which is currently marked for a clipboard operation. Since only visible nodes can // be marked (or they are hidden after they have been marked) it is not necessary to initialize nodes to check for // child nodes. The result, however, is initialized if necessary. begin if ClipboardStates * FStates <> [] then begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsCutOrCopy in Result.States) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in tree which is initialized. begin Result := Node; repeat Result := GetNextNoInit(Result, ConsiderChildrenAbove); until (Result = nil) or (vsInitialized in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextLeaf(Node: PVirtualNode): PVirtualNode; // Returns the next node in the tree which has currently no children. // The result is initialized if necessary. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.FirstChild else Result := GetNext(Node); while Assigned(Result) and (vsHasChildren in Result.States) do Result := GetNext(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; // Returns the next node in the tree on a specific level. // The result is initialized if necessary. var StartNodeLevel: Cardinal; begin Result := nil; if Assigned(Node) and (Node <> FRoot) then begin StartNodeLevel := GetNodeLevel(Node); if StartNodeLevel < NodeLevel then begin Result := GetNext(Node); if Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) then Result := GetNextLevel(Result, NodeLevel); end else if StartNodeLevel = NodeLevel then begin Result := Node.NextSibling; if not Assigned(Result) then // i.e. start node was a last sibling begin Result := Node.Parent; if Assigned(Result) then begin // go to next anchestor of the start node which has a next sibling (if exists) while Assigned(Result) and not Assigned(Result.NextSibling) do Result := Result.Parent; if Assigned(Result) then Result := GetNextLevel(Result.NextSibling, NodeLevel); end; end; end else // i.e. StartNodeLevel > NodeLevel Result := GetNextLevel(Node.Parent, NodeLevel); end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean): PVirtualNode; // Optimized version of GetNext performing no initialization, but optionally considering toChildrenAbove. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If this node has no siblings use the parent. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; end; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; // Now take a look at the children. while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; end; end; end else begin // If there is no child node try siblings. if Assigned(Result.FirstChild) then Result := Result.FirstChild else begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in the tree which is currently selected. Since children of unitialized nodes cannot be // in the current selection (because they simply do not exist yet) it is not necessary to initialize nodes here. // The result however is initialized if necessary. begin if FSelectionCount > 0 then begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsSelected in Result.States) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSibling(Node: PVirtualNode): PVirtualNode; // Returns the next sibling of Node and initializes it if necessary. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.NextSibling; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the next sibling of Node performing no initialization. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns next node in tree, with regard to Node, which is visible. // Nodes which need an initialization (including the result) are initialized. // toChildrenAbove is optionally considered which is the default here. var ForceSearch: Boolean; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); // If the given node is not visible then look for a parent node which is visible, otherwise we will // likely go unnecessarily through a whole bunch of invisible nodes. if not FullyVisible[Result] then Result := GetVisibleParent(Result); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // If there a no siblings anymore, go up one level. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; Break; end; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; if not (vsInitialized in Result.States) then InitNode(Result); if not (vsVisible in Result.States) then Continue; // Now take a look at the children. // As the children are initialized while toggling, we don't need to do this here. while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); if not (vsVisible in Result.States) then Break; end; // If we found a visible node we don't need to search any longer. if vsVisible in Result.States then Break; end; until False; end else begin // Has this node got children? if [vsHasChildren, vsExpanded] * Result.States = [vsHasChildren, vsExpanded] then begin // Yes, there are child nodes. Initialize them if necessary. if Result.ChildCount = 0 then InitChildren(Result); end; // Child nodes are the first choice if possible. if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then begin Result := GetFirstChild(Result); ForceSearch := False; end else ForceSearch := True; // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if Assigned(Result) and (ForceSearch or not (vsVisible in Result.States)) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the next node in tree, with regard to Node, which is visible. // toChildrenAbove is optionally considered (which is the default). No initialization is done. var ForceSearch: Boolean; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // If there a no siblings anymore, go up one level. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; Break; end; if vsVisible in Result.States then Break; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; if not (vsVisible in Result.States) then Continue; // Now take a look at the children. while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsVisible in Result.States) then Break; end; // If we found a visible node we don't need to search any longer. if vsVisible in Result.States then Break; end; until False; end else begin // If the given node is not visible then look for a parent node which is visible, otherwise we will // likely go unnecessarily through a whole bunch of invisible nodes. if not FullyVisible[Result] then Result := GetVisibleParent(Result); // Child nodes are the first choice if possible. if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then begin Result := Result.FirstChild; ForceSearch := False; end else ForceSearch := True; // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if ForceSearch or not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; // Returns the next visible sibling after Node. Initialization is done implicitly. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := GetNextSibling(Result); until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the next visible sibling after Node. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := Result.NextSibling; until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeAt(X, Y: Integer): PVirtualNode; // Overloaded variant of GetNodeAt to easy life of application developers which do not need to have the exact // top position returned and always use client coordinates. var Dummy: Integer; begin Result := GetNodeAt(X, Y, True, Dummy); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; var OffsetByHeader: Boolean; begin //lclheader OffsetByHeader := Relative and (hoVisible in FHeader.Options); if OffsetByHeader then Dec(Y, FHeader.Height); Result := InternalGetNodeAt(X, Y, Relative, NodeTop); //lclheader if OffsetByHeader then Inc(NodeTop, FHeader.Height); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeData(Node: PVirtualNode): Pointer; // Returns the address of the user defined data area in the node. begin Assert(FNodeDataSize > 0, 'NodeDataSize not initialized.'); if (FNodeDataSize <= 0) or (Node = nil) or (Node = FRoot) then Result := nil else Result := PByte(@Node.Data) + FTotalInternalDataSize; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeLevel(Node: PVirtualNode): Cardinal; // returns the level of the given node var Run: PVirtualNode; begin Result := 0; if Assigned(Node) and (Node <> FRoot) then begin Run := Node.Parent; while Run <> FRoot do begin Run := Run.Parent; Inc(Result); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPrevious(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns previous node in tree. If ConsiderChildrenAbove is True the function considers // whether toChildrenAbove is currently set, otherwise the result will always be the previous // node in top-down order regardless of the current PaintOptions. // The Result will be initialized if needed. var Run: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // Has this node got children? Initialize them if necessary. if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); // If there is a last child, take it; if not try the previous sibling. if Assigned(Result.LastChild) then Result := Result.LastChild else if Assigned(Result.PrevSibling) then Result := Result.PrevSibling else begin // If neither a last child nor a previous sibling exist, go the tree upwards and // look, wether one of the parent nodes have a previous sibling. If not the result // will ne nil. repeat Result := Result.Parent; Run := nil; if Result <> FRoot then Run := Result.PrevSibling else Result := nil; until Assigned(Run) or (Result = nil); if Assigned(Run) then Result := Run; end; end else begin // Is there a previous sibling? if Assigned(Node.PrevSibling) then begin // Go down and find the last child node. Result := GetLast(Node.PrevSibling); if Result = nil then Result := Node.PrevSibling; end else // no previous sibling so the parent of the node is the previous visible node if Node.Parent <> FRoot then Result := Node.Parent else Result := nil; end; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; begin if (Node = nil) or (Node = FRoot) then Result := GetLastNoInit(nil, ConsiderChildrenAbove) else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and (Result.CheckState <> State) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in the tree which is currently marked for a clipboard operation. Since only visible nodes can // be marked (or they are hidden after they have been marked) it is not necessary to initialize nodes to check for // child nodes. The result, however, is initialized if necessary. begin if ClipboardStates * FStates <> [] then begin if (Node = nil) or (Node = FRoot) then Result := GetLastNoInit(nil, ConsiderChildrenAbove) else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsCutOrCopy in Result.States) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in tree which is initialized. begin Result := Node; repeat Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); until (Result = nil) or (vsInitialized in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousLeaf(Node: PVirtualNode): PVirtualNode; // Returns the previous node in the tree which has currently no children. // The result is initialized if necessary. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else Result := GetPrevious(Node); while Assigned(Result) and (vsHasChildren in Result.States) do Result := GetPrevious(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; // Returns the previous node in the tree on a specific level. // The result is initialized if necessary. var StartNodeLevel: Cardinal; Run: PVirtualNode; begin Result := nil; if Assigned(Node) and (Node <> FRoot) then begin StartNodeLevel := GetNodeLevel(Node); if StartNodeLevel < NodeLevel then begin Result := Node.PrevSibling; if Assigned(Result) then begin // go to last descendant of previous sibling with desired node level (if exists) Run := Result; while Assigned(Run) and (GetNodeLevel(Run) < NodeLevel) do begin Result := Run; Run := GetLastChild(Run); end; if Assigned(Run) and (GetNodeLevel(Run) = NodeLevel) then Result := Run else begin if Assigned(Result.PrevSibling) then Result := GetPreviousLevel(Result, NodeLevel) else if Assigned(Result) and (Result.Parent <> FRoot) then Result := GetPreviousLevel(Result.Parent, NodeLevel) else Result := nil; end; end else Result := GetPreviousLevel(Node.Parent, NodeLevel); end else if StartNodeLevel = NodeLevel then begin Result := Node.PrevSibling; if not Assigned(Result) then // i.e. start node was a first sibling begin Result := Node.Parent; if Assigned(Result) then Result := GetPreviousLevel(Result, NodeLevel); end; end else // i.e. StartNodeLevel > NodeLevel Result := GetPreviousLevel(Node.Parent, NodeLevel); end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns previous node in tree, optionally considering toChildrenAbove. No initialization is performed. var Run: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If there is a last child, take it; if not try the previous sibling. if Assigned(Result.LastChild) then Result := Result.LastChild else if Assigned(Result.PrevSibling) then Result := Result.PrevSibling else begin // If neither a last child nor a previous sibling exist, go the tree upwards and // look, wether one of the parent nodes have a previous sibling. If not the result // will ne nil. repeat Result := Result.Parent; Run := nil; if Result <> FRoot then Run := Result.PrevSibling else Result := nil; until Assigned(Run) or (Result = nil); if Assigned(Run) then Result := Run; end; end else begin // Is there a previous sibling? if Assigned(Node.PrevSibling) then begin // Go down and find the last child node. Result := GetLastNoInit(Node.PrevSibling); if Result = nil then Result := Node.PrevSibling; end else // No previous sibling so the parent of the node is the previous node. if Node.Parent <> FRoot then Result := Node.Parent else Result := nil end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in the tree which is currently selected. Since children of unitialized nodes cannot be // in the current selection (because they simply do not exist yet) it is not necessary to initialize nodes here. // The result however is initialized if necessary. begin if FSelectionCount > 0 then begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsSelected in Result.States) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSibling(Node: PVirtualNode): PVirtualNode; // Get next sibling of Node, initialize it if necessary. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.PrevSibling; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Get next sibling of Node, performes no initialization. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.PrevSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. // Nodes which need an initialization (including the result) are initialized. // toChildrenAbove is optionally considered which is the default here. var Marker: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); repeat // If the given node is not visible then look for a parent node which is visible and use its last visible // child or the parent node (if there is no visible child) as result. if not FullyVisible[Result] then begin Result := GetVisibleParent(Result); if Result = FRoot then Result := nil; Marker := GetLastVisible(Result, True); if Assigned(Marker) then Result := Marker; end else begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat if Assigned(Result.LastChild) and (vsExpanded in Result.States) then begin Result := Result.LastChild; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else if Assigned(Result.PrevSibling) then begin if not (vsInitialized in Result.PrevSibling.States) then InitNode(Result.PrevSibling); if vsVisible in Result.PrevSibling.States then begin Result := Result.PrevSibling; Break; end; end else begin Marker := nil; repeat Result := Result.Parent; if Result <> FRoot then Marker := GetPreviousVisibleSibling(Result) else Result := nil; until Assigned(Marker) or (Result = nil); if Assigned(Marker) then Result := Marker; Break; end; until False; end else begin repeat // Is there a previous sibling node? if Assigned(Result.PrevSibling) then begin Result := Result.PrevSibling; // Initialize the new node and check its visibility. if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then begin // If there are visible child nodes then use the last one. Marker := GetLastVisible(Result, True); if Assigned(Marker) then Result := Marker; Break; end; end else begin // No previous sibling there so the parent node is the nearest previous node. Result := Result.Parent; if Result = FRoot then Result := nil; Break; end; until False; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; until not Assigned(Result) or (vsVisible in Result.States); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. // toChildrenAbove is optionally considered which is the default here. var Marker: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); repeat // If the given node is not visible then look for a parent node which is visible and use its last visible // child or the parent node (if there is no visible child) as result. if not FullyVisible[Result] then begin Result := GetVisibleParent(Result); if Result = FRoot then Result := nil; Marker := GetLastVisibleNoInit(Result, True); if Assigned(Marker) then Result := Marker; end else begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Is the current node expanded and has children? if (vsExpanded in Result.States) and Assigned(Result.LastChild) then begin Result := Result.LastChild; if vsVisible in Result.States then Break; end else if Assigned(Result.PrevSibling) then begin // No children anymore, so take the previous sibling. if vsVisible in Result.PrevSibling.States then begin Result := Result.PrevSibling; Break; end; end else begin // No children and no previous siblings, so walk up the tree and look wether // a parent has a previous visible sibling. If that is the case take it, // otherwise there is no previous visible node. Marker := nil; repeat Result := Result.Parent; if Result <> FRoot then Marker := GetPreviousVisibleSiblingNoInit(Result) else Result := nil; until Assigned(Marker) or (Result = nil); if Assigned(Marker) then Result := Marker; Break; end; until False; end else begin repeat // Is there a previous sibling node? if Assigned(Result.PrevSibling) then begin Result := Result.PrevSibling; if vsVisible in Result.States then begin // If there are visible child nodes then use the last one. Marker := GetLastVisibleNoInit(Result, True); if Assigned(Marker) then Result := Marker; Break; end; end else begin // No previous sibling there so the parent node is the nearest previous node. Result := Result.Parent; if Result = FRoot then Result := nil; Break; end; until False; end; end; until not Assigned(Result) or (vsVisible in Result.States); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; // Returns the previous visible sibling before Node. Initialization is done implicitly. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := GetPreviousSibling(Result); until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the previous visible sibling before Node. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := Result.PrevSibling; until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSortedCutCopySet(Resolve: Boolean): TNodeArray; // Same as GetSortedSelection but with nodes marked as being part in the current cut/copy set (e.g. for clipboard). var Run: PVirtualNode; Counter: Cardinal; //--------------- local function -------------------------------------------- procedure IncludeThisNode(Node: PVirtualNode); // adds the given node to the result var Len: Cardinal; begin Len := Length(Result); if Counter = Len then begin if Len < 100 then Len := 100 else Len := Len + Len div 10; SetLength(Result, Len); end; Result[Counter] := Node; Inc(Counter); end; //--------------- end local function ---------------------------------------- begin Run := FRoot.FirstChild; Counter := 0; if Resolve then begin // Resolving is actually easy: just find the first cutted node in logical order // and then never go deeper in level than this node as long as there's a sibling node. // Restart the search for a cutted node (at any level) if there are no further siblings. while Assigned(Run) do begin if vsCutOrCopy in Run.States then begin IncludeThisNode(Run); if Assigned(Run.NextSibling) then Run := Run.NextSibling else begin // If there are no further siblings then go up one or more levels until a node is // found or all nodes have been processed. Although we consider here only initialized // nodes we don't need to make any special checks as only initialized nodes can also be selected. repeat Run := Run.Parent; until (Run = FRoot) or Assigned(Run.NextSibling); if Run = FRoot then Break else Run := Run.NextSibling; end; end else Run := GetNextNoInit(Run); end; end else while Assigned(Run) do begin if vsCutOrCopy in Run.States then IncludeThisNode(Run); Run := GetNextNoInit(Run); end; // set the resulting array to its real length SetLength(Result, Counter); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSortedSelection(Resolve: Boolean): TNodeArray; // Returns a list of selected nodes sorted in logical order, that is, as they appear in the tree. // If Resolve is True then nodes which are children of other selected nodes are not put into the new array. // This feature is in particuar important when doing drag'n drop as in this case all selected node plus their children // need to be considered. A selected node which is child (grand child etc.) of another selected node is then // automatically included and doesn't need to be explicitely mentioned in the returned selection array. // // Note: The caller is responsible for freeing the array. Allocation is done here. Usually, though, freeing the array // doesn't need additional attention as it is automatically freed by Delphi when it gets out of scope. var Run: PVirtualNode; Counter: Cardinal; begin SetLength(Result, FSelectionCount); if FSelectionCount > 0 then begin Run := FRoot.FirstChild; Counter := 0; if Resolve then begin // Resolving is actually easy: just find the first selected node in logical order // and then never go deeper in level than this node as long as there's a sibling node. // Restart the search for a selected node (at any level) if there are no further siblings. while Assigned(Run) do begin if vsSelected in Run.States then begin Result[Counter] := Run; Inc(Counter); if Assigned(Run.NextSibling) then Run := Run.NextSibling else begin // If there are no further siblings then go up one or more levels until a node is // found or all nodes have been processed. Although we consider here only initialized // nodes we don't need to make any special checks as only initialized nodes can also be selected. repeat Run := Run.Parent; until (Run = FRoot) or Assigned(Run.NextSibling); if Run = FRoot then Break else Run := Run.NextSibling; end; end else Run := GetNextNoInit(Run); end; end else while Assigned(Run) do begin if vsSelected in Run.States then begin Result[Counter] := Run; Inc(Counter); end; Run := GetNextNoInit(Run); end; // Since we may have skipped some nodes the result array is likely to be smaller than the // selection array, hence shorten the result to true length. if Integer(Counter) < Length(Result) then SetLength(Result, Counter); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); // Generic base method for editors, hint windows etc. to get some info about a node. begin R := Rect(0, 0, 0, 0); Text := ''; AFont.Assign(Font); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTreeRect: TRect; // Returns the true size of the tree in pixels. This size is at least ClientHeight x ClientWidth and depends on // the expand state, header size etc. // Note: if no columns are used then the width of the tree is determined by the largest node which is currently in the // client area. This might however not be the largest node in the entire tree. begin Result := Rect(0, 0, Max(FRangeX, ClientWidth), Max(FRangeY, ClientHeight)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisibleParent(Node: PVirtualNode): PVirtualNode; // Returns the first (nearest) parent node of Node which is visible. // This method is one of the seldom cases where the hidden root node could be returned. begin Assert(Assigned(Node), 'Node must not be nil.'); Assert(Node <> FRoot, 'Node must not be the hidden root node.'); Result := Node.Parent; while (Result <> FRoot) and not FullyVisible[Result] do Result := Result.Parent; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasAsParent(Node, PotentialParent: PVirtualNode): Boolean; // Determines whether Node has got PotentialParent as one of its parents. var Run: PVirtualNode; begin Result := Assigned(Node) and Assigned(PotentialParent) and (Node <> PotentialParent); if Result then begin Run := Node; while (Run <> FRoot) and (Run <> PotentialParent) do Run := Run.Parent; Result := Run = PotentialParent; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InsertNode(Node: PVirtualNode; Mode: TVTNodeAttachMode; UserData: Pointer = nil): PVirtualNode; // Adds a new node relative to Node. The final position is determined by Mode. // UserData can be used to set the first 4 bytes of the user data area to an initial value which can be used // in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet // "officially" initialized. // InsertNode is a compatibility method and will implicitly validate the given node if the new node // is to be added as child node. This is however against the virtual paradigm and hence I dissuade from its usage. var NodeData: ^Pointer; begin if Mode <> amNoWhere then begin CancelEditNode; if Node = nil then Node := FRoot; // we need a new node... Result := MakeNewNode; // avoid erronous attach modes if Node = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Validate given node in case the new node becomes its child. if (Mode in [amAddChildFirst, amAddChildLast]) and not (vsInitialized in Node.States) then InitNode(Node); InternalConnectNode(Result, Node, Self, Mode); // Check if there is initial user data and there is also enough user data space allocated. if Assigned(UserData) then if FNodeDataSize >= 4 then begin NodeData := Pointer(PByte(@Result.Data) + FTotalInternalDataSize); NodeData^ := UserData; Include(Result.States, vsInitialUserData); end else ShowError(SCannotSetUserData, hcTFCannotSetUserData); if FUpdateCount = 0 then begin // If auto sort is enabled then sort the node or its parent (depending on the insert mode). if (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then case Mode of amInsertBefore, amInsertAfter: // Here no initialization is necessary because *if* a node has already got children then it // must also be initialized. // Note: Node can never be FRoot at this point. Sort(Node.Parent, FHeader.FSortColumn, FHeader.FSortDirection, True); amAddChildFirst, amAddChildLast: Sort(Node, FHeader.FSortColumn, FHeader.FSortDirection, True); end; UpdateScrollbars(True); if Mode = amInsertBefore then InvalidateToBottom(Result) else InvalidateToBottom(Node); end; StructureChange(Result, crNodeAdded); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateChildren(Node: PVirtualNode; Recursive: Boolean); // Invalidates Node and its immediate children. // If Recursive is True then all grandchildren are invalidated as well. // The node itself is initialized if necessary and its child nodes are created (and initialized too if // Recursive is True). var Run: PVirtualNode; begin if Assigned(Node) then begin if not (vsInitialized in Node.States) then InitNode(Node); InvalidateNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Run := Node.FirstChild; end else Run := FRoot.FirstChild; while Assigned(Run) do begin InvalidateNode(Run); if Recursive then InvalidateChildren(Run, True); Run := Run.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateColumn(Column: TColumnIndex); // Invalidates the client area part of a column. var R: TRect; begin if (FUpdateCount = 0) and HandleAllocated and FHeader.FColumns.IsValidColumn(Column) then begin R := ClientRect; //lclheader if hoVisible in FHeader.FOptions then OffsetRect(R, 0, FHeader.Height); FHeader.Columns.GetColumnBounds(Column, R.Left, R.Right); InvalidateRect(Handle, @R, False); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InvalidateNode(Node: PVirtualNode): TRect; // Initiates repaint of the given node and returns the just invalidated rectangle. begin if (FUpdateCount = 0) and HandleAllocated then begin Result := GetDisplayRect(Node, NoColumn, False); InvalidateRect(Handle, @Result, False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateToBottom(Node: PVirtualNode); // Initiates repaint of client area starting at given node. If this node is not visible or not yet initialized // then nothing happens. var R: TRect; begin if FUpdateCount = 0 then begin if (Node = nil) or (Node = FRoot) then Invalidate else if (vsInitialized in Node.States) and (vsVisible in Node.States) then begin R := GetDisplayRect(Node, -1, False); if R.Top < ClientHeight then begin if (toChildrenAbove in FOptions.FPaintOptions) and (vsExpanded in Node.States) then Dec(R.Top, Node.TotalHeight + NodeHeight[Node]); R.Bottom := ClientHeight; //lclheader if hoVisible in FHeader.FOptions then Inc(R.Bottom, FHeader.Height); InvalidateRect(Handle, @R, False); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvertSelection(VisibleOnly: Boolean); // Inverts the current selection (so nodes which are selected become unselected and vice versa). // If VisibleOnly is True then only visible nodes are considered. var Run: PVirtualNode; NewSize: Integer; NextFunction: TGetNextNodeProc; TriggerChange: Boolean; begin if not FSelectionLocked and (toMultiSelect in FOptions.FSelectionOptions) then begin Run := FRoot.FirstChild; ClearTempCache; if VisibleOnly then NextFunction := GetNextVisibleNoInit else NextFunction := GetNextNoInit; while Assigned(Run) do begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); Run := NextFunction(Run); end; // do some housekeeping // Need to trigger the OnChange event from here if nodes were only deleted but not added. TriggerChange := False; NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); TriggerChange := True; end; if FTempNodeCount > 0 then begin AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; TriggerChange := False; end; Invalidate; if TriggerChange then Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsEditing: Boolean; begin Result := tsEditing in FStates; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsMouseSelecting: Boolean; begin Result := (tsDrawSelPending in FStates) or (tsDrawSelecting in FStates); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer; Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode; // Iterates through the all children and grandchildren etc. of Node (or the entire tree if Node = nil) // and calls for each node the provided callback method (which must not be empty). // Filter determines which nodes to consider (an empty set denotes all nodes). // If DoInit is True then nodes which aren't initialized yet will be initialized. // Note: During execution of the callback the application can set Abort to True. In this case the iteration is stopped // and the last accessed node (the one on which the callback set Abort to True) is returned to the caller. // Otherwise (no abort) nil is returned. var Stop: PVirtualNode; Abort: Boolean; GetNextNode: TGetNextNodeProc; WasIterating: Boolean; begin Assert(Node <> FRoot, 'Node must not be the hidden root node.'); WasIterating := tsIterating in FStates; DoStateChange([tsIterating]); try // prepare function to be used when advancing if DoInit then GetNextNode := GetNext else GetNextNode := GetNextNoInit; Abort := False; if Node = nil then Stop := nil else begin if not (vsInitialized in Node.States) and DoInit then InitNode(Node); // The stopper does not need to be initialized since it is not taken into the enumeration. Stop := Node.NextSibling; if Stop = nil then begin Stop := Node; repeat Stop := Stop.Parent; until (Stop = FRoot) or Assigned(Stop.NextSibling); if Stop = FRoot then Stop := nil else Stop := Stop.NextSibling; end; end; // Use first node if we start with the root. if Node = nil then Node := GetFirstNoInit; if Assigned(Node) then begin if not (vsInitialized in Node.States) and DoInit then InitNode(Node); // Skip given node if only the child nodes are requested. if ChildNodesOnly then begin if Node.ChildCount = 0 then Node := nil else Node := GetNextNode(Node); end; if Filter = [] then begin // unfiltered loop while Assigned(Node) and (Node <> Stop) do begin Callback(Self, Node, Data, Abort); if Abort then Break; Node := GetNextNode(Node); end; end else begin // filtered loop while Assigned(Node) and (Node <> Stop) do begin if Node.States * Filter = Filter then Callback(Self, Node, Data, Abort); if Abort then Break; Node := GetNextNode(Node) end; end; end; if Abort then Result := Node else Result := nil; finally if not WasIterating then DoStateChange([], [tsIterating]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadFromFile(const FileName: TFileName); var FileStream: TFileStream; begin FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try LoadFromStream(FileStream); finally FileStream.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadFromStream(Stream: TStream); // Clears the current content of the tree and loads a new structure from the given stream. var ThisID: TMagicID; Version, Count: Cardinal; Node: PVirtualNode; begin if not (toReadOnly in FOptions.FMiscOptions) then begin Clear; // Check first whether this is a stream we can read. if Stream.Read(ThisID, SizeOf(TMagicID)) < SizeOf(TMagicID) then ShowError(SStreamTooSmall, hcTFStreamTooSmall); if (ThisID[0] = MagicID[0]) and (ThisID[1] = MagicID[1]) and (ThisID[2] = MagicID[2]) and (ThisID[5] = MagicID[5]) then begin Version := Word(ThisID[3]); if Version <= VTTreeStreamVersion then begin BeginUpdate; try // LCL port started with tree stream version 2 so no need to do the check here Stream.ReadBuffer(Count, SizeOf(Count)); while (Stream.Position < Stream.Size) and (Count > 0) do begin Dec(Count); Node := MakeNewNode; InternalConnectNode(Node, FRoot, Self, amAddChildLast); InternalAddFromStream(Stream, Version, Node); end; DoNodeCopied(nil); finally EndUpdate; end; end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end else ShowError(SWrongStreamFormat, hcTFWrongStreamFormat); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MeasureItemHeight(const Canvas: TCanvas; Node: PVirtualNode); // If the height of the given node has not yet been measured then do it now. var NewNodeHeight: Integer; begin if not (vsHeightMeasured in Node.States) then begin Include(Node.States, vsHeightMeasured); NewNodeHeight := Node.NodeHeight; DoMeasureItem(Canvas, Node, NewNodeHeight); if NewNodeHeight <> Node.NodeHeight then SetNodeHeight(Node, NewNodeHeight); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MoveTo(Node: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); // A simplified method to allow to move nodes to the root of another tree. begin MoveTo(Node, Tree.FRoot, Mode, ChildrenOnly); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MoveTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); // Moves the given node (and all its children) to Target. Source must belong to the tree instance which calls this // MoveTo method. Mode determines how to connect Source to Target. // This method might involve a change of the tree if Target belongs to a different tree than Source. var TargetTree: TBaseVirtualTree; Allowed: Boolean; NewNode: PVirtualNode; Stream: TMemoryStream; begin Assert(TreeFromNode(Source) = Self, 'The source tree must contain the source node.'); // When moving nodes then source and target must not be the same node unless only the source's children are // moved and they are inserted before or after the node itself. Allowed := (Source <> Target) or ((Mode in [amInsertBefore, amInsertAfter]) and ChildrenOnly); if Allowed and (Mode <> amNoWhere) and Assigned(Source) and (Source <> FRoot) and not (toReadOnly in FOptions.FMiscOptions) then begin // Assume that an empty destination means the root in this (the source) tree. if Target = nil then begin TargetTree := Self; Target := FRoot; Mode := amAddChildFirst; end else TargetTree := TreeFromNode(Target); if Target = TargetTree.FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Make sure the target node is initialized. if not (vsInitialized in Target.States) then InitNode(Target) else if (vsHasChildren in Target.States) and (Target.ChildCount = 0) then InitChildren(Target); if TargetTree = Self then begin // Simple case: move node(s) within the same tree. if Target = FRoot then Allowed := DoNodeMoving(Source, nil) else Allowed := DoNodeMoving(Source, Target); if Allowed then begin // Check first that Source is not added as new child to a target node which // is already a child of Source. // Consider the case Source and Target are the same node, but only child nodes are moved. if (Source <> Target) and HasAsParent(Target, Source) then ShowError(SWrongMoveError, hcTFWrongMoveError); if not ChildrenOnly then begin // Disconnect from old location. InternalDisconnectNode(Source, True); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); end else begin // Only child nodes should be moved. Insertion order depends on move mode. if Mode = amAddChildFirst then begin Source := Source.LastChild; while Assigned(Source) do begin NewNode := Source.PrevSibling; // Disconnect from old location. InternalDisconnectNode(Source, True, False); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); Source := NewNode; end; end else begin Source := Source.FirstChild; while Assigned(Source) do begin NewNode := Source.NextSibling; // Disconnect from old location. InternalDisconnectNode(Source, True, False); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); Source := NewNode; end; end; end; end; end else begin // Difficult case: move node(s) to another tree. // In opposition to node copying we ask only once if moving is allowed because // we cannot take back a move once done. if Target = TargetTree.FRoot then Allowed := DoNodeMoving(Source, nil) else Allowed := DoNodeMoving(Source, Target); if Allowed then begin Stream := TMemoryStream.Create; try // Write all nodes into a temporary stream depending on the ChildrenOnly flag. if not ChildrenOnly then WriteNode(Stream, Source) else begin Source := Source.FirstChild; while Assigned(Source) do begin WriteNode(Stream, Source); Source := Source.NextSibling; end; end; // Now load the serialized nodes into the target node (tree). TargetTree.BeginUpdate; try Stream.Position := 0; while Stream.Position < Stream.Size do begin NewNode := TargetTree.MakeNewNode; InternalConnectNode(NewNode, Target, TargetTree, Mode); TargetTree.InternalAddFromStream(Stream, VTTreeStreamVersion, NewNode); DoNodeMoved(NewNode); end; finally TargetTree.EndUpdate; end; finally Stream.Free; end; // finally delete original nodes BeginUpdate; try if ChildrenOnly then DeleteChildren(Source) else DeleteNode(Source); finally EndUpdate; end; end; end; InvalidateCache; if (FUpdateCount = 0) and Allowed then begin ValidateCache; UpdateScrollBars(True); Invalidate; if TargetTree <> Self then TargetTree.Invalidate; end; StructureChange(Source, crNodeMoved); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintTree(TargetCanvas: TCanvas; const Window: TRect; Target: TPoint; PaintOptions: TVTInternalPaintOptions; PixelFormat: TPixelFormat); // This is the core paint routine of the tree. It is responsible for maintaining the paint cycles per node as well // as coordinating drawing of the various parts of the tree image. // TargetCanvas is the canvas to which to draw the tree image. This is usually the tree window itself but could well // be a bitmap or printer canvas. // Window determines which part of the entire tree image to draw. The full size of the virtual image is determined // by GetTreeRect. // Target is the position in TargetCanvas where to draw the tree part specified by Window. // PaintOptions determines what of the tree to draw. For different tasks usually different parts need to be drawn, with // a full image in the window, selected only nodes for a drag image etc. const ImageKind: array[Boolean] of TVTImageKind = (ikNormal, ikSelected); var DrawSelectionRect, UseBackground, ShowImages, ShowStateImages, ShowCheckImages, UseColumns, IsMainColumn: Boolean; {$ifdef ManualClipNeeded} YCorrect, {$endif} VAlign, IndentSize, ButtonX, ButtonY: Integer; LineImage: TLineImage; PaintInfo: TVTPaintInfo; // all necessary information about a node to pass to the paint routines R, // the area of an entire node in its local coordinate TargetRect, // the area of a node (part) in the target canvas SelectionRect: TRect; // ordered rectangle used for drawing the selection focus rect NextColumn: TColumnIndex; BaseOffset: Integer; // top position of the top node to draw given in absolute tree coordinates NodeBitmap: TBitmap; // small buffer to draw flicker free MaximumRight, // maximum horizontal target position MaximumBottom: Integer; // maximum vertical target position SelectLevel: Integer; // > 0 if current node is selected or child/grandchild etc. of a selected node FirstColumn: TColumnIndex; // index of first column which is at least partially visible in the given window begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaint],'PaintTree');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'Window',Window);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'Target',Target);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'ClientRect',ClientRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'TreeRect',GetTreeRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'OffsetX: %d OffsetY: %d',[OffsetX,OffsetY]);{$endif} //lcl changes to 24bit color depth when screen depth is 32 bit //todo: remove when this limitation is removed {$ifdef Windows} if (PixelFormat = pfDevice) and (ScreenInfo.ColorDepth = 32) then PixelFormat := pf32bit; {$endif} if not (tsPainting in FStates) then begin DoStateChange([tsPainting]); try DoBeforePaint(TargetCanvas); // Create small bitmaps and initialize default values. // The bitmaps are used to paint one node at a time and to draw the result to the target (e.g. screen) in one step, // to prevent flickering. NodeBitmap := TBitmap.Create; // For alpha blending we need the 32 bit pixel format. For other targets there might be a need for a certain // pixel format (e.g. printing). if MMXAvailable and ((FDrawSelectionMode = smBlendedRectangle) or (tsUseThemes in FStates) or (toUseBlendedSelection in FOptions.PaintOptions)) then NodeBitmap.PixelFormat := pf32Bit else NodeBitmap.PixelFormat := PixelFormat; // Prepare paint info structure and lock the back bitmap canvas to avoid that it gets freed on the way. FillChar(PaintInfo, SizeOf(PaintInfo), 0); PaintInfo.Canvas := NodeBitmap.Canvas; NodeBitmap.Canvas.Lock; try {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FNewSelRect', FNewSelRect);{$endif} // Prepare the current selection rectangle once. The corner points are absolute tree coordinates. SelectionRect := OrderRect(FNewSelRect); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails, lcSelection],'SelectionRect', SelectionRect);{$endif} DrawSelectionRect := IsMouseSelecting and not IsRectEmpty(SelectionRect); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'DrawSelectionRect',DrawSelectionRect);{$endif} // R represents an entire node (all columns), but is a bit unprecise when it comes to // trees without any column defined, because FRangeX only represents the maximum width of all // nodes in the client area (not all defined nodes). There might be, however, wider nodes somewhere. Without full // validation I cannot better determine the width, though. By using at least the control's width it is ensured // that the tree is fully displayed on screen. R := Rect(0, 0, Max(FRangeX, ClientWidth), 0); NodeBitmap.Width := Window.Right - Window.Left; // For quick checks some intermediate variables are used. UseBackground := (toShowBackground in FOptions.FPaintOptions) and (FBackground.Graphic is TBitmap) and (poBackground in PaintOptions); ShowImages := Assigned(FImages); ShowStateImages := Assigned(FStateImages); ShowCheckImages := Assigned(FCheckImages) and (toCheckSupport in FOptions.FMiscOptions); {$ifdef DEBUG_VTV}Logger.Send([lcCheck],'ShowCheckImages',ShowCheckImages);{$endif} UseColumns := FHeader.UseColumns; // Adjust paint options to tree settings. Hide selection if told so or the tree is unfocused. if (toAlwaysHideSelection in FOptions.FPaintOptions) or (not Focused and (toHideSelection in FOptions.FPaintOptions)) then Exclude(PaintOptions, poDrawSelection); if toHideFocusRect in FOptions.FPaintOptions then Exclude(PaintOptions, poDrawFocusRect); // Determine node to start drawing with. BaseOffset := 0; PaintInfo.Node := InternalGetNodeAt(0, Window.Top, False, BaseOffset); if PaintInfo.Node = nil then BaseOffset := Window.Top; {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'BaseOffset',BaseOffset);{$endif} // Transform selection rectangle into node bitmap coordinates. if DrawSelectionRect then OffsetRect(SelectionRect, 0, -BaseOffset); {$ifdef DEBUG_VTV}Logger.Send([lcSelection], 'SelectionRect fixed by BaseOffset', SelectionRect);{$endif} // The target rectangle holds the coordinates of the exact area to blit in target canvas coordinates. // It is usually smaller than an entire node and wanders while the paint loop advances. MaximumRight := Target.X + (Window.Right - Window.Left); MaximumBottom := Target.Y + (Window.Bottom - Window.Top); {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader, lcHeaderOffset],'MaximumRight: %d MaximumBottom: %d',[MaximumRight,MaximumBottom]);{$endif} TargetRect := Rect(Target.X, Target.Y - (Window.Top - BaseOffset), MaximumRight, 0); TargetRect.Bottom := TargetRect.Top; // This marker gets the index of the first column which is visible in the given window. // This is needed for column based background colors. FirstColumn := InvalidColumn; if Assigned(PaintInfo.Node) then begin ButtonX := Round((Integer(FIndent) - FPlusBM.Width) / 2); // ----- main node paint loop while Assigned(PaintInfo.Node) do begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintNode');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeIndex',PaintInfo.Node^.Index);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'BaseOffset',BaseOffset);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Determine LineImage, SelectionLevel and IndentSize SelectLevel := DetermineLineImageAndSelectLevel(PaintInfo.Node, LineImage); IndentSize := Length(LineImage); if not (toFixedIndent in FOptions.FPaintOptions) then ButtonX := (IndentSize - 1) * FIndent + Round((FIndent - FPlusBM.Width) / 2); // Initialize node if not already done. if not (vsInitialized in PaintInfo.Node.States) then InitNode(PaintInfo.Node); if (vsSelected in PaintInfo.Node.States) and not (toChildrenAbove in FOptions.FPaintOptions) then Inc(SelectLevel); // Ensure the node's height is determined. MeasureItemHeight(PaintInfo.Canvas, PaintInfo.Node); // Adjust the brush origin for dotted lines depending on the current source position. // It is applied some lines later, as the canvas might get reallocated, when changing the node bitmap. PaintInfo.BrushOrigin := Point(Window.Left and 1, BaseOffset and 1); Inc(BaseOffset, PaintInfo.Node.NodeHeight); TargetRect.Bottom := TargetRect.Top + PaintInfo.Node.NodeHeight; {$ifdef DEBUG_VTV}Logger.Send([lcHeaderOffset], 'TargetRect for Node ' + IntToStr(PaintInfo.Node.Index), TargetRect);{$endif} // If poSelectedOnly is active then do the following stuff only for selected nodes or nodes // which are children of selected nodes. if (SelectLevel > 0) or not (poSelectedOnly in PaintOptions) then begin // Adjust height of temporary node bitmap. with NodeBitmap do begin if Height <> PaintInfo.Node.NodeHeight then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Setting the Node Height');{$endif} Height := PaintInfo.Node.NodeHeight; // Make sure the buffer bitmap and target bitmap use the same transformation mode. {$ifndef Gtk} SetMapMode(Canvas.Handle, GetMapMode(TargetCanvas.Handle)); {$endif} SetWindowOrgEx(Canvas.Handle, Window.Left, 0, nil); R.Bottom := PaintInfo.Node.NodeHeight; end; // Set the origin of the canvas' brush. This depends on the node heights. //todo: see if is necessary. According to docs is only necessary when HALFTONE is set {$ifndef INCOMPLETE_WINAPI} with PaintInfo do SetBrushOrgEx(Canvas.Handle, BrushOrigin.X, BrushOrigin.Y, nil); {$endif} end; CalculateVerticalAlignments(ShowImages, ShowStateImages, PaintInfo.Node, VAlign, ButtonY); // Let application decide whether the node should normally be drawn or by the application itself. if not DoBeforeItemPaint(PaintInfo.Canvas, PaintInfo.Node, R) then begin // Init paint options for the background painting. PaintInfo.PaintOptions := PaintOptions; {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // The node background can contain a single color, a bitmap or can be drawn by the application. ClearNodeBackground(PaintInfo, UseBackground, True, Rect(Window.Left, TargetRect.Top, Window.Right, TargetRect.Bottom)); {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'After Clear BackGround',NodeBitmap);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Prepare column, position and node clipping rectangle. PaintInfo.CellRect := R; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'PaintInfo.CellRect',PaintInfo.CellRect);{$endif} if UseColumns then InitializeFirstColumnValues(PaintInfo); // Now go through all visible columns (there's still one run if columns aren't used). with FHeader.FColumns do begin while ((PaintInfo.Column > InvalidColumn) or not UseColumns) and (PaintInfo.CellRect.Left < Window.Right) do begin if UseColumns then begin PaintInfo.Column := FPositionToIndex[PaintInfo.Position]; if FirstColumn = InvalidColumn then FirstColumn := PaintInfo.Column; PaintInfo.BidiMode := Items[PaintInfo.Column].FBiDiMode; PaintInfo.Alignment := Items[PaintInfo.Column].FAlignment; end else begin PaintInfo.Column := NoColumn; PaintInfo.BidiMode := BidiMode; PaintInfo.Alignment := FAlignment; end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails], 'Column Paint - PaintInfo.Position: %d PaintInfo.Column: %d',[PaintInfo.Position,PaintInfo.Column]);{$endif} PaintInfo.PaintOptions := PaintOptions; with PaintInfo do begin if (tsEditing in FStates) and (Node = FFocusedNode) and ((Column = FEditColumn) or not UseColumns) then Exclude(PaintOptions, poDrawSelection); if not UseColumns or ((vsSelected in Node.States) and (toFullRowSelect in FOptions.FSelectionOptions) and (poDrawSelection in PaintOptions)) or (coParentColor in Items[PaintInfo.Column].Options) then Exclude(PaintOptions, poColumnColor); end; IsMainColumn := PaintInfo.Column = FHeader.MainColumn; // Consider bidi mode here. In RTL context means left alignment actually right alignment and vice versa. if PaintInfo.BidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(PaintInfo.Alignment); // Paint the current cell if it is marked as being visible or columns aren't used and // if this cell belongs to the main column if only the main column should be drawn. if (not UseColumns or (coVisible in Items[PaintInfo.Column].FOptions)) and (not (poMainOnly in PaintOptions) or IsMainColumn) then begin AdjustPaintCellRect(PaintInfo, NextColumn); // Paint the cell only if it is in the current window. if PaintInfo.CellRect.Right > Window.Left then begin with PaintInfo do begin // Fill in remaining values in the paint info structure. NodeWidth := DoGetNodeWidth(Node, Column, Canvas); // Not the entire cell is covered by text. Hence we need a running rectangle to follow up. ContentRect := CellRect; // Set up the distance from column border (margin). if BidiMode <> bdLeftToRight then Dec(ContentRect.Right, FMargin) else Inc(ContentRect.Left, FMargin); if ShowCheckImages and IsMainColumn then begin ImageInfo[iiCheck].Index := GetCheckImage(Node); if ImageInfo[iiCheck].Index > -1 then begin AdjustImageBorder(FCheckImages.Height, FCheckImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiCheck]); ImageInfo[iiCheck].Ghosted := False; end; end else ImageInfo[iiCheck].Index := -1; if ShowStateImages then begin GetImageIndex(PaintInfo, ikState, iiState, FStateImages); if ImageInfo[iiState].Index > -1 then AdjustImageBorder(FStateImages.Width, FStateImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiState]); end else ImageInfo[iiState].Index := -1; if ShowImages then begin GetImageIndex(PaintInfo, ImageKind[vsSelected in Node.States], iiNormal, FImages); if ImageInfo[iiNormal].Index > -1 then AdjustImageBorder(FImages.Width, FImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiNormal]); end else ImageInfo[iiNormal].Index := -1; // Take the space for the tree lines into account. if IsMainColumn then AdjustCoordinatesByIndent(PaintInfo, IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize)); if UseColumns then LimitPaintingToArea(Canvas, CellRect); // Paint the horizontal grid line. if (poGridLines in PaintOptions) and (toShowHorzGridLines in FOptions.FPaintOptions) then begin Canvas.Font.Color := FColors.GridLineColor; if IsMainColumn and (FLineMode = lmBands) then begin if BidiMode = bdLeftToRight then begin DrawDottedHLine(PaintInfo, CellRect.Left + IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize) * Integer(FIndent), CellRect.Right - 1, CellRect.Bottom - 1); end else begin DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right - IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize) * Integer(FIndent) - 1, CellRect.Bottom - 1); end; end else DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right, CellRect.Bottom - 1); Dec(CellRect.Bottom); Dec(ContentRect.Bottom); end; if UseColumns then begin // Paint vertical grid line. // Don't draw if this is the last column and the header is in autosize mode. if (poGridLines in PaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions) or (Position < TColumnPosition(Count - 1))) then begin if (BidiMode = bdLeftToRight) or not ColumnIsEmpty(Node, Column) then begin Canvas.Font.Color := FColors.GridLineColor; DrawDottedVLine(PaintInfo, CellRect.Top, CellRect.Bottom, CellRect.Right - 1); end; Dec(CellRect.Right); Dec(ContentRect.Right); end; end; // Prepare background and focus rect for the current cell. PrepareCell(PaintInfo, Window.Left, NodeBitmap.Width); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Some parts are only drawn for the main column. if IsMainColumn then begin if toShowTreeLines in FOptions.FPaintOptions then PaintTreeLines(PaintInfo, VAlign, IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize), LineImage); // Show node button if allowed, if there child nodes and at least one of the child // nodes is visible or auto button hiding is disabled. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in Node.States) and not ((vsAllChildrenHidden in Node.States) and (toAutoHideButtons in TreeOptions.FAutoOptions)) then PaintNodeButton(Canvas, Node, Column, CellRect, ButtonX, ButtonY, BidiMode); if ImageInfo[iiCheck].Index > -1 then PaintCheckImage(PaintInfo); end; {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} if ImageInfo[iiState].Index > -1 then PaintImage(PaintInfo, iiState, False); if ImageInfo[iiNormal].Index > -1 then PaintImage(PaintInfo, iiNormal, True); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Now let descendants or applications draw whatever they want, // but don't draw the node if it is currently being edited. if not ((tsEditing in FStates) and (Node = FFocusedNode) and ((Column = FEditColumn) or not UseColumns)) then DoPaintNode(PaintInfo); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} DoAfterCellPaint(Canvas, Node, Column, CellRect); end; end; // leave after first run if columns aren't used if not UseColumns then Break; end else NextColumn := GetNextVisibleColumn(PaintInfo.Column); SelectClipRgn(PaintInfo.Canvas.Handle, 0); // Stop column loop if there are no further columns in the given window. if (PaintInfo.CellRect.Left >= Window.Right) or (NextColumn = InvalidColumn) then Break; // Move on to next column which might not be the one immediately following the current one // because of auto span feature. PaintInfo.Position := Items[NextColumn].Position; // Move clip rectangle and continue. if coVisible in Items[NextColumn].FOptions then with PaintInfo do begin Items[NextColumn].GetAbsoluteBounds(CellRect.Left, CellRect.Right); CellRect.Bottom := Node.NodeHeight; ContentRect.Bottom := Node.NodeHeight; end; end; end; // This node is finished, notify descendants/application. with PaintInfo do begin DoAfterItemPaint(Canvas, Node, R); // Final touch for this node: mark it if it is the current drop target node. if (Node = FDropTargetNode) and (toShowDropmark in FOptions.FPaintOptions) and (poDrawDropMark in PaintOptions) then DoPaintDropMark(Canvas, Node, R); end; end; with PaintInfo.Canvas do begin if DrawSelectionRect then begin PaintSelectionRectangle(PaintInfo.Canvas, Window.Left, SelectionRect, Rect(0, 0, NodeBitmap.Width, NodeBitmap.Height)); end; {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'NodeBitmap ' + IntToStr(PaintInfo.Node^.Index), NodeBitmap);{$endif} {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintDetails, lcHeaderOffset],'TargetRect.Top < Target.Y '+ Logger.RectToStr(TargetRect) +' '+Logger.PointToStr(Target),TargetRect.Top < Target.Y);{$endif} {$ifdef Gtk} //lclheader // This is a brute force fix AKA hack to prevent the header being cleared // when the tree is scrolled (YOffset < 0) and the mouse is over the header // Other widgetsets are not affected because excludecliprect works different (better?) // this must be removed when/if the paint coordinate is modified to be header aware YCorrect := 0; if hoVisible in FHeader.Options then begin if TargetRect.Top < FHeader.Height then YCorrect := FHeader.Height - TargetRect.Top; end; {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintDetails],'YCorrect ' + IntToStr(YCorrect), YCorrect > 0);{$endif} {$endif} // Put the constructed node image onto the target canvas. with TargetRect, NodeBitmap do BitBlt(TargetCanvas.Handle, Left, Top {$ifdef ManualClipNeeded} + YCorrect{$endif}, Width, Height, Canvas.Handle, Window.Left, {$ifdef ManualClipNeeded}YCorrect{$else}0{$endif}, SRCCOPY); end; end; Inc(TargetRect.Top, PaintInfo.Node.NodeHeight); {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintHeader,lcDrag],'Last Node to be painted: '+ IntToStr(PaintInfo.Node^.Index) +' (TargetRect.Top >= MaximumBottom)',TargetRect.Top >= MaximumBottom);{$endif} if TargetRect.Top >= MaximumBottom then begin {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNode');{$endif} Break; end; // Keep selection rectangle coordinates in sync. if DrawSelectionRect then OffsetRect(SelectionRect, 0, -PaintInfo.Node.NodeHeight); // Advance to next visible node. PaintInfo.Node := GetNextVisible(PaintInfo.Node, True); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNode');{$endif} end; end; // Erase rest of window not covered by a node. if TargetRect.Top < MaximumBottom then begin {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'UseBackground',UseBackground);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'UseColumns',UseColumns);{$endif} // Keep the horizontal target position to determine the selection rectangle offset later (if necessary). BaseOffset := Target.X; Target := TargetRect.TopLeft; R := Rect(TargetRect.Left, 0, TargetRect.Left, MaximumBottom - Target.Y); TargetRect := Rect(0, 0, MaximumRight - Target.X, MaximumBottom - Target.Y); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Handle',NodeBitmap.Handle);{$endif} NodeBitmap.PixelFormat := pf32Bit; NodeBitmap.Width := TargetRect.Right - TargetRect.Left; NodeBitmap.Height := TargetRect.Bottom - TargetRect.Top; // Make sure the buffer bitmap and target bitmap use the same transformation mode. {$ifndef Gtk} SetMapMode(NodeBitmap.Canvas.Handle, GetMapMode(TargetCanvas.Handle)); {$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Handle after changing height to background',NodeBitmap.Handle);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'TargetRect',TargetRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap Width: %d Height: %d',[NodeBitmap.Width,NodeBitmap.Height]);{$endif} // Call back application/descendants whether they want to erase this area. SetWindowOrgEx(NodeBitmap.Canvas.Handle, Target.X, 0, nil); if not DoPaintBackground(NodeBitmap.Canvas, TargetRect) then begin if UseBackground then begin SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); if toStaticBackground in TreeOptions.PaintOptions then StaticBackground(FBackground.Bitmap, NodeBitmap.Canvas, Target, TargetRect) else TileBackground(FBackground.Bitmap, NodeBitmap.Canvas, Target, TargetRect); end else begin // Consider here also colors of the columns. if UseColumns then begin with FHeader.FColumns do begin // If there is no content in the tree then the first column has not yet been determined. if FirstColumn = InvalidColumn then begin FirstColumn := GetFirstVisibleColumn; repeat if FirstColumn <> InvalidColumn then begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; if R.Right > TargetRect.Left then Break; FirstColumn := GetNextVisibleColumn(FirstColumn); end; until FirstColumn = InvalidColumn; end else begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; end; NodeBitmap.Canvas.Font.Color := FColors.GridLineColor; while (FirstColumn <> InvalidColumn) and (R.Left < TargetRect.Right + Target.X) do begin if (poGridLines in PaintOptions) and (toFullVertGridLines in FOptions.FPaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions) or (Cardinal(FirstColumn) < TColumnPosition(Count - 1))) then begin DrawDottedVLine(PaintInfo, R.Top, R.Bottom, R.Right - 1); Dec(R.Right); end; if not (coParentColor in Items[FirstColumn].FOptions) then NodeBitmap.Canvas.Brush.Color := Items[FirstColumn].FColor else NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(R); FirstColumn := GetNextVisibleColumn(FirstColumn); if FirstColumn <> InvalidColumn then begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; end; end; // Erase also the part of the tree not covert by a column. if R.Right < TargetRect.Right + Target.X then begin R.Left := R.Right; R.Right := TargetRect.Right + Target.X; // Prevent erasing the last vertical grid line. if (poGridLines in PaintOptions) and (toFullVertGridLines in FOptions.FPaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions)) then Inc(R.Left); NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(R); end; end; SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); end else begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'ErasingBackGround');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'TargetRect',TargetRect);{$endif} // No columns nor bitmap background. Simply erase it with the tree color. SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(TargetRect); end; end; end; SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'DrawSelectionRect',DrawSelectionRect);{$endif} if DrawSelectionRect then begin R := OrderRect(FNewSelRect); // Remap the selection rectangle to the current window of the tree. // Since Target has been used for other tasks BaseOffset got the left extent of the target position here. OffsetRect(R, -Target.X + BaseOffset - Window.Left, -Target.Y + FOffsetY); //todo: see if is necessary {$ifndef INCOMPLETE_WINAPI} SetBrushOrgEx(NodeBitmap.Canvas.Handle, 0, Target.X and 1, nil); {$endif} PaintSelectionRectangle(NodeBitmap.Canvas, 0, R, TargetRect); end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Canvas.Height',NodeBitmap.Canvas.Height);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Canvas.ClipRect',NodeBitmap.Canvas.ClipRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Target',Target);{$endif} {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'BackGroundBitmap',NodeBitmap);{$endif} with Target, NodeBitmap do BitBlt(TargetCanvas.Handle, X, Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); end; finally NodeBitmap.Canvas.Unlock; NodeBitmap.Free; end; DoAfterPaint(TargetCanvas); finally DoStateChange([], [tsPainting]); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'PaintTree');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.PasteFromClipboard: Boolean; // Reads what is currently on the clipboard into the tree (if the format is supported). // Note: If the application wants to have text or special formats to be inserted then it must implement // its own code (OLE). Here only the native tree format is accepted. var Data: IDataObject; Source: TBaseVirtualTree; begin Result := False; if not (toReadOnly in FOptions.FMiscOptions) then begin if OleGetClipboard(Data) <> S_OK then ShowError(SClipboardFailed, hcTFClipboardFailed) else try // Try to get the source tree of the operation to optimize the operation. Source := GetTreeFromDataObject(Data); Result := ProcessOLEData(Source, Data, FFocusedNode, FDefaultPasteMode, Assigned(Source) and (tsCutPending in Source.FStates)); if Assigned(Source) then if Source <> Self then Source.FinishCutOrCopy else DoStateChange([], [tsCutPending]); finally Data := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareDragImage(Hotspot: TPoint; const DataObject: IDataObject); // Initiates an image drag operation. Hotspot is the position of the mouse in client coordinates. var PaintOptions: TVTInternalPaintOptions; TreeRect, PaintRect: TRect; LocalSpot, ImagePos, PaintTarget: TPoint; Image: TBitmap; begin if CanShowDragImage then begin // Determine the drag rectangle which is a square around the hot spot. Operate in virtual tree space. LocalSpot := HotSpot; Dec(LocalSpot.X, -FEffectiveOffsetX); Dec(LocalSpot.Y, FOffsetY); TreeRect := Rect(LocalSpot.X - FDragWidth div 2, LocalSpot.Y - FDragHeight div 2, LocalSpot.X + FDragWidth div 2, LocalSpot.Y + FDragHeight div 2); // Check that we have a valid rectangle. with TreeRect do begin PaintRect := TreeRect; //lclheader if hoVisible in FHeader.Options then OffsetRect(PaintRect, 0, -FHeader.Height); if Left < 0 then begin PaintTarget.X := -Left; PaintRect.Left := 0; end else PaintTarget.X := 0; if Top < 0 then begin PaintTarget.Y := -PaintRect.Top; PaintRect.Top := 0; end else PaintTarget.Y := 0; end; Image := TBitmap.Create; with Image do try PixelFormat := pf32Bit; Width := TreeRect.Right - TreeRect.Left; Height := TreeRect.Bottom - TreeRect.Top; // Erase the entire image with the color key value, for the case not everything // in the image is covered by the tree image. Canvas.Brush.Color := Brush.Color; Canvas.FillRect(Rect(0, 0, Width, Height)); PaintOptions := [poDrawSelection, poSelectedOnly]; if FDragImageKind = diMainColumnOnly then Include(PaintOptions, poMainOnly); PaintTree(Image.Canvas, PaintRect, PaintTarget, PaintOptions); // Once we have got the drag image we can convert all necessary coordinates into screen space. OffsetRect(TreeRect, -FEffectiveOffsetX, FOffsetY); ImagePos := ClientToScreen(TreeRect.TopLeft); HotSpot := ClientToScreen(HotSpot); FDragImage.ColorKey := Brush.Color; FDragImage.PrepareDrag(Image, ImagePos, HotSpot, DataObject); finally Image.Free; end; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrint} procedure TBaseVirtualTree.Print(Printer: TPrinter; PrintHeader: Boolean); var SaveTreeFont: TFont; // Remembers the tree's current font. SaveHeaderFont: TFont; // Remembers the header's current font. ImgRect, // Describes the dimensions of Image. TreeRect, // The total VTree dimensions. DestRect, // Dimensions of PrinterImage. SrcRect: TRect; // Clip dimensions from Image -> PrinterImage P: TPoint; // Used by PaintTree. Options: TVTInternalPaintOptions; // Used by PaintTree. Image, // Complete Tree is drawn to this image. PrinterImage: TBitmap; // This is the image that gets printed. SaveColor: TColor; // Remembers the VTree Color. pTxtHeight, // Height of font in the TPrinter.Canvas vTxtHeight, // Height of font in the VTree Canvas vPageWidth, vPageHeight, // Printer height in VTree resolution xPageNum, yPageNum, // # of pages (except the occasional last one) xPage, yPage: Integer; // Loop counter Scale: Extended; // Scale factor between Printer Canvas and VTree Canvas LogFont: TLogFont; begin if Assigned(Printer) then begin BeginUpdate; // Grid lines are the only parts which are desirable when printing. Options := [poGridLines]; // Remember the tree font. SaveTreeFont := TFont.Create; SaveTreeFont.Assign(Font); // Create a new font for printing which does not use clear type output (but is antialiased, if possible) // and which has the highest possible quality. GetObject(Font.Handle, SizeOf(TLogFont), @LogFont); LogFont.lfQuality := ANTIALIASED_QUALITY; Font.Handle := CreateFontIndirect(LogFont); // Create an image that will hold the complete VTree Image := TBitmap.Create; Image.PixelFormat := pf32Bit; PrinterImage := nil; try TreeRect := GetTreeRect; Image.Width := TreeRect.Right - TreeRect.Left; P := Point(0, 0); if (hoVisible in FHeader.Options) and PrintHeader then begin Inc(TreeRect.Bottom, FHeader.Height); Inc(P.Y, FHeader.Height); end; Image.Height := TreeRect.Bottom - TreeRect.Top; ImgRect.Left := 0; ImgRect.Top := 0; ImgRect.Right := Image.Width; // Force the background to white color during the rendering. SaveColor := Color; Color := clWhite; // Print header if it is visible. if (hoVisible in FHeader.Options) and PrintHeader then begin SaveHeaderFont := TFont.Create; try SaveHeaderFont.Assign(FHeader.Font); // Create a new font for printing which does not use clear type output (but is antialiased, if possible) // and which has the highest possible quality. GetObject(FHeader.Font.Handle, SizeOf(TLogFont), @LogFont); LogFont.lfQuality := ANTIALIASED_QUALITY; FHeader.Font.Handle := CreateFontIndirect(LogFont); ImgRect.Bottom := FHeader.Height; FHeader.FColumns.PaintHeader(Image.Canvas.Handle, ImgRect, 0); FHeader.Font := SaveHeaderFont; finally SaveHeaderFont.Free; end; end; // The image's height is already adjusted for the header if it is visible. ImgRect.Bottom := Image.Height; PaintTree(Image.Canvas, ImgRect, P, Options, pf32Bit); Color := SaveColor; // Activate the printer Printer.BeginDoc; Printer.Canvas.Font := Font; // Now we can calculate the scaling : pTxtHeight := Printer.Canvas.TextHeight('Tj'); vTxtHeight := Canvas.TextHeight('Tj'); Scale := pTxtHeight / vTxtHeight; // Create an Image that has the same dimensions as the printer canvas but // scaled to the VTree resolution: PrinterImage := TBitmap.Create; vPageHeight := Round(Printer.PageHeight / Scale); vPageWidth := Round(Printer.PageWidth / Scale); // We do a minumum of one page. xPageNum := Trunc(Image.Width / vPageWidth); yPageNum := Trunc(Image.Height / vPageHeight); PrinterImage.Width := vPageWidth; PrinterImage.Height := vPageHeight; // Split vertically: for yPage := 0 to yPageNum do begin DestRect.Left := 0; DestRect.Top := 0; DestRect.Right := PrinterImage.Width; DestRect.Bottom := PrinterImage.Height; // Split horizontally: for xPage := 0 to xPageNum do begin SrcRect.Left := vPageWidth * xPage; SrcRect.Top := vPageHeight * yPage; SrcRect.Right := vPageWidth * xPage + PrinterImage.Width; SrcRect.Bottom := SrcRect.Top + vPageHeight; // Clear the image PrinterImage.Canvas.Brush.Color := clWhite; PrinterImage.Canvas.FillRect(Rect(0, 0, PrinterImage.Width, PrinterImage.Height)); PrinterImage.Canvas.CopyRect(DestRect, Image.Canvas, SrcRect); PrtStretchDrawDIB(Printer.Canvas, Rect(0, 0, Printer.PageWidth, Printer.PageHeight - 1), PrinterImage); if xPage <> xPageNum then Printer.NewPage; end; if yPage <> yPageNum then Printer.NewPage; end; // Restore tree font. Font := SaveTreeFont; SaveTreeFont.Free; Printer.EndDoc; finally PrinterImage.Free; Image.Free; EndUpdate; end; end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessDrop(DataObject: IDataObject; TargetNode: PVirtualNode; var Effect: LongWord; Mode: TVTNodeAttachMode): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Source: TBaseVirtualTree; begin Result := False; if Mode = amNoWhere then Effect := DROPEFFECT_NONE else begin BeginUpdate; // try to get the source tree of the operation Source := GetTreeFromDataObject(DataObject); if Assigned(Source) then Source.BeginUpdate; try try // Before adding the new nodes try to optimize the operation if source and target tree reside in // the same application and operation is a move. if ((Effect and DROPEFFECT_MOVE) <> 0) and Assigned(Source) then begin // If both copy and move are specified then prefer a copy because this is not destructing. Result := ProcessOLEData(Source, DataObject, TargetNode, Mode, (Effect and DROPEFFECT_COPY) = 0); // Since we made an optimized move or a copy there's no reason to act further after DoDragging returns. Effect := DROPEFFECT_NONE; end else // Act only if move or copy operation is requested. if (Effect and (DROPEFFECT_MOVE or DROPEFFECT_COPY)) <> 0 then Result := ProcessOLEData(Source, DataObject, TargetNode, Mode, False) else Result := False; except Effect := DROPEFFECT_NONE; end; finally if Assigned(Source) then Source.EndUpdate; EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReinitChildren(Node: PVirtualNode; Recursive: Boolean); // Forces all child nodes of Node to be reinitialized. // If Recursive is True then also the grandchildren are reinitialized. var Run: PVirtualNode; begin if Assigned(Node) then begin InitChildren(Node); Run := Node.FirstChild; end else begin InitChildren(FRoot); Run := FRoot.FirstChild; end; while Assigned(Run) do begin ReinitNode(Run, Recursive); Run := Run.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReinitNode(Node: PVirtualNode; Recursive: Boolean); // Forces the given node and all its children (if recursive is True) to be initialized again without // modifying any data in the nodes nor deleting children (unless the application requests a different amount). begin if Assigned(Node) and (Node <> FRoot) then begin // Remove dynamic styles. Node.States := Node.States - [vsChecking, vsCutOrCopy, vsDeleting, vsHeightMeasured]; InitNode(Node); end; if Recursive then ReinitChildren(Node, True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RepaintNode(Node: PVirtualNode); // Causes an immediate repaint of the given node. var R: Trect; begin if Assigned(Node) and (Node <> FRoot) then begin R := GetDisplayRect(Node, -1, False); RedrawWindow(Handle, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_NOERASE or RDW_VALIDATE or RDW_NOCHILDREN); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ResetNode(Node: PVirtualNode); // Deletes all children of the given node and marks it as being uninitialized. begin DoCancelEdit; if (Node = nil) or (Node = FRoot) then Clear else begin DoReset(Node); DeleteChildren(Node); // Remove initialized and other dynamic styles, keep persistent styles. Node.States := Node.States - [vsInitialized, vsChecking, vsCutOrCopy, vsDeleting, vsHasChildren, vsExpanded, vsHeightMeasured]; InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SaveToFile(const FileName: TFileName); // Saves the entire content of the tree into a file (see further notes in SaveToStream). var FileStream: TFileStream; begin FileStream := TFileStream.Create(FileName, fmCreate); try SaveToStream(FileStream); finally FileStream.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SaveToStream(Stream: TStream; Node: PVirtualNode = nil); // Saves Node and all its children to Stream. If Node is nil then all top level nodes will be stored. // Note: You should be careful about assuming what is actually saved. The problem here is that we are dealing with // virtual data. The tree can so not know what it has to save. The only fact we reliably know is the tree's // structure. To be flexible for future enhancements as well as unknown content (unknown to the tree class which // is saving/loading the stream) a chunk based approach is used here. Every tree class handles only those // chunks which are not handled by an anchestor class and are known by the class. // // The base tree class saves only the structure of the tree along with application provided data. descendants may // optionally add their own chunks to store additional information. See: WriteChunks. var Count: Cardinal; begin Stream.Write(MagicID, SizeOf(MagicID)); if Node = nil then begin // Keep number of top level nodes for easy restauration. Count := FRoot.ChildCount; Stream.WriteBuffer(Count, SizeOf(Count)); // Save entire tree here. Node := FRoot.FirstChild; while Assigned(Node) do begin WriteNode(Stream, Node); Node := Node.NextSibling; end; end else begin Count := 1; Stream.WriteBuffer(Count, SizeOf(Count)); WriteNode(Stream, Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ScrollIntoView(Node: PVirtualNode; Center: Boolean; Horizontally: Boolean = False): Boolean; // Scrolls the tree so that the given node is in the client area and returns True if the tree really has been // scrolled (e.g. to avoid further updates) else returns False. If extened focus is enabled then the tree will also // be horizontally scrolled if needed. // Note: All collapsed parents of the node are expanded. var R: TRect; Run: PVirtualNode; UseColumns, HScrollBarVisible: Boolean; ScrolledVertically, ScrolledHorizontally: Boolean; OffY, OffYM: Integer; begin //todo: minimize calls to ClientHeight and ClientWidth ScrolledVertically := False; ScrolledHorizontally := False; if Assigned(Node) and (Node <> FRoot) then begin // Make sure all parents of the node are expanded. Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; UseColumns := FHeader.UseColumns; if UseColumns and FHeader.FColumns.IsValidColumn(FFocusedColumn) then R := GetDisplayRect(Node, FFocusedColumn, not (toGridExtensions in FOptions.FMiscOptions)) else R := GetDisplayRect(Node, NoColumn, not (toGridExtensions in FOptions.FMiscOptions)); // The returned rectangle can never be empty after the expand code above. // 1) scroll vertically //lclheader if hoVisible in FHeader.FOptions then OffsetRect(R, 0, -FHeader.Height); if R.Top < 0 then begin if Center then SetOffsetY(FOffsetY - R.Top + ClientHeight div 2) else SetOffsetY(FOffsetY - R.Top); ScrolledVertically := True; end else if (R.Bottom > ClientHeight) or Center then begin HScrollBarVisible := (ScrollBarOptions.ScrollBars in [ssBoth, ssHorizontal]) and (ScrollBarOptions.AlwaysVisible or (Integer(FRangeX) > ClientWidth)); if Center then SetOffsetY(FOffsetY - R.Bottom + ClientHeight div 2) else begin // Leave additional space at the bottom to have scrollrect start with full row. OffY := FOffsetY - R.Bottom + ClientHeight; OffYM := OffY mod DefaultNodeHeight; if OffYM <> 0 then OffY := OffY - (DefaultNodeHeight + OffYM); SetOffsetY(OffY); end; // When scrolling up and the horizontal scroll appears because of the operation // then we have to move up the node the horizontal scrollbar's height too // in order to avoid that the scroll bar hides the node which we wanted to have in view. if not UseColumns and not HScrollBarVisible and (Integer(FRangeX) > ClientWidth) then SetOffsetY(FOffsetY - GetSystemMetrics(SM_CYHSCROLL)); ScrolledVertically := True; end; if Horizontally then // 2) scroll horizontally ScrolledHorizontally := ScrollIntoView(FFocusedColumn, Center); end; Result := ScrolledVertically or ScrolledHorizontally; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ScrollIntoView(Column: TColumnIndex; Center: Boolean): Boolean; // Scrolls the columns so that the given column is in the client area and returns True if the columns really have been // scrolled (e.g. to avoid further updates) else returns False. var ColumnLeft, ColumnRight: Integer; NewOffset: Integer; begin Result := False; if not FHeader.UseColumns then exit; if not FHeader.Columns.IsValidColumn(Column) then exit; // Just in case. ColumnLeft := Header.Columns.Items[Column].Left; ColumnRight := ColumnLeft + Header.Columns.Items[Column].Width; NewOffset := FEffectiveOffsetX; if Center then begin NewOffset := FEffectiveOffsetX + ColumnLeft - (Header.Columns.GetVisibleFixedWidth div 2) - (ClientWidth div 2) + ((ColumnRight - ColumnLeft) div 2); if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + NewOffset) else SetOffsetX(-NewOffset); end; Result := True; end else begin if FHeader.Columns.Count > 1 then begin if ColumnRight > ClientWidth then NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); end; if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + NewOffset) else SetOffsetX(-NewOffset); end; Result := True; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SelectAll(VisibleOnly: Boolean); // Select all nodes in the tree. // If VisibleOnly is True then only visible nodes are selected. var Run: PVirtualNode; NextFunction: TGetNextNodeProc; begin if not FSelectionLocked and (toMultiSelect in FOptions.FSelectionOptions) then begin ClearTempCache; if VisibleOnly then begin Run := GetFirstVisible(nil, True); NextFunction := GetNextVisible; end else begin Run := GetFirst; NextFunction := GetNext; end; while Assigned(Run) do begin if not(vsSelected in Run.States) then InternalCacheNode(Run); Run := NextFunction(Run); end; if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Sort(Node: PVirtualNode; Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); // Sorts the given node. The application is queried about how to sort via the OnCompareNodes event. // Column is simply passed to the the compare function so the application can also sort in a particular column. // In order to free the application from taking care about the sort direction the parameter Direction is used. // This way the application can always sort in increasing order, while this method reorders nodes according to this flag. //--------------- local functions ------------------------------------------- function MergeAscending(A, B: PVirtualNode): PVirtualNode; // Merges A and B (which both must be sorted via Compare) into one list. var Dummy: TVirtualNode; begin // This avoids checking for Result = nil in the loops. Result := @Dummy; while Assigned(A) and Assigned(B) do begin if DoCompare(A, B, Column) <= 0 then begin Result.NextSibling := A; Result := A; A := A.NextSibling; end else begin Result.NextSibling := B; Result := B; B := B.NextSibling; end; end; // Just append the list which is not nil (or set end of result list to nil if both lists are nil). if Assigned(A) then Result.NextSibling := A else Result.NextSibling := B; // return start of the new merged list Result := Dummy.NextSibling; end; //--------------------------------------------------------------------------- function MergeDescending(A, B: PVirtualNode): PVirtualNode; // Merges A and B (which both must be sorted via Compare) into one list. var Dummy: TVirtualNode; begin // this avoids checking for Result = nil in the loops Result := @Dummy; while Assigned(A) and Assigned(B) do begin if DoCompare(A, B, Column) >= 0 then begin Result.NextSibling := A; Result := A; A := A.NextSibling; end else begin Result.NextSibling := B; Result := B; B := B.NextSibling; end; end; // Just append the list which is not nil (or set end of result list to nil if both lists are nil). if Assigned(A) then Result.NextSibling := A else Result.NextSibling := B; // Return start of the newly merged list. Result := Dummy.NextSibling; end; //--------------------------------------------------------------------------- function MergeSortAscending(var Node: PVirtualNode; N: Cardinal): PVirtualNode; // Sorts the list of nodes given by Node (which must not be nil). var A, B: PVirtualNode; begin if N > 1 then begin A := MergeSortAscending(Node, N div 2); B := MergeSortAscending(Node, (N + 1) div 2); Result := MergeAscending(A, B); end else begin Result := Node; Node := Node.NextSibling; Result.NextSibling := nil; end; end; //--------------------------------------------------------------------------- function MergeSortDescending(var Node: PVirtualNode; N: Cardinal): PVirtualNode; // Sorts the list of nodes given by Node (which must not be nil). var A, B: PVirtualNode; begin if N > 1 then begin A := MergeSortDescending(Node, N div 2); B := MergeSortDescending(Node, (N + 1) div 2); Result := MergeDescending(A, B); end else begin Result := Node; Node := Node.NextSibling; Result.NextSibling := nil; end; end; //--------------- end local functions --------------------------------------- var Run: PVirtualNode; Index: Cardinal; begin InterruptValidation; if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin if Node = nil then Node := FRoot; if vsHasChildren in Node.States then begin if (Node.ChildCount = 0) and DoInit then InitChildren(Node); // Make sure the children are valid, so they can be sorted at all. if DoInit and (Node.ChildCount > 0) then ValidateChildren(Node, False); // Child count might have changed. if Node.ChildCount > 1 then begin // Sort the linked list, check direction flag only once. if Direction = sdAscending then Node.FirstChild := MergeSortAscending(Node.FirstChild, Node.ChildCount) else Node.FirstChild := MergeSortDescending(Node.FirstChild, Node.ChildCount); // Consolidate the child list finally. Run := Node.FirstChild; Run.PrevSibling := nil; Index := 0; repeat Run.Index := Index; Inc(Index); if Run.NextSibling = nil then Break; Run.NextSibling.PrevSibling := Run; Run := Run.NextSibling; until False; Node.LastChild := Run; InvalidateCache; end; if FUpdateCount = 0 then begin ValidateCache; Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SortTree(Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); //--------------- local function -------------------------------------------- procedure DoSort(Node: PVirtualNode); // Recursively sorts Node and its child nodes. var Run: PVirtualNode; begin Sort(Node, Column, Direction, DoInit); Run := Node.FirstChild; while Assigned(Run) do begin if DoInit and not (vsInitialized in Run.States) then InitNode(Run); if vsInitialized in Run.States then DoSort(Run); Run := Run.NextSibling; end; end; //--------------- end local function ---------------------------------------- begin // Instead of wrapping the sort using BeginUpdate/EndUpdate simply the update counter // is modified. Otherwise the EndUpdate call will recurse here. Inc(FUpdateCount); try if Column > InvalidColumn then DoSort(FRoot); InvalidateCache; finally if FUpdateCount > 0 then Dec(FUpdateCount); if FUpdateCount = 0 then begin ValidateCache; Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ToggleNode(Node: PVirtualNode); // Changes a node's expand state to the opposite state. var Child: PVirtualNode; HeightDelta, StepsR1, StepsR2, Steps: Integer; TogglingTree, ChildrenInView, NeedFullInvalidate, NeedUpdate, NodeInView, PosHoldable, TotalFit: Boolean; ToggleData: TToggleAnimationData; //--------------- local functions ------------------------------------------- procedure UpdateRanges; // This function is used to adjust FRangeX/FRangeY in order to correctly // reflect the tree's state after a toggle, because it is essential that // these values are correct if we need to scroll afterwards. To avoid a // useless call to UpdateScrollbars we do it right here. begin if FRoot.TotalHeight < FDefaultNodeHeight then FRoot.TotalHeight := FDefaultNodeHeight; FRangeY := FRoot.TotalHeight - FRoot.NodeHeight + FBottomSpace; if FHeader.UseColumns then FRangeX := FHeader.FColumns.TotalWidth else FRangeX := GetMaxRightExtend; end; //--------------------------------------------------------------------------- procedure PrepareAnimation; // Prepares ToggleData. var R: TRect; S: Integer; M: TToggleAnimationMode; begin with ToggleData do begin Window := Handle; DC := GetDC(Handle); //lcl: setting Color to Brush seems not necessary //Self.Brush.Color := Color; Brush := Self.Brush.Reference.Handle; if (Mode1 <> tamNoScroll) and (Mode2 <> tamNoScroll) then begin if StepsR1 < StepsR2 then begin // As the primary rectangle is always R1 we will get a much smoother // animation if R1 is the one that will be scrolled more. R := R2; R2 := R1; R1 := R; M := Mode2; Mode2 := Mode1; Mode1 := M; S := StepsR2; StepsR2 := StepsR1; StepsR1 := S; end; ScaleFactor := StepsR2 / StepsR1; MissedSteps := 0; end; if Mode1 <> tamNoScroll then Steps := StepsR1 else Steps := StepsR2; end; end; //--------------- end local functions --------------------------------------- begin Assert(Assigned(Node), 'Node must not be nil.'); TogglingTree := tsToggling in FStates; ChildrenInView := False; HeightDelta := 0; NeedFullInvalidate := False; NeedUpdate := False; NodeInView := False; PosHoldable := False; TotalFit := False; // We don't need to switch the expand state if the node is being deleted otherwise some // updates (e.g. visible node count) are done twice with disasterous results). if [vsDeleting, vsToggling] * Node.States = [] then begin try DoStateChange([tsToggling]); Include(Node.States, vsToggling); if vsExpanded in Node.States then begin if DoCollapsing(Node) then begin NeedUpdate := True; if (FUpdateCount = 0) and (toAnimatedToggle in FOptions.FAnimationOptions) and not (tsCollapsing in FStates) then begin Application.CancelHint; UpdateWindow(Handle); // animated collapsing with ToggleData do begin // Determine the animation behaviour and rectangle. If toChildrenAbove is set, the behaviour is depending // on the position of the node to be collapsed. R1 := GetDisplayRect(Node, NoColumn, False); Mode2 := tamNoScroll; HeightDelta := -Node.TotalHeight + NodeHeight[Node]; if toChildrenAbove in FOptions.FPaintOptions then begin PosHoldable := (FOffsetY + (Integer(Node.TotalHeight - NodeHeight[Node]))) <= 0; NodeInView := R1.Top < ClientHeight; StepsR1 := 0; if NodeInView then begin if PosHoldable or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) then begin // Scroll the child nodes down. Mode1 := tamScrollDown; R1.Bottom := R1.Top; R1.Top := 0; StepsR1 := Min(R1.Bottom - R1.Top + 1, Node.TotalHeight - NodeHeight[Node]); end else begin // The position cannot be kept. So scroll the node up to its future position. Mode1 := tamScrollUp; R1.Top := Max(0, R1.Top + HeightDelta); R1.Bottom := ClientHeight; StepsR1 := FOffsetY - HeightDelta; end; end; end else begin if (Integer(FRangeY) + FOffsetY - R1.Bottom + HeightDelta >= ClientHeight - R1.Bottom) or (Integer(FRangeY) <= ClientHeight) or (FOffsetY = 0) or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) then begin // Do a simple scroll up over the child nodes. Mode1 := tamScrollUp; Inc(R1.Top, NodeHeight[Node]); R1.Bottom := ClientHeight; StepsR1 := Min(R1.Bottom - R1.Top + 1, -HeightDelta); end else begin // Scroll the node down to its future position. As FOffsetY will change we need to invalidate the // whole tree. Mode1 := tamScrollDown; StepsR1 := Min(-FOffsetY, ClientHeight - Integer(FRangeY) -FOffsetY - HeightDelta); R1.Top := 0; R1.Bottom := Min(ClientHeight, R1.Bottom + Steps); NeedFullInvalidate := True; end; end; // No animation necessary if the node is below the current client height. if R1.Top < ClientHeight then begin PrepareAnimation; try Animate(Steps, FAnimationDuration, ToggleCallback, @ToggleData); finally ReleaseDC(Window, DC); end; end; end; end; // collapse the node AdjustTotalHeight(Node, NodeHeight[Node]); if FullyVisible[Node] then Dec(FVisibleCount, CountVisibleChildren(Node)); Exclude(Node.States, vsExpanded); DoCollapsed(Node); // Remove child nodes now, if enabled. if (toAutoFreeOnCollapse in FOptions.FAutoOptions) and (Node.ChildCount > 0) then begin DeleteChildren(Node); Include(Node.States, vsHasChildren); end; end; end else if DoExpanding(Node) then begin NeedUpdate := True; // expand the node, need to adjust the height if not (vsInitialized in Node.States) then InitNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); // Avoid setting the vsExpanded style if there are no child nodes. if Node.ChildCount > 0 then begin // Iterate through the child nodes without initializing them. We have to determine the entire height. Child := Node.FirstChild; repeat if vsVisible in Child.States then Inc(HeightDelta, Child.TotalHeight); Child := Child.NextSibling; until Child = nil; // Getting the display rectangle is already done here as it is needed for toChildrenAbove in any case. if (toChildrenAbove in FOptions.FPaintOptions) or (FUpdateCount = 0) then begin with ToggleData do begin R1 := GetDisplayRect(Node, NoColumn, False); Mode2 := tamNoScroll; TotalFit := HeightDelta + Integer(NodeHeight[Node]) <= ClientHeight; if toChildrenAbove in FOptions.FPaintOptions then begin // The main goal with toChildrenAbove being set is to keep the nodes visual position so the user does // not get confused. Therefore we need to scroll the view when the expanding is done. PosHoldable := TotalFit and (Integer(FRangeY) - ClientHeight >= 0) ; ChildrenInView := (R1.Top - HeightDelta) >= 0; NodeInView := R1.Bottom <= ClientHeight; end else begin PosHoldable := TotalFit; ChildrenInView := R1.Bottom + HeightDelta <= ClientHeight; end; R1.Bottom := ClientHeight; end; end; if FUpdateCount = 0 then begin // Do animated expanding if enabled. if (ToggleData.R1.Top < ClientHeight) and ([tsPainting, tsExpanding] * FStates = []) and (toAnimatedToggle in FOptions.FAnimationOptions)then begin Application.CancelHint; UpdateWindow(Handle); // animated expanding with ToggleData do begin if toChildrenAbove in FOptions.FPaintOptions then begin // At first check if we hold the position, which is the most common case. if not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) or (PosHoldable and ( (NodeInView and ChildrenInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) )) then begin Mode1 := tamScrollUp; R1 := Rect(R1.Left, 0, R1.Right, R1.Top); StepsR1 := Min(HeightDelta, R1.Bottom); end else begin // If we will not hold the node's visual position we mostly scroll in both directions. Mode1 := tamScrollDown; Mode2 := tamScrollUp; R2 := Rect(R1.Left, 0, R1.Right, R1.Top); if not (toAutoScrollOnExpand in FOptions.FAutoOptions) then begin // If we shall not or cannot scroll to the desired extent we calculate the new position (with // max FOffsetY applied) and animate it that way. StepsR1 := -FOffsetY - Max(Integer(FRangeY) + HeightDelta - ClientHeight, 0) + HeightDelta; if (Integer(FRangeY) + HeightDelta - ClientHeight) <= 0 then Mode2 := tamNoScroll else StepsR2 := Min(Integer(FRangeY) + HeightDelta - ClientHeight, R2.Bottom); end else begin if TotalFit and NodeInView and (Integer(FRangeY) + HeightDelta > ClientHeight) then begin // If the whole subtree will fit into the client area and the node is currently fully visible, // the first child will be made the top node if possible. if HeightDelta >= R1.Top then StepsR1 := Abs(R1.Top - HeightDelta) else StepsR1 := ClientHeight - Integer(FRangeY); end else if Integer(FRangeY) + HeightDelta <= ClientHeight then begin // We cannot make the first child the top node as we cannot scroll to that extent, // so we do a simple scroll down. Mode2 := tamNoScroll; StepsR1 := HeightDelta; end else // If the subtree does not fit into the client area at once, the expanded node will // be made the bottom node. StepsR1 := ClientHeight - R1.Top - Integer(NodeHeight[Node]); if Mode2 <> tamNoScroll then begin if StepsR1 > 0 then StepsR2 := Min(R1.Top, HeightDelta - StepsR1) else begin // If the node is already at the bottom scrolling is needed. Mode1 := tamNoScroll; StepsR2 := Min(HeightDelta, R1.Bottom); end; end; end; end; end else begin // toChildrenAbove is not set. if (PosHoldable and ChildrenInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) or (R1.Top <= 0) then begin // If the node will stay at its visual position, do a simple down-scroll. Mode1 := tamScrollDown; Inc(R1.Top, NodeHeight[Node]); StepsR1 := Min(R1.Bottom - R1.Top, HeightDelta); end else begin // We will not hold the nodes visual position so perform a double scroll. Mode1 := tamScrollUp; Mode2 := tamScrollDown; R1.Bottom := R1.Top + Integer(NodeHeight[Node]) + 1; R1.Top := 0; R2 := Rect(R1.Left, R1.Bottom, R1.Right, ClientHeight); StepsR1 := Min(HeightDelta - (ClientHeight - R2.Top), R1.Bottom - Integer(NodeHeight[Node])); StepsR2 := ClientHeight - R2.Top; end; end; if ClientHeight >= R1.Top then begin PrepareAnimation; try Animate(Steps, FAnimationDuration, ToggleCallback, @ToggleData); finally ReleaseDC(Window, DC); end; end; end; end; end; Include(Node.States, vsExpanded); AdjustTotalHeight(Node, HeightDelta, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node)); DoExpanded(Node); end; end; if NeedUpdate then begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; if Node.ChildCount > 0 then begin UpdateRanges; if [tsPainting, tsExpanding] * FStates = [] then begin if (vsExpanded in Node.States) and ((toAutoScrollOnExpand in FOptions.FAutoOptions) or (toChildrenAbove in FOptions.FPaintOptions)) then begin if toChildrenAbove in FOptions.FPaintOptions then begin NeedFullInvalidate := True; if (PosHoldable and ChildrenInView and NodeInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) then SetOffsetY(FOffsetY - Integer(HeightDelta)) else if TotalFit and NodeInView then SetOffsetY(FOffsetY - GetDisplayRect(GetFirstVisible(Node, True), NoColumn, False).Top) else BottomNode := Node; end else begin // Scroll as much child nodes into view as possible if the node has been expanded. if PosHoldable then NeedFullInvalidate := ScrollIntoView(GetLastVisible(Node, True), False) else begin TopNode := Node; NeedFullInvalidate := True; end; end; end else begin // If we have collapsed the node or toAutoScrollOnExpand is not set, we try to keep the nodes // visual position. if toChildrenAbove in FOptions.FPaintOptions then SetOffsetY(FOffsetY - Integer(HeightDelta)); NeedFullInvalidate := True; end; end; UpdateScrollbars(True); // Check for automatically scrolled tree. if NeedFullInvalidate then Invalidate else InvalidateToBottom(Node); end else InvalidateNode(Node); end else UpdateRanges; end; finally Exclude(Node.States, vsToggling); if not TogglingTree then DoStateChange([], [tsToggling]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.UpdateAction(Action: TBasicAction): Boolean; // Support for standard actions. begin if not Focused then Result := inherited UpdateAction(Action) else begin Result := (Action is TEditCut) or (Action is TEditCopy) or (Action is TEditDelete); if Result then TAction(Action).Enabled := (FSelectionCount > 0) and ((Action is TEditDelete) or (FClipboardFormats.Count > 0)) else begin Result := Action is TEditPaste; if Result then TAction(Action).Enabled := True else begin Result := Action is TEditSelectAll; if Result then TAction(Action).Enabled := (toMultiSelect in FOptions.FSelectionOptions) and (FVisibleCount > 0) else Result := inherited UpdateAction(Action); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateHorizontalScrollBar(DoRepaint: Boolean); var ScrollInfo: TScrollInfo; begin if FHeader.UseColumns then FRangeX := FHeader.FColumns.TotalWidth else FRangeX := GetMaxRightExtend; if tsUpdating in FStates then exit; // Adjust effect scroll offset depending on bidi mode. if UseRightToLeftAlignment then FEffectiveOffsetX := Integer(FRangeX) - ClientWidth + FOffsetX else FEffectiveOffsetX := -FOffsetX; if FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth] then begin FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); //LCL automatically set cbSize field //ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_ALL; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, SB_HORZ, ScrollInfo); {$else} GetScrollInfo(Handle, SB_HORZ, ScrollInfo); {$endif UseFlatScrollbars} if (Integer(FRangeX) > ClientWidth) or FScrollBarOptions.AlwaysVisible then begin DoShowScrollBar(SB_HORZ, True); ScrollInfo.nMin := 0; ScrollInfo.nMax := FRangeX; ScrollInfo.nPos := FEffectiveOffsetX; ScrollInfo.nPage := Max(0, ClientWidth); ScrollInfo.fMask := SIF_ALL or ScrollMasks[FScrollBarOptions.AlwaysVisible]; {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_HORZ, ScrollInfo, DoRepaint); {$else} SetScrollInfo(Handle, SB_HORZ, ScrollInfo, DoRepaint); {$endif UseFlatScrollbars} end else begin ScrollInfo.nMin := 0; ScrollInfo.nMax := 0; ScrollInfo.nPos := 0; ScrollInfo.nPage := 0; DoShowScrollBar(SB_HORZ, False); {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_HORZ, ScrollInfo, False); {$else} SetScrollInfo(Handle, SB_HORZ, ScrollInfo, False); {$endif UseFlatScrollbars} end; // Since the position is automatically changed if it doesn't meet the range // we better read the current position back to stay synchronized. {$ifdef UseFlatScrollbars} FEffectiveOffsetX := FlatSB_GetScrollPos(Handle, SB_HORZ); {$else} //todo: Use get scrollinfo instead of GetScrollPos?? FEffectiveOffsetX := GetScrollPos(Handle, SB_HORZ); {$endif UseFlatScrollbars} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + FEffectiveOffsetX) else SetOffsetX(-FEffectiveOffsetX); end else begin DoShowScrollBar(SB_HORZ, False); // Reset the current horizontal offset to account for window resize etc. SetOffsetX(FOffsetX); end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX after UpdateHScrollbar',FEffectiveOffsetX);{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateScrollBars(DoRepaint: Boolean); // adjusts scrollbars to reflect current size and paint offset of the tree begin if HandleAllocated then begin UpdateVerticalScrollBar(DoRepaint); UpdateHorizontalScrollBar(DoRepaint); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateVerticalScrollBar(DoRepaint: Boolean); var ScrollInfo: TScrollInfo; begin // Total node height includes the height of the invisible root node. if FRoot.TotalHeight < FDefaultNodeHeight then FRoot.TotalHeight := FDefaultNodeHeight; FRangeY := FRoot.TotalHeight - FRoot.NodeHeight + FBottomSpace; if tsUpdating in FStates then exit; if FScrollBarOptions.ScrollBars in [ssVertical, ssBoth] then begin //LCL automatically set cbSize field //ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_ALL; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, SB_VERT, ScrollInfo); {$else} GetScrollInfo(Handle, SB_VERT, ScrollInfo); {$endif UseFlatScrollbars} if (Integer(FRangeY) > ClientHeight) or FScrollBarOptions.AlwaysVisible then begin DoShowScrollBar(SB_VERT, True); ScrollInfo.nMin := 0; ScrollInfo.nMax := FRangeY; ScrollInfo.nPos := -FOffsetY; ScrollInfo.nPage := Max(0, ClientHeight); ScrollInfo.fMask := SIF_ALL or ScrollMasks[FScrollBarOptions.AlwaysVisible]; {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_VERT, ScrollInfo, DoRepaint); {$else} SetScrollInfo(Handle, SB_VERT, ScrollInfo, DoRepaint); {$endif UseFlatScrollbars} end else begin ScrollInfo.nMin := 0; ScrollInfo.nMax := 0; ScrollInfo.nPos := 0; ScrollInfo.nPage := 0; DoShowScrollBar(SB_VERT, False); {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_VERT, ScrollInfo, False); {$else} SetScrollInfo(Handle, SB_VERT, ScrollInfo, False); {$endif UseFlatScrollbars} end; // Since the position is automatically changed if it doesn't meet the range // we better read the current position back to stay synchronized. {$ifdef UseFlatScrollbars} SetOffsetY(-FlatSB_GetScrollPos(Handle, SB_VERT)); {$else} SetOffsetY(-GetScrollPos(Handle, SB_VERT)); {$endif UseFlatScrollBars} end else begin DoShowScrollbar(SB_VERT, False); // Reset the current vertical offset to account for window resize etc. SetOffsetY(FOffsetY); end; end; //---------------------------------------------------------------------------------------------------------------------- //lcl: the current implementation in TControl is exactly equal to this. // disable for now and reenable in the case the TControl implementation change { function TBaseVirtualTree.UseRightToLeftReading: Boolean; // The tree can handle right-to-left reading also on non-middle-east systems, so we cannot use the same function as // it is implemented in TControl. begin Result := BiDiMode <> bdLeftToRight; end; } //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateChildren(Node: PVirtualNode; Recursive: Boolean); // Ensures that the children of the given node (and all their children, if Recursive is True) are initialized. // Node must already be initialized var Child: PVirtualNode; begin if Node = nil then Node := FRoot; if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Child := Node.FirstChild; while Assigned(Child) do begin ValidateNode(Child, Recursive); Child := Child.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateNode(Node: PVirtualNode; Recursive: Boolean); // Ensures that the given node (and all its children, if Recursive is True) are initialized. var Child: PVirtualNode; begin if Node = nil then Node := FRoot else if not (vsInitialized in Node.States) then InitNode(Node); if Recursive then begin if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Child := Node.FirstChild; while Assigned(Child) do begin ValidateNode(Child, recursive); Child := Child.NextSibling; end; end; end; //----------------- TCustomStringTreeOptions --------------------------------------------------------------------------- constructor TCustomStringTreeOptions.Create(AOwner: TBaseVirtualTree); begin inherited; FStringOptions := DefaultStringOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomStringTreeOptions.SetStringOptions(const Value: TVTStringOptions); var ChangedOptions: TVTStringOptions; begin if FStringOptions <> Value then begin // Exclusive ORing to get all entries wich are in either set but not in both. ChangedOptions := FStringOptions + Value - (FStringOptions * Value); FStringOptions := Value; with FOwner do if (toShowStaticText in ChangedOptions) and not (csLoading in ComponentState) and HandleAllocated then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomStringTreeOptions.AssignTo(Dest: TPersistent); begin if Dest is TCustomStringTreeOptions then begin with TCustomStringTreeOptions(Dest) do StringOptions := Self.StringOptions; end; // Let ancestors assign their options to the destination class. inherited; end; //----------------- TVTEdit -------------------------------------------------------------------------------------------- // Implementation of a generic node caption editor. constructor TVTEdit.Create(Link: TStringEditLink); begin inherited Create(nil); ShowHint := False; ParentShowHint := False; // This assignment increases the reference count for the interface. FRefLink := Link; // This reference is used to access the link. FLink := Link; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CMAutoAdjust(var Message: TLMessage); begin AutoAdjustSize; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CMExit(var Message: TLMessage); begin if Assigned(FLink) and not FLink.FStopping then with FLink, FTree do begin if (toAutoAcceptEditChange in TreeOptions.StringOptions) then DoEndEdit else DoCancelEdit; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CNCommand(var Message: TLMCommand); begin if Assigned(FLink) and Assigned(FLink.FTree) and (Message.NotifyCode = EN_UPDATE) and not (toGridExtensions in FLink.FTree.FOptions.FMiscOptions) and not (vsMultiline in FLink.FNode.States) then // Instead directly calling AutoAdjustSize it is necessary on Win9x/Me to decouple this notification message // and eventual resizing. Hence we use a message to accomplish that. if IsWinNT then AutoAdjustSize else PostMessage(Handle, CM_AUTOADJUST, 0, 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.DoRelease(Data: PtrInt); begin Free; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMChar(var Message: TLMChar); begin if not (Message.CharCode in [VK_ESCAPE, VK_TAB]) then inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMDestroy(var Message: TLMDestroy); begin // If editing stopped by other means than accept or cancel then we have to do default processing for // pending changes. if Assigned(FLink) and not FLink.FStopping then begin with FLink, FTree do begin if (toAutoAcceptEditChange in TreeOptions.StringOptions) and Modified then Text[FNode, FColumn] := FEdit.Text; end; FLink := nil; FRefLink := nil; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMGetDlgCode(var Message: TLMNoParams); begin inherited; Message.Result := Message.Result or DLGC_WANTALLKEYS or DLGC_WANTTAB or DLGC_WANTARROWS; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMKeyDown(var Message: TLMKeyDown); // Handles some control keys. var Shift: TShiftState; EndEdit: Boolean; Tree: TBaseVirtualTree; begin case Message.CharCode of VK_ESCAPE: begin Tree := FLink.FTree; FLink.FTree.DoCancelEdit; Tree.SetFocus; end; VK_RETURN: begin EndEdit := not (vsMultiline in FLink.FNode.States); if not EndEdit then begin // If a multiline node is being edited the finish editing only if Ctrl+Enter was pressed, // otherwise allow to insert line breaks into the text. Shift := KeyDataToShiftState(Message.KeyData); EndEdit := ssCtrlOS in Shift; end; if EndEdit then begin Tree := FLink.FTree; FLink.FTree.InvalidateNode(FLink.FNode); FLink.FTree.DoEndEdit; Tree.SetFocus; end; end; VK_UP: begin if not (vsMultiline in FLink.FNode.States) then Message.CharCode := VK_LEFT; inherited; end; VK_DOWN: begin if not (vsMultiline in FLink.FNode.States) then Message.CharCode := VK_RIGHT; inherited; end; else inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.AutoAdjustSize; // Changes the size of the edit to accomodate as much as possible of its text within its container window. // NewChar describes the next character which will be added to the edit's text. var DC: HDC; Size: TSize; LastFont: THandle; begin if not (vsMultiline in FLink.FNode.States) then begin DC := GetDC(Handle); LastFont := SelectObject(DC, Font.Reference.Handle); try // Read needed space for the current text. GetTextExtentPoint32(DC, PChar(Text), Length(Text), Size); Inc(Size.cx, 2 * FLink.FTree.FTextMargin); // Repaint associated node if the edit becomes smaller. if Size.cx < Width then FLink.FTree.InvalidateNode(FLink.FNode); if FLink.FAlignment = taRightJustify then FLink.SetBounds(Rect(Left + Width - Size.cx, Top, Left + Width, Top + Height)) else FLink.SetBounds(Rect(Left, Top, Left + Size.cx, Top + Height)); finally SelectObject(DC, LastFont); ReleaseDC(Handle, DC); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CreateParams(var Params: TCreateParams); begin inherited; // Only with multiline style we can use the text formatting rectangle. // This does not harm formatting as single line control, if we don't use word wrapping. with Params do begin //todo: delphi uses Multiline for all //Style := Style or ES_MULTILINE; if vsMultiline in FLink.FNode.States then begin Style := Style and not (ES_AUTOHSCROLL or WS_HSCROLL) or WS_VSCROLL or ES_AUTOVSCROLL; Style := Style or ES_MULTILINE; end; if tsUseThemes in FLink.FTree.FStates then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; end else begin Style := Style or WS_BORDER; ExStyle := ExStyle and not WS_EX_CLIENTEDGE; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.Release; begin if HandleAllocated then Application.QueueAsyncCall(DoRelease, 0); end; //----------------- TStringEditLink ------------------------------------------------------------------------------------ constructor TStringEditLink.Create; begin inherited; FEdit := TVTEdit.Create(Self); with FEdit do begin Visible := False; BorderStyle := bsSingle; AutoSize := False; end; end; //---------------------------------------------------------------------------------------------------------------------- destructor TStringEditLink.Destroy; begin FEdit.Release; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.BeginEdit: Boolean; // Notifies the edit link that editing can start now. descendants may cancel node edit // by returning False. begin Result := not FStopping; if Result then begin FEdit.Show; FEdit.SelectAll; FEdit.SetFocus; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.SetEdit(const Value: TVTEdit); begin if Assigned(FEdit) then FEdit.Free; FEdit := Value; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.CancelEdit: Boolean; begin Result := not FStopping; if Result then begin FStopping := True; FEdit.Hide; FTree.CancelEditNode; FEdit.FLink := nil; FEdit.FRefLink := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.EndEdit: Boolean; begin Result := not FStopping; if Result then try FStopping := True; if FEdit.Modified then FTree.Text[FNode, FColumn] := FEdit.Text; FEdit.Hide; FEdit.FLink := nil; FEdit.FRefLink := nil; except FStopping := False; raise; end; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.GetBounds: TRect; begin Result := FEdit.BoundsRect; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; // Retrieves the true text bounds from the owner tree. var Text: String; begin Result := Tree is TCustomVirtualStringTree; if Result then begin FTree := Tree as TCustomVirtualStringTree; FNode := Node; FColumn := Column; // Initial size, font and text of the node. FTree.GetTextInfo(Node, Column, FEdit.Font, FTextBounds, Text); FEdit.Font.Color := clWindowText; FEdit.Parent := Tree; FEdit.HandleNeeded; FEdit.Text := Text; if Column <= NoColumn then begin FEdit.BidiMode := FTree.BidiMode; FAlignment := FTree.Alignment; end else begin FEdit.BidiMode := FTree.Header.Columns[Column].BidiMode; FAlignment := FTree.Header.Columns[Column].Alignment; end; if FEdit.BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(FAlignment); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.ProcessMessage(var Message: TLMessage); begin FEdit.WindowProc(Message); end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.SetBounds(R: TRect); // Sets the outer bounds of the edit control and the actual edit area in the control. var Offset: Integer; begin if not FStopping then begin with R do begin // Set the edit's bounds but make sure there's a minimum width and the right border does not // extend beyond the parent's left/right border. if Left < 0 then Left := 0; if Right - Left < 30 then begin if FAlignment = taRightJustify then Left := Right - 30 else Right := Left + 30; end; if Right > FTree.ClientWidth then Right := FTree.ClientWidth; FEdit.BoundsRect := R; // The selected text shall exclude the text margins and be centered vertically. // We have to take out the two pixel border of the edit control as well as a one pixel "edit border" the // control leaves around the (selected) text. R := FEdit.ClientRect; Offset := 2; if tsUseThemes in FTree.FStates then Inc(Offset); InflateRect(R, -FTree.FTextMargin + Offset, Offset); if not (vsMultiline in FNode.States) then OffsetRect(R, 0, FTextBounds.Top - FEdit.Top); SendMessage(FEdit.Handle, EM_SETRECTNP, 0, PtrUInt(@R)); end; end; end; //----------------- TCustomVirtualString ------------------------------------------------------------------------------- constructor TCustomVirtualStringTree.Create(AOwner: TComponent); begin inherited; if (Owner = nil) or (([csReading, csDesigning] * Owner.ComponentState) = [csDesigning]) then FDefaultText := 'Node'; FInternalDataOffset := AllocateInternalDataArea(SizeOf(Cardinal)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.GetRenderStartValues(Source: TVSTTextSourceType; out Node: PVirtualNode; out NextNodeProc: TGetNextNodeProc); begin case Source of tstInitialized: begin Node := GetFirstInitialized; NextNodeProc := GetNextInitialized; end; tstSelected: begin Node := GetFirstSelected; NextNodeProc := GetNextSelected; end; tstCutCopySet: begin Node := GetFirstCutCopy; NextNodeProc := GetNextCutCopy; end; tstVisible: begin Node := GetFirstVisible(nil, True); NextNodeProc := GetNextVisible; end; else // tstAll Node := GetFirst; NextNodeProc := GetNext; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): String; begin Assert(Assigned(Node), 'Node must not be nil.'); if not (vsInitialized in Node.States) then InitNode(Node); Result := ''; DoGetImageText(Node, Kind, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetOptions: TCustomStringTreeOptions; begin Result := FOptions as TCustomStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetText(Node: PVirtualNode; Column: TColumnIndex): String; begin Assert(Assigned(Node), 'Node must not be nil.'); if not (vsInitialized in Node.States) then InitNode(Node); Result := FDefaultText; DoGetText(Node, Column, ttNormal, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.InitializeTextProperties(var PaintInfo: TVTPaintInfo); // Initializes default values for customization in PaintNormalText. begin with PaintInfo do begin // Set default font values first. Canvas.Font := Font; if (toHotTrack in FOptions.FPaintOptions) and (Node = FCurrentHotNode) then begin if not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions) then Canvas.Font.Style := Canvas.Font.Style + [fsUnderline]; Canvas.Font.Color := FColors.HotColor; end; // Change the font color only if the node also is drawn in selected style. if poDrawSelection in PaintOptions then begin if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States) and (not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions)) then Canvas.Font.Color := clHighlightText; end else if vsSelected in Node.States then begin if (Focused or (toPopupMode in FOptions.FPaintOptions)) and (not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions)) then Canvas.Font.Color := clHighlightText; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.PaintNormalText(var PaintInfo: TVTPaintInfo; TextOutFlags: Integer; Text: String); // This method is responsible for painting the given text to target canvas (under consideration of the given rectangles). // The text drawn here is considered as the normal text in a node. // Note: NodeWidth is the actual width of the text to be drawn. This does not necessarily correspond to the width of // the node rectangle. The clipping rectangle comprises the entire node (including tree lines, buttons etc.). var TripleWidth: Integer; R: TRect; DrawFormat: Cardinal; Size: TSize; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintNormalText') ;{$endif} InitializeTextProperties(PaintInfo); with PaintInfo do begin R := ContentRect; //todo_lcl See how TextStyle should be set //Canvas.TextFlags := 0; // Multiline nodes don't need special font handling or text manipulation. // Note: multiline support requires the Unicode version of DrawText, which is able to do word breaking. // The emulation in this unit does not support this so we have to use the OS version. However // DrawTextW is only available on NT/2000/XP and up. Hence there is only partial multiline support // for 9x/Me. if vsMultiline in Node.States then begin InflateRect(R, -FTextMargin, 0); DoPaintText(Node, Canvas, Column, ttNormal); // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; // The edit control flag will ensure that no partial line is displayed, that is, only lines // which are (vertically) fully visible are drawn. DrawFormat := DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment]; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; end else begin InflateRect(R, -FTextMargin, 0); FFontChanged := False; TripleWidth := FEllipsisWidth; DoPaintText(Node, Canvas, Column, ttNormal); if FFontChanged then begin // If the font has been changed then the ellipsis width must be recalculated. TripleWidth := 0; // Recalculate also the width of the normal text. GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Size); NodeWidth := Size.cx + 2 * FTextMargin; end; // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; // Check if the text must be shortend. if (Column > -1) and ((NodeWidth - 2 * FTextMargin) > R.Right - R.Left) then begin Text := DoShortenString(Canvas, Node, Column, Text, R.Right - R.Left, TripleWidth); if Alignment = taRightJustify then DrawFormat := DrawFormat or DT_RIGHT else DrawFormat := DrawFormat or DT_LEFT; end else DrawFormat := DrawFormat or AlignmentToDrawFlag[Alignment]; end; //todo_lcl_check if not Canvas.TextStyle.Opaque then SetBkMode(Canvas.Handle, TRANSPARENT) else SetBkMode(Canvas.Handle, OPAQUE); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Canvas.Brush.Color',Canvas.Brush.Color);{$endif} DoTextDrawing(PaintInfo, Text, R, DrawFormat); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNormalText');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.PaintStaticText(const PaintInfo: TVTPaintInfo; TextOutFlags: Integer; const Text: String); // This method retrives and draws the static text bound to a particular node. var R: TRect; DrawFormat: Cardinal; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintStaticText');{$endif} with PaintInfo do begin Canvas.Font := Font; if toFullRowSelect in FOptions.FSelectionOptions then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States)then Canvas.Font.Color := clHighlightText else Canvas.Font.Color := Font.Color; end else if vsSelected in Node.States then begin if Focused or (toPopupMode in FOptions.FPaintOptions) then Canvas.Font.Color := clHighlightText else Canvas.Font.Color := Font.Color; end; end; DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE; //todo_lcl See how Canvas.TextStyle should be //Canvas.TextFlags := 0; DoPaintText(Node, Canvas, Column, ttStatic); // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; R := ContentRect; if Alignment = taRightJustify then Dec(R.Right, NodeWidth + FTextMargin) else Inc(R.Left, NodeWidth + FTextMargin); //todo_lcl_check if not Canvas.TextStyle.Opaque then SetBkMode(Canvas.Handle, TRANSPARENT) else SetBkMode(Canvas.Handle, OPAQUE); DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat) end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintStaticText');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetDefaultText(const Value: String); begin if FDefaultText <> Value then begin FDefaultText := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetOptions(const Value: TCustomStringTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetText(Node: PVirtualNode; Column: TColumnIndex; const Value: String); begin DoNewText(Node, Column, Value); InvalidateNode(Node); end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.CMFontChanged(var Msg: TLMessage); // Whenever a new font is applied to the tree some default values are determined to avoid frequent // determination of the same value. var MemDC: HDC; Run: PVirtualNode; TM: TTextMetric; Size: TSize; Data: PInteger; begin inherited; MemDC := CreateCompatibleDC(0); try SelectObject(MemDC, Font.Reference.Handle); GetTextMetrics(MemDC, TM); FTextHeight := TM.tmHeight; GetTextExtentPoint32(MemDC, '...', 3, Size); FEllipsisWidth := Size.cx; finally DeleteDC(MemDC); end; // Have to reset all node widths. Run := FRoot.FirstChild; while Assigned(Run) do begin Data := InternalData(Run); if Assigned(Data) then Data^ := 0; Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); // In the case a node spans several columns (if enabled) we need to determine how many columns. // Note: the autospan feature can only be used with left-to-right layout. begin if (toAutoSpanColumns in FOptions.FAutoOptions) and FHeader.UseColumns and (PaintInfo.BidiMode = bdLeftToRight) then with FHeader.FColumns, PaintInfo do begin // Start with the directly following column. NextNonEmpty := GetNextVisibleColumn(Column); // Auto spanning columns can only be used for left-to-right directionality because the tree is drawn // from left to right. For RTL directionality it would be necessary to draw it from right to left. // While this could be managed, it becomes impossible when directionality is mixed. repeat if (NextNonEmpty = InvalidColumn) or not ColumnIsEmpty(Node, NextNonEmpty) or (Items[NextNonEmpty].BidiMode <> bdLeftToRight) then Break; Inc(CellRect.Right, Items[NextNonEmpty].Width); NextNonEmpty := GetNextVisibleColumn(NextNonEmpty); until False; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.CalculateTextWidth(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; // Determines the width of the given text. begin Result := 2 * FTextMargin; if Length(Text) > 0 then begin Canvas.Font := Font; DoPaintText(Node, Canvas, Column, ttNormal); Inc(Result, DoTextMeasuring(Canvas, Node, Column, Text)); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; // For hit tests it is necessary to consider cases where columns are empty and automatic column spanning is enabled. // This method simply checks the given column's text and if this is empty then the column is considered as being empty. begin Result := Length(Text[Node, Column]) = 0; // If there is no text then let the ancestor decide if the column is to be considered as being empty // (e.g. by asking the application). If there is text then the column is never be considered as being empty. if Result then Result := inherited ColumnIsEmpty(Node, Column); end; //---------------------------------------------------------------------------------------------------------------------- {$ifndef LCLWin32} procedure TCustomVirtualStringTree.CopyToClipBoard; begin if FSelectionCount > 0 then begin MarkCutCopyNodes; DoStateChange([tsCopyPending]); Clipboard.AsText := ContentToUTF8(tstCutCopySet, #9); DoStateChange([], [tsCopyPending]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.CutToClipBoard; begin //todo: currently there's no way in LCL to know when the clipboard was used CopyToClipBoard; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; begin Result := inherited DoCreateEditor(Node, Column); // Enable generic label editing support if the application does not have own editors. if Result = nil then Result := TStringEditLink.Create; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := inherited DoGetNodeHint(Node, Column, LineBreakStyle); if Assigned(FOnGetHint) then FOnGetHint(Self, Node, Column, LineBreakStyle, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := inherited DoGetNodeToolTip(Node, Column, LineBreakStyle); if Assigned(FOnGetHint) then FOnGetHint(Self, Node, Column, LineBreakStyle, Result) else Result := Text[Node, Column]; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; // Returns the text width of the given node in pixels. // This width is stored in the node's data member to increase access speed. var Data: PInteger; begin if (Column > NoColumn) and (vsMultiline in Node.States) then Result := FHeader.Columns[Column].Width else begin if Canvas = nil then Canvas := Self.Canvas; if Column = FHeader.MainColumn then begin // Primary column or no columns. Data := InternalData(Node); if Assigned(Data) then begin Result := Data^; if Result = 0 then begin Data^ := CalculateTextWidth(Canvas, Node, Column, Text[Node, Column]); Result := Data^; end; end else Result := 0; end else // any other column Result := CalculateTextWidth(Canvas, Node, Column, Text[Node, Column]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: String); begin if Assigned(FOnGetText) then FOnGetText(Self, Node, Column, TextType, Text); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; // Since the string tree has access to node text it can do incremental search on its own. Use the event to // override the default behavior. begin Result := 0; if Assigned(FOnIncrementalSearch) then FOnIncrementalSearch(Self, Node, Text, Result) else // Default behavior is to match the search string with the start of the node text. if Pos(Text, GetText(Node, FocusedColumn)) <> 1 then Result := 1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoNewText(Node: PVirtualNode; Column: TColumnIndex; const Text: String); begin if Assigned(FOnNewText) then FOnNewText(Self, Node, Column, Text); // The width might have changed, so update the scrollbar. if FUpdateCount = 0 then UpdateHorizontalScrollBar(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoPaintNode(var PaintInfo: TVTPaintInfo); // Main output routine to print the text of the given node using the space provided in PaintInfo.ContentRect. var S: String; TextOutFlags: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'TCustomVirtualStringTree.DoPaintNode');{$endif} // Set a new OnChange event for the canvas' font so we know if the application changes it in the callbacks. // This long winded procedure is necessary because font changes (as well as brush and pen changes) are // unfortunately not announced via the Canvas.OnChange event. RedirectFontChangeEvent(PaintInfo.Canvas); // Determine main text direction as well as other text properties. TextOutFlags := ETO_CLIPPED or RTLFlag[PaintInfo.BidiMode <> bdLeftToRight]; S := Text[PaintInfo.Node, PaintInfo.Column]; // Paint the normal text first... if Length(S) > 0 then PaintNormalText(PaintInfo, TextOutFlags, S); // ... and afterwards the static text if not centered and the node is not multiline enabled. if (Alignment <> taCenter) and not (vsMultiline in PaintInfo.Node.States) and (toShowStaticText in TreeOptions.FStringOptions) then begin S := ''; with PaintInfo do DoGetText(Node, Column, ttStatic, S); if Length(S) > 0 then PaintStaticText(PaintInfo, TextOutFlags, S); end; RestoreFontChangeEvent(PaintInfo.Canvas); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'TCustomVirtualStringTree.DoPaintNode');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoPaintText(Node: PVirtualNode; const Canvas: TCanvas; Column: TColumnIndex; TextType: TVSTTextType); begin if Assigned(FOnPaintText) then FOnPaintText(Self, Canvas, Node, Column, TextType); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; var Done: Boolean; begin Done := False; if Assigned(FOnShortenString) then FOnShortenString(Self, Canvas, Node, Column, S, Width, Result, Done); if not Done then Result := ShortenString(Canvas.Handle, S, Width, EllipsisWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); var DefaultDraw: Boolean; begin DefaultDraw := True; if Assigned(FOnDrawText) then FOnDrawText(Self, PaintInfo.Canvas, PaintInfo.Node, PaintInfo.Column, Text, CellRect, DefaultDraw); if DefaultDraw then DrawText(PaintInfo.Canvas.Handle, PChar(Text), Length(Text), CellRect, DrawFormat); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; var Size: TSize; R: TRect; DrawFormat: Integer; begin GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Size); if vsMultiLine in Node.States then begin DrawFormat := DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment]; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; R := Rect(0, 0, Size.cx, MaxInt); DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat); Size.cx := R.Right - R.Left; end; Result := Size.cx; if Assigned(FOnMeasureTextWidth) then FOnMeasureTextWidth(Self, Canvas, Node, Column, Text, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetOptionsClass: TTreeOptionsClass; begin Result := TCustomStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.InternalData(Node: PVirtualNode): Pointer; begin if (Node = FRoot) or (Node = nil) then Result := nil else Result := PByte(Node) + FInternalDataOffset; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.MainColumnChanged; var Run: PVirtualNode; Data: PInteger; begin inherited; // Have to reset all node widths. Run := FRoot.FirstChild; while Assigned(Run) do begin Data := InternalData(Run); if Assigned(Data) then Data^ := 0; Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; // read in the caption chunk if there is one var NewText: String; begin case ChunkType of CaptionChunk: begin NewText := ''; if ChunkSize > 0 then begin SetLength(NewText, ChunkSize); Stream.Read(PChar(NewText)^, ChunkSize); end; // Do a new text event regardless of the caption content to allow removing the default string. Text[Node, FHeader.MainColumn] := NewText; Result := True; end; else Result := inherited ReadChunk(Stream, Version, Node, ChunkType, ChunkSize); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns string expressions of all currently selected nodes in the Medium structure. begin Result := inherited RenderOLEData(FormatEtcIn, Medium, ForClipboard); if Failed(Result) then try if ForClipboard then Medium.hGlobal := ContentToClipboard(FormatEtcIn.cfFormat, tstCutCopySet) else Medium.hGlobal := ContentToClipboard(FormatEtcIn.cfFormat, tstSelected); // Fill rest of the Medium structure if rendering went fine. if Medium.hGlobal <> 0 then begin Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.WriteChunks(Stream: TStream; Node: PVirtualNode); // Adds another sibling chunk for Node storing the label if the node is initialized. // Note: If the application stores a node's caption in the node's data member (which will be quite common) and needs to // store more node specific data then it should use the OnSaveNode event rather than the caption autosave function // (take out soSaveCaption from StringOptions). Otherwise the caption is unnecessarily stored twice. var Header: TChunkHeader; S: String; Len: Integer; begin inherited; if (toSaveCaptions in TreeOptions.FStringOptions) and (Node <> FRoot) and (vsInitialized in Node.States) then with Stream do begin // Read the node's caption (primary column only). S := Text[Node, FHeader.MainColumn]; Len := Length(S); if Len > 0 then begin // Write a new sub chunk. Header.ChunkType := CaptionChunk; Header.ChunkSize := Len; Write(Header, SizeOf(Header)); Write(PChar(S)^, Len); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ComputeNodeHeight(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; S: String): Integer; // Default node height calculation for multi line nodes. This method can be used by the application to delegate the // computation to the string tree. // Canvas is used to compute that value by using its current font settings. // Node and Column describe the cell to be used for the computation. // S is the string for which the height must be computed. If this string is empty the cell text is used instead. var DrawFormat: Cardinal; BidiMode: TBidiMode; Alignment: TAlignment; PaintInfo: TVTPaintInfo; Dummy: TColumnIndex; LineImage: TLineImage; begin if Length(S) = 0 then S := Text[Node, Column]; DrawFormat := DT_TOP or DT_NOPREFIX or DT_CALCRECT or DT_WORDBREAK; if Column <= NoColumn then begin BidiMode := Self.BidiMode; Alignment := Self.Alignment; end else begin BidiMode := Header.Columns[Column].BidiMode; Alignment := Header.Columns[Column].Alignment; end; if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); // Allow for autospanning. PaintInfo.Node := Node; PaintInfo.BidiMode := BidiMode; PaintInfo.Column := Column; PaintInfo.CellRect := Rect(0, 0, 0, 0); if Column > NoColumn then begin PaintInfo.CellRect.Right := FHeader.Columns[Column].Width - FTextMargin; PaintInfo.CellRect.Left := FTextMargin + FMargin; if Column = Header.MainColumn then begin if toFixedIndent in FOptions.FPaintOptions then SetLength(LineImage, 1) else DetermineLineImageAndSelectLevel(Node, LineImage); Inc(PaintInfo.CellRect.Left, Length(LineImage) * Integer(Indent)); end; end else PaintInfo.CellRect.Right := ClientWidth; AdjustPaintCellRect(PaintInfo, Dummy); if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RIGHT or DT_RTLREADING else DrawFormat := DrawFormat or DT_LEFT; DrawText(Canvas.Handle, PChar(S), Length(S), PaintInfo.CellRect, DrawFormat); Result := PaintInfo.CellRect.Bottom - PaintInfo.CellRect.Top; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToHTML(Source: TVSTTextSourceType; const Caption: String = ''): String; // Renders the current tree content (depending on Source) as HTML text encoded in UTF-8. // If Caption is not empty then it is used to create and fill the header for the table built here. // Based on ideas and code from Frank van den Bergh and Andreas H?rstemeier. var Buffer: TBufferedUTF8String; //--------------------------------------------------------------------------- procedure WriteColorAsHex(Color: TColor); var WinColor: COLORREF; I: Integer; Component, Value: Byte; begin Buffer.Add('#'); WinColor := ColorToRGB(Color); I := 1; while I <= 6 do begin Component := WinColor and $FF; Value := 48 + (Component shr 4); if Value > $39 then Inc(Value, 7); Buffer.Add(AnsiChar(Value)); Inc(I); Value := 48 + (Component and $F); if Value > $39 then Inc(Value, 7); Buffer.Add(AnsiChar(Value)); Inc(I); WinColor := WinColor shr 8; end; end; //--------------------------------------------------------------------------- procedure WriteStyle(const Name: AnsiString; Font: TFont); // Creates a CSS style entry with the given name for the given font. // If Name is empty then the entry is created as inline style. begin if Length(Name) = 0 then Buffer.Add(' style="{font:') else begin Buffer.Add('.'); Buffer.Add(Name); Buffer.Add('{font:'); end; if fsUnderline in Font.Style then Buffer.Add(' underline'); if fsItalic in Font.Style then Buffer.Add(' italic'); if fsBold in Font.Style then Buffer.Add(' bold'); if Font.Size < 0 then Buffer.Add(Format(' %dpx "%s";', [Font.Height, Font.Name])) else Buffer.Add(Format(' %dpt "%s";', [Font.Size, Font.Name])); Buffer.Add('color:'); WriteColorAsHex(Font.Color); Buffer.Add(';}'); if Length(Name) = 0 then Buffer.Add('"'); end; //--------------- end local functions --------------------------------------- var I, J : Integer; Level, MaxLevel: Cardinal; AddHeader: String; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; Text: String; RenderColumns: Boolean; Columns: TColumnsArray; ColumnColors: array of String; Index: Integer; IndentWidth, LineStyleText: String; Alignment: TAlignment; BidiMode: TBidiMode; CellPadding: String; begin Buffer := TBufferedUTF8String.Create; try // For customization by the application or descendants we use again the redirected font change event. RedirectFontChangeEvent(Canvas); CellPadding := Format('padding-left:%dpx;padding-right:%0:dpx;', [FMargin]); IndentWidth := IntToStr(FIndent); AddHeader := ' '; // Add title if adviced so by giving a caption. if Length(Caption) > 0 then AddHeader := AddHeader + 'caption="' + Caption + '"'; if Borderstyle <> bsNone then AddHeader := AddHeader + Format(' border="%d" frame=box', [BorderWidth + 1]); Buffer.Add('<META http-equiv="Content-Type" content="text/html; charset=utf-8">'); // Create HTML table based on the tree structure. To simplify formatting we use styles defined in a small CSS area. Buffer.Add('<style type="text/css">'); Buffer.AddNewLine; WriteStyle('default', Font); Buffer.AddNewLine; WriteStyle('header', FHeader.Font); Buffer.AddNewLine; // Determine grid/table lines and create CSS for it. // Vertical and/or horizontal border to show. if FLineStyle = lsSolid then LineStyleText := 'solid;' else LineStyleText := 'dotted;'; if toShowHorzGridLines in FOptions.FPaintOptions then begin Buffer.Add('.noborder{border-style:'); Buffer.Add(LineStyleText); Buffer.Add(' border-bottom:1;border-left:0;border-right:0; border-top:0;'); Buffer.Add(CellPadding); Buffer.Add('}'); end else begin Buffer.Add('.noborder{border-style:none;'); Buffer.Add(CellPadding); Buffer.Add('}'); end; Buffer.AddNewLine; Buffer.Add('.normalborder {border-top:none; border-left:none; vertical-align:top;'); if toShowVertGridLines in FOptions.FPaintOptions then Buffer.Add('border-right:1 ' + LineStyleText) else Buffer.Add('border-right:none;'); if toShowHorzGridLines in FOptions.FPaintOptions then Buffer.Add('border-bottom:1 ' + LineStyleText) else Buffer.Add('border-bottom:none;'); Buffer.Add(CellPadding); Buffer.Add('}'); Buffer.Add('</style>'); Buffer.AddNewLine; // General table properties. Buffer.Add('<table class="default" bgcolor='); WriteColorAsHex(Color); Buffer.Add(AddHeader); Buffer.Add(' cellspacing="0" cellpadding='); Buffer.Add(IntToStr(FMargin) + '>'); Buffer.AddNewLine; Columns := nil; ColumnColors := nil; RenderColumns := FHeader.UseColumns; if RenderColumns then begin Columns := FHeader.FColumns.GetVisibleColumns; SetLength(ColumnColors, Length(Columns)); end; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; MaxLevel := 0; // The table consists of visible columns and rows as used in the tree, but the main tree column is splitted // into several HTML columns to accomodate the indentation. while Assigned(Run) do begin if (CanExportNode(Run)) then begin Level := GetNodeLevel(Run); if Level > MaxLevel then MaxLevel := Level; end; Run := GetNextNode(Run); end; if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FOnBeforeHeaderExport(Self, etHTML); Buffer.Add('<tr class="header" style="'); Buffer.Add(CellPadding); Buffer.Add('">'); Buffer.AddNewLine; // Make the first row in the HTML table an image of the tree header. for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etHTML, Columns[I]); Buffer.Add('<th height="'); Buffer.Add(IntToStr(FHeader.FHeight)); Buffer.Add('px"'); Alignment := Columns[I].CaptionAlignment; // Consider directionality. if Columns[I].FBiDiMode <> bdLeftToRight then begin ChangeBidiModeAlignment(Alignment); Buffer.Add(' dir="rtl"'); end; // Consider aligment. case Alignment of taRightJustify: Buffer.Add(' align=right'); taCenter: Buffer.Add(' align=center'); else Buffer.Add(' align=left'); end; Index := Columns[I].Index; // Merge cells of the header emulation in the main column. if (MaxLevel > 0) and (Index = Header.MainColumn) then begin Buffer.Add(' colspan="'); Buffer.Add(IntToStr(MaxLevel + 1)); Buffer.Add('"'); end; // The color of the header is usually clBtnFace. Buffer.Add(' bgcolor='); WriteColorAsHex(clBtnFace); // Set column width in pixels. Buffer.Add(' width="'); Buffer.Add(IntToStr(Columns[I].Width)); Buffer.Add('px">'); if Length(Columns[I].Text) > 0 then Buffer.Add(Columns[I].Text); Buffer.Add('</th>'); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport(Self, etHTML, Columns[I]); end; Buffer.Add('</tr>'); Buffer.AddNewLine; if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(self, etHTML); end; // Now go through the tree. Run := Save; while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FonBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etHTML, Run)))) then begin Run := GetNextNode(Run); Continue; end; Level := GetNodeLevel(Run); Buffer.Add(' <tr class="default">'); Buffer.AddNewLine; I := 0; while (I < Length(Columns)) or not RenderColumns do begin if RenderColumns then Index := Columns[I].Index else Index := NoColumn; if not RenderColumns or (coVisible in Columns[I].FOptions) then begin // Call back the application to know about font customization. Canvas.Font := Font; FFontChanged := False; DoPaintText(Run, Canvas, Index, ttNormal); if Index = Header.MainColumn then begin // Create a cell for each indentation level. if RenderColumns and not (coParentColor in Columns[I].FOptions) then begin for J := 1 to Level do begin Buffer.Add('<td class="noborder" width="'); Buffer.Add(IndentWidth); Buffer.Add('" height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); if not (coParentColor in Columns[I].FOptions) then begin Buffer.Add(' bgcolor='); WriteColorAsHex(Columns[I].Color); end; Buffer.Add('> </td>'); end; end else begin for J := 1 to Level do if J = 1 then begin Buffer.Add(' <td height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"> </td>'); end else Buffer.Add(' <td> </td>'); end; end; if FFontChanged then begin Buffer.Add(' <td class="normalborder" '); WriteStyle('', Canvas.Font); Buffer.Add(' height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); end else begin Buffer.Add(' <td class="normalborder" height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); end; if RenderColumns then begin Alignment := Columns[I].Alignment; BidiMode := Columns[I].BidiMode; end else begin Alignment := Self.Alignment; BidiMode := Self.BidiMode; end; // Consider directionality. if BiDiMode <> bdLeftToRight then begin ChangeBidiModeAlignment(Alignment); Buffer.Add(' dir="rtl"'); end; // Consider aligment. case Alignment of taRightJustify: Buffer.Add(' align=right'); taCenter: Buffer.Add(' align=center'); else Buffer.Add(' align=left'); end; // Merge cells in the main column. if (MaxLevel > 0) and (Index = FHeader.MainColumn) and (Level < MaxLevel) then begin Buffer.Add(' colspan="'); Buffer.Add(IntToStr(MaxLevel - Level + 1)); Buffer.Add('"'); end; if RenderColumns and not (coParentColor in Columns[I].FOptions) then begin Buffer.Add(' bgcolor='); WriteColorAsHex(Columns[I].Color); end; Buffer.Add('>'); Text := Self.Text[Run, Index]; if Length(Text) > 0 then Buffer.Add(Text); Buffer.Add('</td>'); end; if not RenderColumns then Break; Inc(I); end; if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etHTML, Run); Run := GetNextNode(Run); Buffer.Add(' </tr>'); Buffer.AddNewLine; end; Buffer.Add('</table>'); RestoreFontChangeEvent(Canvas); Result := Buffer.AsUTF8String; finally Buffer.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.CanExportNode(Node: PVirtualNode ): Boolean; begin Result := True; case FOptions.ExportMode of emChecked: Result := Node.CheckState = csCheckedNormal; emUnchecked: Result := Node.CheckState = csUncheckedNormal; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToRTF(Source: TVSTTextSourceType): AnsiString; // Renders the current tree content (depending on Source) as RTF (rich text). // Based on ideas and code from Frank van den Bergh and Andreas H?rstemeier. var Fonts: TStringList; Colors: TFpList; CurrentFontIndex, CurrentFontColor, CurrentFontSize: Integer; Buffer: TBufferedUTF8String; //--------------- local functions ------------------------------------------- procedure SelectFont(Font: string); var I: Integer; begin I := Fonts.IndexOf(Font); if I > -1 then begin // Font has already been used if I <> CurrentFontIndex then begin Buffer.Add('\f'); Buffer.Add(IntToStr(I)); CurrentFontIndex := I; end; end else begin I := Fonts.Add(Font); Buffer.Add('\f'); Buffer.Add(IntToStr(I)); CurrentFontIndex := I; end; end; //--------------------------------------------------------------------------- procedure SelectColor(Color: TColor); var I: Integer; begin I := Colors.IndexOf(Pointer(Color)); if I > -1 then begin // Color has already been used if I <> CurrentFontColor then begin Buffer.Add('\cf'); Buffer.Add(IntToStr(I + 1)); CurrentFontColor := I; end; end else begin I := Colors.Add(Pointer(Color)); Buffer.Add('\cf'); Buffer.Add(IntToStr(I + 1)); CurrentFontColor := I; end; end; //--------------------------------------------------------------------------- procedure TextPlusFont(const Text: String; Font: TFont); var UseUnderline, UseItalic, UseBold: Boolean; I: Integer; WText: UnicodeString; begin if Length(Text) > 0 then begin WText := UTF8Decode(Text); UseUnderline := fsUnderline in Font.Style; if UseUnderline then Buffer.Add('\ul'); UseItalic := fsItalic in Font.Style; if UseItalic then Buffer.Add('\i'); UseBold := fsBold in Font.Style; if UseBold then Buffer.Add('\b'); SelectFont(Font.Name); SelectColor(Font.Color); if Font.Size <> CurrentFontSize then begin // Font size must be given in half points. Buffer.Add('\fs'); Buffer.Add(IntToStr(2 * Font.Size)); CurrentFontSize := Font.Size; end; // Use escape sequences to note Unicode text. Buffer.Add(' '); // Note: Unicode values > 32767 must be expressed as negative numbers. This is implicitly done // by interpreting the wide chars (word values) as small integers. for I := 1 to Length(WText) do begin if (Text[I] = WideLF) then Buffer.Add( '{\par}' ) else if (Text[i] <> WideCR) then begin Buffer.Add(Format('\u%d\''3f', [SmallInt(WText[I])])); Continue; end; end; if UseUnderline then Buffer.Add('\ul0'); if UseItalic then Buffer.Add('\i0'); if UseBold then Buffer.Add('\b0'); end; end; //--------------- end local functions --------------------------------------- var Level, LastLevel: Integer; I, J: Integer; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; S, Tabs : String; Text: String; Twips: Integer; RenderColumns: Boolean; Columns: TColumnsArray; Index: Integer; Alignment: TAlignment; BidiMode: TBidiMode; begin Buffer := TBufferedUTF8String.Create; try // For customization by the application or descendants we use again the redirected font change event. RedirectFontChangeEvent(Canvas); Fonts := TStringList.Create; Colors := TFpList.Create; CurrentFontIndex := -1; CurrentFontColor := -1; CurrentFontSize := -1; Columns := nil; Tabs := ''; LastLevel := 0; RenderColumns := FHeader.UseColumns; if RenderColumns then Columns := FHeader.FColumns.GetVisibleColumns; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; // First make a table structure. The \rtf and other header stuff is included // when the font and color tables are created. Buffer.Add('\uc1\trowd\trgaph70'); J := 0; if RenderColumns then begin for I := 0 to High(Columns) do begin Inc(J, Columns[I].Width); // This value must be expressed in twips (1 inch = 1440 twips). Twips := Round(1440 * J / Screen.PixelsPerInch); Buffer.Add('\cellx'); Buffer.Add(IntToStr(Twips)); end; end else begin Twips := Round(1440 * ClientWidth / Screen.PixelsPerInch); Buffer.Add('\cellx'); Buffer.Add(IntToStr(Twips)); end; // Fill table header. if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FonBeforeHeaderExport(Self, etRTF); Buffer.Add('\pard\intbl'); for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etRTF, Columns[I]); Alignment := Columns[I].CaptionAlignment; BidiMode := Columns[I].BidiMode; // Alignment is not supported with older RTF formats, however it will be ignored. if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); case Alignment of taRightJustify: Buffer.Add('\qr'); taCenter: Buffer.Add('\qc'); end; TextPlusFont(Columns[I].Text, Header.Font); Buffer.Add('\cell'); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport( self, etRTF, Columns[I] ); end; Buffer.Add('\row'); if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(Self, etRTF); end; // Now write the contents. Run := Save; while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etRTF, Run)))) then begin Run := GetNextNode(Run); Continue; end; I := 0; while not RenderColumns or (I < Length(Columns)) do begin if RenderColumns then begin Index := Columns[I].Index; Alignment := Columns[I].Alignment; BidiMode := Columns[I].BidiMode; end else begin Index := NoColumn; Alignment := FAlignment; BidiMode := Self.BidiMode; end; if not RenderColumns or (coVisible in Columns[I].Options) then begin Text := Self.Text[Run, Index]; Buffer.Add('\pard\intbl'); // Alignment is not supported with older RTF formats, however it will be ignored. if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); case Alignment of taRightJustify: Buffer.Add('\qr'); taCenter: Buffer.Add('\qc'); end; // Call back the application to know about font customization. Canvas.Font := Font; FFontChanged := False; DoPaintText(Run, Canvas, Index, ttNormal); if Index = Header.MainColumn then begin Level := GetNodeLevel(Run); if Level <> LastLevel then begin LastLevel := Level; Tabs := ''; for J := 0 to Level - 1 do Tabs := Tabs + '\tab'; end; if Level > 0 then begin Buffer.Add(Tabs); Buffer.Add(' '); TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end else begin TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end; end else begin TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end; end; if not RenderColumns then Break; Inc(I); end; Buffer.Add('\row'); if (Assigned(FOnAfterNodeExport)) then FOnAfterNodeExport(Self, etRTF, Run); Run := GetNextNode(Run); end; Buffer.Add('\pard\par'); // Build lists with fonts and colors. They have to be at the start of the document. S := '{\rtf1\ansi\ansicpg1252\deff0\deflang1043{\fonttbl'; for I := 0 to Fonts.Count - 1 do S := S + Format('{\f%d %s;}', [I, Fonts[I]]); S := S + '}'; S := S + '{\colortbl;'; for I := 0 to Colors.Count - 1 do begin J := ColorToRGB(TColor(Colors[I])); S := S + Format('\red%d\green%d\blue%d;', [J and $FF, (J shr 8) and $FF, (J shr 16) and $FF]); end; S := S + '}'; Result := S + Buffer.AsAnsiString + '}'; Fonts.Free; Colors.Free; RestoreFontChangeEvent(Canvas); finally Buffer.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.ContentToCustom(Source: TVSTTextSourceType); // Generic export procedure which polls the application at every stage of the export. var I: Integer; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; RenderColumns: Boolean; Columns: TColumnsArray; begin Columns := nil; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; RenderColumns := FHeader.UseColumns and ( hoVisible in FHeader.Options ); if Assigned(FOnBeforeTreeExport) then FOnBeforeTreeExport(Self, etCustom); // Fill table header. if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FOnBeforeHeaderExport(Self, etCustom); Columns := FHeader.FColumns.GetVisibleColumns; for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etCustom, Columns[I]); if Assigned(FOnColumnExport) then FOnColumnExport(Self, etCustom, Columns[I]); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport(Self, etCustom, Columns[I]); end; if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(Self, etCustom); end; // Now write the content. Run := Save; while Assigned(Run) do begin if CanExportNode(Run) then begin if Assigned(FOnBeforeNodeExport) then FOnBeforeNodeExport(Self, etCustom, Run); if Assigned(FOnNodeExport) then FOnNodeExport(Self, etCustom, Run); if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etCustom, Run); end; Run := GetNextNode(Run); end; if Assigned(FOnAfterTreeExport) then FOnAfterTreeExport(Self, etCustom); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToAnsi(Source: TVSTTextSourceType; const Separator: String): AnsiString; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsAnsiString; Buffer.Destroy; end; end; function TCustomVirtualStringTree.ContentToText(Source: TVSTTextSourceType; const Separator: String): AnsiString; begin Result := ContentToAnsi(Source, Separator); end; function TCustomVirtualStringTree.ContentToUnicode(Source: TVSTTextSourceType; const Separator: String): UnicodeString; begin Result := ContentToUTF16(Source, Separator); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String); // Renders the current tree content (depending on Source) as UTF8 text. // If an entry contains the separator char or double quotes then it is wrapped with double quotes // and existing double quotes are duplicated. var RenderColumns: Boolean; Tabs: String; GetNextNode: TGetNextNodeProc; Run, Save: PVirtualNode; Level, MaxLevel: Cardinal; Columns: TColumnsArray; LastColumn: TVirtualTreeColumn; Index, I: Integer; Text: String; begin Columns := nil; RenderColumns := FHeader.UseColumns; if RenderColumns then Columns := FHeader.FColumns.GetVisibleColumns; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; // The text consists of visible groups representing the columns, which are separated by one or more separator // characters. There are always MaxLevel separator chars in a line (main column only). Either before the caption // to ident it or after the caption to make the following column aligned. MaxLevel := 0; while Assigned(Run) do begin Level := GetNodeLevel(Run); If Level > MaxLevel then MaxLevel := Level; Run := GetNextNode(Run); end; Tabs := DupeString(Separator, MaxLevel); // First line is always the header if used. if RenderColumns then begin LastColumn := Columns[High(Columns)]; for I := 0 to High(Columns) do begin Buffer.Add(Columns[I].Text); if Columns[I] <> LastColumn then begin if Columns[I].Index = Header.MainColumn then begin Buffer.Add(Tabs); Buffer.Add(Separator); end else Buffer.Add(Separator); end; end; Buffer.AddNewLine; end else LastColumn := nil; Run := Save; if RenderColumns then begin while Assigned(Run) do begin if (not CanExportNode(Run) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etText, Run)))) then begin Run := GetNextNode(Run); Continue; end; for I := 0 to High(Columns) do begin if coVisible in Columns[I].Options then begin Index := Columns[I].Index; // This line implicitly converts the Unicode text to ANSI. Text := Self.Text[Run, Index]; if Index = Header.MainColumn then begin Level := GetNodeLevel(Run); Buffer.Add(Copy(Tabs, 1, Integer(Level) * Length(Separator))); // Wrap the text with quotation marks if it contains the separator character. if (Pos(Separator, Text) > 0) or (Pos('"', Text) > 0) then Buffer.Add(AnsiQuotedStr(Text, '"')) else Buffer.Add(Text); Buffer.Add(Copy(Tabs, 1, Integer(MaxLevel - Level) * Length(Separator))); end else if (Pos(Separator, Text) > 0) or (Pos('"', Text) > 0) then Buffer.Add(AnsiQuotedStr(Text, '"')) else Buffer.Add(Text); if Columns[I] <> LastColumn then Buffer.Add(Separator); end; end; if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etText, Run); Run := GetNextNode(Run); Buffer.AddNewLine; end; end else begin while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etText, Run)))) then begin Run := GetNextNode(Run); Continue; end; // This line implicitly converts the Unicode text to ANSI. Text := Self.Text[Run, NoColumn]; Level := GetNodeLevel(Run); Buffer.Add(Copy(Tabs, 1, Integer(Level) * Length(Separator))); Buffer.Add(Text); Buffer.AddNewLine; if Assigned(FOnAfterNodeExport) then FonAfterNodeExport(Self, etText, Run); Run := GetNextNode(Run); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToUTF16(Source: TVSTTextSourceType; const Separator: String): UnicodeString; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsUTF16String; Buffer.Destroy; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToUTF8(Source: TVSTTextSourceType; const Separator: String): String; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsUTF8String; Buffer.Destroy; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); // Returns the font, the text and its bounding rectangle to the caller. R is returned as the closest // bounding rectangle around Text. var NewHeight: Integer; TM: TTextMetric; begin // Get default font and initialize the other parameters. //inherited GetTextInfo(Node, Column, AFont, R, Text); Canvas.Font := AFont; FFontChanged := False; RedirectFontChangeEvent(Canvas); DoPaintText(Node, Canvas, Column, ttNormal); if FFontChanged then begin AFont.Assign(Canvas.Font); GetTextMetrics(Canvas.Handle, TM); NewHeight := TM.tmHeight; end else // Otherwise the correct font is already there and we only need to set the correct height. NewHeight := FTextHeight; RestoreFontChangeEvent(Canvas); // Alignment to the actual text. Text := Self.Text[Node, Column]; R := GetDisplayRect(Node, Column, True, not (vsMultiline in Node.States)); if toShowHorzGridLines in TreeOptions.PaintOptions then Dec(R.Bottom); InflateRect(R, 0, -(R.Bottom - R.Top - NewHeight) div 2); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.InvalidateNode(Node: PVirtualNode): TRect; var Data: PInteger; begin Result := inherited InvalidateNode(Node); // Reset node width so changed text attributes are applied correctly. if Assigned(Node) then begin Data := InternalData(Node); if Assigned(Data) then Data^ := 0; // Reset height measured flag too to cause a re-issue of the OnMeasureItem event. Exclude(Node.States, vsHeightMeasured); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.Path(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; Delimiter: Char): String; // Constructs a string containing the node and all its parents. The last character in the returned path is always the // given delimiter. var S: String; begin if (Node = nil) or (Node = FRoot) then Result := Delimiter else begin Result := ''; while Node <> FRoot do begin DoGetText(Node, Column, TextType, S); Result := S + Delimiter + Result; Node := Node.Parent; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.ReinitNode(Node: PVirtualNode; Recursive: Boolean); var Data: PInteger; begin inherited; // Reset node width so changed text attributes are applied correctly. if Assigned(Node) and (Node <> FRoot) then begin Data := InternalData(Node); if Assigned(Data) then Data^ := 0; // vsHeightMeasured is already removed in the base tree. end; end; //----------------- TVirtualStringTree --------------------------------------------------------------------------------- function TVirtualStringTree.GetOptions: TStringTreeOptions; begin Result := FOptions as TStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualStringTree.SetOptions(const Value: TStringTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualStringTree.GetOptionsClass: TTreeOptionsClass; begin Result := TStringTreeOptions; end; //----------------- TCustomVirtualDrawTree ----------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoDrawHint(Canvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex); begin if Assigned(FOnDrawHint) then FOnDrawHint(Self, Canvas, Node, R, Column); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualDrawTree.DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; begin Result := Point(0, 0); if Canvas = nil then Canvas := Self.Canvas; if Assigned(FOnGetCellContentMargin) then FOnGetCellContentMargin(Self, Canvas, Node, Column, CellContentMarginType, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoGetHintSize(Node: PVirtualNode; Column: TColumnIndex; var R: TRect); begin if Assigned(FOnGetHintSize) then FOnGetHintSize(Self, Node, Column, R); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualDrawTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; begin Result := 2 * FTextMargin; if Canvas = nil then Canvas := Self.Canvas; if Assigned(FOnGetNodeWidth) then FOnGetNodeWidth(Self, Canvas, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoPaintNode(var PaintInfo: TVTPaintInfo); begin if Assigned(FOnDrawNode) then FOnDrawNode(Self, PaintInfo); end; //----------------- TVirtualDrawTree ----------------------------------------------------------------------------------- function TVirtualDrawTree.GetOptions: TVirtualTreeOptions; begin Result := FOptions as TVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualDrawTree.SetOptions(const Value: TVirtualTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualDrawTree.GetOptionsClass: TTreeOptionsClass; begin Result := TVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- initialization {$I virtualtrees.lrs} // Necessary for dynamic package loading. Initialized := False; NeedToUnitialize := False; finalization if Initialized then FinalizeGlobalStructures; InternalClipboardFormats.Free; InternalClipboardFormats := nil; {$ifdef EnableAccessible} if VTAccessibleFactory <> nil then begin VTAccessibleFactory.Free; VTAccessibleFactory := nil; end; {$endif} end. ���������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VTHeaderPopup.pas����������������������������������������0000644�0001750�0000144�00000021312�12014201074�023335� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTHeaderPopup; //---------------------------------------------------------------------------------------------------------------------- // 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/ // // Alternatively, you may redistribute this library, use 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. // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. // // 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 VTHeaderPopup.pas. // // The Initial Developer of the Original Code is Ralf Junker <delphi@zeitungsjunge.de>. All Rights Reserved. // // September 2004: // - Bug fix: TVTHeaderPopupMenu.OnMenuItemClick used the wrong Tag member for the event. // // Modified 12 Dec 2003 by Ralf Junker <delphi@zeitungsjunge.de>. // - Added missing default storage specifier for Options property. // - To avoid mixing up image lists of different trees sharing the same header // popup, set the popup's image list to nil if hoShowImages is not in the // tree's header options. // - Added an additional check for the PopupComponent property before casting // it hardly to a Virtual Treeview in OnMenuItemClick. See entry 31 Mar 2003. // // Modified 14 Sep 2003 by Mike Lischke <public@delphi-gems.com>. // - Renamed event type name to be consistent with other event types (e.g. used in VT). // - Added event for hiding/showing columns. // - DoXXX method are now virtual. // - Conditional code rearrangement to get back Ctrl+Shift+Up/Down navigation. // // Modified 31 Mar 2003 by Mike Lischke <public@soft-gems.net>. // - Added a check for the PopupComponent property before casting it hardly to // a Virtual Treeview. People might (accidentally) misuse the header popup. // // Modified 20 Oct 2002 by Borut Maricic <borut.maricic@pobox.com>. // - Added the possibility to use Troy Wolbrink's Unicode aware popup menu. // Define the compiler symbol TNT to enable it. You can get Troy's Unicode // controls collection from http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm. // // Modified 24 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. // - Fixed a bug where the OnAddHeaderPopupItem would interfere with // poAllowHideAll options. // - All column indexes now consistently use TColumnIndex (instead of Integer). // // Modified 23 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. // - Added option to show menu items in the same order as the columns or in // original order. // - Added option to prevent the user to hide all columns. // // Modified 17 Feb 2002 by Jim Kueneman <jimdk@mindspring.com>. // - Added the event to filter the items as they are added to the menu. //---------------------------------------------------------------------------------------------------------------------- {$mode delphi} interface uses {$ifdef TNT} TntMenus, {$else} Menus, {$endif TNT} VirtualTrees; type TVTHeaderPopupOption = ( poOriginalOrder, // Show menu items in original column order as they were added to the tree. poAllowHideAll // Allows to hide all columns, including the last one. ); TVTHeaderPopupOptions = set of TVTHeaderPopupOption; TAddPopupItemType = ( apNormal, apDisabled, apHidden ); TAddHeaderPopupItemEvent = procedure(const Sender: TBaseVirtualTree; const Column: TColumnIndex; var Cmd: TAddPopupItemType) of object; TColumnChangeEvent = procedure(const Sender: TBaseVirtualTree; const Column: TColumnIndex; Visible: Boolean) of object; {$ifdef TNT} TVTMenuItem = TTntMenuItem; {$else} TVTMenuItem = TMenuItem; {$endif} {$ifdef TNT} TVTHeaderPopupMenu = class(TTntPopupMenu) {$else} TVTHeaderPopupMenu = class(TPopupMenu) {$endif} private FOptions: TVTHeaderPopupOptions; FOnAddHeaderPopupItem: TAddHeaderPopupItemEvent; FOnColumnChange: TColumnChangeEvent; protected procedure DoAddHeaderPopupItem(const Column: TColumnIndex; out Cmd: TAddPopupItemType); virtual; procedure DoColumnChange(Column: TColumnIndex; Visible: Boolean); virtual; procedure OnMenuItemClick(Sender: TObject); public procedure Popup(x, y: Integer); override; published property Options: TVTHeaderPopupOptions read FOptions write FOptions default []; property OnAddHeaderPopupItem: TAddHeaderPopupItemEvent read FOnAddHeaderPopupItem write FOnAddHeaderPopupItem; property OnColumnChange: TColumnChangeEvent read FOnColumnChange write FOnColumnChange; end; //---------------------------------------------------------------------------------------------------------------------- implementation uses {$ifdef TNT} TnTClasses {$else} Classes {$endif TNT}; type TVirtualTreeCast = class(TBaseVirtualTree); // Necessary to make the header accessible. //----------------- TVTHeaderPopupMenu --------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.DoAddHeaderPopupItem(const Column: TColumnIndex; out Cmd: TAddPopupItemType); begin Cmd := apNormal; if Assigned(FOnAddHeaderPopupItem) then FOnAddHeaderPopupItem(TVirtualTreeCast(PopupComponent), Column, Cmd); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.DoColumnChange(Column: TColumnIndex; Visible: Boolean); begin if Assigned(FOnColumnChange) then FOnColumnChange(TVirtualTreeCast(PopupComponent), Column, Visible); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.OnMenuItemClick(Sender: TObject); begin if Assigned(PopupComponent) and (PopupComponent is TBaseVirtualTree) then with TVTMenuItem(Sender), TVirtualTreeCast(PopupComponent).Header.Columns.Items[Tag] do begin if Checked then Options := Options - [coVisible] else Options := Options + [coVisible]; DoColumnChange(TVTMenuItem(Sender).Tag, not Checked); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.Popup(x, y: Integer); var I: Integer; ColPos: TColumnPosition; ColIdx: TColumnIndex; NewMenuItem: TVTMenuItem; Cmd: TAddPopupItemType; VisibleCounter: Cardinal; VisibleItem: TVTMenuItem; begin if Assigned(PopupComponent) and (PopupComponent is TBaseVirtualTree) then begin // Delete existing menu items. I := Items.Count; while I > 0 do begin Dec(I); Items[I].Free; end; // Add column menu items. with TVirtualTreeCast(PopupComponent).Header do begin if hoShowImages in Options then Self.Images := Images else // Remove a possible reference to image list of another tree previously assigned. Self.Images := nil; VisibleItem := nil; VisibleCounter := 0; for ColPos := 0 to Columns.Count - 1 do begin if poOriginalOrder in FOptions then ColIdx := ColPos else ColIdx := Columns.ColumnFromPosition(ColPos); with Columns[ColIdx] do begin if coVisible in Options then Inc(VisibleCounter); DoAddHeaderPopupItem(ColIdx, Cmd); if Cmd <> apHidden then begin NewMenuItem := TVTMenuItem.Create(Self); NewMenuItem.Tag := ColIdx; NewMenuItem.Caption := Text; NewMenuItem.Hint := Hint; NewMenuItem.ImageIndex := ImageIndex; NewMenuItem.Checked := coVisible in Options; NewMenuItem.OnClick := OnMenuItemClick; if Cmd = apDisabled then NewMenuItem.Enabled := False else if coVisible in Options then VisibleItem := NewMenuItem; Items.Add(NewMenuItem); end; end; end; // Conditionally disable menu item of last enabled column. if (VisibleCounter = 1) and (VisibleItem <> nil) and not (poAllowHideAll in FOptions) then VisibleItem.Enabled := False; end; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VTGraphics.pas�������������������������������������������0000644�0001750�0000144�00000001516�12140233030�022662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTGraphics; {$mode delphi} interface uses DelphiCompat, Types, LCLIntf, LCLType; type // Describes the mode how to blend pixels. TBlendMode = ( bmConstantAlpha, // apply given constant alpha bmPerPixelAlpha, // use alpha value of the source pixel bmMasterAlpha, // use alpha value of source pixel and multiply it with the constant alpha value bmConstantAlphaAndColor // blend the destination color with the given constant color und the constant alpha value ); procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; implementation {$i vtgraphicsi.inc} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VTConfig.inc���������������������������������������������0000644�0001750�0000144�00000003346�12140233030�022320� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Configuration file for VirtualTrees.pas (see www.soft-gems.net). // // The content of this file is public domain. You may do with it whatever you like, provided the header stays fully intact // in all version and derivative work. // // The original code is VTConfig.inc, released October 5, 2004. // // The initial developer of the original code is Mike Lischke (public@soft-gems.net, www.soft-gems.net). //---------------------------------------------------------------------------------------------------------------------- {.$define UseFlatScrollbars} {.$define ReverseFullExpandHotKey} // Used to define Ctrl+'+' instead of Ctrl+Shift+'+' for full expand (and similar for collapsing). // Enable this switch for Windows XP theme support. If you compile with Delphi 6 or lower you must download and install // the Soft Gems Theme Manager package. {.$define ThemeSupport} // Virtual Treeview can use a tiny but very effective local memory manager for node allocation. // The local memory manager was implemented by David Clark from Caelo Software Inc. // See below for more info about it. {.$define UseLocalMemoryManager} //Lazarus port options {.$define EnableOLE} {.$define EnableNativeTVM} {.$define EnablePrint} {.$define EnableNCFunctions} {$define EnableAdvancedGraphics} {$define EnableAlphaBlend} {.$define EnableAccessible} {$define ThemeSupport} {$if defined(LCLWin32) or defined(LCLWinCE)} {$define LCLWin} {$endif} {.$define DEBUG_VTV} {$define USE_DELPHICOMPAT} //since {$if not defined(USE_DELPHICOMPAT) and not defined(LCLWin)} {$define INCOMPLETE_WINAPI} {$endif} //under linux the performance is poor with threading enabled {$ifdef Windows} {.$define EnableThreadSupport} {$endif} {$ifdef CPU64} {$define PACKARRAYPASCAL} {$endif} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VTAccessibilityFactory.pas�������������������������������0000644�0001750�0000144�00000007557�12014201074�025257� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTAccessibilityFactory; // class to create IAccessibles for the tree passed into it. // If not already assigned, creates IAccessibles for the tree itself // and the focused item // the tree accessible is returned when the tree receives an WM_GETOBJECT message // the AccessibleItem is returned when the Accessible is being asked for the first child // To create your own IAccessibles, use the VTStandardAccessible unit as a reference, // and assign your Accessibles to the variables in tthe unit's initialization. // You only need to add the unit to your project, and voil, you have an accessible string tree! // // Written by Marco Zehe. (c) 2007 interface uses Classes, oleacc, VirtualTrees; type IVTAccessibleProvider = interface function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTAccessibilityFactory = class(TObject) private FAccessibleProviders: TInterfaceList; public constructor Create; destructor Destroy; override; function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; procedure RegisterAccessibleProvider(AProvider: IVTAccessibleProvider); procedure UnRegisterAccessibleProvider(AProvider: IVTAccessibleProvider); end; var VTAccessibleFactory: TVTAccessibilityFactory; implementation { TVTAccessibilityFactory } constructor TVTAccessibilityFactory.Create; begin inherited; FAccessibleProviders := TInterfaceList.Create; FAccessibleProviders.Clear; end; function TVTAccessibilityFactory.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; var I: Integer; TmpIAccessible: IAccessible; // returns an IAccessible. // 1. If the Accessible property of the passed-in tree is nil, // the first registered element will be returned. // Usually, this is the IAccessible that provides information about the tree itself. // If it is not nil, we'll check whether the AccessibleItem is nil. // If it is, we'll look in the registered IAccessibles for the appropriate one. // Each IAccessibleProvider will check the tree for properties to determine whether it is responsible. // We'll work top to bottom, from the most complicated to the most simple. // The index for these should all be greater than 0, e g the IAccessible for the tree itself should always be registered first, then any IAccessible items. begin result := nil; if ATree <> nil then begin if ATree.Accessible = nil then begin if FAccessibleProviders.Count > 0 then begin result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(ATree); exit; end; end; if ATree.AccessibleItem = nil then begin if FAccessibleProviders.Count > 0 then begin for I := FAccessibleProviders.Count - 1 downto 1 do begin TmpIAccessible := IVTAccessibleProvider(FAccessibleProviders.Items[I]).CreateIAccessible(ATree); if TmpIAccessible <> nil then begin result := TmpIAccessible; break; end; end; if TmpIAccessible = nil then begin result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(ATree); end; end; end else begin result := ATree.AccessibleItem; end; end; end; destructor TVTAccessibilityFactory.Destroy; begin FAccessibleProviders.Free; FAccessibleProviders := nil; inherited; end; procedure TVTAccessibilityFactory.RegisterAccessibleProvider( AProvider: IVTAccessibleProvider); // Ads a provider if it is not already registered begin if FAccessibleProviders.IndexOf(AProvider) < 0 then FAccessibleProviders.Add(AProvider) end; procedure TVTAccessibilityFactory.UnRegisterAccessibleProvider( AProvider: IVTAccessibleProvider); // Unregisters/removes an IAccessible provider if it is present begin if FAccessibleProviders.IndexOf(AProvider) >= 0 then FAccessibleProviders.Remove(AProvider); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/virtualtreeview/VTAccessibility.pas��������������������������������������0000644�0001750�0000144�00000063440�12014201074�023720� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTAccessibility; // This unit implements iAccessible interfaces for the VirtualTree visual components // and the currently focused node. // // Written by Marco Zehe. (c) 2007 interface uses Windows, Classes, ActiveX, oleacc, VirtualTrees, VTAccessibilityFactory, Controls; type TVirtualTreeAccessibility = class(TInterfacedObject, IDispatch, IAccessible) private FVirtualTree: TVirtualStringTree; public { IAccessibility } function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall; function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall; function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall; function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall; function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall; function Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; stdcall; function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant; out pidTopic: Integer): HResult; stdcall; function Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; stdcall; function Get_accFocus(out pvarChild: OleVariant): HResult; stdcall; function Get_accSelection(out pvarChildren: OleVariant): HResult; stdcall; function Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; stdcall; function accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; stdcall; function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall; function accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; stdcall; function accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; stdcall; function accDoDefaultAction(varChild: OleVariant): HResult; stdcall; function Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall; function Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; stdcall; {IDispatch} function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount: Integer; LocaleID: Integer; DispIDs: Pointer): HRESULT; stdcall; function GetTypeInfo(Index: Integer; LocaleID: Integer; out TypeInfo): HRESULT; stdcall; function GetTypeInfoCount(out Count: Integer): HRESULT; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult: Pointer; ExcepInfo: Pointer; ArgErr: Pointer): HRESULT; stdcall; constructor Create(VirtualTree: TVirtualStringTree); end; TVirtualTreeItemAccessibility = class(TVirtualTreeAccessibility, IAccessible) public { IAccessibility } function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall; function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall; function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall; function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall; function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall; function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall; constructor Create(VirtualTree: TVirtualStringTree); end; TVTMultiColumnItemAccessibility = class(TVirtualTreeItemAccessibility, IAccessible) private function GetItemDescription(varChild: OleVariant; out pszDescription: WideString; IncludeMainColumn: boolean): HResult; stdcall; public { IAccessibility } function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; end; TVTDefaultAccessibleProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTDefaultAccessibleItemProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTMultiColumnAccessibleItemProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; implementation uses Variants, SysUtils, Types, Forms; { TVirtualTreeAccessibility } //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accDoDefaultAction(varChild: OleVariant): HResult; // a default action is not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; // returns the iAccessible object at the given point, if applicable. var Pt: TPoint; HitInfo: THitInfo; begin Result := S_FALSE; if FVirtualTree <> nil then begin // VariantInit(pvarChild); // TVarData(pvarChild).VType := VT_I4; Pt := fVirtualTree.ScreenToClient(Point(xLeft, yTop)); if fVirtualTree.FocusedNode <> nil then begin fVirtualTree.GetHitTestInfoAt(xLeft, yTop, false, HitInfo); if FVirtualTree.FocusedNode = HitInfo.HitNode then begin pvarChild := FVirtualTree.AccessibleItem; Result := S_OK; exit; end; end; if PtInRect(FVirtualTree.BoundsRect, Pt) then begin pvarChild := CHILDID_SELF; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; // returns the location of the VirtualStringTree object. var P: TPoint; begin Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin P := FVirtualTree.ClientToScreen(FVirtualTree.ClientRect.TopLeft); pxLeft := P.X; pyTop := P.Y; pcxWidth := FVirtualTree.Width; pcyHeight := FVirtualTree.Height; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; // This is not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accSelection(out pvarChildren: OleVariant): HResult; // returns the selected child ID, if any. begin Result := s_false; if FVirtualTree <> nil then if fVirtualTree.FocusedNode <> nil then begin pvarChildren := 1; result := s_OK; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TVirtualTreeAccessibility.Create(VirtualTree: TVirtualStringTree); // assigns the parent and current fields, and lets the control's iAccessible object know its address. begin fVirtualTree := VirtualTree; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HRESULT; // Not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetTypeInfoCount( out Count: Integer): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; // returns the iAccessible child, whicfh represents the focused item. begin if varChild = CHILDID_SELF then begin ppdispChild := FVirtualTree.AccessibleItem; Result := S_OK; end else Result := E_INVALIDARG end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accChildCount(out pcountChildren: Integer): HResult; // Returns the number 1 for the one child: The focused item. begin pcountChildren := 1; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; // Not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; // returns the hint of the control, if assigned. begin pszDescription := ''; Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then pszDescription := GetLongHint(fVirtualTree.Hint); end; if Length(pszDescription) > 0 then Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accFocus(out pvarChild: OleVariant): HResult; // returns the child ID of 1, if assigned. begin Result := s_false; if fVirtualTree <> nil then begin if FVirtualTree.FocusedNode <> nil then begin pvarChild := fVirtualTree.AccessibleItem; result := s_OK; end else begin pvarChild := childid_self; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; // Not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant; out pidTopic: Integer): HResult; // Returns the HelpContext ID, if present. begin pszHelpFile := ''; pidTopic := 0; Result := S_OK; if varChild = CHILDID_SELF then if FVirtualTree <> nil then begin pszHelpFile := Application.HelpFile; pidTopic := FVirtualTree.HelpContext; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; // Not supported. begin pszKeyboardShortcut := ''; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; // if set, returns the new published AccessibleName property. // otherwise, returns the default text. begin pszName := ''; Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin if FVirtualTree.AccessibleName <> '' then pszName := FVirtualTree.AccessibleName else PSZName := FVirtualTree.DefaultText; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accParent(out ppdispParent: IDispatch): HResult; // Returns false, the tree itself does not have a parent. begin ppdispParent := nil; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; // tells MSAA that it is a TreeView. begin Result := S_OK; // VariantInit(pvarRole); // TVarData(pvarRole).VType := VT_I4; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then pvarRole := ROLE_SYSTEM_OUTLINE end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; // since we're not supporting more than one item, this is not supported currently. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; // returns the state of the control. const IsEnabled: array[Boolean] of Integer = (STATE_SYSTEM_UNAVAILABLE, 0); HasPopup: array[Boolean] of Integer = (0, STATE_SYSTEM_HASPOPUP); IsVisible: array[Boolean] of Integer = (STATE_SYSTEM_INVISIBLE, 0); begin Result := S_OK; // VariantInit(pvarState); // TVarData(pvarState).VType := VT_I4; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin pvarState := STATE_SYSTEM_FOCUSED or STATE_SYSTEM_FOCUSABLE or STATE_SYSTEM_HOTTRACKED; pvarState := pvarState or IsVisible[FVirtualTree.Visible]; pvarState := pvarState or IsEnabled[FVirtualTree.Enabled]; end else Result := E_INVALIDARG; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; // the TreeView control itself does not have a value, returning false here. begin pszValue := ''; Result := S_FALSE;//DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall; // not supported. begin Result := DISP_E_MEMBERNOTFOUND end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; // not supported. begin Result := DISP_E_MEMBERNOTFOUND end; { TVirtualTreeItemAccessibility } //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.accLocation(out pxLeft, pyTop, pcxWidth, pcyHeight: Integer; varChild: OleVariant): HResult; // returns the location of the current accessible item. var P: TPoint; DisplayRect: TRect; begin Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree.FocusedNode <> nil then begin DisplayRect := FVirtualTree.GetDisplayRect(FVirtualTree.FocusedNode, -1, TRUE, FALSE); P := FVirtualTree.ClientToScreen(DisplayRect.TopLeft); pxLeft := P.X; pyTop := P.Y; pcxWidth := DisplayRect.Right - DisplayRect.Left; pcyHeight := DisplayRect.Bottom - DisplayRect.Top; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TVirtualTreeItemAccessibility.Create(VirtualTree: TVirtualStringTree); // sets up the parent/child relationship. begin fVirtualTree := VirtualTree; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; // the item does not have children. Returning false. begin ppdispChild := nil; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accChildCount(out pcountChildren: Integer): HResult; // the item itself does not have children, returning 0. begin pcountChildren := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; // not supported for an item. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; // the name is the node's caption. begin pszName := ''; Result := S_FALSE; if varChild = childid_self then begin if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin pszName := FVirtualTree.Text[FVirtualTree.FocusedNode, FVirtualTree.Header.MainColumn]; result := S_OK; end else begin PSZName := FVirtualTree.DefaultText; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accParent(out ppdispParent: IDispatch): HResult; // tells MSAA that the VritualStringTree is its parent. begin result := S_FALSE; if FVirtualTree <> nil then begin ppdispParent := FVirtualTree.Accessible; Result := S_OK; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; // tells MSAA that it is a TreeView item as opposed to the TreeView itself. begin Result := S_OK; // VariantInit(pvarRole); // TVarData(pvarRole).VType := VT_I4; if varChild = childid_self then begin if FVirtualTree <> nil then pvarRole := ROLE_SYSTEM_OUTLINEITEM end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; // Tells MSAA the state the item is in. const IsEnabled: array[Boolean] of Integer = (STATE_SYSTEM_UNAVAILABLE, 0); HasPopup: array[Boolean] of Integer = (0, STATE_SYSTEM_HASPOPUP); IsVisible: array[Boolean] of Integer = (STATE_SYSTEM_INVISIBLE, 0); IsChecked: array[Boolean] of Integer = (0, STATE_SYSTEM_CHECKED); IsExpanded: array[Boolean] of Integer = (0, STATE_SYSTEM_EXPANDED); IsCollapsed: array[Boolean] of Integer = (0, STATE_SYSTEM_COLLAPSED); begin Result := S_OK; // VariantInit(pvarState); // TVarData(pvarState).VType := VT_I4; if varChild = childid_self then begin if FVirtualTree <> nil then begin pvarState := STATE_SYSTEM_FOCUSED or STATE_SYSTEM_FOCUSABLE or STATE_SYSTEM_HOTTRACKED; pvarState := pvarState or IsVisible[FVirtualTree.Visible]; pvarState := pvarState or IsEnabled[FVirtualTree.Enabled]; if fVirtualTree.FocusedNode <> nil then begin pvarState := pvarState or IsChecked[csCheckedNormal = FVirtualTree.FocusedNode.CheckState]; pvarState := pvarState or IsExpanded[VSExpanded in FVirtualTree.FocusedNode.States]; if not (vsExpanded in FVirtualTree.FocusedNode.States) then pvarState:= PvarState or IsCollapsed[vsHasChildren in FVirtualTree.FocusedNode.States]; end; end else Result := E_INVALIDARG; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; // for a TreeView item, the value is the nesting level number, 0-based. begin pszValue := ''; Result := S_FALSE;//DISP_E_MEMBERNOTFOUND; if varChild = childid_self then if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin PSZValue := IntToStr(FVirtualTree.GetNodeLevel(FVirtualTree.FocusedNode)); result := S_OK; end; end; { TVTMultiColumnItemAccessibility } function TVTMultiColumnItemAccessibility.GetItemDescription( varChild: OleVariant; out pszDescription: WideString; IncludeMainColumn: boolean): HResult; var I: Integer; sTemp: WideString; begin pszDescription := ''; Result := S_FALSE; if varChild = childid_self then begin if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin if IncludeMainColumn then pszDescription := FVirtualTree.Text[FVirtualTree.FocusedNode, FVirtualTree.Header.MainColumn] +'; '; for I := 0 to FVirtualTree.Header.Columns.Count - 1 do if FVirtualTree.Header.MainColumn <> I then begin sTemp := FVirtualTree.Text[FVirtualTree.FocusedNode, I]; if sTemp <> '' then pszDescription := pszDescription +FVirtualTree.Header.Columns[I].Text +': ' +sTemp +'; '; end; if pszDescription <> '' then if pszDescription[Length(pszDescription)-1] = ';' then Delete(pszDescription, length(pszDescription)-1, 2); result := S_OK; end else begin PSZDescription := FVirtualTree.DefaultText; result := S_OK; end; end; end; function TVTMultiColumnItemAccessibility.Get_accDescription( varChild: OleVariant; out pszDescription: WideString): HResult; begin result := GetItemDescription(varChild, pszDescription, false) end; function TVTMultiColumnItemAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; begin result := GetItemDescription(varChild, pszName, true) end; { TVTDefaultAccessibleProvider } function TVTDefaultAccessibleProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := TVirtualTreeAccessibility.Create(TVirtualStringTree(ATree)); end; { TVTDefaultAccessibleItemProvider } function TVTDefaultAccessibleItemProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := TVirtualTreeItemAccessibility.Create(TVirtualStringTree(ATree)); end; { TVTMultiColumnAccessibleItemProvider } function TVTMultiColumnAccessibleItemProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := nil; if TVirtualStringTree(ATree).Header.UseColumns then result := TVTMultiColumnItemAccessibility.Create(TVirtualStringTree(ATree)); end; var IDefaultAccessibleProvider: TVTDefaultAccessibleProvider; IDefaultAccessibleItemProvider: TVTDefaultAccessibleItemProvider; IMultiColumnAccessibleProvider: TVTMultiColumnAccessibleItemProvider; initialization if VTAccessibleFactory = nil then VTAccessibleFactory := TVTAccessibilityFactory.Create; if IDefaultAccessibleProvider = nil then begin IDefaultAccessibleProvider := TVTDefaultAccessibleProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IDefaultAccessibleProvider); end; if IDefaultAccessibleItemProvider = nil then begin IDefaultAccessibleItemProvider := TVTDefaultAccessibleItemProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IDefaultAccessibleItemProvider); end; if IMultiColumnAccessibleProvider = nil then begin IMultiColumnAccessibleProvider := TVTMultiColumnAccessibleItemProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IMultiColumnAccessibleProvider); end; finalization if VTAccessibleFactory <> nil then begin VTAccessibleFactory.UnRegisterAccessibleProvider(IMultiColumnAccessibleProvider); IMultiColumnAccessibleProvider := nil; VTAccessibleFactory.UnRegisterAccessibleProvider(IDefaultAccessibleItemProvider); IDefaultAccessibleItemProvider := nil; VTAccessibleFactory.UnRegisterAccessibleProvider(IDefaultAccessibleProvider); IDefaultAccessibleProvider := nil; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/viewer/������������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016212� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/viewer/viewerpackage.pas�������������������������������������������������0000644�0001750�0000144�00000000572�12756114647�021557� 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-0.9.8/components/viewer/viewerpackage.lpk�������������������������������������������������0000644�0001750�0000144�00000002746�12756114647�021567� 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-0.9.8/components/viewer/viewercontrol.pas�������������������������������������������������0000644�0001750�0000144�00000277111�13407254430�021636� 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-2018 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, 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; 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, veKoi8, 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', 'KOI-8', '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; 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) FOnGuessEncoding: TGuessEncodingEvent; FLastError: 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); {en Returns how many lines (given current FTextHeight) will fit into the window. } function GetClientHeightInLines: 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; 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; protected 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; {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} 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; 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 Percent: Integer Read GetPercent Write SetPercent; property Position: PtrInt Read FPosition Write SetPosition; property FileSize: Int64 Read FFileSize; 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 OnGuessEncoding: TGuessEncodingEvent Read FOnGuessEncoding Write FOnGuessEncoding; 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 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 LCLType, Graphics, Forms, LCLProc, Clipbrd, LConvEncoding, DCUnicodeUtils, LCLIntf, LazUTF8, DCOSUtils , DCConvertEncoding {$IF DEFINED(UNIX)} , BaseUnix, Unix, DCUnix {$ELSEIF DEFINED(WINDOWS)} , Windows, DCWindows {$ENDIF}; const //cTextWidth = 80; // wrap on 80 chars 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; FMaxTextWidth := 1024; 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(ClientRect, 0, 0, FLastError, AStyle); end; procedure TViewerControl.Paint; begin if not IsFileOpen then begin DrawLastError; Exit; 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') + 2; if FViewerControlMode = vcmBook then FTextWidth := ((ClientWidth - (Canvas.TextWidth('W') * FColCount)) div FColCount) else FTextWidth := ClientWidth div Canvas.TextWidth('W') - 2; FLineList.Clear; case FViewerControlMode of vcmBin : WriteBin; vcmText: WriteText; vcmWrap: WriteText; vcmBook: WriteText; vcmDec,vcmHex : WriteCustom; 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; 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; 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); end; function TViewerControl.GetText(const StartPos, Len: PtrInt; const Xoffset: Integer): string; begin SetString(Result, GetDataAdr + StartPos, Len); Result := TransformText(ConvertToUTF8(Result), Xoffset); 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; 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); // 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); 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; 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); // 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); 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.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; 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); FileClose(FFileHandle); FFileHandle := 0; end; {$IFDEF MSWINDOWS} var wFileName: UnicodeString; begin Result := False; if Assigned(FMappedFile) then UnMapFile; // if needed FLastError := EmptyStr; wFileName := UTF16LongName(sFileName); FFileHandle := CreateFileW(PWChar(wFileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if FFileHandle = INVALID_HANDLE_VALUE then begin FLastError := mbSysErrorMessage; FFileHandle := 0; Exit; end; Int64Rec(FFileSize).Lo := GetFileSize(FFileHandle, @Int64Rec(FFileSize).Hi); if (FFileSize < MaxMemSize) then begin Result := ReadFile; Exit; end; 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; Result := Assigned(FMappedFile); end; {$ELSE} var StatBuf: Stat; {$IFDEF LINUX} Sbfs: TStatFS; {$ENDIF} begin Result := False; if Assigned(FMappedFile) then UnMapFile; // if needed FLastError := EmptyStr; FFileHandle := mbFileOpen(sFileName, fmOpenRead); if FFileHandle = feInvalidHandle then begin FLastError := mbSysErrorMessage; FFileHandle := 0; Exit; end; if fpFStat(FFileHandle, StatBuf) <> 0 then begin FLastError := mbSysErrorMessage; FileClose(FFileHandle); FFileHandle := 0; Exit; end; FFileSize := StatBuf.st_size; {$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); FileClose(FFileHandle); FFileHandle := 0; Exit; end; end; {$ENDIF} if (FFileSize < MaxMemSize) then begin Result := ReadFile; Exit; end; 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; Result:= True; end; {$ENDIF} procedure TViewerControl.UnMapFile; begin 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, scrollTab, i: Integer; LineStart, iPos: PtrInt; DataLength: PtrInt; sText: String; 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 - 1 do begin if iPos >= FHighLimit then Break; AddLineOffset(iPos); LineStart := iPos; i := CalcTextLineLength(iPos, FHighLimit, DataLength); if i > FHLowEnd then FHLowEnd:= i; if DataLength > 0 then begin sText := GetText(LineStart, DataLength, 0); if (Mode = vcmText) and (FHPosition > 0) then scrollTab := -Canvas.TextWidth(UTF8Copy(sText, 1, FHPosition)) else begin scrollTab := 0; end; OutText(scrollTab + 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 - 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(0, 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 - 1 do begin if iPos >= FHighLimit then Break; LineStart := iPos; AddLineOffset(iPos); s := TransformBin(iPos, FHighLimit); if s <> '' then OutBin(0, 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; // 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 ScrollPosition(Value, -LinesTooMany); // scroll back upwards 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: Integer; begin if FViewerControlMode <> vcmText then Result:= 0 else // Take horizontal scrollbar into account Result:= GetSystemMetrics(SM_CYHSCROLL); if FTextHeight > 0 then Result := (ClientRect.Bottom - ClientRect.Top - Result) div FTextHeight // or Self.Height div FTextHeight? else Result := 0; end; function TViewerControl.GetLinesTillEnd(FromPosition: PtrInt; out LastLineReached: Boolean): Integer; var yIndex: Integer; iPos: PtrInt; DataLength: PtrInt; 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); 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; // 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; // 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; // 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); 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; GoHome; end; VK_END: begin Key := 0; GoEnd; 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; GoHome; end; VK_END: begin Key := 0; GoEnd; 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; 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; FMouseBlockBeg := ClickPos; FMouseBlockSide := CharSide; FSelecting := True; 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; 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; 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; 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; 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 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; {$if lcl_fullversion >= 1070000} 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; {$endif} 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 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: Integer; 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 len <= FHPosition then begin i := i + CharLenInBytes; Continue; 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); 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 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 := UTF8CharacterToUnicode(PAnsiChar(GetDataAdr + iPosition), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veOem, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: 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; 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 := UTF8CharacterToUnicode(PAnsiChar(GetDataAdr + iPosition - CharLenInBytes), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veOem, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: 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; 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..veCp950, veIso88591, veIso88592, veKoi8: 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; 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 (FVisibleOffset < FHPosition) or (FVisibleOffset > FHPosition + FTextWidth) then begin SetHPosition(FVisibleOffset); HScroll(-1); 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 = 2048; // take first 2kB 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..veCp950, veIso88591, veIso88592, veKoi8: ; // 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; 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-0.9.8/components/viewer/MappingFile.pas���������������������������������������������������0000644�0001750�0000144�00000022025�12014201074�021104� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ **************************************************** } { MappingFile unit v1.0 for Delphi } { Copyright (c) Razumikhin Dmitry, 2005 } { E-mail: razumikhin_d@mail.ru } { } { Use under terms LGPL license: } { http://www.gnu.org/copyleft/lesser.html } { **************************************************** } unit MappingFile; interface uses SysUtils, Windows, Classes, RTLConsts; type EFileMappingError = class(Exception); TMappingFile = class private fHandle: Integer; //file handle fFileName: string; //file name fMode: Word; //file open mode fMappingHandle: THandle; //handle of mapping file fBaseAddress: PChar; //address of file image in memory fPos: Integer; //current position fSize: Integer; //size of real data fCapacity: Integer; //size of allocated memory fExtraMem: Integer; function GetChar(Index: Integer): Char; procedure SetSize(const Value: Integer); procedure SetChar(Index: Integer; const Value: Char); procedure TryMount; procedure ReMount; procedure SetCapacity(const Value: Integer); procedure SetPos(const Value: Integer); public property BaseAddress: PChar read fBaseAddress; property Size: Integer read fSize write SetSize; property Capacity: Integer read fCapacity write SetCapacity; property ExtraMem: Integer read fExtraMem write fExtraMem; property Ch[Index: Integer]: Char read GetChar write SetChar; property Position: Integer read fPos write SetPos; function Seek(Offset, Origin: Integer): Integer; //read functions function ReadCh(out Ch: Char): Boolean; function ReadStr(out Str: string; Len: Integer): Boolean; overload; function ReadStr(const Index, Len: Integer): string; overload; function Find(Ch: Char; StartIndex: Integer = 0): Integer; //write functions procedure WriteCh(const Ch: Char); procedure WriteStr(const Str: string); overload; procedure WriteStr(const Str: string; Index: Integer); overload; procedure WriteBuffer(const Buf: PChar; Count: Integer); overload; procedure WriteBuffer(const Buf: PChar; Index, Count: Integer); overload; //insert functions (expand + write) procedure InsertBuffer(const Buf: PChar; Count: Integer); overload; procedure InsertBuffer(const Buf: PChar; Index, Count: Integer); overload; procedure InsertStr(const Str: string); overload; procedure InsertStr(const Str: string; Index: Integer); overload; constructor Create(const FileName: string; Mode: Word); destructor Destroy; override; end; function FileResize(Handle: THandle; Size: Integer): LongBool; function FileMount(var MappingHandle: THandle; const FileHandle: Integer; ReadOnly: Boolean = True): Pointer; procedure FileUmount(MappingHandle: THandle; BaseAddress: Pointer); implementation { TMappingFile } constructor TMappingFile.Create(const FileName: string; Mode: Word); begin inherited Create; fFileName:=FileName; fMode:=Mode; fPos:=0; fSize:=0; fCapacity:=0; fExtraMem:=1024; fBaseAddress:=nil; if Mode = fmCreate then begin fHandle:=FileCreate(FileName); if fHandle < 0 then raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end else begin fHandle:=FileOpen(FileName, Mode); if fHandle < 0 then raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end; fSize:=GetFileSize(fHandle, nil); fCapacity:=fSize; TryMount; end; destructor TMappingFile.Destroy; begin FileUmount(fMappingHandle, fBaseAddress); if fSize <> fCapacity then FileResize(fHandle, fSize); if fHandle >=0 then FileClose(fHandle); inherited; end; function TMappingFile.Find(Ch: Char; StartIndex: Integer): Integer; var i: Integer; begin for i:=StartIndex to fSize-1 do if Ch = PChar(fBaseAddress + i)^ then begin Result:=i; Exit; end; Result:=-1; end; function TMappingFile.GetChar(Index: Integer): Char; begin Result:=PChar(fBaseAddress + Index)^; //Not control the bounds end; procedure TMappingFile.InsertBuffer(const Buf: PChar; Count: Integer); begin InsertBuffer(Buf, fPos, Count); Inc(fPos, Count); end; procedure TMappingFile.InsertBuffer(const Buf: PChar; Index, Count: Integer); var MoveCount: Integer; begin if Count <> 0 then begin MoveCount:=fSize - Index; SetSize(fSize + Count); Move(PChar(fBaseAddress + Index)^, PChar(fBaseAddress + Index + Count)^, MoveCount); Move(Buf^, PChar(fBaseAddress + Index)^, Count); end; end; procedure TMappingFile.InsertStr(const Str: string); begin InsertBuffer(PChar(Str), Length(Str)); end; procedure TMappingFile.InsertStr(const Str: string; Index: Integer); begin InsertBuffer(PChar(Str), Index, Length(Str)); end; function TMappingFile.ReadCh(out Ch: Char): Boolean; begin Result:=fPos < fSize; if Result then begin Ch:=PChar(fBaseAddress + fPos)^; Inc(fPos, SizeOf(Char)); end else Ch:=#0; end; function TMappingFile.ReadStr(out Str: string; Len: Integer): Boolean; begin Result:=(fPos + Len) <= fSize; SetLength(Str, Len); Move(PChar(fBaseAddress + fPos)^, Str[1], Len); Inc(fPos, Len); end; function TMappingFile.ReadStr(const Index, Len: Integer): string; begin SetLength(Result, Len); Move(PChar(fBaseAddress + Index)^, Result[1], Len); end; procedure TMappingFile.Remount; begin if Assigned(fBaseAddress) then FileUmount(fMappingHandle, fBaseAddress); TryMount; end; function TMappingFile.Seek(Offset, Origin: Integer): Integer; var NewPos: Integer; begin Result:=-1; case Origin of 0: begin if Offset >= 0 then begin if (Offset > fSize) then SetSize(Offset); fPos:=Offset; Result:=Offset; end; end; 1: begin NewPos:= fPos + Offset; if NewPos >=0 then begin if (NewPos > fSize) then SetSize(NewPos); fPos:=NewPos; Result:=NewPos; end; end; 2: begin NewPos:=fSize - Offset - 1; if NewPos >=0 then begin if (NewPos > fSize) then SetSize(NewPos); fPos:=NewPos; Result:=NewPos; end; end; end; end; procedure TMappingFile.SetCapacity(const Value: Integer); begin if fCapacity <> Value then begin fCapacity := Value; FileResize(fHandle, fCapacity); Remount; end; end; procedure TMappingFile.SetChar(Index: Integer; const Value: Char); begin PChar(fBaseAddress + Index)^:=Value; //Not control the bounds end; procedure TMappingFile.SetPos(const Value: Integer); begin Seek(Value, 0); end; procedure TMappingFile.SetSize(const Value: Integer); begin if fSize <> Value then begin fSize := Value; if fPos >= fSize then fPos:=fSize - 1; if fSize > fCapacity then SetCapacity(fSize + fExtraMem); end; end; procedure TMappingFile.TryMount; begin if fSize > 0 then begin fBaseAddress:=FileMount(fMappingHandle, fHandle, fMode = fmOpenRead); if not Assigned(fBaseAddress) then raise EFileMappingError.CreateFmt('Could not mapped file ''%s''',[fFileName]); end; end; procedure TMappingFile.WriteBuffer(const Buf: PChar; Count: Integer); begin if (fPos + Count) > fSize then SetSize(fPos + Count); Move(Buf^, PChar(fBaseAddress + fPos)^, Count); fPos:=fPos + Count; end; procedure TMappingFile.WriteBuffer(const Buf: PChar; Index, Count: Integer); begin if (Index + Count) > fSize then SetSize(Index + Count); Move(Buf^, PChar(fBaseAddress + Index)^, Count); end; procedure TMappingFile.WriteCh(const Ch: Char); begin WriteBuffer(@Ch, SizeOf(Char)); end; procedure TMappingFile.WriteStr(const Str: string); begin WriteBuffer(PChar(Str), Length(Str)); end; procedure TMappingFile.WriteStr(const Str: string; Index: Integer); begin WriteBuffer(PChar(Str), Index, Length(Str)); end; //----------------------------------------------------------------------- function FileMount(var MappingHandle: THandle; const FileHandle: Integer; ReadOnly: Boolean = True): Pointer; var FileMappingMode, MapViewMode: DWORD; begin if ReadOnly then begin FileMappingMode:=PAGE_READONLY; MapViewMode:=FILE_MAP_READ; end else begin FileMappingMode:=PAGE_READWRITE; MapViewMode:=FILE_MAP_READ + FILE_MAP_WRITE; end; MappingHandle:=CreateFileMapping(FileHandle, nil, FileMappingMode, 0, 0, nil); if MappingHandle <> 0 then begin Result:=MapViewOfFile(MappingHandle, MapViewMode, 0, 0, 0); end else Result:=nil; end; procedure FileUmount(MappingHandle: THandle; BaseAddress: Pointer); begin if Assigned(BaseAddress) then UnmapViewOfFile(BaseAddress); if MappingHandle <> 0 then CloseHandle(MappingHandle); end; function FileResize(Handle: THandle; Size: Integer): LongBool; begin FileSeek(Handle, Size, 0); Result:=SetEndOfFile(Handle); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/synunihighlighter/�������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020455� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/synunihighlighter/synuni.pas���������������������������������������������0000644�0001750�0000144�00000000365�13056774146�022532� 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-0.9.8/components/synunihighlighter/synuni.lpk���������������������������������������������0000644�0001750�0000144�00000004534�13056774146�022537� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <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"/> <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> <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"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/synunihighlighter/source/������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021755� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/synunihighlighter/source/SynUniRules.pas���������������������������������0000644�0001750�0000144�00000200517�13056765731�024746� 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; //Vitalik 2004 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; //Vitalik 2004 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); //Vitalik 2004 constructor Create(ch: char; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); reintroduce; overload; virtual; constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual; //Vitalik 2004 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); //Vitalik 2004 procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004 procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004 end; TSynKeyListLink = class(TAbstractRule) //Vitalik 2004 KeyList: TSynKeyList; end; TSynSet = class (TSynRule) //Vitalik 2004 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) //Vitalik 2004 SynSet: TSynSet; end; TSynRangeLink = class(TAbstractRule) //Vitalik 2004 Range: TSynRange; Parent: TSynRange; constructor Create(aRange: TSynRange); virtual; end; TSynRangeRule = class fCloseSymbol: TSynSymbol; fOpenSymbol: TSynSymbol; fCloseOnTerm: boolean; fCloseOnEol: boolean; fAllowPredClose: boolean; //Vitalik 2004 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; //Vitalik 2004 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; //Vitalik 2004 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; //Vitalik 2004 function GetSynSymbolCount(): Integer; function GetCommonSynRangeCount(): Integer; function GetSynRangeLinkCount(): Integer; function GetSynRangeCount(): Integer; function GetSynKeyListCount(): Integer; function GetSynSetCount(): Integer; //Vitalik 2004 function GetCaseSensitive: boolean; procedure SetCaseSensitive(const Value: boolean); public {temp} procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer); //Vitalik 2004 procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004 procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004 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; //Vitalik 2004 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; //Vitalik 2004 procedure DeleteSet(SynSet: TSynSet); overload; //Vitalik 2004 { procedure SetParentColor; procedure RestoreOldColor; } procedure SetDelimiters(Delimiters: TSymbSet); // procedure SetStyles(aStyles: TSynUniStyles); procedure SetColorForChilds(); //Vitalik 2004 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; //Vitalik 2004 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; //Vitalik 2004 property SetCount: Integer read GetSynSetCount; //Vitalik 2004 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 //Vitalik 2004 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; //l1: {begin} Run := posStart; // Result := False; 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} { was: Result := false; curNode := HeadNode; nxtNode := nil; while (curNode.NextSymbs.Count > 0) and (parser.fLine[parser.Run] <> #0) do begin inc(parser.Run); nxtNode := curNode.NextSymbs.FindSymbol(parser.fCurrentRule.CaseFunct(parser.fLine[parser.Run])); //: Ищем этот символ среди текущих веток if nxtNode = nil then begin dec(parser.Run); break; end; curNode := nxtNode; end; if curNode.tkSynSymbol = nil then exit; if (nxtNode = nil) and (curNode.NextSymbs.Count > 0) then dec(parser.Run); if parser.fLine[parser.Run] <> #0 then inc(parser.Run); if curNode.BrakeType = btAny then begin Result := True; tkSynSymbol := curNode.tkSynSymbol; exit; end; if parser.fLine[parser.Run] in parser.fCurrentRule.fTermSymbols then begin Result := True; tkSynSymbol := curNode.tkSynSymbol; end; } 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; // AddAttribute(); KeyList := TStringList.Create; KeyList.Text := st; end; destructor TSynKeyList.Destroy; begin KeyList.Free; inherited; end; //==== TSynSet ========================================================= constructor TSynSet.Create(aSymbSet: TSymbSet = []); //Vitalik 2004 begin inherited Create; // AddAttribute(); SymbSet := aSymbSet; end; destructor TSynSet.Destroy; //Vitalik 2004 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; // AddAttribute(); 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;} // Attribs.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); //Vitalik 2004 begin fSynSets.Add(NewSet); end; function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; //Vitalik 2004 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); //Vitalik 2004 begin fSynSets.Remove(SynSet); SynSet.Free; end; procedure TSynRange.DeleteSet(index: integer); //Vitalik 2004 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; //Vitalik 2004 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; //Vitalik 2004 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; // Used in prepare (* replaced by quicksort... arb2004 procedure SortSymbolList(List: TList); //: Sort list fSynSymbols var i: integer; fin: boolean; begin fin := False; while not fin do begin fin := True; for i := 0 to List.Count-2 do if TSynSymbol(List[i]).Symbol > TSynSymbol(List[i+1]).Symbol then begin List.Exchange(i, i+1); fin := False; end; 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} //Vitalik 2004 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} //Vitalik 2004 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; //Vitalik 2004 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-0.9.8/components/synunihighlighter/source/SynUniHighlighter.pas���������������������������0000644�0001750�0000144�00000120133�13161144471�026072� 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 procedure ReadSyntax(Reader: TReader); procedure WriteSyntax(Writer: TWriter); 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; //Vitalik 2004 fSchemeIndex: integer; //Vitalik 2004 fImportFormats: TList; procedure SpaceProc; procedure NullProc; function GetIdentChars: TSynIdentChars; override; procedure DefineProperties(Filer: TFiler); override; function GetSampleSource: string; override; procedure SetSampleSource(Value: string); override; public class function GetLanguageName: string; override; public constructor Create(AOwner: TComponent); overload; override; destructor Destroy; 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 GetTokenID: Integer; 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 MainRules: TSynRange read fMainRules; property SchemesList: TStringList read fSchemes write fSchemes; //Vitalik 2004 property SchemeIndex: integer read fSchemeIndex write fSchemeIndex; //Vitalik 2004 end; implementation uses LazUTF8Classes, Laz2_XMLRead; const SYNS_AttrTest = 'Test'; //==== TSynUniSyn ============================================================ constructor TSynUniSyn.Create(AOwner: TComponent); var fTestAttri: TSynHighlighterAttributes; begin inherited Create(AOwner); Info := TSynInfo.Create; Info.History := TStringList.Create; Info.Sample := TStringList.Create; fPrepared := False; //Вот так вот нужно все атрибуты будет добавлять! Потому как нужно еще и обработать [Underline + Italic] fTestAttri := TSynHighLighterAttributes.Create(SYNS_AttrTest); fTestAttri.Style := [fsUnderline, fsItalic]; fTestAttri.Foreground := clBlue; fTestAttri.Background := clSilver; AddAttribute(fTestAttri); fSchemes := TStringList.Create; fSchemeIndex := -1; fMainRules := TSynRange.Create; MainRules.Name := _Root; fEol := False; fPrEol := False; fCurrentRule := MainRules; // AddNewScheme('Noname'); fImportFormats := TList.Create; end; destructor TSynUniSyn.Destroy; //: Destructor of TSynUniSyn begin MainRules.Free; Info.History.Free; Info.Sample.Free; Info.Free; fSchemes.Free; fImportFormats.Free; inherited; 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; {begin} //Vitalik 2004 {was: fTrueLine := PChar(NewValue); l := Length(NewValue); ReallocMem(fLine, l+1); for i := 0 to l do fLine[i] := fCurrentRule.CaseFunct(fTrueLine[i]); } fTrueLine := NewValue; fLine := PChar(NewValue); //: Current string of SynEdit {end} //Vitalik 2004 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 //Vitalik 2004 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; procedure TSynUniSyn.SpaceProc; //! Never used!!! SSS begin repeat Inc(Run); until (fLine[Run] > #32) or (fLine[Run] in [#0, #10, #13]); 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.GetTokenID: Integer; //: Return ID of current token //: ??? Оставлена для непонятной совместимости? Нигде же не вызывается и не используется! //: Можено что-нить с ней сделать... begin Result := 1; //# CODE_REVIEW fCurrToken.ID; end; function TSynUniSyn.GetTokenAttribute: TSynHighlighterAttributes; //: Returns attribute of current token begin // fCurrToken.Attr.Style := fCurrToken.Attr.Style + [fsUnderline]; // if GetEol then // Result := nil 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.NullProc; //: Never used!!! SSS ??? begin // fEol := True; end; procedure TSynUniSyn.Reset; //: Reset of SynUniSyn is Reset of SynUniSyn.MainRules begin MainRules.Reset; end; procedure TSynUniSyn.DefineProperties(Filer: TFiler); //! Never used ???? var iHasData: boolean; begin inherited; if Filer.Ancestor <> nil then iHasData := True else iHasData := MainRules.RangeCount > 0; Filer.DefineProperty( 'Syntax', ReadSyntax, WriteSyntax, {True}iHasData ); end; procedure TSynUniSyn.ReadSyntax(Reader: TReader); //: This is some metods for reading ??? ??? ??? var iBuffer: TStringStream; begin // iBuffer := nil; // try iBuffer := TStringStream.Create( Reader.ReadString ); iBuffer.Position := 0; LoadFromStream( iBuffer ); // finally // iBuffer.Free; // end; end; procedure TSynUniSyn.WriteSyntax(Writer: TWriter); //: This is some metods for writing ??? ??? ??? var iBuffer: TStringStream; begin iBuffer := TStringStream.Create( '' ); try SaveToStream( iBuffer ); iBuffer.Position := 0; Writer.WriteString( iBuffer.DataString ); finally iBuffer.Free; end; 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; 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); LoadFromXml(Xml); 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 LoadFromStream(TFileStreamUTF8.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: TFileStreamUTF8; begin if not FileExists(FileName) then raise Exception.Create(ClassName + '.LoadHglFromFile - "'+FileName+'" does not exists.'); F := TFileStreamUTF8.Create(FileName, fmOpenRead or fmShareDenyWrite); try LoadHglFromStream( F ); finally F.Free; end; end; procedure TSynUniSyn.SaveHglToFile(FileName: string); //: Save Highlighter to file var F: TFileStreamUTF8; begin if FileName = '' then raise exception.Create(ClassName + '.SaveHglToFile - FileName is empty'); F := TFileStreamUTF8.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-0.9.8/components/synunihighlighter/source/SynUniDesigner.pas������������������������������0000644�0001750�0000144�00000333414�13056765731�025417� 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-0.9.8/components/synunihighlighter/source/SynUniDesigner.dfm������������������������������0000644�0001750�0000144�00000704403�13056765731�025402� 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-0.9.8/components/synunihighlighter/source/SynUniClasses.pas�������������������������������0000644�0001750�0000144�00000071517�13112333426�025240� 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; end; TSynInfo = class //Vitalik 2004 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 //Vitalik 2004 end; TSymbStartType = (stUnspecified, stAny, stTerm); //Vitalik 2004 TSymbBrakeType = (btUnspecified, btAny, btTerm); TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace); //Vitalik 2004 TStreamWriter = class //Vitalik 2004 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) //Vitalik 2004 public // UseStyle: boolean; OldColorForeground: TColor; OldColorBackground: TColor; ParentForeground: boolean; ParentBackground: boolean; constructor Create(Name: string); // destructor Destroy(); override; procedure LoadFromString(Value: string); procedure SaveToStream(StreamWriter: TStreamWriter); end; TAbstractRule = class; TSynSymbol = class public Symbol: string; fOpenRule: TAbstractRule; StartType: TSymbStartType; //Vitalik 2004 BrakeType: TSymbBrakeType; StartLine: TSymbStartLine; //Vitalik 2004 Attributes: TSynHighlighterAttributes; constructor Create(st: string; Attribs: TSynHighlighterAttributes); virtual; destructor Destroy(); override; end; TSymbolNode = class ch: char; BrakeType: TSymbBrakeType; StartType: TSymbStartType; //Vitalik 2004 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; //Vitalik 2004 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): {TSynHighlighter}TSynAttributes; function GetStyleDef(const Name: string; const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}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 //Vitalik 2004 Enabled: boolean; constructor Create(); end; TSynRule = class(TAbstractRule) //Vitalik 2004 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 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.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 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, 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 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 TStreamWriter.WriteTag(Ind: integer; Name: string; EndLine: boolean = False); begin WriteString(Format('%s<%s', [Indent(Ind), Name])); if EndLine then WriteString('>' + EOL); 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', Fs2String(Style)); InsertTagBool(Ind+1, 'ParentForeground', PFore); InsertTagBool(Ind+1, 'ParentBackground', PBack); OpenTag(Ind, '/'+MainTag); 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 // Std := TSynHighlighterAttributes.Create(SYNS_AttrDefaultPackage); inherited Create(Name{SYNS_AttrDefaultPackage}); // UseStyle := False; end; {destructor TSynAttributes.Destroy; //var xml: TXMLParser; begin // if not UseStyle then //Std.Free; // xml := TXMLParser.Create; // xml.Standalone inherited; 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))); // '12345,0;true:false.' { Std.Background := StrToIntDef(Value, $FFFFFF); OldColorBackground := Std.Background; Std.Foreground := StrToIntDef(Value, 0); OldColorForeground := Std.Foreground; Std.Style := String2Fs(Value) ParentForeground := LoweValue = 'true' ParentBackground := LowerValue = 'true';} end; procedure TSynAttributes.SaveToStream(StreamWriter: TStreamWriter); begin with StreamWriter do WriteParam('Attributes', IntToStr(Foreground)+','+IntToStr(Background)+';'+ BoolToStr(ParentForeground,True)+':'+ BoolToStr(ParentBackground,True)+'.'+ FontStyleToStr(Style)); 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 ============================================================== {function TSynRule.GetAttribs: TAttributes; begin if (Ind < 0) or (Ind >= AttribsList.Count) then raise Exception.CreateFmt ('Invalid index: %d', [Ind]); Result := TAttributes(AttribsList[Ind]); end; function TSynRule.GetAttribsByIndex(Index: integer): TAttributes; begin if (Index < 0) or (Index >= AttribsList.Count) then raise Exception.CreateFmt ('Invalid index: %d', [Ind]); Result := TAttributes(AttribsList[Index]); end; } constructor TSynRule.Create; begin inherited; ind := -1; Attribs := TSynAttributes.Create('unknown'); // AttribsList := TList.Create; end; destructor TSynRule.Destroy; begin // FreeList(AttribsList); { if Attribs <> nil then begin Attribs.Free; Attribs := nil; end;} inherited; end; {function TSynRule.AddAttribute(): integer; var i: integer; begin ind := AttribsList.Add(TAttributes.Create); Attribs.ParentForeground := True; Attribs.ParentBackground := True; Attribs.Std.Foreground := clBlack; Attribs.Std.Background := clWhite; Attribs.OldColorForeground := Attribs.Std.Foreground; Attribs.OldColorBackground := Attribs.Std.Background; Attribs.Std.Style := []; Result := ind; if self is TSynRange then with self as TSynRange do begin for i := 0 to RangeCount-1 do Ranges[i].AddAttribute(); for i := 0 to KeyListCount-1 do KeyLists[i].AddAttribute(); for i := 0 to SetCount-1 do Sets[i].AddAttribute(); end; end; procedure TSynRule.DeleteAttributes(Index: integer); var i: integer; begin AttribsList.Delete(Index); if AttribsList.Count = Index then ind := Index-1 else ind := Index; if self is TSynRange then with self as TSynRange do begin for i := 0 to RangeCount-1 do Ranges[i].DeleteAttributes(Index); for i := 0 to KeyListCount-1 do KeyLists[i].DeleteAttributes(Index); for i := 0 to SetCount-1 do Sets[i].DeleteAttributes(Index); end; end; procedure TSynRule.ClearAttributes(); var i: integer; begin ClearList(AttribsList); ind := -1; if self is TSynRange then with self as TSynRange do begin for i := 0 to RangeCount-1 do Ranges[i].ClearAttributes(); for i := 0 to KeyListCount-1 do KeyLists[i].ClearAttributes(); for i := 0 to SetCount-1 do Sets[i].ClearAttributes(); end; end; procedure TSynRule.SetAttributesIndex(Index: integer); var i: integer; begin ind := Index; if self is TSynRange then with self as TSynRange do begin for i := 0 to RangeCount-1 do Ranges[i].SetAttributesIndex(Index); for i := 0 to KeyListCount-1 do KeyLists[i].SetAttributesIndex(Index); for i := 0 to SetCount-1 do Sets[i].SetAttributesIndex(Index); end; 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 Self.OwnsObjects := True; end; destructor TSynUniStyles.Destroy; begin inherited; end; function TSynUniStyles.GetStyle(const Name: string): {TSynHighlighter}TSynAttributes; begin Result := GetStyleDef(Name, nil); end; function TSynUniStyles.GetStyleDef(const Name: string; const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}TSynAttributes; var i: integer; begin Result := Def; for i := 0 to Self.Count-1 do if SameText({TSynHighlighter}TSynAttributes(Self.Items[i]).Name, Name) then begin Result := {TSynHighlighter}TSynAttributes(Self.Items[i]); Exit; end; end; procedure TSynUniStyles.AddStyle(Name: string; Foreground, Background: TColor; FontStyle: TFontStyles); var Atr: {TSynHighlighter}TSynAttributes; begin Atr := {TSynHighlighter}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({TSynHighlighter}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 {TSynHighlighter}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 xml: TXMLDocument = nil; i, J: integer; Name, FontStyle, Key, Value: string; Foreground, Background: TColor; Style: {TSynHighlighter}TSynAttributes; ChildNode: TDOMNode; begin if not FileExists(FileName) then raise Exception.Create(ClassName + '.Load - "' + FileName + '" does not exists.'); Clear; try ReadXMLFile(xml, FileName); for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText(ChildNode.NodeName, 'Style') then begin Name := ''; Foreground := clLime; Background := clFuchsia; 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, clBlack) else if SameText('Background', Key) then Background := StrToIntDef(Value, clWhite) 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; 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-0.9.8/components/synunihighlighter/lib/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021223� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/multithreadprocs/��������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�020302� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/multithreadprocs/multithreadprocslaz.pas���������������������������������0000644�0001750�0000144�00000000554�12677725617�025141� 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; interface uses MTProcs, MTPUtils, MTPCPU, LazarusPackageIntf; implementation procedure Register; begin end; initialization RegisterPackage('MultiThreadProcsLaz', @Register); end. ����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/multithreadprocs/multithreadprocslaz.lpk���������������������������������0000644�0001750�0000144�00000002766�12573027524�025136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="MultiThreadProcsLaz"/> <Author Value="Mattias Gaertner mattias@freepascal.org"/> <CompilerOptions> <Version Value="10"/> <SearchPaths> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </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> <Type Value="RunAndDesignTime"/> <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"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ����������doublecmd-0.9.8/components/multithreadprocs/mtputils.pas��������������������������������������������0000644�0001750�0000144�00000014116�12573027524�022704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Utilities using light weight threads. This file is part of the Free Pascal run time library. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org 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. **********************************************************************} { 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-0.9.8/components/multithreadprocs/mtprocs.pas���������������������������������������������0000644�0001750�0000144�00000064133�12573027524�022516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Unit for light weight threads. This file is part of the Free Pascal run time library. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org 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. **********************************************************************} { 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} 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); { 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; 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 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 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; // 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 begin CallLocalProc(FTaskProcedure,FTaskFrame,Index,Data,Item) end else begin if Assigned(FTaskProcedure) then FTaskProcedure(Index,Data,Item) else FTaskMethod(Index,Data,Item) end; 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,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,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),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; BlockCount:=((LoopLength-1) div BlockSize)+1; end; procedure TProcThreadPool.DoParallelIntern(const AMethod: TMTMethod; const AProc: TMTProcedure; 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 begin CallLocalProc(AProc,AFrame,Index,Data,Item) end else begin if Assigned(AProc) then AProc(Index,Data,Item) else AMethod(Index,Data,Item) end; 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.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 {$IF defined(VER2_4_2) or defined(VER2_4_3)} AThread.Resume {$ELSE} AThread.Start {$ENDIF} 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-0.9.8/components/multithreadprocs/mtpcpu.pas����������������������������������������������0000644�0001750�0000144�00000005152�12573027524�022333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ System depending code for light weight threads. This file is part of the Free Pascal run time library. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org 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 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_ONLN = 83; 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)} var mib: array[0..1] of cint; len: cint; t: cint; begin mib[0] := CTL_HW; mib[1] := HW_NCPU; len := sizeof(t); fpsysctl(pchar(@mib), 2, @t, @len, Nil, 0); Result:=t; end; {$ELSEIF defined(linux)} begin Result:=sysconf(_SC_NPROCESSORS_ONLN); 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-0.9.8/components/multithreadprocs/examples/�����������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022120� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/multithreadprocs/examples/testmtp1.lpr�����������������������������������0000644�0001750�0000144�00000025102�12573027524�024431� 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-0.9.8/components/multithreadprocs/examples/testmtp1.lpi�����������������������������������0000644�0001750�0000144�00000002553�12573027524�024425� 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-0.9.8/components/multithreadprocs/examples/simplemtp1.lpr���������������������������������0000644�0001750�0000144�00000000717�12573027524�024750� 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-0.9.8/components/multithreadprocs/examples/simplemtp1.lpi���������������������������������0000644�0001750�0000144�00000003006�12573027524�024731� 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-0.9.8/components/multithreadprocs/examples/recursivemtp1.lpr������������������������������0000644�0001750�0000144�00000002265�12573027524�025466� 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-0.9.8/components/multithreadprocs/examples/recursivemtp1.lpi������������������������������0000644�0001750�0000144�00000002763�12573027524�025460� 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-0.9.8/components/multithreadprocs/examples/parallelloop1.lpr������������������������������0000644�0001750�0000144�00000006360�12573027524�025424� 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-0.9.8/components/multithreadprocs/examples/parallelloop1.lpi������������������������������0000644�0001750�0000144�00000002763�12573027524�025416� 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-0.9.8/components/multithreadprocs/Readme.txt����������������������������������������������0000644�0001750�0000144�00000000110�12573027524�022241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Official page: http://wiki.lazarus.freepascal.org/Parallel_procedures ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017603� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/readme.txt�������������������������������������������������0000644�0001750�0000144�00000000167�12014201074�021576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lclextensions v0.4 http://code.google.com/p/luipack/ Some modifications done so that it only compiles VirtualTreeView.���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/oleutils.pas�����������������������������������������������0000644�0001750�0000144�00000010623�12014201074�022143� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit oleutils; { OLE helper functions Copyright (C) 2007 Luiz Amrico Pereira Cmara pascalive@bol.com.br 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. } //todo: add error handling {$mode objfpc}{$H+} interface {$ifdef Windows} uses Windows, Classes, SysUtils, ActiveX; type { TOLEStream } TOLEStream = class (TStream) private FSrcStream: IStream; procedure InternalSetSize(NewSize: LARGE_INTEGER); public constructor Create(const Stream: IStream); function Read(var Buffer; Count: Integer): Integer; override; function Seek(Offset: Integer; Origin: Word): Integer; overload; override; procedure SetSize(const NewSize: Int64); override; procedure SetSize(NewSize: Longint); override; function Write(const Buffer; Count: Integer): Integer; override; end; {$endif} implementation {$ifdef Windows} function ErrorString(Error: HRESULT): String; begin case Error of E_PENDING: Result:='E_PENDING'; S_FALSE: Result:='S_FALSE'; STG_E_MEDIUMFULL: Result:='STG_E_MEDIUMFULL'; STG_E_ACCESSDENIED: Result:= 'STG_E_ACCESSDENIED'; STG_E_CANTSAVE: Result:='STG_E_CANTSAVE'; STG_E_INVALIDPOINTER: Result:='STG_E_INVALIDPOINTER'; STG_E_REVERTED: Result:='STG_E_REVERTED'; STG_E_WRITEFAULT: Result:='STG_E_WRITEFAULT'; STG_E_INVALIDFUNCTION: Result:='STG_E_INVALIDFUNCTION'; else Result:='Unknow error'; end; end; { TOLEStream } constructor TOLEStream.Create(const Stream: IStream); begin inherited Create; FSrcStream:=Stream; end; function TOLEStream.Read(var Buffer; Count: Integer): Integer; var Res: HRESULT; begin Res:=FSrcStream.Read(@Buffer, Count, @Result); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while reading: '+ErrorString(Res)); end; function TOLEStream.Seek(Offset: Integer; Origin: Word): Integer; var liResult, liOffset : LARGE_INTEGER; Res: HRESULT; begin //soFrom* constants are equal to STREAM_SEEK_* constants. Assume it here liOffset.LowPart:=Offset; liOffset.HighPart:=0; Res:=FSrcStream.Seek(Int64(liOffset), Origin, Int64(liResult)); Result:=liResult.LowPart; if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while seeking: '+ErrorString(Res)); end; procedure TOLEStream.SetSize(NewSize: Longint); var liSize: LARGE_INTEGER; begin liSize.LowPart:=NewSize; liSize.HighPart:=0; InternalSetSize(liSize); end; procedure TOLEStream.SetSize(const NewSize: Int64); var liSize: LARGE_INTEGER; begin liSize.QuadPart:=NewSize; InternalSetSize(liSize); end; procedure TOLEStream.InternalSetSize(NewSize: LARGE_INTEGER); var Res:HRESULT; begin Res:=FSrcStream.SetSize(Int64(NewSize)); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while setting size: '+ErrorString(Res)); end; function TOLEStream.Write(const Buffer; Count: Integer): Integer; var Res: HRESULT; begin Res:=FSrcStream.Write(@Buffer,Count,@Result); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while writing: '+ErrorString(Res)); end; {$endif} end. �������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/lclextensions_package_doublecmd.pas������������������������0000644�0001750�0000144�00000000565�12014201074�026672� 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 lclextensions_package_doublecmd; interface uses DelphiCompat, oleutils, LclExt, LazarusPackageIntf; implementation procedure Register; begin end; initialization RegisterPackage('lclextensions_package_doublecmd', @Register); end. �������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/lclextensions_package_doublecmd.lpk������������������������0000644�0001750�0000144�00000003504�11751527542�026713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="lclextensions_package_doublecmd"/> <AddToProjectUsesSection Value="True"/> <Author Value="Luiz Americo Pereira Câmara"/> <CompilerOptions> <Version Value="10"/> <SearchPaths> <IncludeFiles Value="include/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <GenerateDebugInfo Value="True"/> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="LCL Extensions provides additional functions to be used together with LCL "/> <License Value="Modified LGPL "/> <Version Minor="4"/> <Files Count="3"> <Item1> <Filename Value="delphicompat.pas"/> <UnitName Value="DelphiCompat"/> </Item1> <Item2> <Filename Value="oleutils.pas"/> <UnitName Value="oleutils"/> </Item2> <Item3> <Filename Value="lclext.pas"/> <UnitName Value="LclExt"/> </Item3> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/lclext.pas�������������������������������������������������0000644�0001750�0000144�00000003507�12014201074�021601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit LclExt; { LCL Extension Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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. } {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLType, Graphics; function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; implementation {$i uses_lclext.inc} {$i lclext.inc} end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/���������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021226� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/win32/���������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022170� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/win32/uses_lclext.inc������������������������������0000644�0001750�0000144�00000000024�12014201074�025202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ uses Windows; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/win32/uses.inc�������������������������������������0000644�0001750�0000144�00000000042�12014201074�023627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Windows, win32proc, CommCtrl, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/win32/lclext.inc�����������������������������������0000644�0001750�0000144�00000002007�12014201074�024146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; var MaskDC: HDC; MaskObj: HGDIOBJ; PrevTextColor, PrevBkColor: COLORREF; begin //this is a stripped version of LCL.StretchMaskBlt if Mask <> 0 then begin MaskDC := Windows.CreateCompatibleDC(DestDC); MaskObj := Windows.SelectObject(MaskDC, Mask); PrevTextColor := Windows.SetTextColor(DestDC, $00000000); PrevBkColor := Windows.SetBkColor(DestDC, $00FFFFFF); Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); Windows.BitBlt(DestDC, X, Y, Width, Height, MaskDC, XSrc, YSrc, SRCAND); Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); Windows.SetTextColor(DestDC, PrevTextColor); Windows.SetBkColor(DestDC, PrevBkColor); Windows.SelectObject(MaskDC, MaskObj); Windows.DeleteDC(MaskDC); end else Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/win32/delphicompat.inc�����������������������������0000644�0001750�0000144�00000012755�12014201074�025337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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. } function BeginDeferWindowPos(nNumWindows: longint): THandle; begin Result:=Windows.BeginDeferWindowPos(nNumWindows); end; function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop); end; function CopyImage(hImage: THANDLE; uType: LongWord; cxDesired, cyDesired: LongInt; fuFlags: LongWord): THandle; begin Result := Windows.CopyImage(hImage,uType,cxDesired,cyDesired,fuFlags); end; function CreatePatternBrush(hbmp: HBITMAP): HBRUSH; begin Result := Windows.CreatePatternBrush(hbmp); end; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter: THandle; x, y, cx, cy: longint; uFlags: LongWord): THandle; begin Result := Windows.DeferWindowPos(hWinPosInfo,hWnd,hWndInsertAfter,x,y,cx,cy,uFlags); end; function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: LongWord): Boolean; begin Result := Windows.DrawFrameControl(DC,Rect,uType,uState); end; function EndDeferWindowPos(hWinPosInfo: THandle): Boolean; begin Result:=Windows.EndDeferWindowPos(hWinPosInfo); end; function GdiFlush: Boolean; begin Result := Windows.GdiFlush; end; function GetACP: LongWord; begin Result := Windows.GetACP; end; function GetBkColor(DC: HDC): LCLType.COLORREF; begin Result := Windows.GetBkColor(DC); end; function GetDCEx(hWnd: HWND; hrgnClip: HRGN; flags: DWORD): HDC; begin Result := Windows.GetDCEx(hWnd,hrgnClip,flags); end; function GetKeyboardLayout(dwLayout: DWORD): THandle; begin Result := Windows.GetKeyboardLayout(dwLayout); end; function GetKeyboardState(lpKeyState: PBYTE): BOOLEAN; begin Result := Windows.GetKeyboardState(lpKeyState); end; function GetLocaleInfo(Locale, LCType: LongWord; lpLCData: PChar; cchData: longint): longint; begin Result := Windows.GetLocaleInfo(Locale,LCType,lpLCData,cchData); end; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; external 'GDI32.DLL'; function GetTextAlign(hDC: HDC): LongWord; begin Result := Windows.GetTextAlign(hDC); end; function GetTextExtentExPoint(DC: LCLType.HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: ObjPas.PInteger; var Size: TSize): BOOL; begin Result := Windows.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; begin Result := Windows.GetTextExtentPointW(DC, Str, Count, Size); end; function GetWindowDC(hWnd: HWND): HDC; begin Result := Windows.GetWindowDC(hWnd); end; function ImageList_DragShowNolock(fShow: Boolean): Boolean; begin Result := CommCtrl.ImageList_DragShowNolock(fShow); end; function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT ): Integer; begin Result:=Windows.MapWindowPoints(hWndFrom,hWndTo,lpPoints,cPoints); end; function MultiByteToWideChar(CodePage, dwFlags: DWORD; lpMultiByteStr: PChar; cchMultiByte: longint; lpWideCharStr: PWideChar; cchWideChar: longint ): longint; begin Result := Windows.MultiByteToWideChar(CodePage,dwFlags,lpMultiByteStr,cchMultiByte,lpWideCharStr,cchWideChar); end; function OffsetRgn(hrgn: HRGN; nxOffset, nYOffset: longint): longint; begin Result := Windows.OffsetRgn(hrgn,nxOffset,nYOffset); end; function SetBrushOrgEx(DC: LCLType.HDC; nXOrg, nYOrg: longint; lppt: Types.PPoint): Boolean; begin Result := Windows.SetBrushOrgEx(DC,nXOrg,nYOrg,lppt); end; function ScrollDC(DC: LCLType.HDC; dx: longint; dy: longint; var lprcScroll: Types.TRect; var lprcClip: Types.TRect; hrgnUpdate: LCLType.HRGN; lprcUpdate: Types.PRect): Boolean; begin Result := Windows.ScrollDC(DC, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate); end; function ToAscii(uVirtKey, uScanCode: LongWord; lpKeyState: PBYTE; lpChar: PWORD; uFlags: LongWord): longint; begin Result := Windows.ToAscii(uVirtKey,uScanCode,lpKeyState,lpChar,uFlags); end; �������������������doublecmd-0.9.8/components/lclextensions/include/qt/������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021652� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/qt/uses_lclext.inc���������������������������������0000644�0001750�0000144�00000000017�12014201074�024666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses LclIntf;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/qt/uses.inc����������������������������������������0000644�0001750�0000144�00000000114�12014201074�023311� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ InterfaceBase, LCLIntf, Graphics, qt4, qtint, qtobjects, qtwidgets, Math, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/qt/lclext.inc��������������������������������������0000644�0001750�0000144�00000000447�12014201074�023636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := StretchMaskBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, 0, 0, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/qt/delphicompat.inc��������������������������������0000644�0001750�0000144�00000003675�12014201074�025022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Qt Interface Initial implementation by Zeljan Rikalo } {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$define HAS_GETTEXTALIGN} {$define HAS_GETWINDOWDC} {$define HAS_OFFSETRGN} {$define HAS_SETBRUSHORGEX} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} function GetBkColor(DC:HDC):COLORREF; var Color: PQColor; begin if QtWidgetSet.IsValidDC(DC) then begin Color := TQtDeviceContext(DC).BackgroundBrush.getColor; TQColorToColorRef(Color^, Result); end else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; begin Result := QtWidgetSet.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; function GetTextAlign(hDC:HDC): LongWord; var QtDC: TQtDeviceContext; QtFontMetrics: QFontMetricsH; QtFont: QFontH; begin Result := 0; if not QtWidgetSet.IsValidDC(hdC) then Exit; QtDC := TQtDeviceContext(hDC); QtFont := QtDC.vFont.FHandle; QtFontMetrics := QFontMetrics_create(QtFont); try {TODO: FIXME we should save somehow text flags into QtDC cause we don't have any function which returns current flags !} finally QFontMetrics_destroy(QtFontMetrics); end; end; function GetWindowDC(hWnd:HWND): HDC; begin Result := LCLIntf.GetDC(hWnd); end; function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; var Region: TQtRegion; begin Region := TQtRegion(hrgn); QRegion_translate(Region.FHandle, nxOffset, nYOffset); Result := Region.GetRegionType; end; function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; var QtDC: TQtDeviceContext; begin Result := False; if not QtWidgetSet.IsValidDC(DC) then Exit; QtDC := TQtDeviceContext(DC); if lppt <> nil then QtDC.getBrushOrigin(lppt); QtDC.setBrushOrigin(nXorg, nYOrg); Result := True; end; �������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk2/����������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022075� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk2/uses_lclext.inc�������������������������������0000644�0001750�0000144�00000000020�12014201074�025103� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses Gtk2Int; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk2/uses.inc��������������������������������������0000644�0001750�0000144�00000000077�12014201074�023544� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ LCLIntf, Graphics, Gtk2Def, Gtk2Proc, Gtk2Int, pango, math, �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk2/lclext.inc������������������������������������0000644�0001750�0000144�00000000474�12014201074�024061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := GTK2WidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, XSrc, YSrc, SRCCOPY); end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk2/delphicompat.inc������������������������������0000644�0001750�0000144�00000006346�12203745772�025265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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. } {$MACRO ON} {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} procedure pango_extents_to_pixels (ink_rect: PPangoRectangle; logical_rect: PPangoRectangle); cdecl; external 'libpango-1.0.so.0'; function GetBkColor(DC:HDC):COLORREF; begin if GTK2WidgetSet.IsValidDC(DC) then Result := TGtkDeviceContext(DC).CurrentBackColor.ColorRef else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; var layout: PPangoLayout; i: Integer; Rect: TPangoRectangle; iter : PPangoLayoutIter; begin Result := GTK2WidgetSet.IsValidDC(DC); if Result then with TGtk2DeviceContext(DC) do begin if (CurrentFont = nil) or (CurrentFont^.GDIFontObject = nil) then layout := GTK2WidgetSet.GetDefaultGtkFont(false) else layout := CurrentFont^.GDIFontObject; pango_layout_set_text(layout, Str, Count); if PartialWidths = nil then pango_layout_get_pixel_size (layout, @Size.cx, @Size.cy) else begin i := 0; Size.cx := 0; Size.cy := 0; iter := pango_layout_get_iter(layout); repeat pango_layout_iter_get_char_extents(iter,@Rect); pango_extents_to_pixels(nil,@Rect); inc(Size.cx, Rect.Width); PartialWidths[i] := Size.cx; if Size.cy < Rect.Height then Size.cy := Rect.Height; inc(i); until not pango_layout_iter_next_char(iter); pango_layout_iter_free(iter); end; end; end; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk/�����������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022013� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk/uses_lclext.inc��������������������������������0000644�0001750�0000144�00000000017�12014201074�025027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses GtkInt; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk/uses.inc���������������������������������������0000644�0001750�0000144�00000000106�12014201074�023453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ LCLIntf, Graphics, gtkdef, gdk, GTKProc, GtkInt, glib, gtk, Math, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk/lclext.inc�������������������������������������0000644�0001750�0000144�00000000475�12014201074�024000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := GTKWidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, XSrc, YSrc, SRCCOPY); end; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/gtk/delphicompat.inc�������������������������������0000644�0001750�0000144�00000010274�12014201074�025154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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. } {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$define HAS_DRAWFRAMECONTROL} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := GTKWidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, 0, XSrc, YSrc, Rop); end; function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: LongWord): Boolean; begin Result := LCLIntf.DrawFrameControl(DC, Rect, uType, uState); end; function GetBkColor(DC:HDC):COLORREF; begin if GTKWidgetSet.IsValidDC(DC) then Result := TGtkDeviceContext(DC).CurrentBackColor.ColorRef else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: ObjPas.PInteger; var Size: TSize): BOOL; var lbearing, rbearing, width, ascent,descent: LongInt; UseFont : PGDKFont; IsDBCSFont: Boolean; NewCount,Accumulator,i: Integer; begin //based in lcl code Result := GTKWidgetSet.IsValidDC(DC); if Result then with TGtkDeviceContext(DC) do begin if (CurrentFont = nil) or (CurrentFont^.GDIFontObject = nil) then begin UseFont := GTKWidgetSet.GetDefaultGtkFont(false); end else begin UseFont := CurrentFont^.GDIFontObject; end; If UseFont = nil then DebugLn('WARNING: [TGtkWidgetSet.GetTextExtentPoint] Missing font') else begin descent:=0; { UpdateDCTextMetric(TDeviceContext(DC)); IsDBCSFont:=TDeviceContext(DC).DCTextMetric.IsDoubleByteChar; if IsDBCSFont then begin NewCount:=Count*2; if FExtUTF8OutCacheSize<NewCount then begin ReAllocMem(FExtUTF8OutCache,NewCount); FExtUTF8OutCacheSize:=NewCount; end; NewCount:=UTF8ToDoubleByte(Str,Count,FExtUTF8OutCache)*2; gdk_text_extents(UseFont, FExtUTF8OutCache, NewCount, @lbearing, @rBearing, @width, @ascent, @descent); end else begin gdk_text_extents(UseFont, Str, Count, @lbearing, @rBearing, @width, @ascent, @descent); end; } gdk_text_extents(UseFont, Str, Count,@lbearing, @rBearing, @width, @ascent, @descent); Size.cX := Width; Size.cY := ascent+descent; if PartialWidths <> nil then begin Accumulator:=0; for i:= 0 to Count - 1 do begin Inc(Accumulator,gdk_char_width(UseFont,(Str+i)^)); PartialWidths[i]:=Accumulator; end; end; end; end; end; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/generic/�������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022642� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/generic/unicodefunctions.inc�����������������������0000644�0001750�0000144�00000002022�12014201074�026701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { GetUTF8ByteCount returns the number of bytes necessary to hold the requested number of characters (count). Not necessarily the number of characters is equal to the widestring length but here we assume it to skip the extra overhead } //todo do a function that convert the str and the count at one pass function GetUTF8ByteCount(const UTF8Str: UTF8String; WideCount: Integer): Integer; var CharCount, CharLen, StrLen: Integer; P: PChar; begin Result := 0; CharCount := 0; P := PChar(UTF8Str); StrLen := Length(UTF8Str); WideCount := Min(WideCount, StrLen); while (CharCount < WideCount) do begin CharLen := UTF8CharacterLength(P); Inc(P, CharLen); Inc(Result, CharLen); Inc(CharCount); end; Result := Min(Result, StrLen); end; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; var TempStr: UTF8String; begin TempStr := UTF8Encode(WideString(Str)); Result := GetTextExtentPoint(DC, PChar(TempStr), GetUTF8ByteCount(TempStr, Count), Size); end; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/generic/stubs.inc����������������������������������0000644�0001750�0000144�00000010360�12140233030�024463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function BeginDeferWindowPos(nNumWindows:longint):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function CopyImage(hImage:THANDLE; uType:LongWord; cxDesired, cyDesired: LongInt; fuFlags:LongWord):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter:THandle; x, y, cx, cy:longint; uFlags:LongWord):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function EndDeferWindowPos(hWinPosInfo:THandle):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GdiFlush: Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetACP:LongWord; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_GETBKCOLOR} function GetBkColor(DC:HDC):COLORREF; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function GetDCEx(hWnd:HWND; hrgnClip:HRGN; flags:DWORD):HDC; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetKeyboardLayout(dwLayout:DWORD):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetKeyboardState(lpKeyState: System.PByte):BOOLEAN; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetLocaleInfo(Locale, LCType:LongWord; lpLCData:PChar; cchData:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_GETTEXTEXTENTEXPOINT} function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; begin Result := LCLIntf.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; {$endif} {$ifndef HAS_GETTEXTALIGN} function GetTextAlign(hDC:HDC): LongWord; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} {$ifndef HAS_GETWINDOWDC} function GetWindowDC(hWnd:HWND):HDC; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ImageList_DragShowNolock(fShow: Boolean): Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function MultiByteToWideChar(CodePage, dwFlags:DWORD; lpMultiByteStr:PChar; cchMultiByte:longint; lpWideCharStr:PWideChar;cchWideChar:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_OFFSETRGN} function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ScrollDC(DC:HDC; dx:longint; dy:longint; var lprcScroll:TRECT; var lprcClip:TRECT;hrgnUpdate:HRGN; lprcUpdate:PRECT):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_SETBRUSHORGEX} function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ToAscii(uVirtKey, uScanCode:LongWord; lpKeyState: System.PByte; lpChar: System.PWord; uFlags:LongWord):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/generic/independentfunctions.inc�������������������0000644�0001750�0000144�00000001571�12014201074�027560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; var i: Integer; XOffset, YOffset: SmallInt; FromPoint, ToPoint: TPoint; begin FromPoint := Point(0, 0); ToPoint := Point(0, 0); if hWndFrom <> 0 then ClientToScreen(hWndFrom, FromPoint); if hWndTo <> 0 then ClientToScreen(hWndTo, ToPoint); XOffset := (FromPoint.X - ToPoint.X); YOffset := (FromPoint.Y - ToPoint.Y); for i := 0 to cPoints - 1 do begin PPoint(@lpPoints)[i].x := XOffset + PPoint(@lpPoints)[i].x; PPoint(@lpPoints)[i].y := YOffset + PPoint(@lpPoints)[i].y; end; Result := MakeLong(XOffset, YOffset); end; {$ifndef HAS_BITBLT} function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := LCLIntf.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop); end; {$endif} ���������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/carbon/��������������������������������������������0000755�0001750�0000144�00000000000�13615241420�022472� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/carbon/uses_lclext.inc�����������������������������0000644�0001750�0000144�00000000017�12014201074�025506� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses LclIntf;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/carbon/uses.inc������������������������������������0000644�0001750�0000144�00000000102�12014201074�024126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ InterfaceBase, LCLIntf, Graphics, CarbonInt, CarbonCanvas, Math,��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/carbon/lclext.inc����������������������������������0000644�0001750�0000144�00000000447�12014201074�024456� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := StretchMaskBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, 0, 0, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/lclextensions/include/carbon/delphicompat.inc����������������������������0000644�0001750�0000144�00000000710�11751527542�025647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Carbon Interface Dummy implementation. Not tested. Waiting for someone with a Mac to implement it } { Only a few functions are necessary to compile VirtualTreeView: } {.$define HAS_GETTEXTEXTENTEXPOINT} {.$define HAS_GETTEXTALIGN} {.$define HAS_GETWINDOWDC} {.$define HAS_OFFSETRGN} {.$define HAS_SETBRUSHORGEX} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} ��������������������������������������������������������doublecmd-0.9.8/components/lclextensions/delphicompat.pas�������������������������������������������0000644�0001750�0000144�00000010710�12014201074�022751� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit DelphiCompat; { Delphi Compatibility Unit Copyright (C) 2007 Luiz Amrico Pereira Cmara pascalive@bol.com.br 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. } {$mode objfpc}{$H+} {.$define DEBUG_DELPHICOMPAT} interface uses LMessages, Types, LCLType, Classes; const //Messages WM_GETDLGCODE = LM_GETDLGCODE; WM_ERASEBKGND = LM_ERASEBKGND; WM_VSCROLL = LM_VSCROLL; WM_HSCROLL = LM_HSCROLL; WM_CHAR = LM_CHAR; WM_KEYDOWN = LM_KEYDOWN; WM_KEYUP = LM_KEYUP; WM_KILLFOCUS = LM_KILLFOCUS; WM_SIZE = LM_SIZE; WM_LBUTTONDBLCLK = LM_LBUTTONDBLCLK; WM_LBUTTONDOWN = LM_LBUTTONDOWN; type //TWM* types TMessage = TLMessage; TWMHScroll = TLMHScroll; TWMVScroll = TLMVScroll; TWMChar = TLMChar; TWMKeyDown = TLMKeyDown; TWMKeyUp = TLMKeyUp; TWMKillFocus = TLMKillFocus; TWMSize = TLMSize; TWMLButtonDblClk = TLMLButtonDblClk; TWMMeasureItem = TLMMeasureItem; TWMDrawItem = TLMDrawItems; function BeginDeferWindowPos(nNumWindows: LongInt):THandle; function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; function CopyImage(hImage: THandle; uType:LongWord; cxDesired, cyDesired: LongInt; fuFlags:LongWord):THandle; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter:THandle; x, y, cx, cy:longint; uFlags:LongWord):THandle; function EndDeferWindowPos(hWinPosInfo:THandle):Boolean; function GdiFlush: Boolean; function GetACP:LongWord; function GetBkColor(DC:HDC):COLORREF; function GetDCEx(hWnd:HWND; hrgnClip:HRGN; flags:DWORD):HDC; function GetKeyboardLayout(dwLayout:DWORD):THandle; function GetKeyboardState(lpKeyState:PBYTE):BOOLEAN; function GetLocaleInfo(Locale, LCType:LongWord; lpLCData:PChar; cchData:longint):longint; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; function GetTextAlign(hDC:HDC): LongWord; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; function GetWindowDC(hWnd:HWND):HDC; function ImageList_DragShowNolock(fShow: Boolean): Boolean; function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; function MultiByteToWideChar(CodePage, dwFlags:DWORD; lpMultiByteStr:PChar; cchMultiByte:longint; lpWideCharStr:PWideChar;cchWideChar:longint):longint; function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; function ScrollDC(DC:HDC; dx:longint; dy:longint; var lprcScroll:TRECT; var lprcClip:TRECT;hrgnUpdate:HRGN; lprcUpdate:PRECT):Boolean; function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; function ToAscii(uVirtKey, uScanCode:LongWord; lpKeyState: PByte; lpChar: PWord; uFlags:LongWord): LongInt; implementation uses {$i uses.inc} LCLProc, Controls {$ifdef DEBUG_DELPHICOMPAT} ,multiloglcl, filechannel {$endif} ; {$ifdef DEBUG_DELPHICOMPAT} const //Logger classes lcInfo = 0; lcStack = 1; var Logger: TLCLLogger; {$endif} {$i delphicompat.inc} end. ��������������������������������������������������������doublecmd-0.9.8/components/gifanim/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016323� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/tgifanim.xpm�����������������������������������������������������0000644�0001750�0000144�00000002341�11376245253�020661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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-0.9.8/components/gifanim/ressource-file.txt�����������������������������������������������0000644�0001750�0000144�00000000752�12014201074�022010� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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-0.9.8/components/gifanim/readme.txt�������������������������������������������������������0000644�0001750�0000144�00000000247�12043464010�020320� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GifAnim 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-0.9.8/components/gifanim/pkg_gifanim_dsgn.pas���������������������������������������������0000644�0001750�0000144�00000000617�12334444240�022324� 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 pkg_gifanim_dsgn; interface uses GifAnimDsgn, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnimDsgn', @GifAnimDsgn.Register); end; initialization RegisterPackage('pkg_gifanim_dsgn', @Register); end. �����������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/pkg_gifanim_dsgn.lpk���������������������������������������������0000644�0001750�0000144�00000002450�12334444240�022324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim_dsgn"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerMessages> <MsgFileName Value=""/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <License Value="GPL"/> <Version Major="1" Minor="4"/> <Files Count="1"> <Item1> <Filename Value="gifanimdsgn.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="GifAnimDsgn"/> </Item1> </Files> <Type Value="DesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="IDEIntf"/> </Item1> <Item2> <PackageName Value="pkg_gifanim"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/pkg_gifanim.pas��������������������������������������������������0000644�0001750�0000144�00000000544�12677725617�021334� 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 pkg_gifanim; interface uses GifAnim, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnim', @GifAnim.Register); end; initialization RegisterPackage('pkg_gifanim', @Register); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/pkg_gifanim.lpk��������������������������������������������������0000644�0001750�0000144�00000003050�12334444240�021306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim"/> <AddToProjectUsesSection Value="True"/> <Author Value="Laurent Jacques"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Show Gif Animation "/> <License Value="GPL "/> <Version Major="1" Minor="4"/> <Files Count="2"> <Item1> <Filename Value="gifanim.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="GifAnim"/> </Item1> <Item2> <Filename Value="gifanim.lrs"/> <Type Value="LRS"/> </Item2> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/gifanimdsgn.pas��������������������������������������������������0000644�0001750�0000144�00000001374�12334444240�021325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������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. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/gifanim/gifanim.pas������������������������������������������������������0000644�0001750�0000144�00000072142�12334444240�020452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2009 Laurent Jacques 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 <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Version 1.4 } 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 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.LoadAllBitmap(var AGifList: TGifList): boolean; var GifStream: TMemoryStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; GifBitmap: TGifImage; begin Result := False; if not FileExists(FFileName) then exit; if not assigned(AGifList) then AGifList := TGifList.Create(True); 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); 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); until (Introducer = ID_TRAILER); GifStream.Free; Result := True; end; function TGifLoader.LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean; var GifStream: TLazarusResourceStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; GifBitmap: TGifImage; begin Result := False; if not assigned(AGifList) then AGifList := TGifList.Create(True); GifStream := TLazarusResourceStream.Create(ResName, nil); 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); 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); until (Introducer = ID_TRAILER); GifStream.Free; Result := True; 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-0.9.8/components/gifanim/gifanim.lrs������������������������������������������������������0000644�0001750�0000144�00000003514�11376245253�020474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.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-0.9.8/components/gifanim/doublecmd.diff���������������������������������������������������0000644�0001750�0000144�00000024102�12334444240�021114� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: 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 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <CONFIG> - <Package Version="3"> + <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim"/> + <AddToProjectUsesSection Value="True"/> <Author Value="Laurent Jacques"/> <CompilerOptions> - <Version Value="8"/> + <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> - <OtherUnitFiles Value="$(LazarusDir)\ide\"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf2Set"/> + </Debugging> + </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> @@ -33,15 +39,16 @@ <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> - <PackageName Value="FCL"/> + <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> - <PackageName Value="IDEIntf"/> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> - <UnitPath Value="$(PkgOutDir)\"/> + <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> Index: pkg_gifanim_dsgn.lpk =================================================================== --- pkg_gifanim_dsgn.lpk (revision 0) +++ pkg_gifanim_dsgn.lpk (revision 0) @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <Package Version="4"> + <PathDelim Value="\"/> + <Name Value="pkg_gifanim_dsgn"/> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf2Set"/> + </Debugging> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <License Value="GPL"/> + <Version Major="1" Minor="4"/> + <Files Count="1"> + <Item1> + <Filename Value="gifanimdsgn.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="GifAnimDsgn"/> + </Item1> + </Files> + <Type Value="DesignTime"/> + <RequiredPkgs Count="2"> + <Item1> + <PackageName Value="IDEIntf"/> + </Item1> + <Item2> + <PackageName Value="pkg_gifanim"/> + </Item2> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + </Package> +</CONFIG> 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-0.9.8/components/doublecmd/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016647� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/doublecmd_common.pas�������������������������������������������0000644�0001750�0000144�00000000536�12756114647�022705� 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 doublecmd_common; interface uses DCClassesUtf8, DCOSUtils, DCStrUtils, DCBasicTypes, DCFileAttributes, DCConvertEncoding, DCDateTimeUtils, DCXmlConfig, DCProcessUtf8, DCUnicodeUtils; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/doublecmd_common.lpk�������������������������������������������0000644�0001750�0000144�00000005313�12756114647�022706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="doublecmd_common"/> <Author Value="Alexander Koblov"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; UsageCustomOptions += '-fPIC'; end"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> </CompilerOptions> <Description Value="Common units for Double Commander"/> <License Value="GNU GPL 2"/> <Version Minor="3" Release="1"/> <Files Count="10"> <Item1> <Filename Value="dcclassesutf8.pas"/> <UnitName Value="DCClassesUtf8"/> </Item1> <Item2> <Filename Value="dcosutils.pas"/> <UnitName Value="DCOSUtils"/> </Item2> <Item3> <Filename Value="dcstrutils.pas"/> <UnitName Value="DCStrUtils"/> </Item3> <Item4> <Filename Value="dcbasictypes.pas"/> <UnitName Value="DCBasicTypes"/> </Item4> <Item5> <Filename Value="dcfileattributes.pas"/> <UnitName Value="DCFileAttributes"/> </Item5> <Item6> <Filename Value="dcconvertencoding.pas"/> <UnitName Value="DCConvertEncoding"/> </Item6> <Item7> <Filename Value="dcdatetimeutils.pas"/> <UnitName Value="DCDateTimeUtils"/> </Item7> <Item8> <Filename Value="dcxmlconfig.pas"/> <UnitName Value="DCXmlConfig"/> </Item8> <Item9> <Filename Value="dcprocessutf8.pas"/> <UnitName Value="DCProcessUtf8"/> </Item9> <Item10> <Filename Value="dcunicodeutils.pas"/> <UnitName Value="DCUnicodeUtils"/> </Item10> </Files> <RequiredPkgs Count="2"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> <PackageName Value="LazUtils"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/dcxmlconfig.pas������������������������������������������������0000644�0001750�0000144�00000061403�13056767177�021702� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Implementation of configuration file in XML. Based on XmlConf from fcl-xml package. 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 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; // 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 GetFont(const aNode: TXmlNode; Path: TXmlPath; out Name: String; out Size: Integer; out 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 "<RootNodeName>/<Child1NodeName>/<Child2NodeName>...". } 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, DCOSUtils, DCClassesUtf8, URIParser; 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.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.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)); 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); FDoc.Free; FDoc := TmpDoc; end; procedure TXmlConfig.WriteToFile(const AFilename: String); var FileStream: TStream; begin FileStream := TFileStreamEx.Create(AFilename, fmCreate or fmShareDenyWrite); try WriteToStream(FileStream); 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 bFileExists: Boolean; sTmpConfigFileName: String; begin Result := False; if FFileName = '' then Exit; bFileExists := mbFileExists(FileName); // Write to temporary file and if successfully written rename to proper name. if (not bFileExists) or mbFileAccess(FileName, fmOpenWrite or fmShareDenyWrite) then begin sTmpConfigFileName := GetTempName(FileName); try WriteToFile(sTmpConfigFileName); if bFileExists then begin mbFileCopyAttr(FileName, sTmpConfigFileName, [caoCopyOwnership, caoCopyPermissions]); end; if not mbRenameFile(sTmpConfigFileName, FileName) 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<l1) and (Result=0) do begin Result:=ord(s1[i])-ord(s2[i]); inc(i); end; end; begin Result := RootNode; PathLen := Length(Path); if PathLen = 0 then Exit; StartPos := 1; while Assigned(Result) do begin EndPos := StartPos; while (EndPos <= PathLen) and (Path[EndPos] <> '/') 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; out Name: String; out Size: Integer; out 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-0.9.8/components/doublecmd/dcwindows.pas��������������������������������������������������0000644�0001750�0000144�00000015134�13573127016�021370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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 Retrieves the final path for the specified file } function GetFinalPathNameByHandle(hFile: THandle): UnicodeString; implementation uses SysUtils, JwaAclApi, JwaWinNT, JwaAccCtrl, JwaWinBase, JwaWinType, JwaNative, JwaNtStatus; 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 := '\\?\' + UTF8Decode(FileName) else begin Result := '\\?\UNC\' + UTF8Decode(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(UTF8Decode(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(UTF8Decode(Target)), SE_FILE_OBJECT, SecurityInfo, SidOwner, SidGroup, Dacl, Sacl) = ERROR_SUCCESS; end; {$PUSH}{$HINTS OFF}{$WARNINGS OFF} LocalFree(HLOCAL(SecDescPtr)); {$POP} end; 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; 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-0.9.8/components/doublecmd/dcunix.pas�����������������������������������������������������0000644�0001750�0000144�00000012326�13457075156�020671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This unit contains Unix 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 DCUnix; {$mode objfpc}{$H+} {$packrecords c} interface uses InitC, BaseUnix; const {$IF DEFINED(LINUX)} FD_CLOEXEC = 1; O_CLOEXEC = &02000000; {$ELSEIF DEFINED(FREEBSD)} O_CLOEXEC = &04000000; {$ELSEIF DEFINED(NETBSD)} O_CLOEXEC = $00400000; {$ELSE} O_CLOEXEC = 0; {$ENDIF} {$IF DEFINED(LINUX)} {$I dclinuxmagic.inc} {$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; {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 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 name 'setpgid'; function FileLock(Handle: System.THandle; Mode: cInt): System.THandle; function fpMkTime(tm: PTimeStruct): TTime; function fpLocalTime(timer: PTime; tp: PTimeStruct): PTimeStruct; implementation uses SysUtils, Unix, DCConvertEncoding; {$IF DEFINED(BSD)} type rlim_t = Int64; {$ENDIF} const {$IF DEFINED(LINUX)} _SC_OPEN_MAX = 4; RLIM_INFINITY = rlim_t(-1); {$ELSEIF DEFINED(BSD)} _SC_OPEN_MAX = 5; RLIM_INFINITY = rlim_t(High(QWord) shr 1); {$ENDIF} procedure tzset(); cdecl; external clib; function sysconf(name: cint): clong; 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 name 'lchown'; procedure FileCloseOnExecAll; var fd: cint; p: TRLimit; fd_max: rlim_t = RLIM_INFINITY; begin 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 then fd_max:= High(Byte); 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 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; 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; 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; initialization tzset(); end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/dcunicodeutils.pas���������������������������������������������0000644�0001750�0000144�00000036133�13613100542�022375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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: Integer; 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: Integer; 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: Integer; 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: Integer; 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]:= UTF8CharacterToUnicode(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-0.9.8/components/doublecmd/dcstrutils.pas�������������������������������������������������0000644�0001750�0000144�00000111517�13441176555�021577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Useful functions dealing with strings. Copyright (C) 2006-2019 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 <http://www.gnu.org/licenses/>. } 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 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; {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 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 } function scopy(IndexBegin,IndexEnd:integer;str:string):string; {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 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 <cmd1> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } 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 <cmd2> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } function EscapeDoubleQuotes(const Str: String): String; {en Escapes characters to be passed to shell command line when no quoting is used. For example <cmd3> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } function EscapeNoQuotes(const Str: String): String; implementation uses DCOSUtils; function NormalizePathDelimiters(const Path: String): String; {$IFDEF UNIX} begin Result:= Path; end; {$ELSE} const AllowPathDelimiters : set of char = ['\','/']; var I : LongInt; begin Result:= Path; // If path is not URI if Pos('://', Result) = 0 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 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; { RemoveInvalidCharsFromFileName } function RemoveInvalidCharsFromFileName(const FileName: String): String; const {$IFDEF MSWINDOWS} ForbiddenChars : set of char = ['<','>',':','"','/','\','|','?','*']; {$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; var I, J: Integer; begin Result := Path; {First remove all references to '\.\'} I := Pos (DirectorySeparator + '.' + DirectorySeparator, Result); while I <> 0 do begin Delete (Result, I, 2); I := Pos (DirectorySeparator + '.' + DirectorySeparator, Result); end; if StrEnds(Result, DirectorySeparator + '.') then Delete (Result, Length(Result) - 1, 2); {Then remove all references to '\..\'} I := Pos (DirectorySeparator + '..', Result); while (I <> 0) do begin J := Pred (I); while (J > 0) and (Result [J] <> DirectorySeparator) do Dec (J); if (J = 0) then Delete (Result, I, 3) else Delete (Result, J, I - J + 3); I := Pos (DirectorySeparator + '..', Result); 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 CompareStr(Copy(sPathToCheck, 1, BasePathLength), sBasePath) = 0 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 (CompareStr(sPathToCheck, sBasePath) = 0)) or ((PathToCheckLength = BasePathLength - 1) and (CompareStr(Copy(sBasePath, 1, PathToCheckLength), sPathToCheck) = 0))); 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) 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); 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: String; Mask: String): String; var i:Integer; begin Result:=''; for i:=1 to Length(Mask) do begin if Mask[i]= '?' then Result:=Result + TargetString[i] else if Mask[i]= '*' then Result:=Result + Copy(TargetString, i, Length(TargetString) - i + 1) 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; // in future this function will moved to DCStrUtils var i,cnt:integer; ch:char; 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(PChar(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(PChar(S), length(S), i)]; if Pos(ch,T)=0 then inc(i) else break; end; Result:=i; end; function scopy(IndexBegin,IndexEnd:integer;str:string):string; begin if (IndexBegin<=IndexEnd) then Result:=copy(str,IndexBegin,(IndexEnd-IndexBegin+1)) else Result:=''; 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 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(UTF8Decode(s1), UTF8Decode(s2)); end; function StrNewW(const mbString: String): PWideChar; var wsString: WideString; iLength: PtrInt; begin Result:= nil; wsString:= UTF8Decode(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(StringToCheck) >= Length(StringToMatch)) and (CompareChar(StringToCheck[1], StringToMatch[1], Length(StringToMatch)) = 0); end; function StrEnds(const StringToCheck, StringToMatch: String): Boolean; begin Result := (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 := @StringToCheck[1]; 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 - 1 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; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/dcprocessutf8.pas����������������������������������������������0000644�0001750�0000144�00000023762�13457075156�022201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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 {$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)} TProcessUtf8 = class(TProcess) public procedure Execute; override; end; {$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)} {$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); 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 + UTF8Decode(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(UTF8Decode(ApplicationName)); PCommandLine := PWideChar(UTF8Decode(CommandLine)); end else if (CommandLine <> '') then PCommandLine := PWideChar(UTF8Decode(CommandLine)) else if (Executable <> '') then begin Cmd := MaybeQuoteIfNotQuoted(Executable); for I := 0 to Parameters.Count - 1 do Cmd := Cmd + ' ' + MaybeQuoteIfNotQuoted(Parameters[I]); PCommandLine := PWideChar(UTF8Decode(Cmd)); end; if CurrentDirectory <> '' then PDir := PWideChar(UTF8Decode(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-0.9.8/components/doublecmd/dcosutils.pas��������������������������������������������������0000644�0001750�0000144�00000117543�13573127016�021407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains platform dependent functions dealing with operating system. 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 <http://www.gnu.org/licenses/>. } unit DCOSUtils; {$mode objfpc}{$H+} interface uses SysUtils, Classes, DynLibs, DCClassesUtf8, DCBasicTypes, DCConvertEncoding; const fmOpenSync = $10000; fmOpenDirect = $20000; fmOpenNoATime = $40000; type TFileMapRec = record FileHandle : System.THandle; FileSize : Int64; {$IFDEF MSWINDOWS} MappingHandle : System.THandle; {$ENDIF} MappedFile : Pointer; end; TCopyAttributesOption = (caoCopyAttributes, caoCopyTime, caoCopyOwnership, caoCopyPermissions, caoRemoveReadOnlyAttr); TCopyAttributesOptions = set of TCopyAttributesOption; const faInvalidAttributes: TFileAttrs = 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 executable @param(sFileName File name) @returns(@true if file is executable, @false otherwise) } function FileIsExeLib(const sFileName : 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/myfileXXXXXX' are tried. The path '/tmp' must already exist.) } function GetTempName(PathPrefix: 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; // On success returns True. function mbFileGetTime(const FileName: String; var ModificationTime: DCBasicTypes.TFileTime; var CreationTime : DCBasicTypes.TFileTime; var LastAccessTime : DCBasicTypes.TFileTime): Boolean; // On success returns True. function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): 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 mbFileSetAttr(const FileName: String; Attr: TFileAttrs) : LongInt; {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): 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 FileFlush(Handle: System.THandle): 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; { 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 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 SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer; {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) : 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; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, DCDateTimeUtils, DCWindows, DCNtfsLinks, {$ENDIF} {$IF DEFINED(UNIX)} BaseUnix, Unix, dl, DCUnix, {$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; {$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} (*Is Directory*) function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_DIRECTORY <> 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISDIR(iAttr); end; {$ENDIF} (*Is Link*) 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(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 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): TCopyAttributesOptions; {$IFDEF MSWINDOWS} var Attr : TFileAttrs; ModificationTime, CreationTime, LastAccessTime: DCBasicTypes.TFileTime; begin Result := []; if caoCopyAttributes in Options then begin Attr := mbFileGetAttr(sSrc); if Attr <> faInvalidAttributes then begin if (caoRemoveReadOnlyAttr in Options) and ((Attr and faReadOnly) <> 0) then Attr := (Attr and not faReadOnly); if mbFileSetAttr(sDst, Attr) <> 0 then Include(Result, caoCopyAttributes); end else Include(Result, caoCopyAttributes); end; if caoCopyTime in Options then begin if not (mbFileGetTime(sSrc, ModificationTime, CreationTime, LastAccessTime) and mbFileSetTime(sDst, ModificationTime, CreationTime, LastAccessTime)) then Include(Result, caoCopyTime); end; if caoCopyPermissions in Options then begin if not CopyNtfsPermissions(sSrc, sDst) then begin Include(Result, caoCopyPermissions); end; end; end; {$ELSE} // *nix var StatInfo : BaseUnix.Stat; utb : BaseUnix.TUTimBuf; mode : TMode; begin if fpLStat(UTF8ToSys(sSrc), StatInfo) >= 0 then 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); end; end; end else begin if caoCopyTime in Options then begin utb.actime := time_t(StatInfo.st_atime); // last access time utb.modtime := time_t(StatInfo.st_mtime); // last modification time if fputime(UTF8ToSys(sDst), @utb) <> 0 then Include(Result, caoCopyTime); end; if caoCopyOwnership in Options then begin if fpChown(PChar(UTF8ToSys(sDst)), StatInfo.st_uid, StatInfo.st_gid) = -1 then begin Include(Result, caoCopyOwnership); 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); end; end; end; end else Result := Options; end; {$ENDIF} function GetTempName(PathPrefix: String): String; const MaxTries = 100; var TryNumber: Integer = 0; begin if PathPrefix = '' then PathPrefix := GetTempDir; repeat Result := PathPrefix + IntToStr(System.Random(MaxInt)); // or use CreateGUID() Inc(TryNumber); if TryNumber = MaxTries then Exit(''); until not mbFileSystemEntryExists(Result); end; 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); Result:= FileLock(Result, Mode and $FF); 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); Result:= FileLock(Result, Mode and $FF); 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; var ModificationTime: DCBasicTypes.TFileTime; var CreationTime : DCBasicTypes.TFileTime; var LastAccessTime : DCBasicTypes.TFileTime): 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 : BaseUnix.Stat; begin Result := fpLStat(UTF8ToSys(FileName), StatInfo) >= 0; if Result then begin LastAccessTime := StatInfo.st_atime; ModificationTime := StatInfo.st_mtime; CreationTime := StatInfo.st_ctime; end; end; {$ENDIF} function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): 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 t: TUTimBuf; CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime: DCBasicTypes.TFileTime; begin if mbFileGetTime(FileName,CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime) then begin if LastAccessTime<>0 then t.actime := time_t(LastAccessTime) else t.actime := time_t(CurrentLastAccessTime); if ModificationTime<>0 then t.modtime := time_t(ModificationTime) else t.modtime := time_t(CurrentModificationTime); Result := (fputime(UTF8ToSys(FileName), @t) <> -1); 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 mbFileSetAttr(const FileName: String; Attr: TFileAttrs): LongInt; {$IFDEF MSWINDOWS} begin if SetFileAttributesW(PWideChar(UTF16LongName(FileName)), Attr) then Result:= 0 else Result:= GetLastError; end; {$ELSE} begin Result:= fpchmod(UTF8ToSys(FileName), Attr); 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 wOldName, wNewName: UnicodeString; begin wNewName:= UTF16LongName(NewName); wOldName:= UTF16LongName(OldName); 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"; hard links to directories are not supported on Linux // or Windows anyway (on MacOSX 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. {$IFDEF DARWIN} // If it's a directory with multiple hard links then simply unlink the source. if BaseUnix.fpS_ISDIR(NewFileStat.st_mode) and (NewFileStat.st_nlink > 1) then Result := (fpUnLink(UTF8ToSys(OldName)) = 0) else {$ENDIF} 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 FileFlush(Handle: System.THandle): Boolean; inline; {$IFDEF MSWINDOWS} begin Result:= FlushFileBuffers(Handle); end; {$ELSE} begin Result:= (fpfsync(Handle) = 0); 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:= (WideCompareText(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0); end; {$ELSE} begin Result:= (WideCompareStr(UTF8Decode(FileName1), UTF8Decode(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 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(UTF8Decode(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, rfIgnoreCase]); Inc(Index); end; 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 sRememberPath: String; begin 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(ExcludeTrailingPathDelimiter(ExtractFilePath(Name))); Result:= LoadLibraryW(PWideChar(UTF8Decode(Name))); finally SetCurrentDir(sRememberPath); end; end; {$ELSE} begin Result:= TLibHandle(dlopen(PChar(UTF8ToSys(Name)), RTLD_LAZY)); 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 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) : Boolean; {$IFDEF MSWINDOWS} var wsPath, wsLinkName: UnicodeString; begin wsPath:= UTF8Decode(Path); wsLinkName:= UTF16LongName(LinkName); Result:= DCNtfsLinks.CreateSymlink(wsPath, wsLinkName); 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} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/dcntfslinks.pas������������������������������������������������0000644�0001750�0000144�00000037421�13546360050�021711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains functions to work with hard and symbolic links on the NTFS file system. Copyright (C) 2012-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 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; 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; 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: (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): 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; 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 Exit(False); 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 FreeMem(lpInBuffer); CloseHandle(hDevice); finally if not Result then RemoveDirectoryW(PWideChar(aSymlinkFileName)); end; end; function CreateSymLink(const ATargetName, ALinkName: UnicodeString): 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; dwAttributes:= Windows.GetFileAttributesW(PWideChar(AFullPathName)); 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 hDevice: THandle; dwFileAttributes: DWORD; caOutBuffer: array[0..4095] 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; 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-0.9.8/components/doublecmd/dclinuxmagic.inc�����������������������������������������������0000644�0001750�0000144�00000005062�13241643732�022023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ /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; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/doublecmd/dcfileattributes.pas�������������������������������������������0000644�0001750�0000144�00000032704�13434541344�022726� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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_DIRECTORY = $0010; FILE_ATTRIBUTE_ARCHIVE = $0020; 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 faReadOnly) = 0 then Result := Result or S_IWUSR; if (Attr and faDirectory) <> 0 then Result := Result or S_IFDIR or S_IXUGO else Result := Result or S_IFREG; 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-0.9.8/components/doublecmd/dcdatetimeutils.pas��������������������������������������������0000644�0001750�0000144�00000044236�13462617634�022567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Date and time functions. Copyright (C) 2009-2012 Przemysław Nagay (cobines@gmail.com) Copyright (C) 2017-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 DCDateTimeUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes {$IF DEFINED(MSWINDOWS)} , Windows {$ELSEIF DEFINED(UNIX)} , UnixUtil, DCUnix {$ENDIF} ; function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime; function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; {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 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; function DateTimeToUnixFileTime(DateTime: TDateTime) : TUnixFileTime; function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime; function WinFileTimeToUnixTime(WinTime: TWinFileTime) : TUnixFileTime; 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 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 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 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; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} if (Win32MajorVersion > 5) then begin FileTimeToSystemTime(@ft, @lpUniversalTime); SystemTimeToTzSpecificLocalTime(nil, @lpUniversalTime, @lpLocalTime); Result := SystemTimeToDateTime(lpLocalTime); end else {$ENDIF} begin WinFileTimeToLocalFileTime(ft,ft); Result := (ft / 864000000000.0) - 109205.0; end; end; function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime; {$IF DEFINED(MSWINDOWS)} var lpUniversalTime, lpLocalTime: TSystemTime; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} if (Win32MajorVersion > 5) then begin DateTimeToSystemTime(dt, lpLocalTime); TzSpecificLocalTimeToSystemTime(nil, @lpLocalTime, @lpUniversalTime); SystemTimeToFileTime(@lpUniversalTime, @Result); end else {$ENDIF} begin Result := Round((Extended(dt) + 109205.0) * 864000000000.0); WinLocalFileTimeToFileTime(Result, Result); end; end; 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); if (Yr < 1980) or (Yr > 2107) then // outside DOS file date year range Yr := 1980; DecodeTime(DateTime, 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); end; {$IFDEF MSWINDOWS} 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} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; {$IF DEFINED(UNIX)} var ATime: TTimeStruct; begin if (fpLocalTime(@UnixTime, @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; Result := ComposeDateTime(EncodeDate(ATime.tm_year, ATime.tm_mon, ATime.tm_mday), EncodeTime(ATime.tm_hour, ATime.tm_min, ATime.tm_sec, 0)); end; {$ELSE} var WinFileTime: TWinFileTime; begin WinFileTime:= UnixFileTimeToWinTime(UnixTime); Result:= WinFileTimeToDateTime(WinFileTime); end; {$ENDIF} function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime; {$IF DEFINED(UNIX)} var 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; Result:= fpMkTime(@ATime); if Result = DCBasicTypes.TFileTime(-1) then raise EDateOutOfRange.Create(DateTime) end; {$ELSE} var WinFileTime: TWinFileTime; begin WinFileTime:= DateTimeToWinFileTime(DateTime); Result:= WinFileTimeToUnixTime(WinFileTime); end; {$ENDIF} function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; begin Result := DateTimeToDosFileTime(UnixFileTimeToDateTime(UnixTime)); 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 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-0.9.8/components/doublecmd/dcconvertencoding.pas������������������������������������������0000644�0001750�0000144�00000031561�13615104272�023063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit 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; {$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; SystemLanguage, SystemEncoding, SystemLocale: String; {$ENDIF} implementation uses {$IF DEFINED(UNIX)} iconvenc_dyn {$IF DEFINED(DARWIN)} , MacOSAll, CocoaAll {$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 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:= UTF8Encode(UnicodeResult) else Result:= Source; end; function Utf82Oem(const Source: String): RawByteString; var AnsiResult: AnsiString; begin if CeTryEncode(UTF8Decode(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; begin CeOemToSys:= @OEM2Ansi; CeSysToOem:= @Ansi2OEM; CeOemToUtf8:= @Oem2Utf8; CeUtf8ToOem:= @Utf82Oem; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeAnsiToUtf8:= @Sys2UTF8; CeUtf8ToAnsi:= @UTF82Sys; CeSysToUtf8:= @Sys2UTF8; CeUtf8ToSys:= @UTF82Sys; 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); // 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_MESSAGES'); 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; {$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; // 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; 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-0.9.8/components/doublecmd/dcconvertencoding.inc������������������������������������������0000644�0001750�0000144�00000041413�12650700750�023047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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-0.9.8/components/doublecmd/dcclassesutf8.pas����������������������������������������������0000644�0001750�0000144�00000012711�13036642073�022137� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This module contains classes with UTF8 file names support. 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., 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 FHandle: THandle; FFileName: String; public constructor Create(const AFileName: String; Mode: LongWord); destructor Destroy; override; function Flush: Boolean; function Read(var Buffer; Count: LongInt): LongInt; override; property FileName: String read FFileName; end; { TStringListEx } TStringListEx = class(TStringList) 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); virtual; constructor Create(const AFileName: String; AEscapeLineFeeds : Boolean = False); override; procedure UpdateFile; override; public property ReadOnly: Boolean read FReadOnly; end; implementation uses DCOSUtils; { TFileStreamEx } constructor TFileStreamEx.Create(const AFileName: String; Mode: LongWord); begin if (Mode and fmCreate) <> 0 then begin FHandle:= mbFileCreate(AFileName, Mode); if FHandle = feInvalidHandle then raise EFCreateError.CreateFmt(SFCreateError, [AFileName]) else inherited Create(FHandle); end else begin FHandle:= mbFileOpen(AFileName, Mode); if FHandle = feInvalidHandle then raise EFOpenError.CreateFmt(SFOpenError, [AFilename]) else inherited Create(FHandle); 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 FHandle <> feInvalidHandle then FileClose(FHandle); end; function TFileStreamEx.Flush: Boolean; begin Result:= FileFlush(FHandle); end; function TFileStreamEx.Read(var Buffer; Count: LongInt): LongInt; begin Result:= FileRead(FHandle, Buffer, Count); if Result = -1 then raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); end; { TStringListEx } 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 fsFileStream: TFileStreamEx = nil; begin try if mbFileExists(FileName) then begin fsFileStream:= TFileStreamEx.Create(FileName, fmOpenWrite or fmShareDenyWrite); fsFileStream.Position:= 0; fsFileStream.Size:= 0; end else fsFileStream:= TFileStreamEx.Create(FileName, fmCreate); SaveToStream(fsFileStream); finally fsFileStream.Free; end; end; { TIniFileEx } constructor TIniFileEx.Create(const AFileName: String; Mode: Word); var slLines : TStringListEx; begin FReadOnly := ((Mode and $03) = fmOpenRead); inherited Create(EmptyStr); 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; AEscapeLineFeeds: Boolean); 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); 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-0.9.8/components/doublecmd/dcbasictypes.pas�����������������������������������������������0000644�0001750�0000144�00000003052�12262250007�022027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ 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; 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) {$IFDEF MSWINDOWS} TFileTime = TWinFileTime; {$ELSE} // Unix time (UTC). // Unix defines time_t as signed integer, // but we define it as unsigned because sign is not needed. {$IFDEF cpu64} TFileTime = QWord; {$ELSE} TFileTime = DWord; {$ENDIF} {$ENDIF} TUnixFileTime = TFileTime; PFileTime = ^TFileTime; PWinFileTime = ^TWinFileTime; implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/����������������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�016541� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/dcpcrypt2.pas���������������������������������������������������0000644�0001750�0000144�00000052606�13347202504�021173� 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: longword); { 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 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: longword); 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 SSSE3Support: LongBool; assembler; asm pushq %rbx movl $1,%eax cpuid andl $512,%ecx movl %ecx,%eax popq %rbx end; {$ENDIF} end. ��������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/dcpcrypt.pas����������������������������������������������������0000644�0001750�0000144�00000000765�13347144600�021112� 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 dcpcrypt; {$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; implementation end. �����������doublecmd-0.9.8/components/dcpcrypt/dcpcrypt.lpk����������������������������������������������������0000644�0001750�0000144�00000012775�13376252047�021130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <Name Value="dcpcrypt"/> <Author Value="David Barton, Barko & Graeme Geldenhuys"/> <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="DCPcrypt Cryptographic Component Library "/> <License Value="DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. www.cityinthesky.co.uk/cryptography.html "/> <Version Major="3"/> <Files Count="31"> <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/DCPhaval3.inc"/> <Type Value="Include"/> </Item14> <Item15> <Filename Value="Hashes/DCPhaval4.inc"/> <Type Value="Include"/> </Item15> <Item16> <Filename Value="Hashes/DCPhaval5.inc"/> <Type Value="Include"/> </Item16> <Item17> <Filename Value="Hashes/dcpcrc32.pas"/> <UnitName Value="DCPcrc32"/> </Item17> <Item18> <Filename Value="Hashes/DCPtiger.inc"/> <Type Value="Include"/> </Item18> <Item19> <Filename Value="Hashes/dccrc32.pp"/> <UnitName Value="DCcrc32"/> </Item19> <Item20> <Filename Value="Hashes/dcblake2.pp"/> <UnitName Value="DCblake2"/> </Item20> <Item21> <Filename Value="Hashes/dcpblake2.pas"/> <UnitName Value="DCPblake2"/> </Item21> <Item22> <Filename Value="Hashes/dcpsha3.pas"/> <UnitName Value="DCPsha3"/> </Item22> <Item23> <Filename Value="Hashes/Private/hmac.pas"/> <UnitName Value="HMAC"/> </Item23> <Item24> <Filename Value="Hashes/Private/sha3.pas"/> <UnitName Value="SHA3"/> </Item24> <Item25> <Filename Value="Hashes/Private/sha3_512.pas"/> <UnitName Value="SHA3_512"/> </Item25> <Item26> <Filename Value="Random/isaac.pas"/> <UnitName Value="ISAAC"/> </Item26> <Item27> <Filename Value="Hashes/Private/scrypt.pas"/> <UnitName Value="scrypt"/> </Item27> <Item28> <Filename Value="Ciphers/DCPrijndael.inc"/> <Type Value="Include"/> </Item28> <Item29> <Filename Value="Ciphers/dcprijndael.pas"/> <UnitName Value="DCPrijndael"/> </Item29> <Item30> <Filename Value="Hashes/Private/sha1.pas"/> <UnitName Value="SHA1"/> </Item30> <Item31> <Filename Value="Hashes/argon2.pas"/> <UnitName Value="Argon2"/> </Item31> </Files> <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"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ���doublecmd-0.9.8/components/dcpcrypt/dcpconst.pas����������������������������������������������������0000644�0001750�0000144�00000006306�13307175523�021100� 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_blake2bp = 95; DCP_blake2b = 96; DCP_blake2s = 97; DCP_blake2sp = 98; DCP_crc32 = 99; {******************************************************************************} {******************************************************************************} implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/dcpblockciphers.pas���������������������������������������������0000644�0001750�0000144�00000051712�13176674416�022434� 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])^); 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-0.9.8/components/dcpcrypt/dcpbase64.pas���������������������������������������������������0000644�0001750�0000144�00000012630�12014201074�021014� 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-0.9.8/components/dcpcrypt/dcp.pas���������������������������������������������������������0000644�0001750�0000144�00000000772�12014201074�020013� 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-0.9.8/components/dcpcrypt/Readme.txt������������������������������������������������������0000644�0001750�0000144�00000011257�12014201074�020476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= = DCPcrypt Cryptographic Component Library v2 Beta 3 = = Copyright (c) 1999-2003 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, 7, 2005, C++ Builder (3?), 4, 5, (6?) and Kylix 1 (untested), 2 and 3 (untested). Thanks to Manuel C. for the modifications to make DCPcrypt work under Delphi 2005! 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 financial 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 include * Corrected C++ Builder compilation problem. Changes since DCPcrypt v2 Beta 1 include * 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: See the main html documentation in the Docs subdirectory. 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 (c) 1999-2003 David Barton. All trademarks are property of their respective owners. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Random/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017761� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Random/isaac.pas������������������������������������������������0000644�0001750�0000144�00000031612�13144651123�021553� 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-0.9.8/components/dcpcrypt/Hashes/���������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017754� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/sha512_sse.inc�������������������������������������������0000644�0001750�0000144�00000230572�13347221317�022342� 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-0.9.8/components/dcpcrypt/Hashes/sha256_sse.inc�������������������������������������������0000644�0001750�0000144�00000061226�13347144600�022344� 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-0.9.8/components/dcpcrypt/Hashes/dcptiger.pas���������������������������������������������0000644�0001750�0000144�00000030550�12014201074�022256� 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-0.9.8/components/dcpcrypt/Hashes/dcpsha512.pas��������������������������������������������0000644�0001750�0000144�00000112435�13347170447�022175� 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-0.9.8/components/dcpcrypt/Hashes/dcpsha3.pas����������������������������������������������0000644�0001750�0000144�00000012142�12726767147�022033� 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-0.9.8/components/dcpcrypt/Hashes/dcpsha256.pas��������������������������������������������0000644�0001750�0000144�00000072555�13347143212�022200� 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)} {$include sha256_sse.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 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,Sizeof(CurrentHash)); 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-0.9.8/components/dcpcrypt/Hashes/dcpsha1.pas����������������������������������������������0000644�0001750�0000144�00000035501�12014201074�022001� 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-0.9.8/components/dcpcrypt/Hashes/dcpripemd160.pas�����������������������������������������0000644�0001750�0000144�00000073450�12014201074�022661� 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-0.9.8/components/dcpcrypt/Hashes/dcpripemd128.pas�����������������������������������������0000644�0001750�0000144�00000041016�12014201074�022656� 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-0.9.8/components/dcpcrypt/Hashes/dcpmd5.pas�����������������������������������������������0000644�0001750�0000144�00000023636�12570657777�021700� 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-0.9.8/components/dcpcrypt/Hashes/dcpmd4.pas�����������������������������������������������0000644�0001750�0000144�00000021215�12014201074�021626� 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-0.9.8/components/dcpcrypt/Hashes/dcphaval.pas���������������������������������������������0000644�0001750�0000144�00000036566�12014201074�022254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible 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; { Choose how many passes (previous versions of DCPcrypt uses 5 passes) } { ONLY UNCOMMENT ONE! } //{$DEFINE PASS3} //{$DEFINE PASS4} {$DEFINE PASS5} { Choose digest length (previous versions of DCPcrypt uses 256bits) } { ONLY UNCOMMENT ONE! } //{$DEFINE DIGEST128} //{$DEFINE DIGEST160} //{$DEFINE DIGEST192} //{$DEFINE DIGEST224} {$DEFINE DIGEST256} {******************************************************************************} {******************************************************************************} 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)); {$IFDEF PASS3} {$INCLUDE DCPhaval3.inc} {$ELSE} {$IFDEF PASS4} {$INCLUDE DCPhaval4.inc} {$ELSE} {$INCLUDE DCPhaval5.inc} {$ENDIF} {$ENDIF} 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 {$IFDEF DIGEST128} Result:= 128; {$ELSE} {$IFDEF DIGEST160} Result:= 160; {$ELSE} {$IFDEF DIGEST192} Result:= 192; {$ELSE} {$IFDEF DIGEST224} Result:= 224; {$ELSE} Result:= 256; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} end; class function TDCP_haval.GetId: integer; begin Result:= DCP_haval; end; class function TDCP_haval.GetAlgorithm: string; begin Result:= 'Haval ('; {$IFDEF DIGEST128} Result:= Result+'128bit, '; {$ELSE} {$IFDEF DIGEST160} Result:= Result+'160bit, '; {$ELSE} {$IFDEF DIGEST192} Result:= Result+'192bit, '; {$ELSE} {$IFDEF DIGEST224} Result:= Result+'224bit, '; {$ELSE} Result:= Result+'256bit, '; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$IFDEF PASS3} Result:= Result+'3 passes)'; {$ELSE} {$IFDEF PASS4} Result:= Result+'4 passes)'; {$ELSE} Result:= Result+'5 passes)'; {$ENDIF} {$ENDIF} end; class function TDCP_haval.SelfTest: boolean; {$IFDEF PASS3} {$IFDEF DIGEST128} const Test1Out: array[0..15] of byte= ($1B,$DC,$55,$6B,$29,$AD,$02,$EC,$09,$AF,$8C,$66,$47,$7F,$2A,$87); var TestHash: TDCP_haval; TestOut: array[0..15] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr(''); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} {$IFDEF DIGEST160} const Test1Out: array[0..19] of byte= ($5E,$16,$10,$FC,$ED,$1D,$3A,$DB,$0B,$B1, $8E,$92,$AC,$2B,$11,$F0,$BD,$99,$D8,$ED); var TestHash: TDCP_haval; TestOut: array[0..19] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF PASS4} {$IFDEF DIGEST192} const Test1Out: array[0..23] of byte= ($74,$AA,$31,$18,$2F,$F0,$9B,$CC,$E4,$53,$A7,$F7, $1B,$5A,$7C,$5E,$80,$87,$2F,$A9,$0C,$D9,$3A,$E4); var TestHash: TDCP_haval; TestOut: array[0..23] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('HAVAL'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} {$IFDEF DIGEST224} const Test1Out: array[0..27] of byte= ($14,$4C,$B2,$DE,$11,$F0,$5D,$F7,$C3,$56,$28,$2A,$3B,$48, $57,$96,$DA,$65,$3F,$6B,$70,$28,$68,$C7,$DC,$F4,$AE,$76); var TestHash: TDCP_haval; TestOut: array[0..27] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('0123456789'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF DIGEST256} 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; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ENDIF} 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); {$IFNDEF DIGEST256} {$IFNDEF DIGEST224} var temp: dword; {$ENDIF} {$ENDIF} begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 118 then Compress; {$IFDEF PASS3} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF PASS4} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (2128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} PDWord(@HashBuffer[120])^:= LenLo; PDWord(@HashBuffer[124])^:= LenHi; Compress; {$IFDEF DIGEST128} temp:= (CurrentHash[7] and $000000FF) or (CurrentHash[6] and $FF000000) or (CurrentHash[5] and $00FF0000) or (CurrentHash[4] and $0000FF00); Inc(CurrentHash[0],(temp shr 8) or (temp shl 24)); temp:= (CurrentHash[7] and $0000FF00) or (CurrentHash[6] and $000000FF) or (CurrentHash[5] and $FF000000) or (CurrentHash[4] and $00FF0000); Inc(CurrentHash[1],(temp shr 16) or (temp shl 16)); temp:= (CurrentHash[7] and $00FF0000) or (CurrentHash[6] and $0000FF00) or (CurrentHash[5] and $000000FF) or (CurrentHash[4] and $FF000000); Inc(CurrentHash[2],(temp shr 24) or (temp shl 8)); temp:= (CurrentHash[7] and $FF000000) or (CurrentHash[6] and $00FF0000) or (CurrentHash[5] and $0000FF00) or (CurrentHash[4] and $000000FF); Inc(CurrentHash[3],temp); Move(CurrentHash,Digest,128 div 8); {$ELSE} {$IFDEF DIGEST160} temp:= (CurrentHash[7] and $3F) or (CurrentHash[6] and ($7F shl 25)) or (CurrentHash[5] and ($3F shl 19)); Inc(CurrentHash[0],(temp shr 19) or (temp shl 13)); temp:= (CurrentHash[7] and ($3F shl 6)) or (CurrentHash[6] and $3F) or (CurrentHash[5] and ($7F shl 25)); Inc(CurrentHash[1],(temp shr 25) or (temp shl 7)); temp:= (CurrentHash[7] and ($7F shl 12)) or (CurrentHash[6] and ($3F shl 6)) or (CurrentHash[5] and $3F); Inc(CurrentHash[2],temp); temp:= (CurrentHash[7] and ($3F shl 19)) or (CurrentHash[6] and ($7F shl 12)) or (CurrentHash[5] and ($3F shl 6)); Inc(CurrentHash[3],temp shr 6); temp:= (CurrentHash[7] and ($7F shl 25)) or (CurrentHash[6] and ($3F shl 19)) or (CurrentHash[5] and ($7F shl 12)); Inc(CurrentHash[4],temp shr 12); Move(CurrentHash,Digest,160 div 8); {$ELSE} {$IFDEF DIGEST192} temp:= (CurrentHash[7] and $1F) or (CurrentHash[6] and ($3F shl 26)); Inc(CurrentHash[0],(temp shr 26) or (temp shl 6)); temp:= (CurrentHash[7] and ($1F shl 5)) or (CurrentHash[6] and $1F); Inc(CurrentHash[1],temp); temp:= (CurrentHash[7] and ($3F shl 10)) or (CurrentHash[6] and ($1F shl 5)); Inc(CurrentHash[2],temp shr 5); temp:= (CurrentHash[7] and ($1F shl 16)) or (CurrentHash[6] and ($3F shl 10)); Inc(CurrentHash[3],temp shr 10); temp:= (CurrentHash[7] and ($1F shl 21)) or (CurrentHash[6] and ($1F shl 16)); Inc(CurrentHash[4],temp shr 16); temp:= (CurrentHash[7] and ($3F shl 26)) or (CurrentHash[6] and ($1F shl 21)); Inc(CurrentHash[5],temp shr 21); Move(CurrentHash,Digest,192 div 8); {$ELSE} {$IFDEF DIGEST224} Inc(CurrentHash[0],(CurrentHash[7] shr 27) and $1F); Inc(CurrentHash[1],(CurrentHash[7] shr 22) and $1F); Inc(CurrentHash[2],(CurrentHash[7] shr 18) and $F); Inc(CurrentHash[3],(CurrentHash[7] shr 13) and $1F); Inc(CurrentHash[4],(CurrentHash[7] shr 9) and $F); Inc(CurrentHash[5],(CurrentHash[7] shr 4) and $1F); Inc(CurrentHash[6],CurrentHash[7] and $F); Move(CurrentHash,Digest,224 div 8); {$ELSE} Move(CurrentHash,Digest,256 div 8); {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} Burn; end; end. ������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/dcpcrc32.pas���������������������������������������������0000644�0001750�0000144�00000010066�12573022170�022070� 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; crc32_init; 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-0.9.8/components/dcpcrypt/Hashes/dcpblake2.pas��������������������������������������������0000644�0001750�0000144�00000031220�13307236663�022321� 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-0.9.8/components/dcpcrypt/Hashes/dccrc32.pp�����������������������������������������������0000644�0001750�0000144�00000010722�12573022170�021543� 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; procedure crc32_init; 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; /// 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-0.9.8/components/dcpcrypt/Hashes/dcblake2.pp����������������������������������������������0000644�0001750�0000144�00000052213�13307237254�021777� 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-2018 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; {$ELSE} 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; {$IF DEFINED(CPUX86_64)} {$include blake2_sse.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 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; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/blake2_sse.inc�������������������������������������������0000644�0001750�0000144�00000201564�13307214411�022467� 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( 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( 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-0.9.8/components/dcpcrypt/Hashes/blake2_pas.inc�������������������������������������������0000644�0001750�0000144�00000030764�13307241466�022474� 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( 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( 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-0.9.8/components/dcpcrypt/Hashes/argon2.pas�����������������������������������������������0000644�0001750�0000144�00000104503�13351726654�021672� 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-0.9.8/components/dcpcrypt/Hashes/Private/�������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�021366� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/Private/std.inc������������������������������������������0000644�0001750�0000144�00000040100�12726767147�022673� 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-0.9.8/components/dcpcrypt/Hashes/Private/sha3_512.pas�������������������������������������0000644�0001750�0000144�00000033223�13215013513�023317� 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-0.9.8/components/dcpcrypt/Hashes/Private/sha3.pas�����������������������������������������0000644�0001750�0000144�00000052076�12726776751�022771� 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-0.9.8/components/dcpcrypt/Hashes/Private/sha1.pas�����������������������������������������0000644�0001750�0000144�00000077342�13215305022�022737� 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-0.9.8/components/dcpcrypt/Hashes/Private/scrypt.pas���������������������������������������0000644�0001750�0000144�00000042107�13146007401�023421� 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-0.9.8/components/dcpcrypt/Hashes/Private/memh.pas�����������������������������������������0000644�0001750�0000144�00000013675�13146006627�023044� 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-0.9.8/components/dcpcrypt/Hashes/Private/kperm_mx.inc�������������������������������������0000644�0001750�0000144�00000023050�12726767147�023730� 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-0.9.8/components/dcpcrypt/Hashes/Private/kperm_64.inc�������������������������������������0000644�0001750�0000144�00000013004�12726776751�023534� 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-0.9.8/components/dcpcrypt/Hashes/Private/kperm_32.inc�������������������������������������0000644�0001750�0000144�00000052361�12726767147�023537� 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-0.9.8/components/dcpcrypt/Hashes/Private/kdf.pas������������������������������������������0000644�0001750�0000144�00000037136�13146006627�022660� 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-0.9.8/components/dcpcrypt/Hashes/Private/hmac.pas�����������������������������������������0000644�0001750�0000144�00000015234�13141314667�023020� 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-0.9.8/components/dcpcrypt/Hashes/Private/hash.pas�����������������������������������������0000644�0001750�0000144�00000037640�13215013513�023024� 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-0.9.8/components/dcpcrypt/Hashes/Private/doublecmd.diff�����������������������������������0000644�0001750�0000144�00000006435�13215305022�024161� 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-0.9.8/components/dcpcrypt/Hashes/Private/btypes.pas���������������������������������������0000644�0001750�0000144�00000013445�12726767147�023435� 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-0.9.8/components/dcpcrypt/Hashes/Private/README.txt���������������������������������������0000644�0001750�0000144�00000000243�12726776751�023111� 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-0.9.8/components/dcpcrypt/Hashes/Private/COPYING.txt��������������������������������������0000644�0001750�0000144�00000004100�12726767147�023257� 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-0.9.8/components/dcpcrypt/Hashes/DCPtiger.inc���������������������������������������������0000644�0001750�0000144�00000055221�12014201074�022106� 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-0.9.8/components/dcpcrypt/Hashes/DCPhaval5.inc��������������������������������������������0000644�0001750�0000144�00000070330�12014201074�022152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������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; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/DCPhaval4.inc��������������������������������������������0000644�0001750�0000144�00000055060�12014201074�022154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24] + $7A325381; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 4] + $28958677; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 0] + $3B8F4898; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[14] + $6B4BB9AF; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $C4BFE81B; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 7] + $66282193; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $61D809CC; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23] + $FB21A991; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[26] + $487CAC60; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $5DEC8032; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[30] + $EF845D5D; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $E98575B1; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DC262302; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $EB651B88; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[19] + $23893E81; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 3] + $D396ACC5; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[22] + $0F6D6FF3; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[11] + $83F44239; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[31] + $2E0B4482; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[21] + $A4842004; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 8] + $69C8F04A; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[27] + $9E1F9B5E; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[12] + $21C66842; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 9] + $F6E96C9A; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 1] + $670C9C61; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[29] + $ABD388F0; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 5] + $6A51A0D2; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[15] + $D8542F68; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $960FA728; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $AB5133A3; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $6EEF0B6C; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[13] + $137A3BE4; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Hashes/DCPhaval3.inc��������������������������������������������0000644�0001750�0000144�00000037313�12014201074�022154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Docs/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13615241420�017431� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.9.8/components/dcpcrypt/Docs/osi-certified-120x100.png����������������������������������0000644�0001750�0000144�00000015517�11652036011�023604� 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-0.9.8/components/dcpcrypt/Docs/MIT_license.txt��������������������������������������������0000644�0001750�0000144�00000002106�12014201074�022315� 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-0.9.8/components/dcpcrypt/Docs/Index.html�������������������������������������������������0000644�0001750�0000144�00000025324�11652036011�021371� 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-0.9.8/components/dcpcrypt/Docs/Hashes.html0000644000175000001440000001443211652036011021533 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-0.9.8/components/dcpcrypt/Docs/DCPhashes/0000755000175000001440000000000013615241420021233 5ustar alexxusersdoublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_TIGER.bmp0000644000175000001440000000062611652036011023420 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA512.bmp0000644000175000001440000000062611652036011023411 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA384.bmp0000644000175000001440000000062611652036011023420 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA256.bmp0000644000175000001440000000062611652036011023416 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA1.bmp0000644000175000001440000000062611652036011023242 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_RIPEMD160.bmp0000644000175000001440000000062611652036011023755 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_RIPEMD128.bmp0000644000175000001440000000062611652036011023761 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_MD5.bmp0000644000175000001440000000062611652036011023133 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_MD4.bmp0000644000175000001440000000062611652036011023132 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPhashes/TDCP_HAVAL.bmp0000644000175000001440000000062611652036011023401 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/0000755000175000001440000000000013615241420021415 5ustar alexxusersdoublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_TWOFISH.bmp0000644000175000001440000000062611652036011024053 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_THINICE.bmp0000644000175000001440000000062611652036011024013 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_TEA.bmp0000644000175000001440000000062611652036011023341 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_SERPENT.bmp0000644000175000001440000000062611652036011024050 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_RIJNDAEL.bmp0000644000175000001440000000062611652036011024120 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_RC6.bmp0000644000175000001440000000062611652036011023322 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_RC5.bmp0000644000175000001440000000062611652036011023321 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_RC4.bmp0000644000175000001440000000062611652036011023320 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_RC2.bmp0000644000175000001440000000062611652036011023316 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_MISTY1.bmp0000644000175000001440000000062611652036011023716 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_MARS.bmp0000644000175000001440000000062611652036011023472 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_IDEA.bmp0000644000175000001440000000062611652036011023432 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_ICE2.bmp0000644000175000001440000000062611652036011023412 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_ICE.bmp0000644000175000001440000000062611652036011023330 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_GOST.bmp0000644000175000001440000000062611652036011023504 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_DES.bmp0000644000175000001440000000062611652036011023343 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_CAST256.bmp0000644000175000001440000000062611652036011023717 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_CAST128.bmp0000644000175000001440000000062611652036011023715 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_BLOWFISH.bmp0000644000175000001440000000062611652036011024145 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/DCPciphers/TDCP_3DES.bmp0000644000175000001440000000062611652036011023426 0ustar alexxusersBMv( doublecmd-0.9.8/components/dcpcrypt/Docs/Ciphers.html0000644000175000001440000004207111652036011021715 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-0.9.8/components/dcpcrypt/Docs/BlockCiphers.html0000644000175000001440000001604711652036011022674 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-0.9.8/components/dcpcrypt/DCPhashes.lrs0000644000175000001440000003660211652036011021071 0ustar alexxusersLazarusResources.Add('TDCP_HAVAL','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#254#254#254#254#255#239#254#254#254#238#255#255#236#236#236#236#238#206#236 +#236#236#204#239#255#236#236#236#236#236#236#236#236#236#238#255#255#236#236 +#236#236#236#236#236#236#236#239#255#255#236#204#236#204#236#236#236#204#236 +#239#255#255#236#236#236#236#236#236#236#236#236#239#255#255#236#236#236#236 +#236#236#236#236#236#239#255#255#236#236#238#206#236#236#238#206#236#239#255 +#255#254#254#255#239#254#254#255#239#254#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#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#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 ]); LazarusResources.Add('TDCP_MD4','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#254#255#254#255#238#239#255#255#239#255#255#255#236#239#236#238#204#206#255 +#254#206#255#255#255#236#239#236#238#206#236#239#238#206#255#255#255#236#238 +#236#238#206#236#238#204#204#239#255#255#236#236#236#238#206#236#238#206#206 +#255#255#255#236#236#236#238#206#236#238#206#239#255#255#255#236#206#204#238 +#206#236#238#206#255#255#255#255#236#239#236#238#204#206#254#206#255#255#255 +#255#254#255#254#255#238#239#255#239#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 +#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#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 ]); LazarusResources.Add('TDCP_MD5','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#254#255#254#255#238#239#255#238#239#255#255#255#236#239#236#238#204#206#254 +#204#206#255#255#255#236#239#236#238#206#236#239#238#236#239#255#255#236#238 +#236#238#206#236#239#254#236#239#255#255#236#236#236#238#206#236#239#236#204 +#239#255#255#236#236#236#238#206#236#238#206#238#255#255#255#236#206#204#238 +#206#236#238#206#238#255#255#255#236#239#236#238#204#206#254#204#204#239#255 +#255#254#255#254#255#238#239#255#238#238#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#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#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 ]); LazarusResources.Add('TDCP_RIPEMD128','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#254#238#239#255#238#255#255#255#255#254#204#206#236#204#206#254#204#239#255 +#255#255#255#236#239#254#206#239#236#238#206#255#255#255#255#236#239#255#236 +#239#236#238#206#255#255#255#255#236#239#254#254#206#254#204#239#255#255#255 +#255#236#239#236#238#206#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#254#255#239#254#255#254#255#238#239 +#255#255#255#236#238#206#236#239#236#238#204#206#255#255#255#236#238#206#236 +#239#236#238#206#236#239#255#255#236#238#206#236#238#236#238#206#236#239#255 +#255#236#204#239#236#236#236#238#206#236#239#255#255#236#238#206#236#236#236 +#238#206#236#239#255#255#236#238#206#236#206#204#238#206#236#239#255#255#236 +#204#239#236#239#236#238#204#206#255#255#255#254#238#255#254#255#254#255#238 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RIPEMD160','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#255#238#255#255#238#255#255#255#255#254#204#206#254#204#239#254#204#239#255 +#255#255#255#236#239#236#238#206#236#238#206#255#255#255#255#236#239#236#238 +#206#236#238#206#255#255#255#255#236#239#236#204#239#236#238#206#255#255#255 +#255#236#239#236#238#239#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#254#255#239#254#255#254#255#238#239 +#255#255#255#236#238#206#236#239#236#238#204#206#255#255#255#236#238#206#236 +#239#236#238#206#236#239#255#255#236#238#206#236#238#236#238#206#236#239#255 +#255#236#204#239#236#236#236#238#206#236#239#255#255#236#238#206#236#236#236 +#238#206#236#239#255#255#236#238#206#236#206#204#238#206#236#239#255#255#236 +#204#239#236#239#236#238#204#206#255#255#255#254#238#255#254#255#254#255#238 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA1','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#254 +#238#255#254#255#239#254#255#239#254#238#255#236#204#239#236#238#206#236#238 +#206#236#204#239#254#238#206#236#238#206#236#238#206#254#206#255#255#238#206 +#236#238#206#236#238#206#254#206#255#254#204#239#236#204#206#236#204#206#254 +#206#255#236#238#255#236#238#206#236#238#206#254#206#255#236#238#239#236#238 +#206#236#238#206#236#206#255#254#204#206#236#238#206#254#204#239#254#206#255 +#255#238#239#254#255#239#255#238#255#255#239#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#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#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 ]); LazarusResources.Add('TDCP_SHA256','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#238 +#255#238#239#255#254#239#255#255#255#254#204#204#238#204#206#255#236#206#255 +#255#255#255#236#238#255#238#236#238#206#236#239#255#255#255#254#206#255#254 +#236#238#206#236#239#255#255#255#239#236#239#236#206#254#204#206#255#255#255 +#254#206#236#238#206#239#254#206#239#255#255#255#254#206#236#238#206#238#254 +#206#238#255#255#255#255#236#206#254#204#204#239#236#204#239#255#255#255#254 +#239#255#238#238#255#254#238#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA384','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#255#254#239#255#255#239#255#255#255#254#204#206#255#236#206#255#238#206#255 +#255#255#255#238#236#238#206#236#238#204#204#239#255#255#255#254#236#238#206 +#236#238#206#206#255#255#255#255#236#206#255#236#206#254#206#206#255#255#255 +#255#254#236#238#206#236#238#206#239#255#255#255#255#238#236#238#206#236#239 +#236#239#255#255#255#254#204#206#255#236#206#255#236#239#255#255#255#255#238 +#239#255#254#239#255#254#255#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA512','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#255#254#238#255#238#238#255#255#255#254#204#206#255#236#204#238#204#204#239 +#255#255#255#238#236#239#254#206#255#236#238#255#255#255#255#254#236#239#254 +#206#255#254#206#255#255#255#255#236#206#255#254#206#255#239#236#239#255#255 +#254#206#239#255#254#206#254#206#236#239#255#255#254#206#238#255#236#206#254 +#206#236#239#255#255#254#204#204#239#254#206#255#236#206#255#255#255#255#238 +#238#255#255#239#255#254#239#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TIGER','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#254#255#238#239#238#239#238#239#238#239#255#255#236#238#204#206#204#206#204 +#206#206#206#255#255#236#239#236#238#206#206#206#238#206#206#255#255#236#239 +#236#238#206#206#206#238#206#206#255#255#236#239#236#238#204#238#204#206#204 +#239#255#255#236#239#236#238#206#238#206#238#206#206#255#255#236#239#236#238 +#206#206#206#238#206#206#255#254#204#206#204#206#204#206#204#206#204#239#255 +#255#238#239#238#239#238#239#238#239#238#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#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#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 ]); doublecmd-0.9.8/components/dcpcrypt/DCPciphers.lrs0000644000175000001440000007536611652036011021265 0ustar alexxusersLazarusResources.Add('TDCP_3DES','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#255#238#238#255#254#239#255#255#255#254#204#206#254#204#204#239#236#206#255 +#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206#236#238#206 +#255#255#238#236#239#255#255#254#206#236#238#204#239#255#236#206#255#255#255 +#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238#206#238#254 +#206#236#239#255#255#254#204#206#254#204#204#239#236#206#255#255#255#255#238 +#239#255#238#238#255#254#239#255#255#255#255#255#255#255#254#239#255#255#255 +#255#255#255#255#255#255#255#236#206#255#255#255#255#255#255#255#255#255#254 +#206#236#239#255#255#255#255#255#255#255#255#255#238#236#239#255#255#255#255 +#255#255#255#255#255#236#206#255#255#255#255#255#255#255#255#255#255#238#236 +#239#255#255#255#255#255#255#255#255#254#206#236#239#255#255#255#255#255#255 +#255#255#255#236#206#255#255#255#255#255#255#255#255#255#255#254#239#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#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_BLOWFISH','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#254#255#255#254 +#238#255#238#239#255#239#254#255#236#239#255#236#204#238#204#206#254#206#236 +#239#236#239#255#254#206#255#238#236#238#206#236#239#236#238#255#254#206#255 +#254#236#238#206#236#239#236#204#239#254#206#255#236#206#254#204#204#239#236 +#238#255#254#206#254#206#239#254#206#236#239#236#238#239#254#206#254#206#238 +#254#206#236#239#236#204#206#236#204#239#236#204#238#206#236#239#254#238#239 +#254#238#255#254#238#255#239#254#255#254#238#255#254#238#239#254#239#255#254 +#254#255#236#204#239#236#204#206#236#206#255#236#236#239#236#238#206#236#238 +#238#206#236#238#206#206#206#236#238#206#236#239#254#206#236#238#206#206#206 +#236#204#239#236#239#254#206#236#238#206#206#206#236#238#206#236#239#254#206 +#236#238#206#238#206#236#238#206#236#239#254#206#236#238#206#254#206#236#204 +#239#236#239#255#236#206#254#206#254#206#254#238#255#254#255#255#254#239#255 +#239#255#239#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#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_CAST128','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#254#238#239#255#238#255#255#255#255#254#204#206#236#204#206#254#204#239#255 +#255#255#255#236#239#236#238#239#236#238#206#255#255#255#255#236#239#254#206 +#255#236#238#206#255#255#255#255#236#239#255#236#239#254#204#239#255#255#255 +#255#236#239#254#254#206#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#238#239#254#255#239#254#238#255#255 +#239#255#254#204#206#236#238#206#236#204#239#254#206#255#236#238#239#236#238 +#206#254#238#206#254#206#255#236#239#255#236#238#206#255#238#206#254#206#255 +#236#239#255#236#204#206#254#204#239#254#206#255#236#239#255#236#238#206#236 +#238#255#254#206#255#236#238#239#236#238#206#236#238#239#254#206#255#254#204 +#206#254#204#239#254#204#206#236#204#239#255#238#239#255#238#255#255#238#239 +#254#238#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#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_CAST256','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#238 +#255#238#239#255#254#239#255#255#255#254#204#204#238#204#206#255#236#206#255 +#255#255#255#236#238#255#238#236#238#206#236#239#255#255#255#255#206#255#238 +#236#238#206#236#239#255#255#255#255#236#238#204#206#254#204#206#255#255#255 +#255#239#236#238#206#239#254#206#238#255#255#255#254#206#236#238#206#238#254 +#206#236#239#255#255#255#236#206#254#204#204#255#236#206#255#255#255#255#254 +#239#255#238#238#255#254#239#255#255#255#238#239#254#255#239#254#238#255#255 +#239#255#254#204#206#236#238#206#236#204#239#254#206#255#236#238#239#236#238 +#206#254#238#206#254#206#255#236#239#255#236#238#206#255#238#206#254#206#255 +#236#239#255#236#204#206#254#204#239#254#206#255#236#239#255#236#238#206#236 +#238#255#254#206#255#236#238#239#236#238#206#236#238#239#254#206#255#254#204 +#206#254#204#239#254#204#206#236#204#239#255#238#239#255#238#255#255#238#239 +#254#238#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#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_DES','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#238#238#255#254#239#255#255#255#254#204#206#254#204#204#239 +#236#206#255#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206 +#236#238#206#255#255#238#236#239#255#255#254#206#236#238#204#239#255#236#206 +#255#255#255#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#254#204#204#239#236#206#255#255 +#255#255#238#239#255#238#238#255#254#239#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#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#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 ]); LazarusResources.Add('TDCP_GOST','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#254#239#255#254#239#255#238#239#255#254#255#255#236#206#255#236#206#254#204 +#206#255#236#239#254#206#236#238#206#236#239#238#236#239#236#239#254#206#204 +#238#206#236#239#254#236#239#236#239#254#206#238#254#206#236#239#236#206#255 +#236#239#254#206#254#254#206#236#238#206#239#255#236#239#254#206#236#238#206 +#236#238#206#238#255#236#239#255#236#206#255#236#206#255#236#204#238#204#206 +#255#254#239#255#254#239#255#254#238#255#238#239#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#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#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 ]); LazarusResources.Add('TDCP_ICE2','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#255#255 +#254#238#239#255#255#255#255#255#255#255#255#255#236#204#206#255#255#255#255 +#255#255#255#255#255#236#238#239#255#255#255#255#255#255#255#255#255#254#206 +#255#255#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255 +#255#255#255#254#254#206#255#255#255#255#255#255#255#255#255#236#238#206#255 +#255#255#255#255#255#255#255#255#254#204#239#255#255#255#255#255#255#255#255 +#255#255#238#255#255#255#255#255#255#255#255#238#239#255#238#239#254#238#239 +#255#255#255#254#204#206#254#204#206#236#204#206#255#255#255#255#236#239#236 +#238#239#236#238#239#255#255#255#255#236#239#236#239#255#236#238#255#255#255 +#255#255#236#239#236#239#255#236#204#239#255#255#255#255#236#239#236#239#255 +#236#238#255#255#255#255#255#236#239#236#238#239#236#238#239#255#255#255#254 +#204#206#254#204#206#236#204#206#255#255#255#255#238#239#255#238#239#254#238 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_ICE','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#238#239#254#238#239#255#255#255#254#204#206#254#204#206#236 +#204#206#255#255#255#255#236#239#236#238#239#236#238#239#255#255#255#255#236 +#239#236#239#255#236#238#255#255#255#255#255#236#239#236#239#255#236#204#239 +#255#255#255#255#236#239#236#239#255#236#238#255#255#255#255#255#236#239#236 +#238#239#236#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255#255 +#255#255#238#239#255#238#239#254#238#239#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#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#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 ]); LazarusResources.Add('TDCP_IDEA','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#238#239#254#238#255#254#238#239#254#255#239#254#204#206#236#204#239#236#204 +#206#236#238#206#255#236#239#236#238#206#236#238#239#236#238#206#255#236#239 +#236#238#206#236#238#255#236#238#206#255#236#239#236#238#206#236#204#239#236 +#204#206#255#236#239#236#238#206#236#238#255#236#238#206#255#236#239#236#238 +#206#236#238#239#236#238#206#254#204#206#236#204#239#236#204#206#254#204#239 +#255#238#239#254#238#255#254#238#239#255#238#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#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#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 ]); LazarusResources.Add('TDCP_MARS','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#239#255#239#239#254#254#255#239#238#239#255#254#206#254#206#206#236#236#238 +#206#204#206#255#254#206#238#206#206#236#236#238#206#238#236#239#254#206#206 +#206#206#236#236#238#206#254#236#239#254#206#206#206#204#204#236#204#239#236 +#206#255#254#204#236#206#206#236#236#238#206#206#239#255#254#204#236#206#206 +#236#236#238#206#206#238#255#254#206#254#206#236#206#236#204#239#236#204#239 +#255#239#255#239#254#239#254#238#255#254#238#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#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#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 ]); LazarusResources.Add('TDCP_MISTY1','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#255#255#255#255#255#255#255#255#254#204#206#255#255#255#255 +#255#255#255#255#255#255#236#239#255#255#255#255#255#255#255#255#255#255#236 +#239#255#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255 +#255#255#255#255#236#239#255#255#255#255#255#255#255#255#255#254#204#239#255 +#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255#255#255 +#255#255#254#255#255#255#255#255#255#254#255#254#254#238#254#238#255#254#255 +#238#255#236#239#236#236#204#236#204#239#236#238#204#239#236#238#236#238#206 +#254#238#206#236#239#238#206#236#236#236#238#206#255#238#206#236#239#254#206 +#236#236#236#238#206#254#204#239#236#239#236#206#236#206#204#238#206#236#238 +#255#236#238#206#206#236#206#204#238#206#236#238#239#236#238#206#206#236#239 +#236#236#204#238#204#206#204#206#206#206#254#255#254#254#238#255#238#239#238 +#239#239#239#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#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RC2','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#238#238#255#255#255#254#206#236#239#236#204#238 +#204#204#239#255#255#254#206#236#238#206#238#254#206#238#255#255#255#254#206 +#236#238#206#255#255#236#239#255#255#255#254#204#206#254#206#255#255#254#206 +#255#255#255#254#206#236#238#206#255#255#239#236#239#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#255#236#204#239#236#206#255#255 +#255#255#238#239#255#254#238#255#254#239#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#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#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 ]); LazarusResources.Add('TDCP_RC4','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#255#239#255#255#255#254#206#236#239#236#204#239 +#254#206#255#255#255#254#206#236#238#206#238#255#238#206#255#255#255#254#206 +#236#238#206#255#254#204#204#239#255#255#254#204#206#254#206#255#254#206#206 +#255#255#255#254#206#236#238#206#255#254#206#239#255#255#255#254#206#236#238 +#206#238#254#206#255#255#255#255#254#204#206#255#236#204#238#206#255#255#255 +#255#255#238#239#255#254#238#255#239#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 +#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#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 ]); LazarusResources.Add('TDCP_RC5','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#238#239#255#255#255#254#206#236#239#236#204#238 +#204#206#255#255#255#254#206#236#238#206#238#255#238#236#239#255#255#254#206 +#236#238#206#255#255#238#236#239#255#255#254#204#206#254#206#255#254#204#206 +#255#255#255#254#206#236#238#206#255#254#206#239#255#255#255#254#206#236#238 +#206#238#254#206#238#255#255#255#254#204#206#255#236#204#238#204#204#239#255 +#255#255#238#239#255#254#238#255#238#238#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#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#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 ]); LazarusResources.Add('TDCP_RC6','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#254#239#255#255#255#254#206#236#239#236#204#239 +#236#206#255#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206 +#236#238#206#255#254#206#236#239#255#255#254#204#206#254#206#255#254#204#206 +#255#255#255#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#255#236#204#239#236#206#255#255 +#255#255#238#239#255#254#238#255#254#239#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#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#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 ]); LazarusResources.Add('TDCP_RIJNDAEL','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#254#238#255#254 +#255#239#254#238#239#238#238#255#236#204#239#236#238#206#236#204#206#204#204 +#239#236#238#206#236#238#206#236#238#238#206#238#255#236#238#206#236#238#206 +#236#238#254#206#255#255#236#238#206#236#204#206#236#204#238#206#255#255#236 +#238#206#236#238#206#236#238#254#206#255#255#236#238#206#236#238#206#236#238 +#238#206#255#255#236#204#239#254#204#239#236#204#206#206#255#255#254#238#255 +#255#238#255#254#238#239#239#255#255#254#255#239#254#238#255#254#255#255#239 +#254#255#236#238#206#236#204#239#236#239#254#206#236#239#236#238#206#254#206 +#254#206#206#254#206#236#239#236#238#206#254#206#254#206#206#254#206#204#239 +#236#204#239#254#206#255#238#206#254#206#204#239#236#238#206#254#206#255#254 +#206#254#204#236#239#236#238#206#254#206#255#238#206#254#204#236#239#236#204 +#239#236#204#238#204#204#238#206#236#239#254#238#255#254#238#255#238#238#255 +#239#254#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#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SERPENT','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#239#255#254 +#238#239#239#254#255#254#255#255#254#206#255#236#204#206#206#236#239#236#239 +#255#254#206#255#236#238#238#206#204#239#236#239#255#254#206#239#236#238#254 +#206#204#239#236#239#255#254#204#206#236#204#238#204#204#239#236#239#255#254 +#206#236#236#238#254#204#236#239#236#239#255#254#206#236#236#238#238#204#236 +#238#236#238#255#254#204#206#236#204#206#206#236#236#204#204#239#255#238#239 +#254#238#239#239#254#254#238#238#255#255#255#238#239#255#238#238#255#239#254 +#255#255#255#254#204#206#254#204#204#238#206#236#239#255#255#255#238#236#238 +#206#238#254#206#236#239#255#255#255#254#236#238#206#239#254#206#236#239#255 +#255#255#236#206#254#204#206#254#204#206#255#255#255#254#206#239#254#206#239 +#254#206#236#239#255#255#254#206#238#254#206#238#254#206#236#239#255#255#255 +#236#204#238#204#204#238#204#206#255#255#255#255#254#238#255#238#238#255#254 +#239#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#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TEA','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#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#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#255#255#255#255#255#255#255#255#255#255 +#255#254#255#255#238#238#255#239#254#255#255#255#255#236#239#254#204#204#238 +#206#236#239#255#255#255#236#239#254#206#238#254#206#236#239#255#255#255#236 +#239#254#206#255#254#206#236#239#255#255#255#236#239#254#204#239#254#204#204 +#239#255#255#255#236#239#254#206#255#254#206#236#239#255#255#254#236#238#254 +#206#238#254#206#236#239#255#255#236#204#204#238#204#204#239#236#206#255#255 +#255#254#238#238#255#238#238#255#254#239#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#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#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 ]); LazarusResources.Add('TDCP_THINICE','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#255#255#238#239 +#255#238#239#254#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255 +#255#255#255#236#239#236#238#239#236#238#239#255#255#255#255#236#239#236#239 +#255#236#238#255#255#255#255#255#236#239#236#239#255#236#204#239#255#255#255 +#255#236#239#236#239#255#236#238#255#255#255#255#255#236#239#236#238#239#236 +#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255#255#255#255#238 +#239#255#238#239#254#238#239#255#255#255#254#255#254#255#239#254#238#255#239 +#254#255#255#236#239#236#238#206#236#204#238#206#236#239#255#236#239#236#238 +#206#254#206#254#206#236#239#255#236#239#236#238#206#254#206#254#206#204#239 +#255#236#239#236#204#206#254#206#254#206#204#239#255#236#239#236#238#206#254 +#206#254#204#236#239#255#236#239#236#238#206#254#206#254#204#236#239#254#204 +#206#236#238#206#236#204#238#206#236#239#255#238#239#254#255#239#254#238#255 +#239#254#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#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TWOFISH','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#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#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#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#255#255#255#255#255#255#255#254#255#255#254 +#238#255#238#239#255#239#254#255#236#239#255#236#204#238#204#206#254#206#236 +#239#236#239#255#254#206#255#238#236#238#206#236#239#236#238#255#254#206#255 +#254#236#238#206#236#239#236#204#239#254#206#255#236#206#254#204#204#239#236 +#238#255#254#206#254#206#239#254#206#236#239#236#238#239#254#206#254#206#238 +#254#206#236#239#236#204#206#236#204#239#236#204#238#206#236#239#254#238#239 +#254#238#255#254#238#255#239#254#255#255#255#254#255#255#254#254#255#255#238 +#255#255#255#255#236#239#255#236#236#239#254#204#239#255#255#255#236#239#254 +#206#206#206#236#238#206#255#255#255#236#239#254#206#206#206#236#238#206#255 +#255#255#236#239#254#206#206#206#236#238#206#255#255#255#236#239#254#206#238 +#206#236#238#206#255#255#254#236#238#254#206#254#206#236#238#206#255#255#236 +#204#204#238#206#254#206#254#204#239#255#255#254#238#238#255#239#255#239#255 +#238#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#255#255#255#255#255#255#255#255 +#255 ]); doublecmd-0.9.8/components/dcpcrypt/Ciphers/0000755000175000001440000000000013615241420020136 5ustar alexxusersdoublecmd-0.9.8/components/dcpcrypt/Ciphers/dcprijndael.pas0000644000175000001440000003061613157521147023140 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-0.9.8/components/dcpcrypt/Ciphers/DCPrijndael.inc0000644000175000001440000017736713157521147023005 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-0.9.8/components/dcpcrypt/CHANGELOG.txt0000644000175000001440000000141512014201074020563 0ustar alexxusers Change in v2.0.4.1 by Graeme Geldenhuys (2010) * Version number bumped to v2.0.4.1 * More fixes for 64-bit support * Removed a lot of compiler warnings - tested with FPC 2.4.1 Change in v2.0.4 by Graeme Geldenhuys (2009) * Version number bumped to v2.0.4 * Split the Lazarus package into two separate packages - one is runtime only package and GUI toolkit independent. - one is Lazarus design-time only package which installs components in component palette. * Updated code to be compilable with FPC 2.4.0-rc1 * Updated code to be compilable with 64-bit FPC 2.4.0-rc1. - Tested under 32-bit & 64-bit Linux on x86 systems. Changes since DCPCrypt v2 Beta 3: * Ported DCPCrypt to Lazarus by Barko in 2006 -=-=-=-=-=-=-=-=-=-=-=-=-=-=- doublecmd-0.9.8/components/chsdet/0000755000175000001440000000000013615241420016163 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/src/0000755000175000001440000000000013615241420016752 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/src/stat/0000755000175000001440000000000013615241420017725 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/src/stat/GB2312Statistics.inc0000644000175000001440000001207212014201074023266 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-0.9.8/components/chsdet/src/stat/EUCTWStatistics.inc0000644000175000001440000001207112014201074023354 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-0.9.8/components/chsdet/src/stat/EUCKRStatistics.inc0000644000175000001440000001207112014201074023336 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-0.9.8/components/chsdet/src/stat/EUCJPStatistics.inc0000644000175000001440000001207112014201074023333 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-0.9.8/components/chsdet/src/stat/Big5Statistics.inc0000644000175000001440000001207012014201074023252 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-0.9.8/components/chsdet/src/sbseq/0000755000175000001440000000000013615241420020067 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/src/sbseq/LangHebrewModel.pas0000644000175000001440000002670712014201074023600 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-0.9.8/components/chsdet/src/sbseq/LangGreekModel.pas0000644000175000001440000003161312014201074023411 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-0.9.8/components/chsdet/src/sbseq/LangCyrillicModel.pas0000644000175000001440000004345412014201074024134 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-0.9.8/components/chsdet/src/sbseq/LangBulgarianModel.pas0000644000175000001440000003201312014201074024253 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-0.9.8/components/chsdet/src/nsUniversalDetector.pas0000644000175000001440000002756512014201074023472 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.5 2008/06/22 09:04:20 ya_nick Exp $ unit nsUniversalDetector; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUM_OF_CHARSET_PROBERS = 4; type nsInputState = ( ePureAscii = 0, eEscAscii = 1, eHighbyte = 2 ) ; TnsUniversalDetector = class (TObject) protected mInputState: nsInputState; mDone: Boolean; mStart: Boolean; mGotData: Boolean; mLastChar: Char; mDetectedCharset: eInternalCharsetID; mCharSetProbers: array [0..Pred(NUM_OF_CHARSET_PROBERS)] of TCustomDetector; mEscCharSetProber: TCustomDetector; mDetectedBOM: eBOMKind; procedure Report(aCharsetID: eInternalCharsetID); function CheckBOM(aBuf: pChar; 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: PChar; aLen: integer): nsResult; procedure DataEnd; function GetDetectedCharsetInfo: nsCore.rCharsetInfo; function GetKnownCharset(out KnownCharsets: pChar): 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: 6; About: 'Charset Detector Library. Copyright (C) 2006 - 2008, 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: PRInt32; 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 eHighbyte: 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; eEscAscii: 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: PChar; aLen: integer): nsResult; var i: integer; st: eProbingState; // startAt: integer; //newBuf: pChar; //BufPtr: pChar; //b: integer; //tmpBOM: eBOMKind; begin // startAt := 0; 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 Unicode*) if mStart then begin mStart := FALSE; // startAt := CheckBOM(aBuf, aLen); CheckBOM(aBuf, aLen); // case mDetectedBOM of // BOM_UCS4_BE: mDetectedCharset := UCS4_BE_CHARSET; // BOM_UCS4_LE: mDetectedCharset := UCS4_LE_CHARSET; // BOM_UTF16_BE: mDetectedCharset := UTF16_BE_CHARSET; // BOM_UTF16_LE: mDetectedCharset := UTF16_LE_CHARSET; // BOM_UTF8: mDetectedCharset := UTF8_CHARSET; // // BOM_UCS4_2143: mDetectedCharset := UCS4_BE_CHARSET; // BOM_UCS4_3412: mDetectedCharset := UCS4_LE_CHARSET; // end; // TODO - some stuppid ASCII text can starts with BOM. What to do? if mDetectedCharset <> UNKNOWN_CHARSET then begin // 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 <> eHighbyte then begin (*adjust state*) mInputState := eHighbyte; end; end else begin (*ok, just pure ascii so *) if (mInputState = ePureAscii) and ((aBuf[i] = #$1B) or (aBuf[i] = '{') and (mLastChar = '~')) then (*found escape character or HZ "~{"*) mInputState := eEscAscii; mLastChar := aBuf[i]; end; case mInputState of eEscAscii: 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; eHighbyte: begin {$ifdef DEBUG_chardet} AddDump('Universal detector - HighByte Detector started'); {$endif} for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin //newBuf := AllocMem(aLen+StartAt); //BufPtr := newBuf; //try //tmpBOM := BOM_Not_Found; //if mDetectedBOM = BOM_Not_Found then //begin ////case mCharSetProbers[i].GetDetectedCharset of //// UTF16_BE_CHARSET: tmpBOM := BOM_UCS4_BE; //// UTF16_LE_CHARSET: tmpBOM := BOM_UCS4_LE; //// else //// tmpBOM := BOM_Not_Found; ////end; //tmpBOM := BOM_UTF16_BE; //end; //for b:=0 to integer(KnownBOM[tmpBOM][0])-1 do //begin //BufPtr^ := KnownBOM[tmpBOM][b+1]; //inc(BufPtr); //end; // //for b:=0 to aLen do //begin //BufPtr^ := aBuf[b]; //inc(BufPtr); //end; st := mCharSetProbers[i].HandleData(aBuf,aLen); // st := mCharSetProbers[i].HandleData(newBuf,aLen+startAt); if st = psFoundIt then begin mDone:= TRUE; mDetectedCharset := mCharSetProbers[i].GetDetectedCharset; // Result := NS_OK; break; end; //finally //FreeMem(newBuf, aLen); //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 := ePureAscii; 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: pChar): integer; var s: ANSIstring; i: integer; begin s := ''; for i := integer(low(KNOWN_CHARSETS)) to integer(High(KNOWN_CHARSETS)) do s := s + #10 + KNOWN_CHARSETS[eInternalCharsetID(i)].Name + ' - ' + inttostr(KNOWN_CHARSETS[eInternalCharsetID(i)].CodePage); KnownCharsets := pChar(s); Result := Length(s); end; procedure TnsUniversalDetector.GetAbout(out About: rAboutHolder); begin About := AboutInfo; end; function TnsUniversalDetector.CheckBOM(aBuf: pChar; aLen: integer): integer; function BOMLength(BOM: eBOMKind): integer; begin Result := integer(KnownBOM[BOM, 0]); end; var i, b: integer; Same: Boolean; begin Result := 0; for i := integer(low(KnownBOM))+1 to integer(high(KnownBOM)) do if aLen > BOMLength(eBOMKind(i)) then begin Same := true; for b := 0 to BOMLength(eBOMKind(i)) - 1 do if (aBuf[b] <> KnownBOM[eBOMKind(i), b+1]) then begin Same := false; break; end; if Same then begin mDetectedBOM := eBOMKind(i); Result := BOMLength(mDetectedBOM); 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-0.9.8/components/chsdet/src/nsSBCharSetProber.pas0000644000175000001440000001622012014201074022742 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.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsSBCharSetProber; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUMBER_OF_SEQ_CAT = 4; type SequenceModel = record charToOrderMap: PChar; (* [256] table use to find a char's order*) precedenceMatrix: PChar; (* [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: PRUint32; mSeqCounters: array [0..Pred(NUMBER_OF_SEQ_CAT)] of PRUint32; mTotalChar: PRUint32; (*characters that fall in our sampling range*) mFreqChar: PRUint32; (* 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: PChar; 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: PChar; 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-0.9.8/components/chsdet/src/nsSBCSGroupProber.pas0000644000175000001440000001230212014201074022730 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.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsSBCSGroupProber; interface uses nsCore, nsGroupProber; type TnsSBCSGroupProber = class(TnsGroupProber) public constructor Create; reintroduce; function HandleData(aBuf: PChar; 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: PChar; aLen: integer): eProbingState; var newBuf1: PChar; 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-0.9.8/components/chsdet/src/nsPkg.pas0000644000175000001440000000525412014201074020540 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.2 2007/05/20 15:46:11 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: pPRUint32; 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:= (((aPRUint32(c^.data)[i shr integer(c^.idxsft)]) shr (i and integer(c^.sftmsk) shl integer(c^.bitsft))) and integer(c^.unitmsk)); end; end. doublecmd-0.9.8/components/chsdet/src/nsMBCSMultiProber.pas0000644000175000001440000002153713023052076022741 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.2 2007/05/26 13:09:38 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: PChar; aLen: integer): eProbingState; function GetConfidenceFor(index: integer): double; reintroduce; public constructor Create; reintroduce; destructor Destroy; override; function HandleData(aBuf: PChar; 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: PChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: PChar; hptr: PChar; 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: PChar; aLen: integer): eProbingState; var i, c: integer; codingState: nsSMState; charLen: byte; mLastChar: array [0..1] of Char; 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-0.9.8/components/chsdet/src/nsLatin1Prober.pas0000644000175000001440000001537112014201074022322 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.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsLatin1Prober; interface uses nsCore, CustomDetector; type TnsLatin1Prober = class(TCustomDetector) private mLastCharClass: Char; mFreqCounter: array of PRUint32; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: PChar; 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: PChar; aLen: integer): eProbingState; var newBuf1: PChar; newLen1: integer; charClass: char; 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 := char(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 := Char(OTH); for i := 0 to Pred(FREQ_CAT_NUM) do mFreqCounter[i] := 0; end; end. doublecmd-0.9.8/components/chsdet/src/nsHebrewProber.pas0000644000175000001440000003543012014201074022404 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.3 2007/05/26 13:09:38 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: PRInt32; mFinalCharVisualScore: PRInt32; (* The two last characters seen in the previous buffer.*) mPrev: char; mBeforePrev: char; (* These probers are owned by the group prober.*) mLogicalProb: TCustomDetector; mVisualProb: TCustomDetector; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: PChar; 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: char): Boolean; function isNonFinal(c: char): 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: PRInt32; 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: PChar; 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: PChar; endPtr: PChar; cur: char; 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: char): 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: char): 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-0.9.8/components/chsdet/src/nsGroupProber.pas0000644000175000001440000001410612014201074022261 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.2 2007/05/26 13:09:38 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: PChar; 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: PChar; 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-0.9.8/components/chsdet/src/nsEscCharsetProber.pas0000644000175000001440000000444712014201074023220 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.3 2007/05/26 13:09:38 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-0.9.8/components/chsdet/src/nsCore.pas0000644000175000001440000002714112014201074020706 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.4 2008/06/22 09:04:20 ya_nick Exp $ unit nsCore; interface type PRInt16 = smallint; PRUint16 = word; PRInt32 = integer; PRUint32 = cardinal; pByteArray = array of Byte; pPRUint32 = ^PRUint32; aPRUint32 = array of PRUint32; pPRint16 = ^PRint16; aPRint16 = array of PRint16; 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 = PRUint32; 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 ); const KnownBOM: array [eBOMKind] of array [0..4] of Char = ( // first element = byte count (#$00, #$00, #$00, #$00, #$00), (#$04, #$00, #$00, #$FE, #$FF), (#$04, #$FF, #$FE, #$00, #$00), (#$04, #$00, #$00, #$FF, #$FE), (#$04, #$FE, #$FF, #$00, #$00), (#$02, #$FE, #$FF, #$00, #$00), (#$02, #$FF, #$FE, #$00, #$00), (#$03, #$EF, #$BB, #$BF, #$00) ); // "extended" charset info type rCharsetInfo = record Name: pChar; CodePage: integer; Language: pChar; 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: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; function FilterWithEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; implementation function FilterWithEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; var newptr: pChar; prevPtr: pChar; curPtr: pChar; 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: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; var newPtr: pChar; prevPtr: pChar; curPtr: pChar; 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-0.9.8/components/chsdet/src/nsCodingStateMachine.pas0000644000175000001440000000710512014201074023505 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.3 2007/05/26 13:09:38 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: PRUint32; stateTable: Pointer; //nsPkgInt; charLenTable: Pointer; // pByteArray; // array of byte; // pPRUint32; CharsetID: eInternalCharsetID; end; pSMModel = ^SMModel; type TnsCodingStateMachine = class (TObject) protected mCurrentState: nsSMState; mCurrentCharLen: PRUint32; mCurrentBytePos: PRUint32; mModel: SMModel; public Enabled: Boolean; constructor Create(sm: SMModel); destructor Destroy; override; function NextState(c: char): nsSMState; function GetCurrentCharLen: PRUint32; 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: char): nsSMState; var byteCls: PRUint32; 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 := pByteArray(mModel.classTable)[integer(c)]; if mCurrentState = eStart then begin mCurrentBytePos := 0; mCurrentCharLen := pByteArray(mModel.charLenTable)[byteCls]; end; (*from byte's class and stateTable, we get its next state*) mCurrentState := nsSMState(pByteArray(mModel.stateTable)[cardinal(mCurrentState) * mModel.classFactor + byteCls]); inc(mCurrentBytePos); //if mCurrentBytePos > mCurrentCharLen then // mCurrentState := eError; Result:= mCurrentState; end; function TnsCodingStateMachine.GetCurrentCharLen: PRUint32; begin Result:= mCurrentCharLen; end; procedure TnsCodingStateMachine.Reset; begin mCurrentState:= eStart; end; function TnsCodingStateMachine.GetCharsetID: eInternalCharsetID; begin Result:= mModel.CharsetID; end; end. doublecmd-0.9.8/components/chsdet/src/mbclass/0000755000175000001440000000000013615241420020376 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/src/mbclass/UTF8LangModel.inc0000644000175000001440000001015412014201074023374 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-0.9.8/components/chsdet/src/mbclass/UCS2LELangModel.inc0000644000175000001440000000402412014201074023602 0ustar alexxusersconst UCS2LECharLenTable: array [0..5] of PRUint32 = (2, 2, 2, 2, 2, 2); UCS2LE_cls: array [Char] 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-0.9.8/components/chsdet/src/mbclass/UCS2BELangModel.inc0000644000175000001440000000410712014201074023572 0ustar alexxusersconst UCS2BECharLenTable: array [0..5] of Byte = (2, 2, 2, 2, 2, 2); UCS2BE_cls: array [Char] 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-0.9.8/components/chsdet/src/mbclass/SJISLangModel.inc0000644000175000001440000000443412014201074023422 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-0.9.8/components/chsdet/src/mbclass/ISO2022KRLangModel.inc0000644000175000001440000000372612014201074024052 0ustar alexxusersconst ISO2022KRCharLenTable: array [0..5] of PRUint32 = (0, 0, 0, 0, 0, 0); ISO2022KR_cls: array [Char] 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-0.9.8/components/chsdet/src/mbclass/ISO2022JPLangModel.inc0000644000175000001440000000464312014201074024046 0ustar alexxusersconst ISO2022JPCharLenTable: array [0..7] of PRUint32 = (0, 0, 0, 0, 0, 0, 0, 0); ISO2022JP_cls: array [Char] 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-0.9.8/components/chsdet/src/mbclass/ISO2022CNLangModel.inc0000644000175000001440000000446012014201074024032 0ustar alexxusersconst ISO2022CNCharLenTable: array [0..8] of PRUint32 = (0, 0, 0, 0, 0, 0, 0, 0, 0); ISO2022CN_cls: array [Char] 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-0.9.8/components/chsdet/src/mbclass/HZLangModel.inc0000644000175000001440000000367012014201074023174 0ustar alexxusersconst HZCharLenTable: array [0..5] of PRUint32 = (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-0.9.8/components/chsdet/src/mbclass/GB18030LangModel.inc0000644000175000001440000000471012014201074023533 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-0.9.8/components/chsdet/src/mbclass/EUCTWLangModel.inc0000644000175000001440000000473512014201074023545 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-0.9.8/components/chsdet/src/mbclass/EUCKRLangModel.inc0000644000175000001440000000402612014201074023520 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-0.9.8/components/chsdet/src/mbclass/EUCJPLangModel.inc0000644000175000001440000000453312014201074023520 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-0.9.8/components/chsdet/src/mbclass/Big5LangModel.inc0000644000175000001440000000421712014201074023437 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-0.9.8/components/chsdet/src/dbg.inc0000644000175000001440000000015012014201074020166 0ustar alexxusers{.$DEFINE DEBUG_chardet} // Uncomment this for debug dump.*) {$ifdef DEBUG_chardet} Dump, {$endif} doublecmd-0.9.8/components/chsdet/src/chsdet.lpr0000644000175000001440000000341312014201074020735 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: chsdet.lpr,v 1.1 2009/03/20 17:40:22 ya_nick Exp $ library chsdet; uses chsdIntf in 'chsdIntf.pas', LangBulgarianModel in 'sbseq/LangBulgarianModel.pas', LangCyrillicModel in 'sbseq/LangCyrillicModel.pas', LangGreekModel in 'sbseq/LangGreekModel.pas', LangHebrewModel in 'sbseq/LangHebrewModel.pas' ; exports csd_Reset, csd_HandleData, csd_Done, csd_DataEnd, csd_GetDetectedCharset, csd_GetKnownCharsets, csd_GetAbout; {.chsdet$R *.res} {.chsdet$R chsdet.res} begin end. doublecmd-0.9.8/components/chsdet/src/chsdet.lpi0000644000175000001440000001224311670731366020750 0ustar alexxusers doublecmd-0.9.8/components/chsdet/src/chsdet.dpr0000644000175000001440000000303312014201074020723 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: chsdet.dpr,v 1.3 2007/05/26 13:07:21 ya_nick Exp $ library chsdet; uses chsdIntf in 'chsdIntf.pas'; exports csd_Reset, csd_HandleData, csd_Done, csd_DataEnd, csd_GetDetectedCharset, csd_GetKnownCharsets, csd_GetAbout; {$R *.res} begin end. doublecmd-0.9.8/components/chsdet/src/chsdet.dof0000644000175000001440000001662111670731366020740 0ustar alexxusers[FileVersion] Version=6.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=1 V=1 W=0 X=1 Y=2 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=4194304 ExeDescription= [Directories] OutputDir=..\ UnitOutputDir=..\dcu PackageDLLOutputDir= PackageDCPOutputDir= SearchPath=.\mbclass;.\sbseq;.\stat Packages=VCL50;VCLX50;VCLSMP50;QRPT50;VCLDB50;VCLIE50;INETDB50;INET50;NMFAST50;dclocx50;dclaxserver50;DJCL50;JVAPPFRMD5R;JVCORED5R;JVBANDSD5R;JVDLGSD5R;JVCMPD5R;JVCRYPTD5R;JVCTRLSD5R;JVCUSTOMD5R;JVDOCKINGD5R;JVDOTNETCTRLSD5R;JVEDID5R;JVGLOBUSD5R;JVHMID5R;JVINSPECTORD5R;JVINTERPRETERD5R;JVJANSD5R;JVMANAGEDTHREADSD5R;JVMMD5R;JVNETD5R;JVSTDCTRLSD5R;JVPAGECOMPSD5R;JVPLUGIND5R;JVPRINTPREVIEWD5R;JVSYSTEMD5R;JVTIMEFRAMEWORKD5R;JVUIBD5R;JVVALIDATORSD5R;JVWIZARDD5R;JVXPCTRLSD5R;vcl Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication= Launcher= UseLauncher=0 DebugCWD= [Language] ActiveLang= ProjectLang=$00000407 [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=0 MinorVer=2 Release=6 Build=2 Debug=0 PreRelease=0 Special=0 Private=0 DLL=1 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName= FileDescription=Charset detector FileVersion=0.2.6.2 InternalName= LegalCopyright=Nick Yakowlew, ya_nick@users.sourceforge.net LegalTrademarks= OriginalFilename=chsdet.dll ProductName=Charset detector ProductVersion=0.2 Comments=LGPL Licence [Excluded Packages] E:\Data\Yan\Delphi\log4delphi\bin\log4delphi_D6.bpl=Log4Delphi 0.5 c:\program files\borland\delphi6\Bin\DCLNMF60.bpl=NetMasters Fastnet Tools C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TBX_D6.BPL=Toolbar2000 -- TBX Extensions (Alex Denisov) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TB2K_D6.BPL=Toolbar2000 Components (Jordan Russell) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TBXDSGN_D6.BPL=Toolbar2000 -- TBX Extensions Design Package (Alex Denisov) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TB2KDSGN_D6.BPL=Toolbar2000 Design Package (Jordan Russell) c:\program files\borland\delphi6\Projects\Bpl\IEDcomp.bpl=Internet EDiting components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TNTUNICODEVCL_D60.BPL=Tnt Unicode Controls c:\program files\borland\delphi6\Projects\Bpl\SmpltCP.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\devFileMonitorPkg.bpl=(untitled) c:\program files\borland\delphi6\Bin\dclsoap60.bpl=Borland SOAP Components c:\program files\borland\delphi6\Projects\Bpl\SpTBXLibDsgn_d6.bpl=Toolbar2000 -- SpTBXLib Design Package c:\program files\borland\delphi6\Projects\Bpl\LSFindReplaceDialogW_6.bpl=LS Find/Replace Dialog for Wide Strings c:\program files\borland\delphi6\Projects\Bpl\Unicode6.bpl=Unicode components c:\program files\borland\delphi6\Projects\Bpl\credit.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\pActivePorts.bpl=LGM ActivePorts Component c:\program files\borland\delphi6\Projects\Bpl\USE.bpl=Unicode Syntax Edit control C:\Program Files\Borland\Delphi6\Projects\Bpl\JvAppFrmD6D.bpl=JVCL Application and Form Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVCORED6D.BPL=JVCL Core Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCmpD6D.bpl=JVCL Non-Visual Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCryptD6D.bpl=JVCL Encryption and Compression Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCtrlsD6D.bpl=JVCL Visual Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCustomD6D.bpl=JVCL Custom Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDlgsD6D.bpl=JVCL Dialog Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDockingD6D.bpl=JVCL Docking Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvGlobusD6D.bpl=JVCL Globus Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvHMID6D.bpl=JVCL HMI Controls design time unit C:\Program Files\Borland\Delphi6\Projects\Bpl\JvJansD6D.bpl=JVCL Jans Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvManagedThreadsD6D.bpl=JVCL Managed Threads C:\Program Files\Borland\Delphi6\Projects\Bpl\JvMMD6D.bpl=JVCL Multimedia and Image Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVSTDCTRLSD6D.BPL=JVCL Standard Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPageCompsD6D.bpl=JVCL Page Style Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPluginD6D.bpl=JVCL Plugin Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvSystemD6D.bpl=JVCL System Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvTimeFrameworkD6D.bpl=JVCL Time Framework C:\Program Files\Borland\Delphi6\Projects\Bpl\JvValidatorsD6D.bpl=JVCL Validators and Error Provider Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvXPCtrlsD6D.bpl=JVCL XP Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvBandsD6D.bpl=JVCL Band Objects C:\Program Files\Borland\Delphi6\Projects\Bpl\JvBDED6D.bpl=JVCL BDE Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVDBD6D.BPL=JVCL Database Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDotNetCtrlsD6D.bpl=JVCL DotNet Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvEDID6D.bpl=JVCL EDI Components Designtime Package C:\Program Files\Borland\Delphi6\Projects\Bpl\JvInspectorD6D.bpl=JVCL Inspector Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvInterpreterD6D.bpl=JVCL Interpreter Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvNetD6D.bpl=JVCL Network Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPrintPreviewD6D.bpl=JVCL Print Preview Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvUIBD6D.bpl=JVCL Unified Interbase Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvWizardD6D.bpl=JVCL Wizard Design Time Package c:\program files\borland\delphi6\Projects\Bpl\components.bpl=Components for tsWebEditor c:\program files\borland\delphi6\Projects\Bpl\CoolTrayIcon_D6plus.bpl=CoolTrayIcon and Friends C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DCLBDE60.BPL=Borland BDE DB Components C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DBX60.BPL=Borland SQL Explorer UI Package c:\program files\borland\delphi6\Projects\Bpl\ClassBrowsing.bpl=ClassBrowsing components c:\program files\borland\delphi6\Bin\dclqrt60.bpl=QuickReport Components c:\program files\borland\delphi6\Bin\dclcds60.bpl=Borland Base Cached ClientDataset Component C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DCLMID60.BPL=Borland MyBase DataAccess Components c:\program files\borland\delphi6\Bin\dclbdecds60.bpl=Borland Local BDE ClientDataset Components c:\program files\borland\delphi6\Bin\dcltee60.bpl=TeeChart Components c:\program files\borland\delphi6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components c:\program files\borland\delphi6\Bin\dclib60.bpl=InterBase Data Access Components c:\program files\borland\delphi6\Bin\dcldbxcds60.bpl=Borland Local DBX ClientDataset Components c:\program files\borland\delphi6\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package c:\program files\borland\delphi6\Projects\Bpl\prgInternet6.bpl=Progsan Internet Components c:\program files\borland\delphi6\Projects\Bpl\Comps_D6.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\SynEdit_D6.bpl=SynEdit component suite c:\program files\borland\delphi6\Projects\Bpl\DevCpp.bpl=Dev-c++ components doublecmd-0.9.8/components/chsdet/src/chsdIntf.pas0000644000175000001440000000564512014201074021224 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: chsdIntf.pas,v 1.4 2008/06/22 09:04:20 ya_nick Exp $ unit chsdIntf; interface uses nsCore; procedure csd_Reset; stdcall; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; function csd_Done: boolean; stdcall; procedure csd_DataEnd; stdcall; function csd_GetDetectedCharset: rCharsetInfo; stdcall; function csd_GetKnownCharsets(var KnownCharsets: pChar): integer; stdcall; procedure csd_GetAbout(var About: rAboutHolder); stdcall; function csd_GetDetectedBOM: eBOMKind; stdcall; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; implementation uses nsUniversalDetector; var Detector: TnsUniversalDetector = nil; procedure csd_Reset; stdcall; begin Detector.Reset; end; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; begin Result := Detector.HandleData(aBuf, aLen); end; function csd_Done: boolean; stdcall; begin Result := Detector.Done; end; procedure csd_DataEnd; stdcall; begin Detector.DataEnd; end; function csd_GetDetectedCharset: rCharsetInfo; stdcall; begin Result := Detector.GetDetectedCharsetInfo; end; function csd_GetKnownCharsets(var KnownCharsets: pChar): integer; stdcall; begin Result := Detector.GetKnownCharset(KnownCharsets); end; procedure csd_GetAbout(var About: rAboutHolder); stdcall; begin Detector.GetAbout(About); end; function csd_GetDetectedBOM: eBOMKind; stdcall; begin Result := Detector.BOMDetected; end; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; begin Detector.DisableCharset(CodePage); end; initialization Detector := TnsUniversalDetector.Create; finalization if Detector <> nil then Detector.Free; end. doublecmd-0.9.8/components/chsdet/src/MultiModelProber.pas0000644000175000001440000001331412014201074022677 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: PChar; 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: PChar; 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-0.9.8/components/chsdet/src/MBUnicodeMultiProber.pas0000644000175000001440000000765413023052076023465 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.2 2007/05/26 13:09:38 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: PChar; 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; 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: PChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: PChar; hptr: PChar; 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-0.9.8/components/chsdet/src/JpCntx.pas0000644000175000001440000005245512014201074020671 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.2 2007/05/20 15:46:05 ya_nick Exp $ unit JpCntx; interface uses nsCore; 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 PRUint32; (*total sequence received*) mTotalRel: PRUint32; (*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: PChar; charLen: pPRUint32): PRInt32; overload; virtual; abstract; function GetOrder(str: PChar): PRInt32; overload; virtual; abstract; public constructor Create; destructor Destroy; override; procedure Reset; procedure HandleData(const aBuf: PChar; aLen: integer); procedure HandleOneChar(aStr: PChar; aCharLen: integer); function GotEnoughData: Boolean; function GetConfidence: float; end; TSJISContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: PChar; charLen: pPRUint32): PRInt32; overload; override; function GetOrder(str: PChar): PRInt32; overload; override; end; TEUCJPContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: PChar; charLen: pPRUint32): PRInt32; overload; override; (*We only interested in Hiragana, so first byte is '\244'*) function GetOrder(str: PChar): PRInt32; 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: PChar; aCharLen: integer); var order: PRInt32; (*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: PChar; aLen: integer); var charLen: PRUint32; order: PRInt32; 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: PChar; charLen: pPRUint32): PRInt32; 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: PChar): PRInt32; 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: PChar; charLen: pPRUint32): PRInt32; 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: PChar): PRInt32; 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-0.9.8/components/chsdet/src/JISFreq.pas0000644000175000001440000013667012014201074020730 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.2 2007/05/20 15:46:04 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 PRInt16 = ( 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-0.9.8/components/chsdet/src/GB2312Freq.pas0000644000175000001440000010761112014201074021074 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.2 2007/05/20 15:46:04 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 PRInt16 = ( 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-0.9.8/components/chsdet/src/EUCTWFreq.pas0000644000175000001440000010627212014201074021165 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.2 2007/05/20 15:46:04 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 PRInt16 = ( 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-0.9.8/components/chsdet/src/EUCSampler.pas0000644000175000001440000001002112014201074021402 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: pChar; 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: pChar; aLen: integer): Boolean; const MAX_LENGTH: integer = MaxInt;// $80000000; var i: integer; p: pChar; 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-0.9.8/components/chsdet/src/EUCKRFreq.pas0000644000175000001440000013316512014201074021150 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.2 2007/05/20 15:46:03 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 PRInt16 = ( 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-0.9.8/components/chsdet/src/Dump.pas0000644000175000001440000000057412014201074020363 0ustar alexxusersunit Dump; interface const nl = #13#10; var DumpStr: string; procedure AddDump(Dump: string); procedure ShowDump; implementation uses // Windows; UNIT1; procedure AddDump(Dump: string); begin UNIT1.Form1.Memo1.Lines.Add(Dump); // DumpStr := DumpStr + Dump + nl; end; procedure ShowDump; begin // OutputDebugString(pChar(DumpStr)); // DumpStr := ''; end; end. doublecmd-0.9.8/components/chsdet/src/CustomDetector.pas0000644000175000001440000000277412014201074022426 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: PChar; 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: PChar; 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-0.9.8/components/chsdet/src/CharDistribution.pas0000644000175000001440000002353412014201074022734 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.3 2007/05/26 13:09:38 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: PRUint32; (*The number of characters whose frequency order is less than 512*) mTotalChars: PRUint32; (*Total character encounted.*) mCharToFreqOrder: pPRInt16; (*Mapping table to get frequency order from char order (get from GetOrder())*) mTableSize: PRUint32; (*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: PChar): PRInt32; virtual; abstract; (*feed a block of data and do distribution analysis*) // function HandleData(const aBuf: PChar; aLen: PRUint32): 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: PChar; aCharLen: PRUint32); 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar; aCharLen: PRUint32); 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 > aPRint16(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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; 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: PChar): PRInt32; var order: PRInt32; 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: PChar): PRInt32; begin if byte(str[0]) >= $a0 then Result := 94 * (byte(str[0]) - $a1) + byte(str[1]) - $a1 else Result:= -1; end; end. doublecmd-0.9.8/components/chsdet/src/Big5Freq.pas0000644000175000001440000024436212014201074021067 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.2 2007/05/20 15:46:02 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 PRInt16 = ( 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-0.9.8/components/chsdet/dcu/0000755000175000001440000000000013615241420016736 5ustar alexxusersdoublecmd-0.9.8/components/chsdet/chsdet.pas0000644000175000001440000000114212677725617020166 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, chsdIntf, 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-0.9.8/components/chsdet/chsdet.lpk0000644000175000001440000001545112144672601020160 0ustar alexxusers doublecmd-0.9.8/components/chsdet/chsd_dll_intf.pas0000644000175000001440000000610412014201074021456 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: chsd_dll_intf.pas,v 1.4 2009/07/12 15:13:56 ya_nick Exp $ unit chsd_dll_intf; interface const NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; type rCharsetInfo = record Name: pChar; CodePage: integer; Language: pChar; end; prCharsetInfo = ^rCharsetInfo; 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 ); const CharsetDetectorLibrary = 'chsdet.dll'; procedure csd_Reset; stdcall; external CharsetDetectorLibrary; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; external CharsetDetectorLibrary; function csd_Done: Boolean; stdcall; external CharsetDetectorLibrary; procedure csd_DataEnd; stdcall; external CharsetDetectorLibrary; function csd_GetDetectedCharset: rCharsetInfo; stdcall; external CharsetDetectorLibrary; procedure csd_GetKnownCharsets(var KnownCharsets: pChar); stdcall; external CharsetDetectorLibrary; procedure csd_GetAbout(var About: rAboutHolder); stdcall; external CharsetDetectorLibrary; function csd_GetDetectedBOM: eBOMKind; stdcall; external CharsetDetectorLibrary; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; external CharsetDetectorLibrary; implementation end. doublecmd-0.9.8/components/chsdet/ReadMe.txt0000644000175000001440000001374712014201074020066 0ustar alexxusers-----------Summary Charset Detector - as the name says - is a stand alone executable module 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. Charset Detector can be compiled (and hopefully used) for MS Windows (as dll - dynamic link library) or Linux. Based on Mozilla's i18n component - http://www.mozilla.org/projects/intl/. -----------State Version 0.2.6 stable. The latest version can be found at http://chsdet.sourceforge.net. -----------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 Lesser GPL. See the GNU Lesser General Public License for more details - http://www.opensource.org/licenses/lgpl-license.php -----------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 | MS Windows hasn't CP.| | | | Try to use USC-4. | | 12001 | X-ISO-10646-UCS-4-3412 | | | 12001 | UTF-32BE | MS Windows hasn't CP.| | | | Try to use USC-4. | | 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: pChar; // charset GNU canonical name CodePage: integer; // MS Windows CodePage id Language: pChar; // end; rAboutHolder = record MajorVersionNr: Cardinal; // Library's Major Version # MinorVersionNr: Cardinal; // Library's Minor Version # BuildVersionNr: Cardinal; // Library's Build/Release Version # About: pChar; // Copyleft information; end; -----------Exported functions procedure chsd_Reset; stdcall; Reset Charset Detector state. Prepare to new analyse. function chsd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; Analyse given buffer. Parameters aBuf - pointer to buffer with text. sLen - buffer length; Return value NS_ERROR_OUT_OF_MEMORY - failure. Unable to create internal objects. NS_OK - success. Note Function can be called more that one time to continue guessing. Charset Detector remember last state until chsd_Reset called. function chsd_Done: Boolean; stdcall; Return value TRUE - Charset Detector is sure about text encoding. FALSE - Overwise. Note If input buffer is smaller then 1K Charset Detector returns anyway FALSE. procedure chsd_DataEnd; stdcall; Signalise data end. If Charset Detector hasn't sure result (Done = FALSE) the best guessed encoding will be set as result. function chsd_GetDetectedCharset: rCharsetInfo; stdcall; Returns guessed charset. procedure chsd_GetKnownCharsets(var KnownCharsets: pChar); Fills the parameter with all supported charsets in form "CodePage - Name LineFeed". procedure chsd_GetAbout(var About: rAboutHolder); stdcall; Fills the parameter with version and copyleft information. -----------Sample The definition file "chsd_dll_intf.pas" can be found in the same direcory. Bellow is small usage sample. // WS: WideString; // Wide string which can be used in Unicode controls. // Get encoding of some buffer chsd_Reset; chsd_HandleData(aBuf, aLen); if not chsd_Done then chsd_DataEnd; ChSInfo := chsd_GetDetectedCharset(); // convert buffer to WideString OutputLength := MultiByteToWideChar(ChSInfo.CodePage, 0, aBuf, aLen, nil, 0); SetLength(WS, OutputLength); MultiByteToWideChar(ChSInfo.CodePage, 0, aBuf, aLen, PWideChar(WS), OutputLength); // If you using Unicode SynEdit SynEdit.Lines.Text := WS; Nikolaj Yakowlew 2006-2008 doublecmd-0.9.8/components/chsdet/Licence.txt0000644000175000001440000005750512014201074020273 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-0.9.8/components/build.sh0000755000175000001440000000170013054266654016362 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 CmdLine/cmdbox.lpk $DC_ARCH $lazbuild multithreadprocs/multithreadprocslaz.lpk $DC_ARCH $lazbuild dcpcrypt/dcpcrypt.lpk $DC_ARCH $lazbuild doublecmd/doublecmd_common.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 cd $basedir # Remove temporary file if [ -f fpc.cfg ] ; then rm -f fpc.cfg export PPC_CONFIG_PATH= fi doublecmd-0.9.8/components/build.bat0000644000175000001440000000106713054266654016521 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 CmdLine\cmdbox.lpk %DC_ARCH% lazbuild multithreadprocs\multithreadprocslaz.lpk %DC_ARCH% lazbuild dcpcrypt\dcpcrypt.lpk %DC_ARCH% lazbuild doublecmd\doublecmd_common.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% popd doublecmd-0.9.8/components/KASToolBar/0000755000175000001440000000000013615241420016612 5ustar alexxusersdoublecmd-0.9.8/components/KASToolBar/kastoolitems.pas0000644000175000001440000003547112205740427022054 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 property ToolOwner: IToolOwner read FToolOwner; public 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; end; TKASToolItemClass = class of TKASToolItem; { TKASSeparatorItem } TKASSeparatorItem = class(TKASToolItem) 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) 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; 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 } 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); 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 // Empty. end; procedure TKASSeparatorItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin // Empty. 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 Result := ''; 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; { 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-0.9.8/components/KASToolBar/kastoolbar.pas0000644000175000001440000007751513467737150021516 0ustar alexxusers{ Double Commander components ------------------------------------------------------------------------- Toolbar panel class Copyright (C) 2006-2019 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; 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 (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; public constructor Create(AOwner: TComponent; Item: TKASToolItem); reintroduce; destructor Destroy; 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: 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 GetChangePath: String; function GetEnvVar: String; 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; property RowHeight: Integer read FRowHeight; 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; property ChangePath: String read GetChangePath write SetChangePath; property EnvVar: String read GetEnvVar write SetEnvVar; end; procedure Register; implementation uses Themes, types, math, 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); 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: Integer; procedure CalculatePosition; var NewBounds: TRect; begin NewBounds := Bounds(x, y, CurControl.Width, RowHeight); 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, RowHeight); inc(NewBounds.Bottom, RowHeight); until false; 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; x := StartX; y := ARect.Top; 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 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; FRowHeight := ButtonHeight; // Row height is at least initial button height // First recalculate RowHeight. for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); w := ButtonWidth; h := ButtonHeight; CurControl.GetPreferredSize(w, h); 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]); w := ButtonWidth; h := RowHeight; 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.GetChangePath: String; begin end; function TKASToolBar.GetEnvVar: String; begin end; function TKASToolBar.GetToolItemShortcutsHint(Item: TKASToolItem): String; begin Result := ''; if Assigned(FOnToolItemShortcutsHint) and (Item is TKASNormalItem) then Result := FOnToolItemShortcutsHint(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; 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 Assigned(Parent) then begin if ShowCaption and (Caption <> EmptyStr) then begin // Size to extent of the icon + caption. // Minimum size is the ButtonWidth x RowHeight of the toolbar. TextSize := Canvas.TextExtent(Caption); PreferredWidth := Max(TextSize.cx + Glyph.Width + 16, ToolBar.ButtonWidth); PreferredHeight := Max(TextSize.cy + 4, ToolBar.RowHeight); end else begin PreferredWidth := ToolBar.ButtonWidth; PreferredHeight := ToolBar.RowHeight; end; end else inherited; 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; constructor TKASToolButton.Create(AOwner: TComponent; Item: TKASToolItem); begin inherited Create(AOwner); FToolItem := Item; end; destructor TKASToolButton.Destroy; begin inherited Destroy; FOverlay.Free; 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 TKASToolBar(Parent).FShowDividerAsButton then begin PreferredWidth := 5; PreferredHeight := TKASToolBar(Parent).RowHeight; 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 DividerRect:= ClientRect; 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; ThemeServices.DrawElement(Canvas.GetUpdatedHandle([csBrushValid, csPenValid]), Details, DividerRect); end else inherited Paint; end; end. doublecmd-0.9.8/components/KASToolBar/kasprogressbar.pas0000644000175000001440000001342313405025303022347 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} ; 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)} 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)} { %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-0.9.8/components/KASToolBar/kaspathedit.pas0000644000175000001440000002076413331572101021627 0ustar alexxusers{ Double Commander Components ------------------------------------------------------------------------- Path edit class with auto complete feature Copyright (C) 2012-2014 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 KASPathEdit; {$mode delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ShellCtrls, LCLType; type { TKASPathEdit } TKASPathEdit = class(TEdit) private FPanel: THintWindow; FListBox: TListBox; FKeyDown: Word; FAutoComplete: Boolean; FObjectTypes: TObjectTypes; FFileSortType: TFileSortType; private 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 procedure ShowListBox; procedure HideListBox; protected {$IF DEFINED(LCLWIN32)} procedure CreateWnd; override; {$ENDIF} procedure DoExit; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyUpAfterInterface(var Key: Word; Shift: TShiftState); override; public constructor Create(AOwner: TComponent); override; published property ObjectTypes: TObjectTypes read FObjectTypes write SetObjectTypes; property FileSortType: TFileSortType read FFileSortType write FFileSortType; end; procedure Register; implementation uses LazUTF8, Math {$IF DEFINED(LCLWIN32)} , ComObj {$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; { TKASPathEdit } procedure TKASPathEdit.AutoComplete(const Path: String); var I: LongWord; BasePath: String; begin FListBox.Clear; if Pos(PathDelim, Path) > 0 then begin BasePath:= ExtractFilePath(Path); TCustomShellTreeView.GetFilesInDir( BasePath, ExtractFileName(Path) + '*', FObjectTypes, FListBox.Items, FFileSortType ); if (FListBox.Items.Count > 0) then begin ShowListBox; // Make absolute file name for I:= 0 to FListBox.Items.Count - 1 do FListBox.Items[I]:= BasePath + FListBox.Items[I]; // Calculate ListBox height with FListBox.ItemRect(0) do I:= Bottom - Top; // TListBox.ItemHeight sometimes don't work under GTK2 with FListBox do begin if Items.Count = 1 then FPanel.ClientHeight:= Self.Height else FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1); end; end; end; if (FListBox.Items.Count = 0) then HideListBox; 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 Text:= FListBox.Items[FListBox.ItemIndex]; SelStart:= UTF8Length(Text); 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; procedure TKASPathEdit.ShowListBox; begin if (FPanel = nil) then begin FPanel:= THintWindow.Create(Self); 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 (FPanel <> nil) 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} procedure TKASPathEdit.DoExit; begin HideListBox; inherited DoExit; end; procedure TKASPathEdit.KeyDown(var Key: Word; Shift: TShiftState); begin FKeyDown:= Key; case Key of VK_ESCAPE, VK_RETURN, VK_SELECT: begin HideListBox; end; VK_UP: if Assigned(FPanel) then begin Key:= 0; 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 Text:= FListBox.Items[FListBox.ItemIndex] else Text:= ExtractFilePath(Text); SelStart:= UTF8Length(Text); end; VK_DOWN: if Assigned(FPanel) then begin Key:= 0; 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 Text:= FListBox.Items[FListBox.ItemIndex] else Text:= ExtractFilePath(Text); SelStart:= UTF8Length(Text); 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 (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; 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); 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; end. doublecmd-0.9.8/components/KASToolBar/kascomp.pas0000644000175000001440000000120513161515307020756 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; interface uses KASToolBar, KASProgressBar, KASPathEdit, KASToolItems, KASComboBox, KASCDEdit, 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); end; initialization RegisterPackage('KASComp', @Register); end. doublecmd-0.9.8/components/KASToolBar/kascomp.lpk0000644000175000001440000000455213161515307020771 0ustar alexxusers doublecmd-0.9.8/components/KASToolBar/kascombobox.pas0000644000175000001440000001023213104055077021630 0ustar alexxusers{ Double Commander Components ------------------------------------------------------------------------- Extended ComboBox classes Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015-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 KASComboBox; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLVersion; 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 CalculateSize(MaxWidth: Integer; var NeededWidth: Integer); {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} end; procedure Register; implementation uses LCLType, LCLIntf; procedure Register; begin RegisterComponents('KASComponents',[TComboBoxWithDelItems, TComboBoxAutoWidth]); 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); var AWidth: Integer; begin inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); if csDesigning in ComponentState then Exit; if (Parent = nil) or (not Parent.HandleAllocated) then Exit; AWidth := Constraints.MinMaxWidth(10000); CalculateSize(AWidth, PreferredWidth); end; procedure TComboBoxAutoWidth.CalculateSize(MaxWidth: Integer; var NeededWidth: Integer); var DC: HDC; R: TRect; I, M: Integer; Flags: Cardinal; OldFont: HGDIOBJ; LabelText: String; Idx: Integer = -1; begin 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 NeededWidth := 1; Exit; end; DC := GetDC(Parent.Handle); try 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); NeededWidth := R.Right - R.Left + GetSystemMetrics(SM_CXVSCROLL) * 2; finally ReleaseDC(Parent.Handle, DC); end; end; {$if lcl_fullversion >= 1070000} procedure TComboBoxAutoWidth.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust horizontal layout inherited DoAutoAdjustLayout(AMode, 1.0, AYProportion); end; {$endif} end. doublecmd-0.9.8/components/KASToolBar/kascdedit.pas0000644000175000001440000003330413405213242021253 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Custom edit control with the look and feel like TLabel Copyright (C) 2017-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 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 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 // The background ADest.Pen.Style := psSolid; ADest.Pen.Color := AStateEx.RGBColor; ADest.Brush.Style := bsSolid; ADest.Brush.Color := AStateEx.RGBColor; ADest.Rectangle(0, 0, ASize.cx, ASize.cy); 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; begin // Background DrawEditBackground(ADest, Point(0, 0), ASize, AState, AStateEx); // 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; // ToDo: Implement multi-line selection if (AStateEx.SelLength = 0) or (AStateEx.SelStart.Y <> AStateEx.VisibleTextStart.Y+i) then begin lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen); 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; // Text right of the selection ADest.Font.Color := lTextColor; ADest.Brush.Color := AStateEx.RGBColor; lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen); ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText); // The selection text ADest.Brush.Color := clHighlight; ADest.Font.Color := clHighlightText; lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lSelLeftPos + lSelLength); ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText); // Text left of the selection ADest.Font.Color := lTextColor; ADest.Brush.Color := AStateEx.RGBColor; lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lSelLeftPos-AStateEx.VisibleTextStart.X + 1); 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; inherited KeyDown(Key, Shift); end; constructor TKASCDEdit.Create(AOwner: TComponent); begin CreatePopupMenu; inherited Create(AOwner); Color:= clForm; ReadOnly:= True; Cursor:= crIBeam; DrawStyle:= dsExtra1; 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-0.9.8/components/KASToolBar/dwtaskbarlist.pas0000644000175000001440000001446612014201074022201 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-0.9.8/components/CmdLine/0000755000175000001440000000000013615241420016224 5ustar alexxusersdoublecmd-0.9.8/components/CmdLine/wnmainform.pas0000644000175000001440000001511412014201074021101 0ustar alexxusers{ Copyright (C) 2007 Julian Schutsch 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 3 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. This Software is GPL, not LGPL as the libary it uses ! Changelog 10.8.2007 : Added "Buttons" Unit to avoid "TButton" missing error on 0.9.22 (Linux) } unit wnmainform; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Graphics, Dialogs, ExtCtrls,LCLType, ucmdbox, StdCtrls, Controls, Buttons; type { TWMainForm } TWMainForm = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; CmdBox: TCmdBox; CbSetCaret: TComboBox; Label1: TLabel; HistoryList: TListBox; RightPanel: TPanel; Splitter1: TSplitter; ReaderTimer: TTimer; ProcessTimer: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CmdBoxInput(ACmdBox: TCmdBox; Input: String); procedure CbSetCaretChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure ProcessTimerTimer(Sender: TObject); procedure ReaderTimerTimer(Sender: TObject); private TextPosition : Integer; DText : TStringList; Rdpw : Boolean; FProcess : Integer; end; var WMainForm: TWMainForm; implementation { TWMainForm } procedure TWMainForm.ReaderTimerTimer(Sender: TObject); var i:Integer; begin CmdBox.TextColors(clRed,clNavy); for i:=0 to 0 do begin if TextPosition=DText.Count then begin CmdBox.ClearLine; CmdBox.TextColor(clYellow); CmdBox.Writeln(#27#10#196); TextPosition := 0; ReaderTimer.Enabled := False; end; end; end; procedure TWMainForm.FormCreate(Sender: TObject); begin DoubleBuffered := True; DText := TStringList.Create; if FileExists('demotext.txt') then DText.LoadFromFile('demotext.txt'); CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy); CmdBox.TextColors(clWhite,clNavy); CmdBox.Writeln(#27#218#27#10#191); CmdBox.Writeln(#27#179'Type "help" to see a short list of available commands.'#27#10#179); CmdBox.Writeln(#27#217#27#10#217); end; procedure TWMainForm.CmdBoxInput(ACmdBox: TCmdBox; Input: String); var i:Integer; begin if rdpw then begin CmdBox.TextColors(clLime,clBlue); CmdBox.Writeln('Your Secret Password : '+Input); CmdBox.TextColors(clSilver,clNavy); rdpw:=false; end else begin rdpw:=false; Input:=LowerCase(Input); if Input='help' then begin CmdBox.TextColors(clLime,clNavy); CmdBox.Writeln(#27#218#27#197#128#0#27#194#27#10#191); CmdBox.Writeln(#27#179' Command'#27#33#128#0#27#179' Explanation'#27#10#179); CmdBox.Writeln(#27#195#27#197#128#0#27#198#27#10#180); CmdBox.Writeln(#27#179' help'#27#33#128#0#27#179' Gives this list of Commands'#27#10#179); CmdBox.Writeln(#27#179' clear'#27#33#128#0#27#179' Clears the Content of CmdBox'#27#10#179); CmdBox.Writeln(#27#179' start'#27#33#128#0#27#179' Outputs the Content of Demotext.txt from the beginning'#27#10#179); CmdBox.Writeln(#27#179' stop'#27#33#128#0#27#179' Stops output and resets to Start'#27#10#179); CmdBox.Writeln(#27#179' pause'#27#33#128#0#27#179' Interrupts output'#27#10#179); CmdBox.Writeln(#27#179' resume'#27#33#128#0#27#179' Resumes output from the last position'#27#10#179); CmdBox.Writeln(#27#179' clearhistory'#27#33#128#0#27#179' Clears all history entries'#27#10#179); CmdBox.Writeln(#27#179' readpwd'#27#33#128#0#27#179' Read a Password (just as a test)'#27#10#179); CmdBox.Writeln(#27#179' exit'#27#33#128#0#27#179' Exit program'#27#10#179); CmdBox.Writeln(#27#217#27#197#128#0#27#193#27#10#217); CmdBox.TextColor(clSilver); end else if Input='readpwd' then begin rdpw:=true; end else if Input='clearhistory' then begin CmdBox.TextColor(clYellow); CmdBox.Writeln('Clear History...'); CmdBox.TextColor(clSilver); CmdBox.ClearHistory; end else if Input='start' then begin TextPosition:=0; ReaderTimer.Enabled:=true; CmdBox.TextColors(clLime,clBlue); CmdBox.Writeln('Start...'); end else if Input='stop' then begin TextPosition:=0; ReaderTimer.Enabled:=false; CmdBox.TextColors(clRed,clBlue); CmdBox.Writeln('Stop...'); end else if Input='pause' then begin ReaderTimer.Enabled:=false; CmdBox.TextColors(clPurple,clBlue); CmdBox.Writeln('Pause...'); end else if Input='resume' then begin ReaderTimer.Enabled:=true; CmdBox.TextColors(clGreen,clBlue); CmdBox.Writeln('Continue...'); end else if Input='clear' then begin CmdBox.Clear; end else if Input='exit' then close else begin CmdBox.TextColors(clYellow,ClRed); CmdBox.Writeln('Invalid Command!'); end; end; if rdpw then CmdBox.StartReadPassWord(clYellow,clNavy,'Pwd:',clLime,clNavy) else CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy); HistoryList.Clear; for i:=0 to CmdBox.HistoryCount-1 do HistoryList.Items.Add(CmdBox.History[i]); end; procedure TWMainForm.CbSetCaretChange(Sender: TObject); begin case cbSetCaret.ItemIndex of 0:CmdBox.CaretType := cartLine; 1:CmdBox.CaretType := cartSubBar; 2:CmdBox.CaretType := cartBigBar; end; CmdBox.SetFocus; end; procedure TWMainForm.Button2Click(Sender: TObject); begin CmdBox.ClearHistory; HistoryList.Clear; end; procedure TWMainForm.Button3Click(Sender: TObject); begin FProcess:=0; ProcessTimer.Enabled:=True; end; procedure TWMainForm.Button1Click(Sender: TObject); begin Close; end; procedure TWMainForm.FormDestroy(Sender: TObject); begin DText.Free; end; procedure TWMainForm.ProcessTimerTimer(Sender: TObject); begin if FProcess=100 then begin CmdBox.ClearLine; ProcessTimer.Enabled:=False; end else begin CmdBox.TextColors(clRed,clBlue); CmdBox.Write('Processing ['+IntToStr(FProcess)+'%]'#13); end; Inc(FProcess); end; initialization {$I wnmainform.lrs} end. doublecmd-0.9.8/components/CmdLine/wnmainform.lrs0000644000175000001440000001436411077656332021147 0ustar alexxusers{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei } LazarusResources.Add('TWMainForm','FORMDATA',[ 'TPF0'#10'TWMainForm'#9'WMainForm'#4'Left'#3'?'#1#6'Height'#3#224#1#3'Top'#3 +'Q'#1#5'Width'#3#208#2#13'ActiveControl'#7#6'CmdBox'#7'Caption'#6#27'TCmdBox' +' Example Application'#12'ClientHeight'#3#224#1#11'ClientWidth'#3#208#2#8'On' +'Create'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#8'Position'#7#14'po' +'ScreenCenter'#10'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#10'RightPanel'#4'Left' +#3'C'#2#6'Height'#3#224#1#5'Width'#3#141#0#5'Align'#7#7'alRight'#12'ClientHe' +'ight'#3#224#1#11'ClientWidth'#3#141#0#8'TabOrder'#2#0#0#6'TLabel'#6'Label1' +#4'Left'#2#16#6'Height'#2#14#3'Top'#2#8#5'Width'#2'#'#7'Caption'#6#7'History' +#11'ParentColor'#8#0#0#7'TButton'#7'Button1'#4'Left'#2#16#6'Height'#2#25#3'T' +'op'#3#184#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0 +#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#12'End Programm'#7'OnClick'#7 +#12'Button1Click'#8'TabOrder'#2#0#0#0#8'TListBox'#11'HistoryList'#4'Left'#2 +#16#6'Height'#3#29#1#3'Top'#2#24#5'Width'#2'm'#7'Anchors'#11#5'akTop'#6'akLe' +'ft'#7'akRight'#8'akBottom'#0#8'TabOrder'#2#1#0#0#7'TButton'#7'Button2'#4'Le' +'ft'#2#16#6'Height'#2#25#3'Top'#3';'#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft' +#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#5'C' +'lear'#7'OnClick'#7#12'Button2Click'#8'TabOrder'#2#2#0#0#9'TComboBox'#10'CbS' +'etCaret'#4'Left'#2#16#6'Height'#2#21#3'Top'#3#141#1#5'Width'#2'm'#7'Anchors' +#11#6'akLeft'#7'akRight'#8'akBottom'#0#16'AutoCompleteText'#11#22'cbactEndOf' +'LineComplete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'ItemIndex'#2 +#0#13'Items.Strings'#1#6#10'Caret-Line'#6#13'Caret-Sub-Bar'#6#13'Caret-Big-B' +'ar'#0#8'OnChange'#7#16'CbSetCaretChange'#5'Style'#7#14'csDropDownList'#8'Ta' +'bOrder'#2#3#4'Text'#6#10'Caret-Line'#0#0#7'TButton'#7'Button3'#4'Left'#2#16 +#6'Height'#2#25#3'Top'#3'a'#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRigh' +'t'#8'akBottom'#0#7'Caption'#6#7'Process'#7'OnClick'#7#12'Button3Click'#8'Ta' +'bOrder'#2#4#0#0#0#9'TSplitter'#9'Splitter1'#4'Left'#3'>'#2#6'Height'#3#224#1 +#5'Width'#2#5#5'Align'#7#7'alRight'#7'Beveled'#9#12'ResizeAnchor'#7#7'akRigh' +'t'#0#0#7'TCmdBox'#6'CmdBox'#6'Height'#3#224#1#5'Width'#3'>'#2#5'Align'#7#8 +'alClient'#10'CaretColor'#4#255#128#0#0#9'CaretType'#7#8'cartUser'#10'CaretW' +'idth'#2#1#11'CaretHeight'#2#13#11'CaretYShift'#2#3#7'OnInput'#7#11'CmdBoxIn' +'put'#9'LineCount'#3#232#3#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color' +#7#8'clSilver'#11'Font.Height'#2#240#9'Font.Name'#6#5'Arial'#10'Font.Pitch'#7 +#10'fpVariable'#15'BackGroundColor'#7#6'clNavy'#8'TabWidth'#2'<'#12'PassWord' +'Char'#6#1'*'#10'HistoryMax'#2#10#13'InputSelColor'#7#8'clPurple'#18'InputSe' +'lBackGround'#7#8'clSilver'#13'CaretInterval'#3#244#1#23'GraphicalCharacterW' +'idth'#2#10#10'AutoFollow'#9#0#0#6'TTimer'#11'ReaderTimer'#8'Interval'#3#188 +#2#7'OnTimer'#7#16'ReaderTimerTimer'#4'left'#2'B'#3'top'#2'K'#0#0#6'TTimer' +#12'ProcessTimer'#7'Enabled'#8#8'Interval'#2'd'#7'OnTimer'#7#17'ProcessTimer' +'Timer'#4'left'#2'h'#3'top'#2'K'#0#0#0#10'TWMainForm'#9'WMainForm'#4'Left'#3 +'?'#1#6'Height'#3#224#1#3'Top'#3'Q'#1#5'Width'#3#208#2#13'ActiveControl'#7#6 +'CmdBox'#7'Caption'#6#27'TCmdBox Example Application'#12'ClientHeight'#3#224 +#1#11'ClientWidth'#3#208#2#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'Fo' +'rmDestroy'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.9.25'#0#6 +'TPanel'#10'RightPanel'#4'Left'#3'C'#2#6'Height'#3#224#1#5'Width'#3#141#0#5 +'Align'#7#7'alRight'#12'ClientHeight'#3#224#1#11'ClientWidth'#3#141#0#8'TabO' +'rder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#14#3'Top'#2#8#5'Wi' +'dth'#2'#'#7'Caption'#6#7'History'#11'ParentColor'#8#0#0#7'TButton'#7'Button' +'1'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#184#1#5'Width'#2'm'#7'Anchors'#11#6 +'akLeft'#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Captio' +'n'#6#12'End Programm'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#0#0#0#8'T' +'ListBox'#11'HistoryList'#4'Left'#2#16#6'Height'#3#29#1#3'Top'#2#24#5'Width' +#2'm'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabOrder'#2 +#1#0#0#7'TButton'#7'Button2'#4'Left'#2#16#6'Height'#2#25#3'Top'#3';'#1#5'Wid' +'th'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#25'BorderSpacing.' +'InnerBorder'#2#4#7'Caption'#6#5'Clear'#7'OnClick'#7#12'Button2Click'#8'TabO' +'rder'#2#2#0#0#9'TComboBox'#10'CbSetCaret'#4'Left'#2#16#6'Height'#2#21#3'Top' +#3#141#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#16'A' +'utoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#10 +'ItemHeight'#2#13#9'ItemIndex'#2#0#13'Items.Strings'#1#6#10'Caret-Line'#6#13 +'Caret-Sub-Bar'#6#13'Caret-Big-Bar'#0#8'OnChange'#7#16'CbSetCaretChange'#5'S' +'tyle'#7#14'csDropDownList'#8'TabOrder'#2#3#4'Text'#6#10'Caret-Line'#0#0#7'T' +'Button'#7'Button3'#4'Left'#2#16#6'Height'#2#25#3'Top'#3'a'#1#5'Width'#2'm'#7 +'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#7'Process'#7'On' +'Click'#7#12'Button3Click'#8'TabOrder'#2#4#0#0#0#9'TSplitter'#9'Splitter1'#4 ,'Left'#3'>'#2#6'Height'#3#224#1#5'Width'#2#5#5'Align'#7#7'alRight'#7'Beveled' +#9#12'ResizeAnchor'#7#7'akRight'#0#0#7'TCmdBox'#6'CmdBox'#6'Height'#3#224#1#5 +'Width'#3'>'#2#5'Align'#7#8'alClient'#10'CaretColor'#4#255#128#0#0#9'CaretTy' +'pe'#7#8'cartUser'#10'CaretWidth'#2#1#11'CaretHeight'#2#13#11'CaretYShift'#2 +#3#7'OnInput'#7#11'CmdBoxInput'#9'LineCount'#3#232#3#12'Font.CharSet'#7#12'A' +'NSI_CHARSET'#10'Font.Color'#7#8'clSilver'#11'Font.Height'#2#240#9'Font.Name' +#6#5'Arial'#10'Font.Pitch'#7#10'fpVariable'#15'BackGroundColor'#7#6'clNavy'#8 +'TabWidth'#2'<'#12'PassWordChar'#6#1'*'#10'HistoryMax'#2#10#13'InputSelColor' +#7#8'clPurple'#18'InputSelBackGround'#7#8'clSilver'#13'CaretInterval'#3#244#1 +#23'GraphicalCharacterWidth'#2#10#10'AutoFollow'#9#0#0#6'TTimer'#11'ReaderTi' +'mer'#8'Interval'#3#188#2#7'OnTimer'#7#16'ReaderTimerTimer'#4'left'#2'B'#3't' +'op'#2'K'#0#0#6'TTimer'#12'ProcessTimer'#7'Enabled'#8#8'Interval'#2'd'#7'OnT' +'imer'#7#17'ProcessTimerTimer'#4'left'#2'h'#3'top'#2'K'#0#0#0 ]); doublecmd-0.9.8/components/CmdLine/wnmainform.lfm0000644000175000001440000000611011077656332021113 0ustar alexxusersobject WMainForm: TWMainForm Left = 319 Height = 480 Top = 337 Width = 720 ActiveControl = CmdBox Caption = 'TCmdBox Example Application' ClientHeight = 480 ClientWidth = 720 OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '0.9.25' object RightPanel: TPanel Left = 579 Height = 480 Width = 141 Align = alRight ClientHeight = 480 ClientWidth = 141 TabOrder = 0 object Label1: TLabel Left = 16 Height = 14 Top = 8 Width = 35 Caption = 'History' ParentColor = False end object Button1: TButton Left = 16 Height = 25 Top = 440 Width = 109 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = 'End Programm' OnClick = Button1Click TabOrder = 0 end object HistoryList: TListBox Left = 16 Height = 285 Top = 24 Width = 109 Anchors = [akTop, akLeft, akRight, akBottom] TabOrder = 1 end object Button2: TButton Left = 16 Height = 25 Top = 315 Width = 109 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = 'Clear' OnClick = Button2Click TabOrder = 2 end object CbSetCaret: TComboBox Left = 16 Height = 21 Top = 397 Width = 109 Anchors = [akLeft, akRight, akBottom] AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending] ItemHeight = 13 ItemIndex = 0 Items.Strings = ( 'Caret-Line' 'Caret-Sub-Bar' 'Caret-Big-Bar' ) OnChange = CbSetCaretChange Style = csDropDownList TabOrder = 3 Text = 'Caret-Line' end object Button3: TButton Left = 16 Height = 25 Top = 353 Width = 109 Anchors = [akLeft, akRight, akBottom] Caption = 'Process' OnClick = Button3Click TabOrder = 4 end end object Splitter1: TSplitter Left = 574 Height = 480 Width = 5 Align = alRight Beveled = True ResizeAnchor = akRight end object CmdBox: TCmdBox Height = 480 Width = 574 Align = alClient CaretColor = 33023 CaretType = cartUser CaretWidth = 1 CaretHeight = 13 CaretYShift = 3 OnInput = CmdBoxInput LineCount = 1000 Font.CharSet = ANSI_CHARSET Font.Color = clSilver Font.Height = -16 Font.Name = 'Arial' Font.Pitch = fpVariable BackGroundColor = clNavy TabWidth = 60 PassWordChar = '*' HistoryMax = 10 InputSelColor = clPurple InputSelBackGround = clSilver CaretInterval = 500 GraphicalCharacterWidth = 10 AutoFollow = True end object ReaderTimer: TTimer Interval = 700 OnTimer = ReaderTimerTimer left = 66 top = 75 end object ProcessTimer: TTimer Enabled = False Interval = 100 OnTimer = ProcessTimerTimer left = 104 top = 75 end end doublecmd-0.9.8/components/CmdLine/ucmdbox.pas0000644000175000001440000020421212747700216020403 0ustar alexxusers{ Copyright (C) 2007 Julian Schutsch This source 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 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 Lesser General Public License for more details. A copy of the GNU Lesser 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. Changelog: 9.27.2007 : Seperation from another Package, first Release under GPL Version 0.1 10.02.2007 : Licence Changed to LGPL Added : History Added : Password Input mode Fixed : Blank Screen when Resizing so that TopLine disappears. Added : Fixed Prompt Description infront of Input, moves along with it Etc : Functions, minor Bugs Missing : FreeLineWidth full support Version 0.2 10.08.2007 : Removed : Fixed Line Width Support, Source now less complex Added : Paste/Copy/Cut Ability, Select with Mouse and Shift/Keys Added : TRTLCriticalsection called FLock to make Writeln/Write Threadsafe Fixed : GTK 1/2 Linux support, several changes to make that work... Removed : LineWidth, can cause Property Loading Errors if used with old Apps ! Workarn : GTK Font height gets 2 added on all plattforms, means, win32 have two extra dots unecessarily, can't solve that ! Fixed : Pos 1/End Key changes Scrollbar (Different GTK behaviour !) Version 0.3 12.06.2008 : Optimized Color String output, still needs testing and PWD Strings are not changed yet. Improvement visible on Win32, but still to slow, any hacks? 17.06.2008 : TColorString changed completly, now using Arrays instead of linked lists 25.06.2008 : Fixed everything for Multispace support Added tabulator behaviour Caret type and Color now customizable Input Selection Colors published Speed improvement using precalculated Sum-Widths for TColorString Lots of minor UTF8 Bugs fixed 26.06.2008 : Escape Codes for some sort of Graphical output (Tables, lines, etc) Better moving Input Bug fixes in MakeInputVisible 27.06.2008 : Add FGraphicCharWidth 28.06.2008 : New Escape Code preprocessor Support for different modes (ANSI color, CmdBox, None(ignore)) 29.06.2008 : FStringBuffer added,Works without WakeMainThread now as well Fixed LineOutAndFill Added AutoFollow Todo : Input Masks Todo : Docu } unit uCmdBox; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, ComCtrls, Controls, Graphics, Forms, LCLType, LCLIntf, LMessages, LResources, ClipBrd, LCLProc, LazUTF8; type TCaretType=(cartLine,cartSubBar,cartBigBar,cartUser); TEscapeCodeType=(esctCmdBox,esctAnsi,esctNone); TEscapeMode=(escmNone,escmOperation,escmData2,escmData1,escmAnsiOperation,escmAnsiSquare); type TCmdBox=class; type TColorstring=class; type EOnCmdBoxInput=Procedure(ACmdBox:TCmdBox;Input:String) of object; type EOnCmdBoxInputChange=Procedure(ACmdBox:TCmdBox;InputData:TColorstring) of object; type { TCmdBox } TCmdBox=class(TCustomControl) public constructor Create(AComponent:TComponent);override; destructor Destroy;override; protected procedure Paint;override; procedure Resize;override; procedure UTF8KeyPress(var Key:TUTF8Char);override; procedure KeyDown(var Key:Word;Shift:TShiftState);override; procedure CreateParams(var Params:TCreateParams);override; procedure CreateWnd;override; procedure WMVScroll(var message: TLMVScroll);message LM_VSCROLL; procedure MouseDown(Button:TMouseButton;Shift:TShiftState;x,y:Integer);override; procedure MouseUp(Button:TMouseButton;Shift:TShiftState;x,y:Integer);override; procedure MouseMove(Shift:TShiftState;x,y:Integer);override; procedure EraseBackground(DC:HDC);override; private FLock : System.TRTLCriticalSection; FCaretTimer : TTimer; FCaretVisible : Boolean; FLineCount : Integer; FLines : array of TColorstring; FLineHeights : array of Integer; FLineHeightSum : array of Integer; FTopLine : Integer; FPageHeight : Integer; FVisibleLines : Integer; FVSBVisible : Boolean; FVSBPos : Integer; FVSBWidth : Integer; FClientWidth : Integer; FClientHeight : Integer; FCaretX : Integer; FOutX,FOutY : Integer; FInputX,FInputY : Integer; FInputPos : Integer; FCharHeight : Integer; FLineOfTopLine : Integer; FVisibleLineCount : Integer; FInput : Boolean; FInputBuffer : TColorstring; FInputVisible : Boolean; FInputMinPos : Integer; FUTF8InputMinPos : Integer; FOnInput : EOnCmdBoxInput; FOnAny : EOnCmdBoxInputChange; FOnInputChange : EOnCmdBoxInputChange; FBackGroundColor : TColor; FCurrentColor : TColor; FCurrentBackGround : TColor; FFont : TFont; FPassWordChar : TUTF8Char; FInputIsPassWord : Boolean; FHistory : Array of TColorstring; FHistoryLength : Integer; FHistoryMax : Integer; FHistoryPos : Integer; FInputColor : TColor; FInputBackground : TColor; FInputSelColor : TColor; FInputSelBackGround : TColor; FMouseDown : Boolean; FSelStart,FSelEnd : Integer; FMouseDownInputPos : Integer; FCurrentString : String; FCaretColor : TColor; FCaretType : TCaretType; FCaretWidth : Integer; FCaretHeight : Integer; FCaretYShift : Integer; FTabWidth : Integer; FGraphicCharWidth : Integer; FEscapeCodeType : TEscapeCodeType; FEscapeMode : TEscapeMode; FEscapeData : String; FStringBuffer : TStringList; FAutoFollow : Boolean; procedure CaretTimerExecute(Sender:TObject); procedure SetLineCount(c:Integer); procedure SetTopLine(Nr:Integer); procedure AdjustScrollBars; function AdjustLineHeight(i:Integer):Integer; procedure MakeInputVisible; procedure MakeOutVisible; procedure SetFont(F:TFont); procedure SetBackGroundColor(c:Tcolor); function GetSystemMetricsGapSize(const Index:Integer):Integer; procedure ScrollBarRange(Which: Integer; aRange,aPage: Integer); procedure ScrollBarPosition(Which,Value:Integer); function UpdateLineHeights:Integer; procedure TranslateScrollBarPosition; procedure ScrollUp; procedure SetHistoryMax(v:Integer); procedure InsertHistory; procedure SetHistoryPos(v:Integer); function GetHistory(i:Integer):string; procedure DeleteHistoryEntry(i:Integer); procedure MakeFirstHistoryEntry(i:Integer); function MoveInputCaretTo(x,y:Integer;chl:Boolean):Boolean; procedure SetSelection(Start,Ende:Integer); procedure LeftSelection(Start,Ende:Integer); procedure RightSelection(Start,Ende:Integer); procedure DeleteSelected; procedure SetOutY(v:Integer); procedure IntWrite; procedure MultiWrite; procedure SetCaretType(ACaretType:TCaretType); procedure SetCaretWidth(AValue:Integer); procedure SetCaretHeight(AValue:Integer); procedure SetCaretYShift(AValue:Integer); procedure SetTabWidth(AValue:Integer); function GetCaretInterval:Integer; procedure SetCaretInterval(AValue:Integer); public function HistoryHas(s:string):Boolean; function HistoryIndexOf(s:string):Integer; procedure ClearHistory; procedure TextColor(C:TColor); procedure TextBackground(C:TColor); procedure TextColors(FC,BC:TColor); procedure Write(s:String); procedure Writeln(s:String); procedure WriteStream(Stream:TStream); procedure Clear; procedure StartRead(DFC,DBC:TColor;const Desc:String;IFC,IBC:TColor); procedure StartReadPassWord(DFC,DBC:TColor;const Desc:String;IFC,IBC:TColor); procedure StopRead; procedure CopyToClipBoard; procedure PasteFromClipBoard; procedure CutToClipBoard; procedure ClearLine; property OutX : Integer read FOutX write FOutX; property OutY : Integer read FOutY write SetOutY; property TopLine : Integer read FTopLine write SetTopLine; property History[i:Integer] : string read GetHistory; property InputPos : Integer read FInputPos write FInputPos; function HistoryCount : Integer; published property Align; property Anchors; property ShowHint; property CaretColor : TColor read FCaretColor write FCaretColor; property CaretType : TCaretType read FCaretType write SetCaretType; property CaretWidth : Integer read FCaretWidth write SetCaretWidth; property CaretHeight : Integer read FCaretHeight write SetCaretHeight; property CaretYShift : Integer read FCaretYShift write SetCaretYShift; property OnInput : EOnCmdBoxInput read FOnInput write FOnInput; property OnInputChange : EOnCmdBoxInputChange read FOnInputChange write FOnInputChange; property OnAny : EOnCmdBoxInputChange read FOnAny write FOnAny; property LineCount : Integer read FLineCount write SetLineCount; property Font : TFont read FFont write SetFont; property BackGroundColor : TColor read FBackgroundColor write SetBackGroundColor; property TabWidth : Integer read FTabWidth write SetTabWidth; property PassWordChar : TUTF8Char read FPassWordChar write FPassWordChar; property HistoryMax : Integer read FHistoryMax write SetHistoryMax; property InputSelColor : TColor read FInputSelColor write FInputSelColor; property InputSelBackGround : TColor read FInputSelBackGround write FInputSelBackGround; property CaretInterval : Integer read GetCaretInterval write SetCaretInterval; property EscapeCodeType : TEscapeCodeType read FEscapeCodeType write FEscapeCodeType; property GraphicalCharacterWidth : Integer read FGraphicCharWidth write FGraphicCharWidth; property AutoFollow : Boolean read FAutoFollow write FAutoFollow; property DoubleBuffered default true; end; type TColorChar=record FChar : TUTF8Char; FCharWidth : Integer; FSumWidth : Integer; FWordStart : Integer; FFrontColor : TColor; FBackColor : TColor; end; type TColorString=class private FChars : array of TColorChar; FSumWidth : Integer; FPassWordStart : Integer; FPassWordChar : TUTF8Char; FTabWidth : Integer; procedure MinimumLength(V:Integer;FC,BC:TColor); procedure MaximumLength(V:Integer); procedure UpdateSum; public constructor Create(AFont:TFont); destructor Destroy;override; procedure Clear; procedure OverWrite(S:String;Pos:Integer;FC,BC:TColor); procedure OverWriteChar(s:TUTF8Char;Pos,ADefWidth:Integer;FC,BC:TColor); procedure OverWrite(S:TColorstring;Pos:Integer); procedure OverWritePW(S:TColorstring;PWS,Pos:Integer;PWC:String); procedure PartOverWrite(S:TColorstring;Start,Ende,Pos:Integer); procedure LineOutAndFill(ACanvas:TCanvas;AX,AY,ALeftX,AWrapWidth,ACH,ACB,ACaretPos:Integer;ABC,ACC:TColor;ACaretHeight,ACaretWidth,ACaretYShift:Integer;ADrawCaret:Boolean); function Getstring:String; function GetPartstring(Start,Ende:Integer):String; procedure Delete(Index:Integer); procedure Delete(Index,Len:Integer); procedure Insert(Index:Integer;C:String;FC,BC:TColor); procedure BColorBlock(StartPos,EndPos:Integer;C:TColor); procedure ColorBlock(StartPos,EndPos:Integer;FC,BC:TColor); function LineCount(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; function GetLength:Integer; function GetLineOfCaret(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; function GetCharPosition(AWrapWidth,ALine,AXPos:Integer):Integer; private FFont : TFont; FDefaultBackGround : TColor; public property TabWidth : Integer read FTabWidth write FTabWidth; property PassWordChar : TUTF8Char read FPassWordChar write FPassWordChar; property PassWordStart : Integer read FPassWordStart write FPassWordStart; property Length : Integer read GetLength; property DefaultBackGround : TColor read FDefaultBackground write FDefaultBackground; property Font : TFont read FFont write FFont; end; procedure Register; implementation procedure TColorString.UpdateSum; var i : Integer; LastWordStart : Integer; SumWidth : Integer; begin LastWordStart := 0; SumWidth := 0; for i:=0 to High(FChars) do begin with FChars[i] do begin FWordStart := LastWordStart; case FChar[1] of #9: begin FCharWidth := (SumWidth div FTabWidth+1)*FTabWidth-SumWidth; LastWordStart := i+1; end; #27: begin case FChar[2] of #9: begin FCharWidth := (SumWidth div FTabWidth+1)*FTabWidth-SumWidth; LastWordStart := i+1; end; #10:LastWordStart:=i+1; #32,#46,#196,#205: begin FCharWidth := Ord(FChar[3]); LastWordStart := i+1; end; #33,#47,#197,#206: begin FCharWidth := (Ord(FChar[3])+Ord(FChar[4])*256)-SumWidth; if FCharWidth<0 then FCharWidth:=0; LastWordStart := i+1; end; end; end; else if FChar=' ' then LastWordStart:=i+1; end; SumWidth := SumWidth+FCharWidth; FSumWidth := SumWidth; end; end; FSumWidth:=SumWidth; end; function TColorString.GetLength:Integer; begin Result:=System.Length(FChars); end; procedure TCmdBox.SetTabWidth(AValue:Integer); var i:Integer; begin FTabWidth:=AValue; for i:=0 to FLineCount-1 do FLines[i].TabWidth:=AValue; UpdateLineHeights; Invalidate; end; procedure TCmdBox.SetCaretWidth(AValue:Integer); begin FCaretWidth := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretHeight(AValue:Integer); begin FCaretHeight := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretYShift(AValue:Integer); begin FCaretYShift := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretType(ACaretType:TCaretType); begin case ACaretType of cartLine: begin if HandleAllocated then FCaretHeight:=FFont.GetTextHeight('A')-3 else FCaretHeight:=-1; FCaretWidth := 1; FCaretYShift := 3; end; cartSubBar: begin FCaretWidth := -1; FCaretHeight := 3; FCaretYShift := 0; end; cartBigBar: begin if HandleAllocated then FCaretHeight:=FFont.GetTextHeight('A')-3 else FCaretHeight:=-1; FCaretWidth := -1; FCaretYShift := 3; end; end; Invalidate; FCaretType:=ACaretType; end; // TOdo : Use string buffer instead of string (speed improvement expected) procedure TColorString.LineOutAndFill(ACanvas:TCanvas;AX,AY,ALeftX,AWrapWidth,ACH,ACB,ACaretPos:Integer;ABC,ACC:TColor;ACaretHeight,ACaretWidth,ACaretYShift:Integer;ADrawCaret:Boolean); var LineStart : Integer; LineEnd : Integer; MidWidth : Integer; LineStartSumWidth : Integer; x : Integer; LastLineSumWidth : Integer; ACHH : Integer; ACBH : Integer; procedure DrawLine; var SameColor : String; SameForeColor : TColor; SameBackColor : TColor; SameColorX : Integer; SameColorWidth : Integer; LP : Integer; CaretX : Integer; CaretW : Integer; CW : Integer; xp : Integer; begin if (AY<=-ACH) and (AY>ACanvas.Height) then begin Inc(AY,ACH); Ax:=ALeftx; Exit; end; SameColor:=''; ACanvas.Brush.Style:=bsSolid; // TODO: Please try to reproduce this Ultra-Shit Error which couples GetTextWidth input to // TextOut Output. I can't solve this...i am not Stupid Enough for such errors! // (Is in bug report, should be fixed somewhere in the future!) ACanvas.Font.GetTextWidth('%%%_$%_Hallo\\\\\\\\\32489738'); // End of shit LP := LineStart; CaretX := -1; while LineStart<>LineEnd+1 do begin with FChars[LineStart] do begin CW:=FCharWidth; if FChar=#9 then begin if SameColor<>'' then begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,AY,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); Inc(SameColorX,SameColorWidth); SameColor:=''; end else SameColorX:=AX; ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); end else if FChar[1]=#27 then begin if SameColor<>'' then begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,AY,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); Inc(SameColorX,SameColorWidth); SameColor:=''; end else SameColorX:=AX; case FChar[2] of #9: begin case FChar[3] of #46: begin ACanvas.Pen.Color:=FFrontColor; ACanvas.Pen.Style:=psDash; ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); xp:=SameColorX; if xp mod 2<>0 then Inc(xp); while xp0 then Inc(xp); while xp=FPassWordStart) then begin SameColor := FPassWordChar; SameColorWidth := FFont.GetTextWidth(FPassWordChar); end else begin SameColor := FChar; SameColorWidth := FCharWidth; end; SameColorX := AX; SameForeColor := FFrontColor; SameBackColor := FBackColor; end else begin if (SameForeColor=FFrontColor) and (SameBackColor=FBackColor) then begin if (LP>=FPassWordStart) then begin SameColor:=SameColor+FPassWordChar; Inc(SameColorWidth,FFont.GetTextWidth(FPassWordChar)); end else begin SameColor:=SameColor+FChar; Inc(SameColorWidth,FCharWidth); end; end else begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,Ay,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); if (LP>=FPassWordStart) then begin SameColor := FPassWordChar; SameColorWidth := FFont.GetTextWidth(FPassWordChar); end else begin SameColor := FChar; SameColorWidth := FCharWidth; end; SameForeColor := FFrontColor; SameBackColor := FBackColor; SameColorX := AX; end; end; if LP=ACaretPos then begin CaretX:=AX; CaretW:=FCharWidth; end; Inc(AX,CW); Inc(LP); end; Inc(LineStart); end; if SameColor<>'' then begin ACanvas.Font.Color := SameForeColor; ACanvas.Brush.Color := SameBackColor; ACanvas.FillRect(SameColorX,Ay,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); end; ACanvas.FillRect(AX,AY,AWrapWidth,AY+ACH); AX:=ALeftX; Inc(AY,ACH); if ADrawCaret and (CaretX>=0) then begin ACanvas.Brush.Color:=ACC; if ACaretWidth>=0 then CaretW:=ACaretWidth; ACanvas.FillRect(CaretX,AY-ACaretHeight-ACaretYShift,CaretX+CaretW,AY-ACaretYShift); end; end; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin ACanvas.Brush.Style := bsSolid; ACanvas.Brush.Color := ABC; ACanvas.FillRect(AX,AY,AWrapWidth,AY+ACH); Exit; end; ACHH := ACH div 2; ACBH := ACB div 2; MidWidth := FSumWidth div System.Length(FChars); LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; x := 0; while LineStartHigh(FChars) then x:=High(FChars); while (xLineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LineEnd:=x; DrawLine; LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; end; if ACaretPos>=LineStart then begin if ACaretWidth>=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); AX:=LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x; if Ax+x>AWrapWidth then begin Ax:=0; ACanvas.Brush.Color:=ABC; ACanvas.FillRect(0,AY,AWrapWidth,AY+ACH); Inc(Ay,ACH); end; if ADrawCaret then begin ACanvas.Brush.Color:=ACC; ACanvas.FillRect(AX,AY-ACaretHeight-ACaretYShift,AX+x,AY-ACaretYShift); end; end; end; function TColorString.GetCharPosition(AWrapWidth,ALine,AXPos:Integer):Integer; var x,MidWidth,LineStart,LineStartSumWidth,LastLineSumWidth,LastLineStart:Integer; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin Result:=0; Exit; end; MidWidth := FSumWidth div System.Length(FChars); if MidWidth=0 then begin Result:=0; Exit; end; LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; x:=0; while (LineStart=0) do begin x:=LineStart+AWrapWidth div MidWidth; if x>High(FChars) then x:=High(FChars); while (xLineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LastLineStart := LineStart; LineStart := x+1; Dec(ALine); end; Result:=LastLineStart; while (ResultHigh(FChars) then x:=High(FChars); while (xLineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; if ACaretPos=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); if (ACaretPos>LineStart) or (LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x+x<=AWrapWidth) then Dec(Result); end; function TColorString.LineCount(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; var x : Integer; MidWidth : Integer; LineStart : Integer; LineStartSumWidth : Integer; LastLineSumWidth : Integer; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin Result:=1; Exit; end; MidWidth := FSumWidth div System.Length(FChars); if MidWidth=0 then begin Result:=1; Exit; end; LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; Result:=0; x:=0; while LineStartHigh(FChars) then x:=High(FChars); while (xLineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; Inc(Result); end; if ACaretWidth>=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); if (ACaretPos>=LineStart) and (LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x+x>AWrapWidth) then Inc(Result); end; constructor TColorString.Create(AFont:TFont); begin inherited Create; FTabWidth := 1; FFont := AFont; FPassWordStart := MaxInt; end; procedure TColorstring.BColorBlock(StartPos,EndPos:Integer;C:TColor); var i:Integer; begin if StartPos<0 then StartPos:=0; if EndPos>High(FChars) then EndPos:=High(FChars); for i:=StartPos to EndPos do FChars[i].FBackColor:=C; end; procedure TColorstring.ColorBlock(StartPos,EndPos:Integer;FC,BC:TColor); var i:Integer; begin if StartPos<0 then StartPos:=0; if EndPos>High(FChars) then EndPos:=High(FChars); for i:=StartPos to EndPos do begin FChars[i].FFrontColor := FC; FChars[i].FBackColor := BC; end; end; procedure TColorstring.Insert(Index:Integer;C:string;FC,BC:TColor); var i : Integer; l : Integer; Pp : Integer; OldLen : Integer; SLen : Integer; begin OldLen := System.Length(FChars); SLen := UTF8Length(C); if OldLen=FPassWordStart then FCharWidth:=FFont.GetTextWidth(FPassWordChar) else FCharWidth:=FFont.GetTextWidth(FChar); FFrontColor := FC; FBackColor := BC; end; Inc(pp,l); end; UpdateSum; end; procedure TColorstring.Delete(Index,Len:Integer); var i:Integer; begin if (Len=0) or (Index>=System.Length(FChars)) then Exit; if Index+Len>System.Length(FChars) then Len:=System.Length(FChars)-Index; for i:=Index to System.Length(FChars)-Len-1 do FChars[i]:=FChars[i+Len]; SetLength(FChars,System.Length(FChars)-Len); UpdateSum; end; procedure TColorstring.Delete(Index:Integer); var i:Integer; begin if (Index>=System.Length(FChars)) then Exit; for i:=Index to System.Length(FChars)-2 do FChars[i]:=FChars[i+1]; SetLength(FChars,System.Length(FChars)-1); UpdateSum; end; function TColorstring.GetPartstring(Start,Ende:Integer):string; var i,n : Integer; Len : Integer; begin if Start<0 then Start:=0; if Ende>High(FChars) then Ende:=High(FChars); Len:=0; for i:=Start to Ende do Inc(Len,System.Length(FChars[i].FChar)); SetLength(Result,Len); Len:=1; for i:=Start to Ende do begin with FChars[i] do begin for n:=1 to System.Length(FChar) do begin Result[Len]:=FChar[n]; Inc(Len); end; end; end; end; function TColorstring.Getstring:String; var i,n : Integer; Len : Integer; begin Len := 0; for i:=0 to High(FChars) do Inc(Len,System.Length(FChars[i].FChar)); SetLength(Result,Len); Len := 1; for i:=0 to High(FChars) do begin with FChars[i] do begin for n:=1 to System.Length(FChar) do begin Result[Len]:=FChar[n]; Inc(Len); end; end; end; end; procedure TColorstring.OverWritePW(S:TColorstring;PWS,Pos:Integer;PWC:String); var i : Integer; CPassWordStart:Integer; begin MinimumLength(Pos+S.Length,CLSilver,S.FDefaultBackGround); CPassWordStart:=PWS; for i:=0 to S.Length-1 do begin FChars[i+Pos]:=S.FChars[i]; if CPassWordStart<=0 then FChars[i+Pos].FChar:=PWC; Dec(CPassWordStart); end; UpdateSum; end; procedure TColorstring.OverWrite(S:TColorstring;Pos:Integer); var i : Integer; begin MinimumLength(Pos+S.Length,CLSilver,S.FDefaultBackGround); for i:=0 to S.Length-1 do FChars[i+Pos]:=S.FChars[i]; UpdateSum; end; procedure TColorstring.PartOverWrite(S:TColorstring;Start,Ende,Pos:Integer); var i : Integer; begin MinimumLength(Pos+Ende-Start,CLSilver,S.FDefaultBackGround); for i:=0 to Ende-Start-1 do FChars[i+Pos]:=S.FChars[i+Start]; UpdateSum; end; procedure TColorstring.OverWrite(s:String;Pos:Integer;FC,BC:TColor); var i,Pp,l : Integer; begin MinimumLength(Pos+UTF8Length(S),FC,BC); Pp:=1; for i:=0 to UTF8Length(S)-1 do begin l:=UTF8CharacterLength(@s[Pp]); with FChars[i+Pos] do begin FChar := Copy(S,Pp,l); FCharWidth := FFont.GetTextWidth(FChar); FFrontColor := FC; FBackColor := BC; end; Inc(Pp,l); end; UpdateSum; end; procedure TColorstring.OverWriteChar(s:TUTF8Char;Pos,ADefWidth:Integer;FC,BC:TColor); begin MinimumLength(Pos+1,FC,BC); with FChars[Pos] do begin FChar := s; FCharWidth := ADefWidth; FFrontColor := FC; FBackColor := BC; end; UpdateSum; end; procedure TColorstring.MinimumLength(V:Integer;FC,BC:TColor); var OldLen,i:Integer; begin if System.Length(FChars)V then SetLength(FChars,V); end; procedure TColorstring.Clear; begin FChars:=Nil; end; procedure TCmdBox.ClearLine; begin if FLines[FOutY].Length<>0 then begin FLines[FOutY].Clear; FOutX:=0; if FInput then FInputY:=FOutY; Invalidate; end; end; function TCmdBox.GetCaretInterval:Integer; begin Result:=FCaretTimer.Interval; end; procedure TCmdBox.SetCaretInterval(AValue:Integer); begin FCaretTimer.Interval:=AValue; end; procedure TCmdBox.MultiWrite; var DoWrite:Boolean; begin System.EnterCriticalSection(FLock); DoWrite:=FStringBuffer.Count<>0; if DoWrite then begin FCurrentString:=FStringBuffer[0]; FStringBuffer.Delete(0); end; System.LeaveCriticalSection(FLock); if DoWrite then IntWrite; end; procedure TCmdBox.Write(S:String); begin if ThreadID=MainThreadId then begin MultiWrite; FCurrentString:=S; IntWrite; end else begin System.EnterCriticalSection(FLock); FStringBuffer.Add(S); System.LeaveCriticalSection(FLock); if Assigned(WakeMainThread) then TThread.Synchronize(Nil,@MultiWrite); end; end; function TCmdBox.HistoryIndexOf(s:string):Integer; begin for Result:=0 to HistoryCount-1 do if History[Result]=s then Exit; Result:=-1; end; function TCmdBox.HistoryHas(s:string):Boolean; var i:Integer; begin Result := True; for i:=0 to HistoryCount-1 do if History[i]=s then Exit; Result := False; end; function TCmdBox.HistoryCount:Integer; begin HistoryCount:=FHistoryLength-Ord(FInput); end; function TCmdBox.GetHistory(i:Integer):string; begin Inc(i,Ord(FInput)); if (i>=0) and (iFHistoryMax then begin if FHistoryLength>v then FHistoryLength:=v; for i:=v to FHistoryMax-1 do FHistory[i].Free; SetLength(FHistory,v); for i:=FHistoryMax to v-1 do FHistory[i]:=TColorstring.Create(Canvas.Font); FHistoryMax:=v; end; end; procedure TCmdBox.WriteStream(Stream:TStream); var c:wideString; begin while Stream.Position-1 then FInputBuffer.ColorBlock(FSelStart,FSelEnd,FInputColor,FInputBackGround); if Start=Ende then FSelStart:=-1 else begin if Start-1 then FInputBuffer.ColorBlock(FSelStart,FSelEnd,FInputSelColor,FInputSelBackGround); end; procedure TCmdBox.CopyToClipBoard; begin if FSelStart<>-1 then begin ClipBoard.AsText:=FInputBuffer.GetPartstring(FSelStart,FSelEnd); end; end; procedure TCmdBox.PasteFromClipBoard; var s:widestring; l,Pp:Integer; begin if ClipBoard.HasFormat(CF_TEXT) then begin s := ClipBoard.AsText; Pp := 1; while pp<=Length(s) do begin l := UTF8CharacterLength(@S[Pp]); if (l=1) and (Byte(S[Pp])<32) then Delete(s,Pp,1) else inc(Pp,l); end; FInputBuffer.Insert(InputPos,s,FInputColor,FInputBackGround); InputPos := InputPos + UTF8Length(s); FCaretX:=FInputX+InputPos; AdjustScrollBars; MakeInputVisible; FHistoryPos:=0; if Assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); if Assigned(FOnAny) then FOnAny(Self,FInputBuffer); end; end; procedure TCmdBox.DeleteSelected; begin if FSelStart<>-1 then begin FInputBuffer.Delete(FSelStart,FSelEnd-FSelStart+1); FInputPos := FSelStart; FCaretX := FInputX+FInputPos; FSelStart := -1; end; end; procedure TCmdBox.CutToClipBoard; begin if FSelStart<>-1 then begin ClipBoard.AsText:=FInputBuffer.GetPartstring(FSelStart,FSelEnd); DeleteSelected; end; end; procedure TCmdBox.MouseMove(Shift:TShiftState;x,y:Integer); begin if FMouseDown then begin if MoveInputCaretTo(x,y,false) then SetSelection(FMouseDownInputPos,FInputPos); end; end; function TCmdBox.MoveInputCaretTo(x,y:Integer;chl:Boolean):Boolean; var h,sl,q:Integer; begin if not FInput then Exit; y := y div FCharHeight; h := FLineHeightSum[FTopLine]+FLineOfTopLine+y; sl := FTopLine; while (slFInputBuffer.Length) then q:=FInputBuffer.Length-FInputX; FCaretX := q; FInputPos := FCaretX-FInputX; if Assigned(FOnAny) then FOnAny(Self,FInputBuffer); Invalidate; Result:=True; end else Result:=False; end; procedure TCmdBox.MouseDown(Button:TMouseButton;Shift:TShiftState;x,y:Integer); begin SetFocus; MoveInputCaretTo(x,y,True); FMouseDown:=True; SetSelection(-1,0); FMouseDownInputPos:=FInputPos; Invalidate; end; procedure TCmdBox.MouseUp(Button:TMouseButton;Shift:TShiftState;x,y:Integer); begin FMouseDown:=False; end; destructor TColorstring.Destroy; begin Clear; inherited Destroy; end; procedure TCmdBox.ScrollUp; var n:Integer; Firstwidestring : TColorstring; begin Firstwidestring:=FLines[0]; for n:=0 to Length(FLines)-2 do Flines[n] := FLines[n+1]; Firstwidestring.Clear; Firstwidestring.FDefaultBackGround := FBackGroundColor; Flines[High(Flines)]:=Firstwidestring; end; procedure TCmdBox.TextColors(FC,BC:TColor); begin FCurrentColor := FC; FCurrentBackGround := BC; end; procedure TCmdBox.TextColor(C:TColor); begin FCurrentColor:=C; end; procedure TCmdBox.TextBackGround(C:TColor); begin FCurrentBackGround:=C; end; procedure TCmdBox.TranslateScrollBarPosition; var GLine,Line : Integer; He :Integer; begin if (FLineOfTopLineFVisibleLineCount-FPageHeight then CurrentPos:=FVisibleLineCount-FPageHeight; {$IFNDEF LCLGTK} ScrollBarPosition(SB_VERT, CurrentPos); {$ENDIF} FVSBPos:=CurrentPos; TranslateScrollBarPosition; end; procedure TCmdBox.ScrollBarRange(Which: Integer; aRange,aPage: Integer); var ScrollInfo: TScrollInfo; begin if HandleAllocated then begin FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL; // Dont't know, someone told me to kick it...so i did:P // {$ifdef Unix} { ScrollInfo.fMask := ScrollInfo.fMask or SIF_UPDATEPOLICY; if goThumbTracking in Options then ScrollInfo.ntrackPos := SB_POLICY_CONTINUOUS else ScrollInfo.ntrackPos := SB_POLICY_DISCONTINUOUS;} // {$endif}} ScrollInfo.nMin := 0; ScrollInfo.nMax := ARange; if APage<0 then APage := 0; ScrollInfo.nPage := APage; SetScrollInfo(Handle, Which, ScrollInfo, True); end; end; procedure TCmdBox.ScrollBarPosition(Which, Value: integer); var ScrollInfo : TScrollInfo; Vis : Boolean; begin if HandleAllocated then begin if Which = SB_VERT then Vis := FVSbVisible else FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_POS; ScrollInfo.nPos := Value; SetScrollInfo(Handle, Which, ScrollInfo, Vis); end; end; function TCmdBox.GetSystemMetricsGapSize(const Index:Integer):Integer; begin {$ifdef LCLWIN32} result:=0; {$else} result:=3; {$endif} end; procedure TCmdBox.SetBackGroundColor(c:TColor); begin if c<>FBackGroundColor then begin FBackGroundColor:=c; Invalidate; end; end; procedure TCmdBox.SetFont(F:TFont); var DC : HDC; Save : THandle; Metrics : TTextMetric; begin FFont.Assign(F); Canvas.Font := FFont; DC := GetDC(0); Save := SelectObject(DC,FFont.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC, Save); ReleaseDC(0, DC); FCharHeight := Abs(Metrics.tmHeight)+2; Invalidate; end; // Still a Bug: Try having a cmdline with more lines than fit on screen : update doesn't work anymore... procedure TCmdBox.MakeInputVisible; var y : Integer; begin if not FAutoFollow then Exit; UpdateLineHeights; y:=FLineHeightSum[FInputY]+FInputBuffer.GetLineOfCaret(FClientWidth,FCaretX,FCaretWidth); if y>=FLineHeightSum[FTopLine]+FLineOfTopLine+FPageHeight then begin While y>=FLineHeightSum[FTopLine]+FLineHeights[FTopLine]+FPageHeight-1 do Inc(FTopLine); FLineOfTopLine:=y-(FLineHeightSum[FTopLine]+FPageHeight)+1; end else if yFVSBPos then begin FVSBPos:=y; if HandleAllocated then ScrollBarPosition(SB_Vert,y); end; end; procedure TCmdBox.MakeOutVisible; var y : Integer; begin if not FAutoFollow then Exit; UpdateLineHeights; y:=FLineHeightSum[FOutY]+FLines[FOutY].GetLineOfCaret(FClientWidth,FOutX,FCaretWidth); if y>=FLineHeightSum[FTopLine]+FLineOfTopLine+FPageHeight then begin While y>=FLineHeightSum[FTopLine]+FLineHeights[FTopLine]+FPageHeight-1 do Inc(FTopLine); FLineOfTopLine:=y-(FLineHeightSum[FTopLine]+FPageHeight)+1; end else if yFVSBPos then begin FVSBPos:=y; if HandleAllocated then ScrollBarPosition(SB_Vert,y); end; end; procedure TCmdBox.SetHistoryPos(v:Integer); begin if FInputIsPassWord then Exit; if v<0 then v:=FHistoryLength-1 else if v>=FHistoryLength then v:=0; if v<>FHistoryPos then begin if FHistoryPos=0 then begin FHistory[0].Clear; FHistory[0].PartOverWrite(FInputBuffer,FInputMinPos,FInputBuffer.Length,0); end; FInputBuffer.MaximumLength(FInputMinPos+FHistory[v].Length); FInputBuffer.OverWrite(FHistory[v],FInputMinPos); if FInputPos>FInputBuffer.Length then begin FInputPos:=FInputBuffer.Length; FCaretX:=FInputX+FInputPos; end; FHistoryPos:=v; end; if Assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); MakeInputVisible; AdjustLineHeight(FInputY); AdjustScrollBars; Invalidate; end; procedure TCmdBox.UTF8KeyPress(var Key:TUTF8Char); begin if not FInput then Exit; if key>=#32 then begin if FSelStart<>-1 then DeleteSelected; FInputBuffer.Insert(FInputPos,key,FInputColor,FInputBackGround); Inc(FInputPos); FCaretX:=FInputX+FInputPos; FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); end; if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; MakeInputVisible; If FInputVisible then Invalidate; end; procedure TCmdBox.KeyDown(var Key:Word;Shift:TShiftState); var s : String; i : Integer; begin if not FInput then Exit; case Key of VK_END: begin key:=0; if (not (ssAlt in Shift)) and FInput and (FInputPos<>FInputBuffer.Length) then begin if not (ssShift in Shift) then SetSelection(-1,0) else RightSelection(FInputPos,FInputBuffer.Length); FInputPos:=FInputBuffer.Length; FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_HOME: begin key:=0; if (not (ssAlt in Shift)) and FInput and (FInputPos<>FInputMinPos) then begin if not (ssShift in Shift) then SetSelection(-1,0) else LeftSelection(FInputMinPos,FInputPos); FInputPos:=FInputMinPos; FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_LEFT: begin if (not (ssAlt in Shift)) and (FInput and (FInputPos>FInputMinPos)) then begin if not (ssShift in Shift) then SetSelection(-1,0) else LeftSelection(FInputPos-1,FInputPos); Dec(FInputPos); FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_UP: begin if (not (ssAlt in Shift)) and FInput then begin SetSelection(-1,0); SetHistoryPos(FHistoryPos+1); end; end; VK_DOWN: begin if (not (ssAlt in Shift)) and FInput then begin SetSelection(-1,0); SetHistoryPos(FHistoryPos-1); end; end; VK_RIGHT: begin if (not (ssAlt in Shift)) and FInput and (FInputPos-1 then DeleteSelected else FInputBuffer.Delete(FInputPos); FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); MakeInputVisible; AdjustLineHeight(FInputY); AdjustScrollBars; end; end; VK_RETURN: begin if FInput then begin s := FInputBuffer.GetString; s := Copy(s,FUTF8InputMinPos+1,Length(s)); if (FHistoryPos=0) then begin if (FInputBuffer.Length=FInputMinPos) or FInputIsPassWord then begin DeleteHistoryEntry(0); end else begin i:=HistoryIndexOf(s); if i>=0 then begin DeleteHistoryEntry(0); MakeFirstHistoryEntry(i); end else begin FHistory[0].Clear; FHistory[0].PartOverWrite(FInputBuffer,FInputMinPos,FInputBuffer.Length,0); end; end; end else begin DeleteHistoryEntry(0); MakeFirstHistoryEntry(FHistoryPos); end; FInput := False; if FLines[FOutY].Length<>0 then begin if FOutY>=FLineCount-1 then begin ScrollUp; Dec(FOutY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; FLines[FOutY+1].Clear; FLines[FOutY+1].OverWrite(FLines[FOutY],0); FLines[FOutY].Clear; if FInputIsPassWord then FLines[FOutY].OverWritePW(FInputBuffer,FInputMinPos,FInputX,FPassWordChar) else FLines[FOutY].OverWrite(FInputBuffer,FInputX); end else begin if FInputIsPassWord then FLines[FOutY].OverWritePW(FInputBuffer,FInputMinPos,FInputX,FPassWordChar) else FLines[FOutY].OverWrite(FInputBuffer,FInputX); end; Inc(FOutY); if FOutY>=FLineCount then begin ScrollUp; Dec(FOutY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; FOutX := 0; FCaretX := 0; FInputBuffer.Clear; if Assigned(OnInput) then OnInput(Self,s); if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; Invalidate; end; end; VK_BACK: begin if FInput then begin if FSelStart<>-1 then DeleteSelected else begin If (FInputPos>FInputMinPos) then begin Dec(FInputPos); FInputBuffer.Delete(FInputPos); FCaretX:=FInputX+FInputPos; end; end; FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; MakeInputVisible; If FInputVisible then Invalidate; end; end; VK_C: begin if (FInput) and (ssCtrl in Shift) then CopyToClipBoard; end; VK_V: begin if (FInput) and (ssCtrl in Shift) then PasteFromClipBoard; end; VK_X: begin if (FInput) and (ssCtrl in Shift) then CutToClipBoard; end; VK_A: begin if (FInput) and (ssCtrl in Shift) then begin SetSelection(FInputMinPos,FInputBuffer.Length); FInputPos:=FInputBuffer.Length; MakeInputVisible; if FInputVisible then Invalidate; end; end; end; if Assigned(OnAny) then OnAny(Self,FInputBuffer); end; procedure TCmdBox.InsertHistory; var i : Integer; t : TColorstring; begin t:=FHistory[FHistoryMax-1]; for i:=FHistoryMax-2 downto 0 do begin FHistory[i+1]:=FHistory[i]; end; FHistory[0] := t; FHistoryPos := 0; If FHistoryLengthLength(Desc) then Break; case Desc[Pp+1] of #9,#10,#32,#46,#196: begin if Pp+2>Length(Desc) then Break; //Incomplete Escape Seq...ignore l:=3; end; #33,#47,#197: begin if Pp+3>Length(Desc) then Break; //Incomplete Escape Seq...ignore l:=4; end; else begin l:=2; end; end; end else l:=UTF8CharacterLength(@Desc[PP]); FInputBuffer.OverWriteChar(Copy(Desc,Pp,l),i,FGraphicCharWidth,DFC,DBC); Inc(i); Inc(Pp,l); end; FInputPos := i; FInputMinPos := i; // FInputBuffer.OverWrite(Desc,0,DFC,DBC); FInputIsPassWord := False; FInputColor := IFC; FInputBackground := IBC; FInputBuffer.PassWordStart:=MaxInt; InsertHistory; MakeInputVisible; end; procedure TCmdBox.StartReadPassWord(DFC,DBC:TColor;const Desc:string;IFC,IBC:TColor); begin StartRead(DFC,DBC,Desc,IFC,IBC); FInputBuffer.PassWordStart := UTF8Length(Desc); FInputBuffer.PassWordChar := FPassWordChar; FInputIsPassWord := True; end; procedure TCmdBox.StopRead; begin FInput:=False; end; procedure TCmdBox.DeleteHistoryEntry(i:Integer); var j:Integer; Temp:TColorstring; begin Temp:=FHistory[i]; for j:=i to FHistoryLength-2 do FHistory[j]:=FHistory[j+1]; FHistory[FHistoryLength-1]:=Temp; Dec(FHistoryLength); if FHistoryPos>=i then Dec(FHistoryPos); end; procedure TCmdBox.MakeFirstHistoryEntry(i:Integer); var Temp:TColorstring; begin if FHistoryPos<>0 then begin Temp:=FHistory[i]; for i:=i-1 downto 0 do FHistory[i+1]:=FHistory[i]; FHistory[0]:=Temp; end; end; procedure TCmdBox.Clear; var i:Integer; begin for i:=0 to Length(FLines)-1 do Flines[i].Clear; FCaretX := 0; FInputY := 0; FOutX := 0; FOutY := 0; if FInput then FInputY:=0; Invalidate; end; procedure TCmdBox.Writeln(s:string); begin write(s+#13#10); end; const AnsiColors:array['0'..'7'] of TColor=(clBlack,clRed,clGreen,clYellow,clBlue,clFuchsia,clAqua,clWhite); procedure TCmdBox.IntWrite; var Pp : Integer; l : Integer; s : String; EscPos : Integer; EscSubMode : Integer; begin S := FCurrentString; Pp := 1; while Pp<=Length(S) do begin l:=1; case FEscapeMode of escmNone: begin if S[Pp]=#27 then begin case FEscapeCodeType of esctCmdBox: begin FEscapeMode := escmOperation; FEscapeData := ''; end; esctAnsi: begin FEscapeMode := escmAnsiOperation; FEscapeData := ''; end; esctNone: begin // Simply ignore it end; end; end else begin l:=UTF8CharacterLength(@S[Pp]); if l=1 then begin case s[Pp] of #13:FOutX:=0; #10: begin AdjustLineHeight(FOutY); if FLines[FOutY].Length=0 then FLines[FOutY].DefaultBackGround:=FCurrentBackGround; Inc(FOutY); if FOutY>=Length(FLines) then begin ScrollUp; Dec(FOutY); AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; end; else begin FLines[FOutY].OverWrite(s[Pp],FOutX,FCurrentColor,FCurrentBackGround); Inc(FOutX); end; end; end else begin FLines[FOutY].OverWrite(Copy(s,Pp,l),FOutX,FCurrentColor,FCurrentBackGround); Inc(FOutX); end; end; end; escmOperation: begin case S[Pp] of #9,#10,#32,#46,#196: begin FEscapeData := S[Pp]; FEscapeMode := escmData1; end; #33,#47,#197: begin FEscapeData := S[Pp]; FEscapeMode := escmData2; end; else begin FLines[FOutY].OverWriteChar(#27+S[Pp],FOutX,FGraphicCharWidth,FCurrentColor,FCurrentBackGround); Inc(FOutX); FEscapeMode:=escmNone; end; end; end; escmData1: begin FLines[FOutY].OverWriteChar(#27+FEscapeData+S[Pp],FOutX,FGraphicCharWidth,FCurrentColor,FCurrentBackGround); Inc(FOutX); FEscapeMode:=escmNone; end; escmData2: begin FEscapeData := FEscapeData+S[Pp]; FEscapeMode := escmData1; end; escmAnsiOperation: begin case S[Pp] of '[':FEscapeMode:=escmAnsiSquare; else FEscapeMode:=escmNone; end; end; escmAnsiSquare: begin case S[Pp] of 'm': begin EscPos := 1; EscSubMode := 0; while EscPos<=Length(FEscapeData) do begin case EscSubMode of 0: begin case FEscapeData[EscPos] of '0': begin // No Reset Values know here...just assume FCurrentColor:=clSilver; FCurrentBackGround:=clBlack; end; '7': begin // Reverse? What now... end; '3':EscSubMode:=3; '4':EscSubMode:=4; end; end; 1: begin // Just collect the expected ";", not sure what to do if it isn't there... EscSubMode:=0; end; 3: begin if FEscapeData[EscPos] in ['0'..'7'] then FCurrentColor:=AnsiColors[FEscapeData[EscPos]]; EscSubMode:=1; end; 4: begin if FEscapeData[EscPos] in ['0'..'7'] then FCurrentBackGround:=AnsiColors[FEscapeData[EscPos]]; EscSubMode:=1; end; end; Inc(EscPos); end; FEscapeMode:=escmNone; end; else begin FEscapeData:=FEscapeData+S[Pp]; end; end; end; end; Inc(Pp,l); end; if FInput then begin if FLines[FOutY].Length=0 then begin if (FInputY<>FOutY) then FInputY:=FOutY; end else begin if FInputY<>FOutY+1 then FInputY:=FOutY+1; end; if FInputY>=FLineCount then begin ScrollUp; Dec(FOutY); Dec(FInputY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; MakeInputVisible; end else MakeOutVisible; AdjustLineHeight(FOutY); if not FInput then FCaretX:=FOutX; AdjustScrollBars; end; procedure TCmdBox.SetOutY(v:Integer); begin if v>FLineCount-1 then v:=FLineCount-1; FOutY:=v; end; procedure TCmdBox.Resize; begin inherited Resize; AdjustScrollBars; if FVSBPos>=FVisibleLineCount-FPageHeight then begin FVSBPos:=FVisibleLineCount-FPageHeight; if FVSBPos<0 then FVSBPos:=0; end; TranslateScrollBarPosition; end; function TCmdBox.AdjustLineHeight(i:Integer):Integer; var LineC : Integer; LineC2 : Integer; begin if (FInputY=i) then begin LineC := FLines[i].LineCount(FClientWidth,-1,FCaretWidth); LineC2 := FInputBuffer.LineCount(FClientWidth,FCaretX,FCaretWidth); if LineC2>LineC then LineC:=LineC2; end else LineC:=FLines[i].LineCount(FClientWidth,-1,FCaretWidth); Result := LineC; FLineHeights[i] := Result; end; function TCmdBox.UpdateLineHeights:integer; var i:integer; begin Result:=0; for i:=0 to FLineCount-1 do begin FLineHeightSum[i]:=Result; Inc(Result,AdjustLineHeight(i)); end; end; procedure TCmdBox.AdjustScrollBars; var LH : Integer; begin FClientWidth := Width-FVSBWidth; FClientHeight := Height; FPageHeight := FClientHeight div FCharHeight; FVisibleLines := FPageHeight+ord(FClientHeight mod FCharHeight<>0); LH := UpdateLineHeights; if LH<>FVisibleLineCount then begin FVisibleLineCount:=LH; if FVisibleLineCount<=FVSBPos+FPageHeight then begin FVSBPos:=FVisibleLineCount-FPageHeight; if FVSBPos<0 then FVSBPos:=0; if HandleAllocated then ScrollBarPosition(SB_Vert,FVSBPos); TranslateScrollBarPosition; end; end; if FVisibleLineCountFTopLine then begin FTopLine:=Nr; AdjustScrollBars; end; end; procedure TCmdBox.SetLineCount(c: Integer); var i:Integer; begin if c<1 then c:=1; if c<>FLineCount then begin for i:=0 to FLineCount-1 do FLines[i].Free; FLineCount:=c; SetLength(FLines,FLinecount); for i:=0 to FlineCount-1 do begin FLines[i]:=TColorstring.Create(Canvas.Font); FLines[i].DefaultBackGround:=FBackGroundColor; FLines[i].TabWidth:=FTabWidth; end; SetLength(FLineHeights,FLineCount); SetLength(FLineHeightSum,FLineCount); AdjustScrollBars; end; end; procedure TCmdBox.Paint; Var y,m : Integer; CurrentLine : Integer; begin inherited Paint; with canvas do begin if (csdesigning in componentstate) then begin Brush.Style := bsSolid; Brush.Color := clBlack; FillRect(0,0,FClientWidth,FClientHeight); exit; end; Font := FFont; Brush.Style := bsSolid; m := FVisibleLines-1; y := -FLineOfTopLine; CurrentLine := FTopLine; while (y<=m) and (CurrentLine',clSilver,clBlack); If you give a string parameter to StartRead, it will be displayed directly before the input and will follow it. Input is received through an Event called OnInput. Changes can be watched by the programm by OnInputChange. To keep TCmdBox in Inputmode just call StartRead in OnInput again. If you resize the application or use splitter in the middle you notice lines are wrapped, there is no fixed or limited line width. Input is also saved in a history list with limited to HistoryMax entries including current input. Output content by using: CmdBox.Write('Text'); or CmdBox.Writeln('Text...'); These calls are supposed to be Threadsafe ! You can use all font and background colors possible on the Operating System, for example CmdBox.TextColor(clRed); CmdBox.TextBackGround(clSilver); or CmdBox.TextColors(clRed,clSilver); The background color of the last character in a line determines the background color of the rest of the line. The component should be able to show correct UTF8 codes of any kind (up to the whole 21 bits), therefore: €, ä, ö,ü should be correctly written as Euro, Ae, Oe, Ue (the last three are german) if you have selected a UTF8 capable Font and LCL-Interface. I hope you can use the component, if you find bugs or have suggestions contact me by email : kccmp@gmx.dedoublecmd-0.9.8/components/CmdLine/cmdbox.pas0000644000175000001440000000053212677725617020233 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit cmdbox; interface uses uCmdBox, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('uCmdBox', @uCmdBox.Register); end; initialization RegisterPackage('cmdbox', @Register); end. doublecmd-0.9.8/components/CmdLine/cmdbox.lpk0000644000175000001440000000242612144672601020221 0ustar alexxusers doublecmd-0.9.8/components/CmdLine/CmdLineExample.lpr0000644000175000001440000000050112014201074021557 0ustar alexxusersprogram CmdLineExample; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset Forms { add your units here }, wnmainform; begin Application.Initialize; Application.CreateForm(TWMainForm, WMainForm); Application.Run; end. doublecmd-0.9.8/components/CmdLine/CmdLineExample.lpi0000644000175000001440000001417611077656332021606 0ustar alexxusers doublecmd-0.9.8/components/CmdLine/COPYING.LESSER0000644000175000001440000001717211077656332020277 0ustar alexxusers GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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-0.9.8/components/CmdLine/COPYING0000644000175000001440000010574111077656332017303 0ustar alexxusers GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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. But first, please read .doublecmd-0.9.8/clean.sh0000755000175000001440000000200013161177640014145 0ustar alexxusers#!/bin/sh # Clean up output directories rm -f units/*/* # Clean up components output directories rm -rf components/chsdet/lib/* rm -rf components/CmdLine/lib/* rm -rf components/dcpcrypt/lib/* rm -rf components/doublecmd/lib/* rm -rf components/gifanim/lib/* rm -rf components/KASToolBar/lib/* rm -rf components/multithreadprocs/lib/* rm -rf components/viewer/lib/* rm -rf components/synunihighlighter/lib/* # Clean up all temporary files find . -iname '*.compiled' -delete find . -iname '*.ppu' -delete find . -iname '*.o' -delete find plugins -iname '*.w?x' -delete find plugins -iname '*.dsx' -delete find plugins -iname '*.or' -delete find plugins -iname '*.res' -delete find plugins -iname '*.a' -delete rm -f src/doublecmd.res doublecmd rm -f tools/extractdwrflnfo rm -f plugins/wcx/zip/lib/ZipConfDlg.lfm rm -f plugins/wcx/zip/lib/abresstring.rs? rm -f plugins/wfx/ftp/lib/FtpConfDlg.lfm rm -f plugins/wfx/samba/lib/smbauthdlg.lfm # Remove debug files rm -f doublecmd.zdli doublecmd.dbg rm -rf doublecmd.dSYM doublecmd-0.9.8/clean.bat0000644000175000001440000000350013603447456014312 0ustar alexxusers@echo Clean up output directory @del /Q /S units\i386-win32-win32\*.* @del /Q /S units\x86_64-win64-win32\*.* @del /Q src\*.*~ @del /Q src\*.~* @del /Q doublecmd.dbg @del /Q doublecmd.zdli @del /Q doublecmd*.exe @del /Q doublecmd*.old @echo Remove generated help files @del /Q doc\en\dev-help\*.* @echo Clean up tools output directories @del /Q /S tools\lib\*.* @del /Q tools\extractdwrflnfo.exe @echo Clean up plugins output directories @del /Q /S plugins\*.dsx @del /Q /S plugins\*.w?x @del /Q /S plugins\dsx\DSXLocate\lib\*.* @del /Q /S plugins\wcx\cpio\lib\*.* @del /Q /S plugins\wcx\deb\lib\*.* @del /Q /S plugins\wcx\lzma\lib\*.* @del /Q /S plugins\wcx\rpm\lib\*.* @del /Q /S plugins\wcx\sevenzip\lib\*.* @del /Q /S plugins\wcx\torrent\lib\*.* @del /Q /S plugins\wcx\unbz2\lib\*.* @del /Q /S plugins\wcx\unrar\lib\*.* @del /Q /S plugins\wcx\zip\lib\*.* @del /Q /S plugins\wdx\deb_wdx\lib\*.* @del /Q /S plugins\wdx\rpm_wdx\lib\*.* @del /Q /S plugins\wdx\svn_wdx\lib\*.* @del /Q /S plugins\wdx\xpi_wdx\lib\*.* @del /Q /S plugins\wdx\audioinfo\lib\*.* @del /Q /S plugins\wfx\ftp\lib\*.* @del /Q /S plugins\wfx\gvfs\lib\*.* @del /Q /S plugins\wfx\samba\lib\*.* @del /Q /S plugins\wfx\sample\lib\*.* @del /Q /S plugins\wlx\simplewlx\lib\*.* @del /Q /S plugins\wlx\WlxMplayer\lib\*.* @echo Remove backup files @del /Q /S plugins\*.*~ @del /Q /S plugins\*.bak @echo Clean up components output directories @del /Q /S components\chsdet\lib\*.* @del /Q /S components\CmdLine\lib\*.* @del /Q /S components\dcpcrypt\lib\*.* @del /Q /S components\doublecmd\lib\*.* @del /Q /S components\gifanim\lib\*.* @del /Q /S components\KASToolBar\lib\*.* @del /Q /S components\multithreadprocs\lib\*.* @del /Q /S components\viewer\lib\*.* @del /Q /S components\synunihighlighter\lib\*.* @echo Done.doublecmd-0.9.8/build.sh0000755000175000001440000000334512407307365014200 0ustar alexxusers#!/bin/sh set -e # if you compile first time you must change variable "lazpath" and "lcl" # after it execute this script with parameter "all" at doublecmd dir # "./build.sh all" it build doublecmd # by Attid # You can execute this script with different parameters: # components - compiling components needed for DC # plugins - compiling all DC plugins # all - compiling components, plugins and DC # default - compiling DC only (using by default) # path to lazbuild export lazbuild=$(which lazbuild) # Set up widgetset: gtk or gtk2 or qt # Set up processor architecture: i386 or x86_64 if [ $2 ] then export lcl=$2 fi if [ $lcl ] && [ $CPU_TARGET ] then export DC_ARCH=$(echo "--widgetset=$lcl")" "$(echo "--cpu=$CPU_TARGET") elif [ $lcl ] then export DC_ARCH=$(echo "--widgetset=$lcl") elif [ $CPU_TARGET ] then export DC_ARCH=$(echo "--cpu=$CPU_TARGET") fi build_default() { $lazbuild src/doublecmd.lpi $DC_ARCH strip doublecmd } build_beta() { components/build.sh plugins/build.sh # Build Double Commander $lazbuild src/doublecmd.lpi --bm=beta $DC_ARCH # Build Dwarf LineInfo Extractor $lazbuild tools/extractdwrflnfo.lpi # Extract debug line info chmod a+x tools/extractdwrflnfo if [ -f doublecmd.dSYM/Contents/Resources/DWARF/doublecmd ]; then mv -f doublecmd.dSYM/Contents/Resources/DWARF/doublecmd $(pwd)/doublecmd.dbg fi tools/extractdwrflnfo doublecmd.dbg # Strip debug info strip doublecmd } build_all() { components/build.sh plugins/build.sh build_default } case $1 in components) components/build.sh;; plugins) plugins/build.sh;; beta) build_beta;; all) build_all;; *) build_default;; esac doublecmd-0.9.8/build.bat0000644000175000001440000000340412676553447014341 0ustar alexxusers@echo off rem the next two line must be changed before run on your computer set lazpath=D:\Alexx\Prog\FreePascal\Lazarus set PATH=%lazpath%;%PATH% rem You can execute this script with different parameters: rem components - compiling components needed for DC rem plugins - compiling all DC plugins rem all - compiling components, plugins and DC rem default - compiling DC only rem beta - compile in beta mode (using by default) if not "%OS_TARGET%" == "" ( set DC_ARCH=%DC_ARCH% --os=%OS_TARGET% ) if not "%CPU_TARGET%" == "" ( set DC_ARCH=%DC_ARCH% --cpu=%CPU_TARGET% ) if "%1"=="components" ( call :components ) else ( if "%1"=="plugins" ( call :plugins ) else ( if "%1"=="beta" ( call :beta ) else ( if "%1"=="default" ( call :default ) else ( if "%1"=="nightly" ( call :nightly ) else ( if "%1"=="all" ( call :all ) else ( if "%1"=="" ( call :beta ) else ( echo ERROR: Mode not defined: %1 echo Available modes: components, plugins, default, nightly, all, beta ))))))) pause GOTO:EOF :components call components\build.bat GOTO:EOF :plugins call plugins\build.bat GOTO:EOF :beta call :components call :plugins rem Build Double Commander call :replace_old lazbuild src\doublecmd.lpi --bm=beta %DC_ARCH% rem Build Dwarf LineInfo Extractor lazbuild tools\extractdwrflnfo.lpi rem Extract debug line info tools\extractdwrflnfo doublecmd.dbg GOTO:EOF :all call :components call :plugins call :default GOTO:EOF :default call :replace_old lazbuild src\doublecmd.lpi %DC_ARCH% GOTO:EOF :nightly call :replace_old lazbuild src\doublecmd.lpi --bm=nightly %DC_ARCH% GOTO:EOF :replace_old del /Q doublecmd.exe.old ren doublecmd.exe doublecmd.exe.old GOTO:EOF